Your Name 2 роки тому
батько
коміт
2a557f2346

+ 49 - 2
src/api.js

@@ -133,7 +133,7 @@ export default {
         return axios.get(`${baseURL}/api/admin/match/group/search`, { params: params })
     },
     // 股票列表
-    getStockList: params => {
+    getStockSearchList: params => {
         return axios.get(`${baseURL}/api/admin/stock/search`, { params: params })
     },
     //获取所有模板列表
@@ -409,6 +409,53 @@ export default {
     refundSignupOrder: params => {
         return axios.post(`${baseURL}/api/admin/wxpay/refund`, params)
     },
-
+    // 牛人点评
+    getStockNBCommentsList: params => {
+        return axios.get(`${baseURL}/api/admin/stock/nbcomments/list`, { params: params })
+    },
+    delStockNBComments: params => {
+        return axios.delete(`${baseURL}/api/admin/stock/nbcomments`, { params: params })
+    },
+    getStockNBCommentsInfo: params => {
+        return axios.get(`${baseURL}/api/admin/stock/nbcomments`, { params: params })
+    },
+    addStockNBComments: params => {
+        return axios.post(`${baseURL}/api/admin/stock/nbcomments`, params)
+    },
+    editStockNBComments: params => {
+        return axios.put(`${baseURL}/api/admin/stock/nbcomments`, params)
+    },
+    // 名人堂
+    getFamousUserList: params => {
+        return axios.get(`${baseURL}/api/admin/user/famous/list`, { params: params })
+    },
+    delFamousUser: params => {
+        return axios.delete(`${baseURL}/api/admin/user/famous`, { params: params })
+    },
+    getFamousUserInfo: params => {
+        return axios.get(`${baseURL}/api/admin/user/famous`, { params: params })
+    },
+    addFamousUser: params => {
+        return axios.post(`${baseURL}/api/admin/user/famous`, params)
+    },
+    editFamousUser: params => {
+        return axios.put(`${baseURL}/api/admin/user/famous`, params)
+    },
+    getArticleSearchList: params => {
+        return axios.get(`${baseURL}/api/admin/article/search`, { params: params })
+    },
+    // 版本管理
+    delVersion: params => {
+        return axios.delete(`${baseURL}/api/admin/version`, { params: params })
+    },
+    getVersionInfo: params => {
+        return axios.get(`${baseURL}/api/admin/version`, { params: params })
+    },
+    addVersion: params => {
+        return axios.post(`${baseURL}/api/admin/version`, params)
+    },
+    editVersion: params => {
+        return axios.put(`${baseURL}/api/admin/version`, params)
+    },
 
 }

+ 12 - 0
src/router.js

@@ -131,6 +131,18 @@ export default new Router({
                     component: () =>
                         import ('./views/comments/recordComments.vue'),
                     name: '作业留言'
+                },
+                {
+                    path: '/stock/nbcomments/list',
+                    component: () =>
+                        import ('./views/comments/stockNBComments.vue'),
+                    name: '牛人点评'
+                },
+                {
+                    path: '/famous/list',
+                    component: () =>
+                        import ('./views/comments/famousUserList.vue'),
+                    name: '名人堂'
                 }
             ]
         },

+ 27 - 1
src/views/baike/Index.vue

@@ -228,7 +228,6 @@
           <el-tree
             :data="data"
             show-checkbox
-            default-expand-all
             node-key="id"
             ref="tree"
             highlight-current
@@ -239,6 +238,16 @@
         <el-form-item label="词条名称">
           <el-input v-model="baikeDetailForm.name" placeholder=""></el-input>
         </el-form-item>
+        <el-form-item label="封面图片" prop="">
+            <el-upload class="avatar-uploader" action="/api/admin/uploadfile" :data="{watermark:0}"
+              :show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload">
+              <img v-if="baikeDetailForm.img" :src="baikeDetailForm.img" class="avatar" />
+              <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+            </el-upload>
+          </el-form-item>
+        <el-form-item label="词条简介">
+            <el-input v-model="baikeDetailForm.intro" placeholder="" type="textarea" rows=10></el-input>
+          </el-form-item>
         <el-form-item label="词条解释">
           <fuEditor
             v-model="baikeDetailForm.content"
@@ -501,6 +510,23 @@ export default {
       this.queryParams.page = this.$refs.pageButton.page;
       this.getData();
     },
+    handleAvatarSuccess(res, file) {
+        this.baikeDetailForm.img = res.data.url;
+        console.log(this.baikeDetailForm.img)
+      },
+      beforeAvatarUpload(file) {
+        return;
+        const isJPG = file.type === "image/jpeg";
+        const isLt2M = file.size / 1024 / 1024 < 2;
+
+        if (!isJPG) {
+          this.$message.error("上传头像图片只能是 JPG 格式!");
+        }
+        if (!isLt2M) {
+          this.$message.error("上传头像图片大小不能超过 2MB!");
+        }
+        return isJPG && isLt2M;
+      }
   },
   created() {
     this.getData();

+ 290 - 0
src/views/comments/famousUserList.vue

@@ -0,0 +1,290 @@
+<style lang="scss">
+  .avatar-uploader .el-upload {
+    border: 1px dashed #d9d9d9;
+    border-radius: 6px;
+    cursor: pointer;
+    position: relative;
+    overflow: hidden;
+  }
+
+  .avatar-uploader .el-upload:hover {
+    border-color: #409eff;
+  }
+
+  .avatar-uploader-icon {
+    font-size: 28px;
+    color: #8c939d;
+    width: 178px;
+    height: 178px;
+    line-height: 178px;
+    text-align: center;
+  }
+
+  .avatar {
+    width: 178px;
+    height: 178px;
+    display: block;
+  }
+</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 clearable @clear="getData()" v-model="queryParams.stock_name" placeholder="请输入用户名" size="mini"></el-input>
+            </el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <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="user_name" label="用户名" />
+      <el-table-column label="头像">
+        <template slot-scope="scope">
+          <el-image style="width: 80px; height: 60px" :src="scope.row.user_avatar"
+            :preview-src-list="[scope.row.user_avatar]">
+          </el-image>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" prop="article_ids" label="关联文章" />
+      <el-table-column align="center" prop="content" label="简介">
+        <template slot-scope="scope">
+          {{scope.row.content.substring(0,20)}}...
+        </template>
+      </el-table-column>
+      <el-table-column align="center" prop="ctime" label="创建时间" />
+      <el-table-column align="center" prop="date" label="操作" width="320">
+        <template slot-scope="scope">
+          <el-button @click="edit(scope.row.id)" 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="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="用户" prop="stock_id">
+          <el-select @change="changeUser" v-model="form.user_id" placeholder="请选择用户" filterable remote
+            :remote-method="remoteMethod">
+            <el-option v-for="item in userList" :key="item.value" :label="item.label" :value="item.id">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="关联文章" prop="stock_id">
+          <el-select @change="changeArticle" multiple v-model="form.article_ids" placeholder="请选择文章" filterable remote
+            :remote-method="remoteMethod2">
+            <el-option v-for="item in articleList" :key="item.value" :label="item.name" :value="item.id">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="点评内容" prop="content">
+          <el-input clearable v-model="form.content" placeholder="请输入点评内容" type="textarea" rows=10></el-input>
+        </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";
+  export default {
+    components: {
+      Page,
+    },
+    data() {
+      return {
+        loading: false,
+        queryParams: {
+          page: 1,
+        },
+        form: {},
+        form1: {},
+        form2: {},
+        list: [{}, {}],
+        total: 0,
+        title: "新增用户",
+        open: false,
+        userList: [],
+        articleList: [],
+        rules: {
+          username: [{
+            required: true,
+            message: "请输入用户名",
+            trigger: "blur"
+          }, ],
+          player_type: [{
+            required: true,
+            message: "请选择用户类型",
+            trigger: "change"
+          }, ],
+          phone: [{
+            required: true,
+            message: "请输入用户手机号",
+            trigger: "blur"
+          }, ],
+          avatar: [{
+            required: true,
+            message: "请输入用户手机号",
+            trigger: "change"
+          }, ],
+        }
+      };
+    },
+    methods: {
+      del(id) {
+        this.$confirm("删除用户会删除相关数据,确定删除吗?", "提示", {
+          type: "warning",
+        }).then(() => {
+          this.$api.delFamousUser({
+            id: id
+          }).then((res) => {
+            this.$message({
+              message: "删除成功",
+              type: "success",
+            });
+            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.getFamousUserList(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 = {};
+      },
+      edit(id) {
+        this.title = "编辑名人堂";
+        this.$api.getFamousUserInfo({
+          id: id
+        }).then((res) => {
+          this.form = res.data.data;
+          this.open = true;
+        });
+      },
+      black(row) {
+        this.$api.commentsBlack({
+          id: row.id
+        }).then(res => {
+          this.getData()
+        })
+      },
+      handleAvatarSuccess(res, file) {
+        this.form.img = res.data.url;
+        console.log(this.form.img)
+      },
+      beforeAvatarUpload(file) {
+        return;
+        const isJPG = file.type === "image/jpeg";
+        const isLt2M = file.size / 1024 / 1024 < 2;
+
+        if (!isJPG) {
+          this.$message.error("上传头像图片只能是 JPG 格式!");
+        }
+        if (!isLt2M) {
+          this.$message.error("上传头像图片大小不能超过 2MB!");
+        }
+        return isJPG && isLt2M;
+      },
+      /** 提交按钮 */
+      submitForm() {
+        this.$refs["form"].validate((valid) => {
+          if (valid) {
+            if (this.form.id != null) {
+              this.$api.editFamousUser(this.form).then((res) => {
+                if (res.data.code == 0) {
+                  this.msgSuccess("成功!");
+                  this.open = false;
+                  this.getData();
+                } else {
+                  this.msgError(res.data.message);
+                }
+              });
+            } else {
+              this.$api.addFamousUser(this.form).then((res) => {
+                if (res.data.code == 0) {
+                  this.msgSuccess("成功!");
+                  this.open = false;
+                  this.getData();
+                } else {
+                  this.msgError(res.data.message);
+                }
+              });
+            }
+          }
+        });
+      },
+      remoteMethod(query) {
+        if (query !== '') {
+          this.loading = true;
+          this.$api.getUserSearch({
+            name: query
+          }).then(res => {
+            this.userList = res.data.data
+            this.$set(this.userList, res.data.data)
+            this.loading = false;
+          })
+        } else {
+          this.stockList = [];
+        }
+      },
+      remoteMethod2(query) {
+        if (query !== '') {
+          this.loading = true;
+          this.$api.getArticleSearchList({
+            name: query
+          }).then(res => {
+            this.articleList = res.data.data
+            this.$set(this.articleList, res.data.data)
+            this.loading = false;
+          })
+        } else {
+          this.stockList = [];
+        }
+      },
+      changeUser(val) {
+        var obj = {}
+        obj = this.userList.find(function (item) {
+          return item.id === val;
+        })
+        this.form.user_name = obj.username
+        this.form.user_avatar = obj.avatar
+      },
+      changeArticle(val) {
+        var obj = {}
+        obj = this.articleList.find(function (item) {
+          return item.id === val;
+        })
+      }
+    },
+    created() {
+      this.getData();
+    },
+  };
+</script>

+ 275 - 0
src/views/comments/stockNBComments.vue

@@ -0,0 +1,275 @@
+<style lang="scss">
+  .avatar-uploader .el-upload {
+    border: 1px dashed #d9d9d9;
+    border-radius: 6px;
+    cursor: pointer;
+    position: relative;
+    overflow: hidden;
+  }
+
+  .avatar-uploader .el-upload:hover {
+    border-color: #409eff;
+  }
+
+  .avatar-uploader-icon {
+    font-size: 28px;
+    color: #8c939d;
+    width: 178px;
+    height: 178px;
+    line-height: 178px;
+    text-align: center;
+  }
+
+  .avatar {
+    width: 178px;
+    height: 178px;
+    display: block;
+  }
+</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 clearable @clear="getData()" v-model="queryParams.stock_name" placeholder="请输入股票名称/代码"
+              size="mini"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <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-button
+              type="primary"
+              icon="el-icon-plus"
+              size="mini"
+              @click="handleFastAdd"
+              >新增选手</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="stock_name" label="股票名称" />
+      <el-table-column align="center" prop="stock_code" label="股票代码" />
+      <el-table-column label="图片">
+        <template slot-scope="scope">
+          <el-image style="width: 80px; height: 60px" :src="scope.row.img" :preview-src-list="[scope.row.img]">
+          </el-image>
+        </template>
+      </el-table-column>
+      <el-table-column align="center" prop="content" label="点评内容">
+        <template slot-scope="scope">
+          {{scope.row.content.substring(0,20)}}...
+        </template>
+      </el-table-column>
+      <el-table-column align="center" prop="ctime" label="创建时间" />
+      <el-table-column align="center" prop="date" label="操作" width="320">
+        <template slot-scope="scope">
+          <el-button @click="edit(scope.row.id)" 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="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="股票" prop="stock_id">
+          <el-select @change="changeStock" v-model="form.stock_id" placeholder="请输入股票名称" filterable remote
+            :remote-method="remoteMethod">
+            <el-option v-for="item in stockList" :key="item.value" :label="item.label" :value="item.id">
+            </el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="图片" prop="">
+          <el-upload class="avatar-uploader" action="/api/admin/uploadfile" :data="{watermark:0}"
+            :show-file-list="false" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload">
+            <img v-if="form.img" :src="form.img" class="avatar" />
+            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
+          </el-upload>
+        </el-form-item>
+        <el-form-item label="点评内容" prop="content">
+          <el-input clearable v-model="form.content" placeholder="请输入点评内容" type="textarea" rows=10></el-input>
+        </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";
+  export default {
+    components: {
+      Page,
+    },
+    data() {
+      return {
+        loading: false,
+        queryParams: {
+          page: 1,
+        },
+        form: {},
+        form1: {},
+        form2: {},
+        list: [{}, {}],
+        total: 0,
+        title: "新增用户",
+        open: false,
+        stockList: [],
+        rules: {
+          username: [{
+            required: true,
+            message: "请输入用户名",
+            trigger: "blur"
+          }, ],
+          player_type: [{
+            required: true,
+            message: "请选择用户类型",
+            trigger: "change"
+          }, ],
+          phone: [{
+            required: true,
+            message: "请输入用户手机号",
+            trigger: "blur"
+          }, ],
+          avatar: [{
+            required: true,
+            message: "请输入用户手机号",
+            trigger: "change"
+          }, ],
+        }
+      };
+    },
+    methods: {
+      del(id) {
+        this.$confirm("删除用户会删除相关数据,确定删除吗?", "提示", {
+          type: "warning",
+        }).then(() => {
+          this.$api.delStockNBComments({
+            id: id
+          }).then((res) => {
+            this.$message({
+              message: "删除成功",
+              type: "success",
+            });
+            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.getStockNBCommentsList(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 = {};
+      },
+      edit(id) {
+        this.title = "编辑牛人点评";
+        this.$api.getStockNBCommentsInfo({
+          id: id
+        }).then((res) => {
+          this.form = res.data.data;
+          this.open = true;
+        });
+      },
+      black(row) {
+        this.$api.commentsBlack({
+          id: row.id
+        }).then(res => {
+          this.getData()
+        })
+      },
+      handleAvatarSuccess(res, file) {
+        this.form.img = res.data.url;
+        console.log(this.form.img)
+      },
+      beforeAvatarUpload(file) {
+        return;
+        const isJPG = file.type === "image/jpeg";
+        const isLt2M = file.size / 1024 / 1024 < 2;
+
+        if (!isJPG) {
+          this.$message.error("上传头像图片只能是 JPG 格式!");
+        }
+        if (!isLt2M) {
+          this.$message.error("上传头像图片大小不能超过 2MB!");
+        }
+        return isJPG && isLt2M;
+      },
+      /** 提交按钮 */
+      submitForm() {
+        this.$refs["form"].validate((valid) => {
+          if (valid) {
+            if (this.form.id != null) {
+              this.$api.editStockNBComments(this.form).then((res) => {
+                if (res.data.code == 0) {
+                  this.msgSuccess("成功!");
+                  this.open = false;
+                  this.getData();
+                } else {
+                  this.msgError(res.data.message);
+                }
+              });
+            } else {
+              this.$api.addStockNBComments(this.form).then((res) => {
+                if (res.data.code == 0) {
+                  this.msgSuccess("成功!");
+                  this.open = false;
+                  this.getData();
+                } else {
+                  this.msgError(res.data.message);
+                }
+              });
+            }
+          }
+        });
+      },
+      remoteMethod(query) {
+        if (query !== '') {
+          this.loading = true;
+          this.$api.getStockSearchList({
+            name: query
+          }).then(res => {
+            this.stockList = res.data.data
+            this.$set(this.stockList, res.data.data)
+            this.loading = false;
+          })
+        } else {
+          this.stockList = [];
+        }
+      },
+      changeStock(val) {
+        var obj = {}
+        obj = this.stockList.find(function(item){
+            return item.id === val;
+          })
+          this.form.stock_name = obj.name
+          this.form.stock_code = obj.code
+        }
+    },
+    created() {
+      this.getData();
+    },
+  };
+</script>

+ 183 - 215
src/views/sys/Version.vue

@@ -1,7 +1,7 @@
 <style lang="scss" scoped>
-.blue {
-  background: red !important;
-}
+  .blue {
+    background: red !important;
+  }
 </style>
 <template>
   <section class="content">
@@ -11,89 +11,47 @@
       <el-row>
         <el-col :span="4">
           <el-form-item label-width="10" style="margin-left: 10px">
-            <el-button
-              type="primary"
-              plain
-              icon="el-icon-plus"
-              size="mini"
-              @click="handleAdd"
-              >新增版本</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 v-loading="loading" :data="list" style="width: 100%; margin-top: 10px" height="50vh">
       <el-table-column align="center" prop="version" label="版本号" />
       <el-table-column align="center" prop="android_version" label="android版本" />
       <el-table-column align="center" prop="android_url" label="andorid安装包地址" />
       <el-table-column align="center" prop="ios_url" label="ios安装包地址" />
       <el-table-column align="center" prop="force" label="状态">
         <template slot-scope="scope">
-            <span v-if="scope.row.force==0">待发布</span>
-            <span>已发布</span>
+          <span v-if="scope.row.force==0">待发布</span>
+          <span>已发布</span>
         </template>
       </el-table-column>
       <el-table-column align="center" prop="ctime" label="创建时间" />
       <el-table-column align="center" prop="date" label="操作" width="150">
         <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
-          >
+          <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"
-    />
+    <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" label-width="80px">
         <el-form-item label="版本号" prop="name">
-          <el-input
-            clearable
-            v-model="form.name"
-            placeholder="请输入版本号"
-          ></el-input>
+          <el-input clearable v-model="form.name" placeholder="请输入版本号"></el-input>
         </el-form-item>
-        <el-form-item label="android版本号" prop="name">
-          <el-input
-            clearable
-            v-model="form.name"
-            placeholder="请输入android版本号"
-          ></el-input>
+        <el-form-item label="android版本号" prop="android_version">
+          <el-input clearable v-model="form.android_version" placeholder="请输入android版本号"></el-input>
         </el-form-item>
-        <el-form-item label="ios版本号" prop="name">
-          <el-input
-            clearable
-            v-model="form.name"
-            placeholder="请输入ios版本号"
-          ></el-input>
+        <el-form-item label="ios版本号" prop="version">
+          <el-input clearable v-model="form.version" placeholder="请输入ios版本号"></el-input>
         </el-form-item>
-        <el-form-item label="android安装包地址" prop="name">
-          <el-input
-            clearable
-            v-model="form.name"
-            placeholder="请输入android安装包地址"
-          ></el-input>
+        <el-form-item label="android安装包地址" prop="android_url">
+          <el-input clearable v-model="form.android_url" placeholder="请输入android安装包地址"></el-input>
         </el-form-item>
-        <el-form-item label="ios安装包地址" prop="name">
-          <el-input
-            clearable
-            v-model="form.name"
-            placeholder="请输入ios安装包地址"
-          ></el-input>
+        <el-form-item label="ios安装包地址" prop="ios_url">
+          <el-input clearable v-model="form.ios_url" placeholder="请输入ios安装包地址"></el-input>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
@@ -104,166 +62,176 @@
   </section>
 </template>
 <script>
-import Page from "../../components/Page";
-import { FullCalendar } from "vue-fullcalendar";
-export default {
-  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,
-      matchList: [],
-      groupList: [],
-      userList: [],
-      matchStatus:[{
-        label:"待发布",
-        value:1,
-      },{
-        label:"开始报名",
-        value:2,
-      },{
-        label:"比赛中",
-        value:3,
-      },{
-        label:"已结束",
-        value:4,
-      }]
-    };
-  },
-  methods: {
-    del(id) {
-      this.$confirm("确定删除吗?", "提示", {
-        type: "warning",
-      }).then(() => {
-        this.$api.delMatch({ id: id }).then((res) => {
-          this.$message({
-            message: "删除成功",
-            type: "success",
-          });
-          this.getData();
-        });
-      });
+  import Page from "../../components/Page";
+  import {
+    FullCalendar
+  } from "vue-fullcalendar";
+  export default {
+    components: {
+      Page,
+      "full-calendar": require("vue-fullcalendar"),
     },
-    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();
+    data() {
+      return {
+        monthData: [],
+        dateRange: ["2021-12-01", "2022-01-02"],
+        loading: false,
+        queryParams: {
+          page: 1,
+        },
+        form: {
+          monthData: []
+        },
+        list: [{}, {}],
+        total: 0,
+        title: "新增版本",
+        open: false,
+        matchList: [],
+        groupList: [],
+        userList: [],
+        matchStatus: [{
+          label: "待发布",
+          value: 1,
+        }, {
+          label: "开始报名",
+          value: 2,
+        }, {
+          label: "比赛中",
+          value: 3,
+        }, {
+          label: "已结束",
+          value: 4,
+        }]
+      };
     },
-    getData() {
-      this.loading = true;
-      //
-      this.$api.getVersionList(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.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();
-            });
-          } else {
-            this.$api.addMatch(this.form).then((response) => {
-              this.msgSuccess("新增成功");
-              this.open = false;
-              this.getData();
+    methods: {
+      del(id) {
+        this.$confirm("确定删除吗?", "提示", {
+          type: "warning",
+        }).then(() => {
+          this.$api.delMatch({
+            id: id
+          }).then((res) => {
+            this.$message({
+              message: "删除成功",
+              type: "success",
             });
+            this.getData();
+          });
+        });
+      },
+      edit(row) {
+        this.open = true;
+        this.$api.getVersionInfo({
+          id: row.id
+        }).then(res => {
+          this.form = res.data.data
+        })
+      },
+      gopage(size) {
+        if (size) {
+          this.queryParams.page_size = size;
+        }
+        this.queryParams.page = this.$refs.pageButton.page;
+        this.getData();
+      },
+      getData() {
+        this.loading = true;
+        //
+        this.$api.getVersionList(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.editVersion(this.form).then((res) => {
+                if (res.data.code == 0) {
+                  this.msgSuccess("成功!");
+                  this.open = false;
+                  this.getData();
+                } else {
+                  this.msgError(res.data.message);
+                }
+              });
+            } else {
+              this.$api.addVersion(this.form).then((res) => {
+                if (res.data.code == 0) {
+                  this.msgSuccess("成功!");
+                  this.open = false;
+                  this.getData();
+                } else {
+                  this.msgError(res.data.message);
+                }
+              });
+            }
           }
+        });
+      },
+      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;
+      },
+      // 选择月份
+      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)
         }
-      });
-    },
-    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;
-    },
-    // 选择月份
-    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;
+      },
+      // 查看更多
+      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();
     },
-  },
-  created() {
-    this.getData();
-  },
-};
+  };
 </script>