瀏覽代碼

Merge branch 'master' into Nov16thResetMusic

lex-xin 4 年之前
父節點
當前提交
c398202da0

File diff suppressed because it is too large
+ 0 - 0
dist/index.html


+ 1 - 1
dist/static/css/chunk-d09d58b6.3aaa6d98.css → dist/static/css/chunk-231ff9f7.bb3bdb8f.css

@@ -1 +1 @@
-.content-tooltip[data-v-754f10ff]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-width:100%;display:inline-block}.dialog-footer[data-v-de543970]{width:100%;text-align:right}.reword-list[data-v-de543970]{display:-webkit-box;display:-ms-flexbox;display:flex}.reword-list .el-form-item[data-v-de543970]{-webkit-box-flex:1;-ms-flex:1;flex:1}.add-reword[data-v-de543970]{margin-bottom:22px;width:180px;border-style:dashed}
+.dialog-footer[data-v-de543970]{width:100%;text-align:right}.reword-list[data-v-de543970]{display:-webkit-box;display:-ms-flexbox;display:flex}.reword-list .el-form-item[data-v-de543970]{-webkit-box-flex:1;-ms-flex:1;flex:1}.add-reword[data-v-de543970]{margin-bottom:22px;width:180px;border-style:dashed}

+ 1 - 1
dist/static/css/chunk-956b3508.e3a6139a.css → dist/static/css/chunk-266d284c.5ce51240.css

@@ -1 +1 @@
-/deep/.avatar-uploader .el-upload,/deep/.upload-demo .el-upload{border-radius:6px;cursor:pointer;position:relative;overflow:hidden}.avatar-uploader .el-upload:hover{border-color:#409eff}.avatar-uploader-icon{border:1px dashed #d9d9d9;font-size:28px;color:#8c939d;width:120px;height:120px;line-height:120px;text-align:center}.avatar{width:120px;height:120px;display:block}.ivu-upload{display:none}.content-tooltip[data-v-754f10ff]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-width:100%;display:inline-block}.shopImage{width:60px;height:60px}.shopDesc{max-height:70px;overflow:hidden}
+/deep/.avatar-uploader .el-upload,/deep/.upload-demo .el-upload{border-radius:6px;cursor:pointer;position:relative;overflow:hidden}.avatar-uploader .el-upload:hover{border-color:#409eff}.avatar-uploader-icon{border:1px dashed #d9d9d9;font-size:28px;color:#8c939d;width:120px;height:120px;line-height:120px;text-align:center}.avatar{width:120px;height:120px;display:block}.ivu-upload{display:none}.shopImage{width:60px;height:60px}.shopDesc{max-height:70px;overflow:hidden}

+ 0 - 0
dist/static/css/chunk-4a3145a3.76eed2db.css → dist/static/css/chunk-3c65b452.81d7ff9f.css


+ 1 - 0
dist/static/css/chunk-49d7fdd0.2d7d9074.css

@@ -0,0 +1 @@
+.description-title[data-v-435a62fd]{margin-bottom:20px;color:rgba(0,0,0,.85);font-weight:700;font-size:16px;line-height:1.5}.description-view[data-v-435a62fd]{width:100%;border:1px solid #e8e8e8}.description-view .description-table[data-v-435a62fd]{width:100%;border-collapse:collapse;table-layout:fixed}.description-view .description-tr[data-v-435a62fd]{border-bottom:1px solid #e8e8e8;width:100%}.description-view .description-tr[data-v-435a62fd]:last-child{border-bottom:none}.description-view .description-label[data-v-435a62fd]{border-right:1px solid #e8e8e8;background-color:#fafafa;color:rgba(0,0,0,.85);font-weight:400;font-size:14px;line-height:22px;padding:12px 16px;white-space:nowrap;display:table-cell}.description-view .description-label[data-v-435a62fd]:after{content:"";margin:0 8px 0 2px;position:relative;top:-.5px}.description-view .description-content[data-v-435a62fd]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-right:1px solid #e8e8e8;font-size:14px;line-height:1.5;padding:12px 16px;color:rgba(0,0,0,.65);display:table-cell}.description-tr .description-content[data-v-435a62fd]:last-child{border-right:none}[data-v-edfb85f0] .description-title{margin-bottom:0}.video[data-v-edfb85f0]{background:#fff;margin-top:10px;width:100%;height:430px}[data-v-1fe60f94] .el-dialog__body{padding:10px 20px}

+ 1 - 1
dist/static/css/chunk-commons.0c9838f9.css → dist/static/css/chunk-commons.9dd16d80.css

@@ -1 +1 @@
-.pagination-container[data-v-5985d484]{background:#fff;padding:32px 16px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.pagination-container.hidden[data-v-5985d484]{display:none}
+.pagination-container[data-v-5985d484]{background:#fff;padding:32px 16px;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.pagination-container.hidden[data-v-5985d484]{display:none}.content-tooltip[data-v-754f10ff]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-width:100%;display:inline-block}

File diff suppressed because it is too large
+ 0 - 0
dist/static/js/app.1978bc9e.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-231ff9f7.3538391e.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-266d284c.dddecd79.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-3c65b452.664d3d91.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-49d7fdd0.122aa72c.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-4a3145a3.8861ac6d.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-commons.0f8c6279.js


+ 0 - 1
dist/static/js/chunk-commons.be539945.js

@@ -1 +0,0 @@
-(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-commons"],{"333d":function(e,t,a){"use strict";var n=function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"pagination-container",class:{hidden:e.hidden}},[a("el-pagination",e._b({attrs:{"current-page":e.currentPage,"page-size":e.pageSize,layout:e.layout,"page-sizes":e.pageSizes,total:e.total},on:{"update:currentPage":function(t){e.currentPage=t},"update:current-page":function(t){e.currentPage=t},"update:pageSize":function(t){e.pageSize=t},"update:page-size":function(t){e.pageSize=t},"size-change":e.handleSizeChange,"current-change":e.handleCurrentChange}},"el-pagination",e.$attrs,!1))],1)},i=[],u=(a("c5f6"),a("09f4")),r={name:"Pagination",props:{total:{required:!0,type:Number},page:{type:Number,default:1},limit:{type:Number,default:10},pageSizes:{type:Array,default:function(){return[10,20,30,50]}},layout:{type:String,default:"total,sizes,prev, pager, next, jumper"},background:{type:Boolean,default:!0},autoScroll:{type:Boolean,default:!0},hidden:{type:Boolean,default:!1}},computed:{currentPage:{get:function(){return this.page},set:function(e){this.$emit("update:page",e)}},pageSize:{get:function(){return this.limit},set:function(e){this.$emit("update:limit",e)}}},methods:{handleSizeChange:function(e){this.$emit("pagination",{page:this.currentPage,limit:e}),this.autoScroll&&Object(u["a"])(0,800)},handleCurrentChange:function(e){this.$emit("pagination",{page:e,limit:this.pageSize}),this.autoScroll&&Object(u["a"])(0,800)}}},o=r,p=(a("3dfc"),a("2877")),c=Object(p["a"])(o,n,i,!1,null,"5985d484",null);t["a"]=c.exports},"3dfc":function(e,t,a){"use strict";a("ab68")},ab68:function(e,t,a){}}]);

File diff suppressed because it is too large
+ 0 - 0
dist/static/js/chunk-d09d58b6.2b8b4c11.js


+ 3 - 1
src/router/index.js

@@ -338,6 +338,8 @@ export const asyncRoutes = {
   // 活动奖品设置
   // 活动奖品设置
   trophyManager: () => import('@/views/luckyDraw/trophyManager'),
   trophyManager: () => import('@/views/luckyDraw/trophyManager'),
   // 抽奖记录
   // 抽奖记录
-  lotteryRecord: () => import('@/views/luckyDraw/lotteryRecord')
+  lotteryRecord: () => import('@/views/luckyDraw/lotteryRecord'),
+  // 长三角比赛
+  matchManager: () => import('@/views/matchManager/index')
 }
 }
 export default router
 export default router

+ 21 - 0
src/views/matchManager/api.js

@@ -0,0 +1,21 @@
+import request from '@/utils/request'
+// import qs from 'qs'
+let api = '/api-web'
+
+// 查询报名记录
+export function studentCompetitionPage(data) {
+    return request({
+      url: api + '/studentCompetition/queryPage',
+      method: 'post',
+      data
+    })
+}
+// 更新报名记录
+export function studentCompetitionUpdate(data) {
+    return request({
+      url: api + '/studentCompetition/update',
+      method: 'post',
+      data
+    })
+}
+

+ 364 - 0
src/views/matchManager/index.vue

@@ -0,0 +1,364 @@
+<!--  -->
+<template>
+  <div class="m-container">
+    <h2>
+      <div class="squrt"></div>比赛管理
+    </h2>
+    <div class="m-core">
+      <el-form :inline="true" ref="searchForm" :model="searchForm">
+        <el-form-item prop="search">
+          <el-input v-model.trim="searchForm.search"
+                    @keyup.enter.native="search"
+                    placeholder='选手姓名/编号/身份证号'></el-input>
+        </el-form-item>
+        <el-form-item prop="grade">
+          <el-select v-model.trim="searchForm.grade"
+                     clearable
+                     placeholder="请选择年级">
+            <el-option label="小学A组:2-3年级" value="小学A组:2-3年级"></el-option>
+            <el-option label="小学B组:4-5年级" value="小学B组:4-5年级"></el-option>
+            <el-option label="中学组:6-8年级" value="中学组:6-8年级"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="gender">
+          <el-select v-model.trim="searchForm.gender"
+                     clearable
+                     placeholder="请选择性别">
+            <el-option label="男"
+                       :value="true"></el-option>
+            <el-option label="女"
+                       :value="false"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="subject">
+          <el-select v-model.trim="searchForm.subject"
+                     clearable
+                     placeholder="请选择参赛专业">
+            <el-option label="长笛" value="长笛"></el-option>
+            <el-option label="单簧管" value="单簧管"></el-option>
+            <el-option label="萨克斯" value="萨克斯"></el-option>
+            <el-option label="小号" value="小号"></el-option>
+            <el-option label="圆号" value="圆号"></el-option>
+            <el-option label="长号" value="长号"></el-option>
+            <el-option label="上低音号" value="上低音号"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="prizeLevel">
+          <el-select v-model.trim="searchForm.prizeLevel"
+                     clearable
+                     placeholder="请选择获奖级别">
+            <el-option label="大雅之星" :value="1"></el-option>
+            <el-option label="一等奖" :value="2"></el-option>
+            <el-option label="二等奖" :value="3"></el-option>
+            <el-option label="三等奖" :value="4"></el-option>
+            <el-option label="优秀奖" :value="5"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="isShow">
+          <el-select v-model.trim="searchForm.isShow"
+                     clearable
+                     placeholder="请选择是否展示">
+            <el-option label="是"
+                       :value="1"></el-option>
+            <el-option label="否"
+                       :value="0"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item prop="isReview">
+          <el-select v-model.trim="searchForm.isReview"
+                     clearable
+                     placeholder="请选择是否评审">
+            <el-option label="是"
+                       :value="1"></el-option>
+            <el-option label="否"
+                       :value="0"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item>
+          <el-button type="danger"
+                     @click="search">搜索</el-button>
+          <el-button @click="onReSet"
+                     type="primary">重置</el-button>
+        </el-form-item>
+      </el-form>
+      <div class="tableWrap">
+        <el-table style="width: 100%"
+                  :header-cell-style="{background:'#EDEEF0',color:'#444'}"
+                  :data="tableList">
+          <el-table-column align="center"
+                           prop="userId"
+                           label="选手编号"></el-table-column>
+          <el-table-column align="center"
+                           prop="username"
+                           label="选手姓名"></el-table-column>
+          <el-table-column align="center" width="200px"
+                           prop="idCardNo"
+                           label="身份证号码"></el-table-column>
+          <el-table-column align="center"
+                           prop="age"
+                           label="年龄">
+            <template slot-scope="scope">
+              {{ scope.row.age }}岁
+            </template>
+          </el-table-column>
+          <el-table-column align="center"
+                           prop="grade"
+                           label="年级"></el-table-column>
+          <el-table-column align="center"
+                           label="性别">
+            <template slot-scope="scope">
+              {{ scope.row.gender ? '男' : '女' }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center"
+                           prop="subject"
+                           label="参赛专业"></el-table-column>
+          <el-table-column align="center"
+                           prop="chapter"
+                           label="参赛曲目"></el-table-column>
+          <el-table-column align="center"
+                           prop="score"
+                           label="得分"></el-table-column>
+          <el-table-column align="center"
+                           prop="prizeLevel"
+                           label="获奖级别">
+            <template slot-scope="scope">
+              {{ prizeLevelList[scope.row.prizeLevel] }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center"
+                           prop="show"
+                           label="是否展示">
+            <template slot-scope="scope">
+              {{ scope.row.show ? '是' : '否' }}
+            </template>
+          </el-table-column>
+          <el-table-column align="center"
+                           prop="comment"
+                           label="选手点评">
+            <template slot-scope="scope">
+              <tooltip :content="scope.row.comment" />
+            </template>
+          </el-table-column>
+          <el-table-column align="center"
+                           label="操作">
+            <template slot-scope="scope">
+              <div>
+                <el-button type="text"
+                           v-if="permission('studentCompetition/lookDetail')"
+                           @click="lookDetail(scope.row)">查看</el-button>
+                <el-button type="text"
+                           v-if="permission('studentCompetition/update')"
+                           @click="onReview(scope.row)">评审</el-button>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :total="pageInfo.total"
+                    :page.sync="pageInfo.page"
+                    :limit.sync="pageInfo.limit"
+                    :page-sizes="pageInfo.page_size"
+                    @pagination="getList" />
+      </div>
+    </div>
+    <el-dialog title="查看"
+               v-if="dialogVisible"
+               :visible.sync="dialogVisible"
+               width="900px">
+      <match-detail :detail="detail" />
+    </el-dialog>
+
+    <el-dialog title="评审" :visible.sync="reviewStatus"
+               width="500px">
+      <el-form :model="form"
+               :rules="rules"
+               label-width="100px"
+               ref="ruleForm">
+        <el-form-item label="得分"
+                      prop="score">
+          <el-input placeholder="请输入得分"
+                    type="number"
+                    @mousewheel.native.prevent
+                    v-model.trim="form.score"></el-input>
+        </el-form-item>
+        <el-form-item label="获奖级别"
+                      prop="prizeLevel">
+          <el-select v-model.trim="form.prizeLevel"
+                     style="width: 100% !important;"
+                     placeholder="请选择获奖级别">
+            <el-option label="大雅之星" :value="1"></el-option>
+            <el-option label="一等奖" :value="2"></el-option>
+            <el-option label="二等奖" :value="3"></el-option>
+            <el-option label="三等奖" :value="4"></el-option>
+            <el-option label="优秀奖" :value="5"></el-option>
+            <el-option label="无" :value="0"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="是否展示"
+                      prop="show">
+          <el-select v-model.trim="form.show"
+                     style="width: 100% !important;"
+                     placeholder="请选择是否展示">
+            <el-option label="是"
+                       :value="true"></el-option>
+            <el-option label="否"
+                       :value="false"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="选手点评"
+                      prop="comment">
+          <el-input type="textarea"
+                    v-model.trim="form.comment"></el-input>
+        </el-form-item>
+      </el-form>
+      <span slot="footer"
+            class="dialog-footer">
+        <el-button @click="reviewStatus = false">取 消</el-button>
+        <el-button @click="onReviewSubmit('ruleForm')"
+                   type="primary">确 定</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import pagination from "@/components/Pagination/index";
+import { permission } from '@/utils/directivePage'
+import Tooltip from '@/components/Tooltip/index'
+import { studentCompetitionPage, studentCompetitionUpdate } from './api.js'
+import cleanDeep from 'clean-deep'
+import MatchDetail from './matchDetail'
+const validateScore = (rule, value, callBack) => {
+  if (value == '' && typeof value == 'string' || value == null) {
+    callBack(new Error('请输入得分'))
+  } else if (value < 0 || value > 100) {
+    callBack(new Error('输入得分必须在0-100之间'))
+  } else {
+    callBack()
+  }
+}
+export default {
+  components: { pagination, Tooltip, MatchDetail },
+  data () {
+    return {
+      searchForm: {
+        search: null,
+        gender: null,
+        subject: null,
+        prizeLevel: null,
+        grade: null,
+        isShow: null,
+        isReview: null,
+      },
+      tableList: [],
+      pageInfo: {
+        // 分页规则
+        limit: 10, // 限制显示条数
+        page: 1, // 当前页
+        total: 0, // 总条数
+        page_size: [10, 20, 40, 50] // 选择限制显示条数
+      },
+      prizeLevelList: {
+        1: '大雅之星',
+        2: '一等奖',
+        3: '二等奖',
+        4: '三等奖',
+        5: '优秀奖'
+      },
+      detail: null,
+      dialogVisible: false,
+      reviewStatus: false,
+      form: {
+        id: null,
+        score: null,
+        prizeLevel: null,
+        show: null,
+        comment: null
+      },
+      rules: {
+        score: [{required: true, validator: validateScore, trigger: 'blur'}],
+        // prizeLevel: [{required: true, message:'请选择获奖级别', trigger: 'blur'}],
+        // show: [{required: true, message:'请选择是否展示', trigger: 'blur'}],
+      }
+    };
+  },
+  //生命周期 - 创建完成(可以访问当前this实例)
+  created () { },
+  //生命周期 - 挂载完成(可以访问DOM元素)
+  mounted () {
+    this.getList()
+  },
+  activated () {
+    // this.getList()
+  },
+  methods: {
+    permission (str) {
+      return permission(str)
+    },
+    getList () {
+      let obj = {}
+      Object.assign(obj, this.searchForm)
+      obj.rows = this.pageInfo.limit;
+      obj.page = this.pageInfo.page;
+      studentCompetitionPage(cleanDeep(obj)).then(res => {
+        if (res.code == 200) {
+          this.pageInfo.total = res.data.total;
+          let rows = res.data && res.data.rows ? res.data.rows : []
+          rows.forEach(row => {
+            row.score = row.score == -1 ? null : row.score
+            row.prizeLevel = row.prizeLevel == -1 ? null : row.prizeLevel
+          });
+          this.tableList = res.data.rows
+        }
+      })
+    },
+    search () {
+      this.pageInfo.page = 1;
+      this.getList();
+    },
+    onReSet () {
+      this.pageInfo.page = 1;
+      this.$refs['searchForm'].resetFields()
+      this.getList()
+    },
+    lookDetail(row) {
+      this.detail = row
+      this.dialogVisible = true
+    },
+    onReview(row) {
+      this.$nextTick(() => {
+        this.form = {
+          id: row.id,
+          score: row.score,
+          prizeLevel: row.prizeLevel,
+          show: row.show,
+          comment: row.comment
+        }
+      })
+      this.reviewStatus = true
+    },
+    onReviewSubmit(formName) {
+      this.$refs[formName].validate(async (valid) => {
+        if(valid) {
+          await studentCompetitionUpdate(cleanDeep(this.form)).then(res => {
+            if(res.code == 200) {
+              this.$message.success('评审成功')
+              this.getList()
+              this.reviewStatus = false
+            } else {
+              this.$message.error(res.msg)
+            }
+          })
+        } else {
+          return false
+        }
+      })
+    },
+  }
+};
+</script>
+<style lang='scss' scoped>
+/deep/.el-dialog__body {
+    padding: 10px 20px;
+}
+</style>

+ 55 - 0
src/views/matchManager/matchDetail.vue

@@ -0,0 +1,55 @@
+<template>
+  <div>
+    <descriptions :column="2">
+      <descriptions-item label="选手姓名:">{{
+        detail.username
+      }}</descriptions-item>
+      <descriptions-item label="选手编号:">{{
+        detail.userId
+      }}</descriptions-item>
+      <descriptions-item label="身份证号码:">{{
+        detail.idCardNo
+      }}</descriptions-item>
+      <descriptions-item label="年龄:">{{
+        detail.age
+      }}岁</descriptions-item>
+      <descriptions-item label="年级:">{{
+        detail.grade
+      }}</descriptions-item>
+      <descriptions-item label="性别:">{{
+        detail.gender ? '男' : '女'
+      }}</descriptions-item>
+      <descriptions-item label="参赛专业:">{{ detail.subject }}</descriptions-item>
+      <descriptions-item label="参赛曲目:">{{ detail.chapter }}</descriptions-item>
+    </descriptions>
+    <!-- <descriptions :column="1">
+      <descriptions-item label="收费标准:">{{
+        detail.videoUrl
+      }}</descriptions-item>
+    </descriptions> -->
+    <video v-if="detail.videoUrl" class="video" controls="controls" type="video/mp4" preload="auto" autopaly="false" :src="detail.videoUrl" ></video>
+  </div>
+</template>
+<script>
+import Vue from "vue";
+import descriptions from "@/components/Descriptions";
+Vue.use(descriptions);
+export default {
+  props: ["detail"],
+  data() {
+    return {
+    };
+  },
+};
+</script>
+<style lang="less" scoped>
+/deep/.description-title {
+    margin-bottom: 0;
+}
+.video {
+    background: #fff;
+    margin-top: 10px;
+    width: 100%;
+    height: 430px;
+}
+</style>

Some files were not shown because too many files changed in this diff