xjc před 3 roky
rodič
revize
603c183a28

+ 72 - 13
package-lock.json

@@ -5893,6 +5893,14 @@
         "@babel/helper-define-polyfill-provider": "^0.3.0"
       }
     },
+    "babel-plugin-transform-runtime": {
+      "version": "6.23.0",
+      "resolved": "https://registry.nlark.com/babel-plugin-transform-runtime/download/babel-plugin-transform-runtime-6.23.0.tgz",
+      "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=",
+      "requires": {
+        "babel-runtime": "^6.22.0"
+      }
+    },
     "babel-polyfill": {
       "version": "6.26.0",
       "resolved": "https://registry.nlark.com/babel-polyfill/download/babel-polyfill-6.26.0.tgz",
@@ -5930,6 +5938,15 @@
         }
       }
     },
+    "babel-runtime": {
+      "version": "6.26.0",
+      "resolved": "https://registry.nlark.com/babel-runtime/download/babel-runtime-6.26.0.tgz",
+      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
+      "requires": {
+        "core-js": "^2.4.0",
+        "regenerator-runtime": "^0.11.0"
+      }
+    },
     "bfj": {
       "version": "6.1.2",
       "resolved": "https://registry.nlark.com/bfj/download/bfj-6.1.2.tgz",
@@ -5987,13 +6004,6 @@
         }
       }
     },
-    "block-stream": {
-      "version": "",
-      "dev": true,
-      "dependencies": {
-        "inherits": {}
-      }
-    },
     "bmaplib.curveline": {
       "version": "1.0.0",
       "resolved": "https://registry.nlark.com/bmaplib.curveline/download/bmaplib.curveline-1.0.0.tgz",
@@ -10205,8 +10215,7 @@
     "es6-promise": {
       "version": "4.2.8",
       "resolved": "https://registry.npm.taobao.org/es6-promise/download/es6-promise-4.2.8.tgz",
-      "integrity": "sha1-TrIVlMlyvEBVPSduUQU5FD21Pgo=",
-      "dev": true
+      "integrity": "sha1-TrIVlMlyvEBVPSduUQU5FD21Pgo="
     },
     "eslint": {
       "version": "5.16.0",
@@ -13563,6 +13572,11 @@
       "dev": true,
       "optional": true
     },
+    "fullcalendar": {
+      "version": "3.10.1",
+      "resolved": "https://registry.npmmirror.com/fullcalendar/download/fullcalendar-3.10.1.tgz",
+      "integrity": "sha512-E0ioaHVmwdS4es8pNTUNva7505wPkUMFdn9JGFLYo+J12ARhN3zDBwoPj2DfB8rL7Yc1sSve+FqDHC3s2SZ7Fw=="
+    },
     "gaze": {
       "version": "1.1.3",
       "resolved": "https://registry.nlark.com/gaze/download/gaze-1.1.3.tgz",
@@ -16080,6 +16094,11 @@
       "integrity": "sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=",
       "dev": true
     },
+    "jquery": {
+      "version": "3.4.1",
+      "resolved": "https://registry.npmmirror.com/jquery/download/jquery-3.4.1.tgz",
+      "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw=="
+    },
     "js-base64": {
       "version": "2.6.4",
       "resolved": "https://registry.npmmirror.com/js-base64/download/js-base64-2.6.4.tgz",
@@ -16256,8 +16275,7 @@
     "lodash.defaultsdeep": {
       "version": "4.6.1",
       "resolved": "https://registry.nlark.com/lodash.defaultsdeep/download/lodash.defaultsdeep-4.6.1.tgz",
-      "integrity": "sha1-US6b1yHSctlOPTpjZT+hdRZ0HKY=",
-      "dev": true
+      "integrity": "sha1-US6b1yHSctlOPTpjZT+hdRZ0HKY="
     },
     "lodash.kebabcase": {
       "version": "4.1.1",
@@ -17063,6 +17081,13 @@
         }
       }
     },
+    "nan": {
+      "version": "2.15.0",
+      "resolved": "https://registry.nlark.com/nan/download/nan-2.15.0.tgz",
+      "integrity": "sha1-PzSkc/8Y4VwbVia2KQO1rW5mX+4=",
+      "dev": true,
+      "optional": true
+    },
     "node-gyp": {
       "version": "3.8.0",
       "resolved": "https://registry.npmmirror.com/node-gyp/download/node-gyp-3.8.0.tgz?cache=0&sync_timestamp=1637570140025&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fnode-gyp%2Fdownload%2Fnode-gyp-3.8.0.tgz",
@@ -17755,6 +17780,17 @@
             "block-stream": "*",
             "fstream": "^1.0.12",
             "inherits": "2"
+          },
+          "dependencies": {
+            "block-stream": {
+              "version": "0.0.9",
+              "resolved": "https://registry.npm.taobao.org/block-stream/download/block-stream-0.0.9.tgz",
+              "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
+              "dev": true,
+              "requires": {
+                "inherits": "~2.0.0"
+              }
+            }
           }
         },
         "tough-cookie": {
@@ -24411,6 +24447,27 @@
         }
       }
     },
+    "vue-full-calendar": {
+      "version": "2.8.1-0",
+      "resolved": "https://registry.nlark.com/vue-full-calendar/download/vue-full-calendar-2.8.1-0.tgz",
+      "integrity": "sha1-Ec2srNUcleHBTTHfiT3Rk1EJItU=",
+      "requires": {
+        "babel-plugin-transform-runtime": "^6.23.0",
+        "fullcalendar": "3.10.1",
+        "jquery": "3.4.1",
+        "lodash.defaultsdeep": "^4.6.0"
+      }
+    },
+    "vue-fullcalendar": {
+      "version": "1.0.9",
+      "resolved": "https://registry.nlark.com/vue-fullcalendar/download/vue-fullcalendar-1.0.9.tgz",
+      "integrity": "sha1-qFO7JZRiUid1M7mZTvUDz6ywEjM=",
+      "requires": {
+        "es6-promise": "^4.0.5",
+        "vue": "^2.1.8",
+        "vue-fullcalendar": "^1.0.5"
+      }
+    },
     "vue-hot-reload-api": {
       "version": "2.3.4",
       "resolved": "https://registry.nlark.com/vue-hot-reload-api/download/vue-hot-reload-api-2.3.4.tgz",
@@ -26142,7 +26199,8 @@
               "dev": true,
               "optional": true,
               "requires": {
-                "bindings": "^1.5.0"
+                "bindings": "^1.5.0",
+                "nan": "^2.12.1"
               }
             },
             "glob-parent": {
@@ -28393,7 +28451,8 @@
           "dev": true,
           "optional": true,
           "requires": {
-            "bindings": "^1.5.0"
+            "bindings": "^1.5.0",
+            "nan": "^2.12.1"
           }
         },
         "get-caller-file": {

+ 2 - 0
package.json

@@ -18,6 +18,8 @@
     "url-search-params-polyfill": "^8.0.0",
     "vue": "^2.6.6",
     "vue-baidu-map": "^0.21.22",
+    "vue-full-calendar": "^2.8.1-0",
+    "vue-fullcalendar": "^1.0.9",
     "vue-router": "^3.0.1",
     "vue-wordcloud": "^1.1.1",
     "vuedraggable": "^2.24.3",

+ 2 - 1
src/main.js

@@ -9,11 +9,12 @@ import './iconfont/iconfont.css';
 import api from './api';
 import echarts from 'echarts';
 import  'echarts/theme/dark.js'
+import FullCalendar from 'vue-fullcalendar'
 // import BaiduMap from 'vue-baidu-map'
 // Vue.use(BaiduMap, {
 //   ak: '1hqg34NFaCw9jcv0xG82cI7uINFaXGGM'
 // })
-
+Vue.use(FullCalendar)
 Vue.use(ElementUI);
 Vue.prototype.$echarts = echarts
 Vue.prototype.$api = api;

+ 1 - 1
src/views/data/index.vue

@@ -315,7 +315,7 @@ export default {
         },
         autoCompleteData(){
             this.loading = true
-            this.$api.autoCompleteData({}).then((res)=>{
+            this.$api.autoCompleteData(this.queryParams).then((res)=>{
                 this.getData();
                 this.loading = false;
             })

+ 1 - 0
src/views/match/addArticle.vue

@@ -150,6 +150,7 @@ export default {
     save() {
       var parm = this.form;
       parm.point=this.point.lng+','+this.point.lat
+      parm.type = "notice"
       if (parm.id) {
         // debugger;
         this.$api.editArticle(parm).then(res => {

+ 277 - 185
src/views/match/index.vue

@@ -1,199 +1,291 @@
+<style lang="scss" scoped>
+.blue {
+  background: red !important;
+}
+</style>
 <template>
-    <section class="content">
-        <h4>赛事管理</h4>
-        <el-divider></el-divider>
-        <el-form label-width="80px" class="filter-form">
-            <el-row>
-                <el-col :span="6">
-                    <el-form-item label="赛事名称">
-                        <el-input @clear="getData()" clearable v-model="queryParams.name" placeholder="请输入赛事名称" size="mini"></el-input>
-                    </el-form-item>
-                </el-col>
-                <el-col :span="4">
-                    <el-form-item label-width="10" style='margin-left:10px'>
-                        <el-button type="primary" @click="getData" size="mini">筛选</el-button>
-                        <el-button
-                        type="primary"
-                        plain
-                        icon="el-icon-plus"
-                        size="mini"
-                        @click="handleAdd"
-                        >新增赛事</el-button>
-                    </el-form-item>
-                </el-col>
-            </el-row>   
-        </el-form>
-        <el-table v-loading='loading' :data="list" style="width: 100%;margin-top:10px;" height="50vh">
-                <el-table-column align="center" prop="name" label="赛事名称"/>
-                <el-table-column align="center"  prop="join_count" label="参赛人数"/>
-                <el-table-column align="center"  prop="out_count" label="退赛人数"/>
-                <el-table-column align="center"  prop="groups" label="比赛分组"/>
-                <el-table-column align="center"  prop="start_time" label="开始时间"/>
-                <el-table-column align="center"  prop="end_time" label="结束时间"/>
-                <el-table-column align="center"  prop="date" label="操作">
-                    <template slot-scope="scope">
-                        <el-button @click="title='编辑赛事',open=true,form=scope.row" size="mini" type="warning">编辑</el-button>
-                        <el-button @click="del(scope.row.id)" size="mini" type="danger">删除</el-button>
-                    </template>
-                </el-table-column>
-        </el-table>
-        <Page
-            ref="pageButton"
-            :current="form.page"
-            :page_size="form.page_size"
-            :total="total"
-            @pageChange="gopage"
-        />
-        <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
-            <el-form ref="form" :model="form" :rules="rules" label-width="80px">
-                <el-form-item label="比赛名称" prop="name">
-                    <el-input clearable v-model="form.name" placeholder="请输入比赛名称"></el-input>
-                </el-form-item>
-                <el-form-item label="开始时间" prop="start_time">
-                    <el-date-picker
-                    v-model="form.start_time"
-                    type="date"
-                    placeholder="选择日期"
-                    format="yyyy-MM-dd"
-                    value-format="yyyy-MM-dd"
-                    size="mini"
-                    >
-                    </el-date-picker>
-                </el-form-item>
-                <el-form-item label="结束时间" prop="end_time">
-                    <el-date-picker
-                    v-model="form.end_time"
-                    type="date"
-                    placeholder="选择日期"
-                    format="yyyy-MM-dd"
-                    value-format="yyyy-MM-dd"
-                    size="mini"
-                    >
-                    </el-date-picker>
-                </el-form-item>
-                <el-form-item label="报单日历">
-                    <el-calendar :range="dateRange">
-                        <template
-                            slot="dateCell"
-                            slot-scope="{date, data}">
-                            <p :class="data.isSelected ? 'is-selected' : ''">
-                            {{ data.day.split('-').slice(1).join('-') }} {{ data.isSelected ? '✔️' : ''}}
-                            </p>
-                        </template>
-                    </el-calendar>
-                </el-form-item>
-            </el-form>
-            <div slot="footer" class="dialog-footer">
-                <el-button type="primary" @click="submitForm">确 定</el-button>
-                <el-button @click="open=false">取 消</el-button>
-            </div>
-        </el-dialog>
-    </section>
+  <section class="content">
+    <h4>赛事管理</h4>
+    <el-divider></el-divider>
+    <el-form label-width="80px" class="filter-form">
+      <el-row>
+        <el-col :span="6">
+          <el-form-item label="赛事名称">
+            <el-input
+              @clear="getData()"
+              clearable
+              v-model="queryParams.name"
+              placeholder="请输入赛事名称"
+              size="mini"
+            ></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="4">
+          <el-form-item label-width="10" style="margin-left: 10px">
+            <el-button type="primary" @click="getData" size="mini"
+              >筛选</el-button
+            >
+            <el-button
+              type="primary"
+              plain
+              icon="el-icon-plus"
+              size="mini"
+              @click="handleAdd"
+              >新增赛事</el-button
+            >
+          </el-form-item>
+        </el-col>
+      </el-row>
+    </el-form>
+    <el-table
+      v-loading="loading"
+      :data="list"
+      style="width: 100%; margin-top: 10px"
+      height="50vh"
+    >
+      <el-table-column align="center" prop="name" label="赛事名称" />
+      <el-table-column align="center" prop="join_count" label="参赛人数" />
+      <el-table-column align="center" prop="out_count" label="退赛人数" />
+      <el-table-column align="center" prop="groups" label="比赛分组" />
+      <el-table-column align="center" prop="start_time" label="开始时间" />
+      <el-table-column align="center" prop="end_time" label="结束时间" />
+      <el-table-column align="center" prop="date" label="操作">
+        <template slot-scope="scope">
+          <el-button @click="edit(scope.row)" size="mini" type="warning"
+            >编辑</el-button
+          >
+          <el-button @click="del(scope.row.id)" size="mini" type="danger"
+            >删除</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
+    <Page
+      ref="pageButton"
+      :current="form.page"
+      :page_size="form.page_size"
+      :total="total"
+      @pageChange="gopage"
+    />
+    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="比赛名称" prop="name">
+          <el-input
+            clearable
+            v-model="form.name"
+            placeholder="请输入比赛名称"
+          ></el-input>
+        </el-form-item>
+        <el-form-item label="开始时间" prop="start_time">
+          <el-date-picker
+            v-model="form.start_time"
+            type="date"
+            placeholder="选择日期"
+            format="yyyy-MM-dd"
+            value-format="yyyy-MM-dd"
+            size="mini"
+          >
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="结束时间" prop="end_time">
+          <el-date-picker
+            v-model="form.end_time"
+            type="date"
+            placeholder="选择日期"
+            format="yyyy-MM-dd"
+            value-format="yyyy-MM-dd"
+            size="mini"
+          >
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="报单日历" prop="calendar">
+          <full-calendar
+            :events="monthData"
+            class="test-fc"
+            first-day="1"
+            locale="fr"
+            @changeMonth="changeMonth"
+            @eventClick="eventClick"
+            @dayClick="dayClick"
+            @moreClick="moreClick"
+            lang="zh"
+          >
+          </full-calendar>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="open = false">取 消</el-button>
+      </div>
+    </el-dialog>
+  </section>
 </template>
 <script>
 import Page from "../../components/Page";
+import { FullCalendar } from "vue-fullcalendar";
 export default {
-    components: {
-        Page,
+  components: {
+    Page,
+    "full-calendar": require("vue-fullcalendar"),
+  },
+  data() {
+    return {
+      monthData: [],
+      dateRange: ["2021-12-01", "2022-01-02"],
+      loading: false,
+      queryParams: {
+        page: 1,
+      },
+      form: {monthData:[]},
+      list: [{}, {}],
+      total: 0,
+      title: "新增赛事",
+      open: false,
+      rules: {
+        name: [{ required: true, message: "请输入比赛名称", trigger: "blur" }],
+        start_time: [
+          { required: true, message: "请输入开始时间", trigger: "blur" },
+        ],
+        end_time: [
+          { required: true, message: "请输入结束时间", trigger: "blur" },
+        ],
+      },
+      matchList: [],
+      groupList: [],
+      userList: [],
+    };
+  },
+  methods: {
+    del(id) {
+      this.$confirm("确定删除吗?", "提示", {
+        type: "warning",
+      }).then(() => {
+        this.$api.delMatch({ id: id }).then((res) => {
+          this.$message({
+            message: "删除成功",
+            type: "success",
+          });
+          this.getData();
+        });
+      });
     },
-    data(){
-        return{
-            dateRange:[
-                "2021-12-01",
-                "2022-01-02"
-            ],
-            loading:false,
-            queryParams:{
-                page:1
-            },
-            form:{},
-            list:[{},{}],
-            total:0,
-            title:'新增赛事',
-            open:false,
-            rules:{
-                name: [
-                    { required: true, message: '请输入比赛名称', trigger: 'blur' }
-                ],
-                start_time: [
-                    { required: true, message: '请输入开始时间', trigger: 'blur' }
-                ],
-                end_time: [
-                    { required: true, message: '请输入结束时间', trigger: 'blur' }
-                ]
-            },
-            matchList:[],
-            groupList:[],
-            userList:[]
-        }
+    edit(row) {
+      this.open = true;
+      this.form = row;
+      this.monthData = JSON.parse(row.calendar);
+    },
+    gopage(size) {
+      if (size) {
+        this.queryParams.page_size = size;
+      }
+      this.queryParams.page = this.$refs.pageButton.page;
+      this.getData();
+    },
+    getData() {
+      this.loading = true;
+      this.$api.getMatchList().then((res) => {
+        this.matchList = res.data.data;
+      });
+      this.$api.getGroupList().then((res) => {
+        this.groupList = res.data.data;
+      });
+      this.$api.getUserSearch().then((res) => {
+        this.userList = res.data.data;
+      });
+      //
+      this.$api.getMatchs(this.queryParams).then((res) => {
+        this.list = res.data.data.list;
+        this.total = res.data.data.total;
+        this.loading = false;
+      });
     },
-    methods:{
-        del(id) {
-        this.$confirm("确定删除吗?", "提示", {
-            type: "warning",
-        }).then(() => {
-            this.$api.delMatch({ id: id }).then((res) => {
-            this.$message({
-                message: "删除成功",
-                type: "success",
+    handleAdd() {
+      this.open = true;
+      this.title = "新增赛事";
+      this.form = {};
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate((valid) => {
+        if (valid) {
+          if (this.monthData.length == 0) {
+            this.$message.error("请设置报单日历!");
+            return;
+          }
+          this.form.calendar = JSON.stringify(this.monthData);
+          let valid_dates = [];
+          this.monthData.forEach((item) => {
+            valid_dates.push(item.start);
+          });
+          this.form.valid_dates = valid_dates;
+          this.valid_dates = JSON.stringify(valid_dates);
+          if (this.form.id != null) {
+            this.$api.updateMatch(this.form).then((response) => {
+              this.msgSuccess("修改成功");
+              this.open = false;
+              this.getData();
             });
-            this.getData();
+          } else {
+            this.$api.addMatch(this.form).then((response) => {
+              this.msgSuccess("新增成功");
+              this.open = false;
+              this.getData();
             });
-        });
-        },
-        gopage(size) {
-            if (size) {
-                this.queryParams.page_size = size;
-            }
-            this.queryParams.page = this.$refs.pageButton.page;
-            this.getData();
-        },
-        getData(){
-            this.loading = true;
-            this.$api.getMatchList().then(res=>{
-                this.matchList=res.data.data
-            })
-            this.$api.getGroupList().then(res=>{
-                this.groupList=res.data.data
-            })
-            this.$api.getUserSearch().then(res=>{
-                this.userList=res.data.data
-            })
-            // 
-            this.$api.getMatchs(this.queryParams).then(res=>{
-                this.list=res.data.data.list
-                this.total = res.data.data.total;
-                this.loading = false;
-            })
-        },
-        handleAdd(){
-            this.open=true;
-            this.title='新增赛事';
-            this.form={}
-        },
-        /** 提交按钮 */
-        submitForm() {
-            this.$refs["form"].validate(valid => {
-                if (valid) {
-                if (this.form.id != null) {
-                    this.$api.updateMatch(this.form).then(response => {
-                    this.msgSuccess("修改成功");
-                    this.open = false;
-                    this.getData();
-                    });
-                } else {
-                    this.$api.addMatch(this.form).then(response => {
-                    this.msgSuccess("新增成功");
-                    this.open = false;
-                    this.getData();
-                    });
-                }
+          }
         }
       });
     },
+    formatDate(date) {
+      var y = date.getFullYear();
+      var m = date.getMonth() + 1;
+      m = m < 10 ? "0" + m : m;
+      var d = date.getDate();
+      d = d < 10 ? "0" + d : d;
+      return y + "-" + m + "-" + d;
     },
-    created(){
-       this.getData() 
-    }
-}
+    // 选择月份
+    changeMonth(start, end, current) {
+      console.log("changeMonth", start, end, current);
+    },
+    // 点击事件
+    eventClick(event, jsEvent, pos) {
+      console.log("eventClick", event, jsEvent, pos);
+    },
+    // 点击当天
+    dayClick(day, jsEvent) {
+      let curDate = this.formatDate(new Date(day));
+      let selDate = { title: "报单", start: curDate, end: curDate };
+      if (this.monthData.filter((item) => item.start == curDate).length == 0) {
+        this.monthData.push(selDate);
+      } else {
+        this.removeAaary(this.monthData,selDate)
+      }
+    },
+    // 查看更多
+    moreClick(day, events, jsEvent) {
+      console.log("moreCLick", day, events, jsEvent);
+    },
+    removeAaary(_arr, _obj) {
+      var length = _arr.length;
+      for (var i = 0; i < length; i++) {
+        
+        if (_arr[i].start === _obj.start) {
+          if (i == 0) {
+            _arr.shift(); //删除并返回数组的第一个元素
+            return _arr;
+          } else if (i == length - 1) {
+            _arr.pop(); //删除并返回数组的最后一个元素
+            return _arr;
+          } else {
+            _arr.splice(i, 1); //删除下标为i的元素
+            return _arr;
+          }
+        }
+      }
+    },
+  },
+  created() {
+    this.getData();
+  },
+};
 </script>

+ 1 - 0
src/views/match/notice.vue

@@ -162,6 +162,7 @@ export default {
         submitForm() {
             this.$refs["form"].validate(valid => {
                 if (valid) {
+                    this.form.type = "notice"
                 if (this.form.id != null) {
                     this.$api.updateMatch(this.form).then(response => {
                     this.msgSuccess("修改成功");