zs 5 meses atrás
pai
commit
fcbc46ab89
3 arquivos alterados com 151 adições e 20 exclusões
  1. 6 0
      src/store/api/platform/matchExt.js
  2. 15 1
      src/views/home/index.vue
  3. 130 19
      src/views/match/thr.vue

+ 6 - 0
src/store/api/platform/matchExt.js

@@ -96,6 +96,11 @@ export const MatchExtStore = defineStore('matchExt', () => {
     const res = await axios.$post(`${url}/step7`, payload)
     return res
   }
+  const step7Score = async (payload) => {
+    const id = get(payload, 'match_id', get(payload, 'match_id'))
+    const res = await axios.$post(`${url}/step7/score/${id}`, payload)
+    return res
+  }
   const step8 = async (payload) => {
     const res = await axios.$post(`${url}/step8`, payload)
     return res
@@ -120,6 +125,7 @@ export const MatchExtStore = defineStore('matchExt', () => {
     step5Order,
     step6,
     step7,
+    step7Score,
     step8,
     del
   }

+ 15 - 1
src/views/home/index.vue

@@ -29,7 +29,7 @@
         <div class="content">
           <one v-if="info.ext_status == '0'" :info="info" @toExamtion="toExamtion" @toExport="toExport"></one>
           <two v-if="info.ext_status == '1' || info.ext_status == '2' || info.ext_status == '3' || info.ext_status == '4'" :info="info" @toStep2="toStep2" @stepFill="stepFill" @toStep3="toStep3" @toStep4="toStep4" @toExport="toExport" @step4Score="step4Score" @toStep5="toStep5" @toFinals="toFinals"></two>
-          <thr v-if="info.ext_status == '5' || info.ext_status == '6' || info.ext_status == '7' || info.ext_status == '8'" :info="info" @toExport="toExport" @step5Time="step5Time" @step5Order="step5Order" @toMessage="toMessage" @toStep6="toStep6" @toPerson="toPerson" @toStep7="toStep7" @toStep8="toStep8"></thr>
+          <thr v-if="info.ext_status == '5' || info.ext_status == '6' || info.ext_status == '7' || info.ext_status == '8'" :info="info" @toExport="toExport" @step5Time="step5Time" @step5Order="step5Order" @toMessage="toMessage" @toStep6="toStep6" @toPerson="toPerson" @toStep7="toStep7" @toStep8="toStep8" @step7Score="step7Score" @totalScore="totalScore"></thr>
         </div>
       </div>
     </div>
@@ -311,6 +311,20 @@ const toStep7 = () => {
     })
     .catch(() => {})
 }
+// 补充决赛分数
+const step7Score = async (data) => {
+  const res = await matchRegStore.update({ id: data.id, final_score_details: data.final_score_details })
+  if ($checkRes(res, true)) {
+    search()
+  }
+}
+// 修改总分
+const totalScore = async (data) => {
+  const res = await matchRegStore.update({ id: data.id, final_score: data.final_score })
+  if ($checkRes(res, true)) {
+    search()
+  }
+}
 // 进入决赛赛事结束阶段
 const toStep8 = () => {
   ElMessageBox.confirm('是否确定进入决赛赛事结束阶段?', '赛事进行', {

+ 130 - 19
src/views/match/thr.vue

@@ -43,12 +43,13 @@
             {{ getDict(scope.row.final_confirm, 'final_confirm') || '暂无' }}
           </template>
         </el-table-column>
-        <el-table-column prop="order_no" align="center" label="排序"> </el-table-column>
+        <el-table-column prop="final_order_no" align="center" label="排序"> </el-table-column>
         <el-table-column align="center" label="操作" width="160">
           <template #default="{ row }">
             <el-link :underline="false" type="primary" size="mini" @click="toView(row, true)" style="margin-right: 10px">查看</el-link>
-            <el-link :underline="false" v-if="info.ext_status == '5' && row.final_confirm == '0'" type="primary" size="mini" @click="toLink(row)">排序</el-link>
-            <el-link :underline="false" v-if="info.ext_status == '7'" type="primary" size="mini" @click="toScore(row)">上传决赛分数</el-link>
+            <el-link :underline="false" v-if="info.ext_status == '5' && row.final_confirm == '0'" type="primary" size="mini" @click="toLink(row)" style="margin-right: 10px">排序</el-link>
+            <el-link :underline="false" v-if="info.ext_status == '7'" type="primary" size="mini" @click="toScore(row)" style="margin-right: 10px">上传决赛分数</el-link>
+            <el-link :underline="false" v-if="info.ext_status == '7'" type="primary" size="mini" @click="toTotalScore(row)">总分</el-link>
           </template>
         </el-table-column>
       </el-table>
@@ -97,14 +98,20 @@
         </el-descriptions>
       </div>
       <div v-else-if="dialog.type == '2'">
-        <el-form ref="scoreFormRef" :model="scoreForm" :rules="scoreRules" label-width="auto" class="form" label-position="left">
-          <el-form-item label="决赛总分数" prop="final_score">
-            <el-input v-model="scoreForm.final_score" type="number" placeholder="请输入决赛总分数" />
-          </el-form-item>
-          <div style="text-align: center">
-            <el-button type="primary" @click="onSubmit(scoreFormRef)">保存初审分数</el-button>
-          </div>
-        </el-form>
+        <el-col :span="24" class="add">
+          <el-button type="primary" @click="addScore()">添加</el-button>
+        </el-col>
+        <el-table :data="detailsList" border>
+          <el-table-column type="index" label="序号" width="80" align="center"> </el-table-column>
+          <el-table-column prop="name" label="专家姓名" align="center"> </el-table-column>
+          <el-table-column prop="score" label="分数" align="center"> </el-table-column>
+          <el-table-column label="操作" align="center" width="200">
+            <template #default="scope">
+              <el-button size="mini" type="primary" @click="upadteScore(scope.row)">修改</el-button>
+              <el-button size="mini" type="danger" @click="delScore(scope.row)">删除</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
       </div>
       <div v-else-if="dialog.type == '3'">
         <el-table :data="supplementList" style="width: 100%" size="large" :header-cell-style="{ backgroundColor: '#edf3ff' }">
@@ -136,11 +143,50 @@
           </div>
         </el-form>
       </div>
+      <div v-else-if="dialog.type == '5'">
+        <el-form ref="totalFormRef" :model="totalForm" :rules="totalRules" label-width="auto" class="form" label-position="left">
+          <el-form-item label="决赛总分数" prop="final_score">
+            <el-input v-model="totalForm.final_score" type="number" placeholder="请输入决赛总分数" />
+          </el-form-item>
+          <div style="text-align: center">
+            <el-button type="primary" @click="onTSubmit(totalFormRef)">保存</el-button>
+          </div>
+        </el-form>
+      </div>
+    </el-dialog>
+    <el-dialog v-model="dialogVisible" title="分数信息填写" width="800" :destroy-on-close="false" @close="toSclose">
+      <el-form ref="scoreFormRef" :model="scoreForm" :rules="scoreRules" label-width="auto" class="form" label-position="left">
+        <el-form-item label="专家姓名" prop="name">
+          <el-input v-model="scoreForm.name" placeholder="请输入专家姓名" />
+        </el-form-item>
+        <el-form-item label="决赛分数" prop="score">
+          <el-input v-model="scoreForm.score" type="number" placeholder="请输入决赛分数" />
+        </el-form-item>
+        <el-form-item label="维度" prop="details">
+          <el-table :data="scoreForm.details" border>
+            <el-table-column type="index" label="序号" width="80" align="center"> </el-table-column>
+            <el-table-column prop="title" label="维度名称" align="center">
+              <template #default="scope">
+                <el-input v-model="scope.row.title" placeholder="请输入维度名称" />
+              </template>
+            </el-table-column>
+            <el-table-column prop="score" label="维度分数" align="center">
+              <template #default="scope">
+                <el-input v-model="scope.row.score" type="number" placeholder="请输入维度分数" />
+              </template>
+            </el-table-column>
+          </el-table>
+        </el-form-item>
+        <div style="text-align: center">
+          <el-button type="primary" @click="onSubmit(scoreFormRef)">保存</el-button>
+        </div>
+      </el-form>
     </el-dialog>
   </div>
 </template>
 <script setup>
-import { get } from 'lodash-es'
+import moment from 'moment'
+import { cloneDeep, get } from 'lodash-es'
 const id = ref('')
 const props = defineProps({
   info: { type: Object }
@@ -184,13 +230,22 @@ const selectionList = ref([])
 const is_look = ref(false)
 
 // 上传分数
-const scoreForm = ref({})
+const scoreForm = ref({ details: [] })
 // 表单
 const scoreFormRef = ref()
 const scoreRules = reactive({
-  score: [{ required: true, message: '请输入初审分数', trigger: 'blur' }]
+  name: [{ required: true, message: '请输入专家姓名', trigger: 'blur' }],
+  score: [{ required: true, message: '请输入决赛分数', trigger: 'blur' }]
 })
+const dialogVisible = ref(false)
 
+// 决赛总分数
+const totalForm = ref({ details: [] })
+// 表单
+const totalFormRef = ref()
+const totalRules = reactive({
+  final_score: [{ required: true, message: '请输入决赛总分数', trigger: 'blur' }]
+})
 // 顺序
 const orderForm = ref({})
 // 表单
@@ -202,7 +257,10 @@ const orderRules = reactive({
 // 补充人员列表
 const supplementList = ref([])
 
-const emits = defineEmits(['step5Time', 'toExport', 'toMessage', 'toStep6', 'toPerson', 'toStep7', 'toStep8'])
+// 分数设置
+const detailsList = ref([])
+
+const emits = defineEmits(['step5Time', 'toExport', 'toMessage', 'toStep6', 'toPerson', 'toStep7', 'toStep8', 'step7Score', 'totalScore'])
 
 const search = async (query = { skip, limit }) => {
   skip = query.skip
@@ -282,9 +340,17 @@ const toLink = (data) => {
   orderForm.value = data
   dialog.value = { type: '4', show: true, title: '排序' }
 }
+// 总分
+const toTotalScore = (data) => {
+  totalForm.value = data
+  dialog.value = { type: '5', show: true, title: '总分' }
+}
 // 上传决赛分数
 const toScore = (data) => {
-  scoreForm.value = data
+  console.log(data)
+  form.value = data
+  if (data.final_score_details && data.final_score_details.length > 0) detailsList.value = data.final_score_details
+  if (match.value.ext_finals && match.value.ext_finals.length > 0) scoreForm.value.details = cloneDeep(match.value.ext_finals)
   dialog.value = { type: '2', show: true, title: '上传决赛分数' }
 }
 // 保存决赛分数
@@ -292,8 +358,28 @@ const onSubmit = async (formEl) => {
   if (!formEl) return
   await formEl.validate((valid, fields) => {
     if (valid) {
-      const data = { id: id.value, reg_id: scoreForm.value.id, score: parseInt(scoreForm.value.score) }
-      emits('step4Score', data)
+      const data = cloneDeep(scoreForm.value)
+      let details = detailsList.value.find((i) => i.sid == data.sid)
+      if (details) {
+        detailsList.value = detailsList.value.map((i) => {
+          if (i.sid == data.sid) return data
+          else return i
+        })
+      } else detailsList.value.push(data)
+      emits('step7Score', { id: form.value.id, final_score_details: detailsList.value })
+      toSclose()
+    } else {
+      console.log('error submit!', fields)
+    }
+  })
+}
+// 决赛总分数
+const onTSubmit = async (formEl) => {
+  if (!formEl) return
+  await formEl.validate((valid, fields) => {
+    if (valid) {
+      const data = cloneDeep(totalForm.value)
+      emits('totalScore', { id: totalForm.value.id, final_score: data.final_score })
       toClose()
     } else {
       console.log('error submit!', fields)
@@ -345,10 +431,32 @@ const toPerson = (data) => {
 const toClose = async () => {
   is_look.value = false
   form.value = {}
-  scoreForm.value = {}
+  totalForm.value = {}
   dialog.value = { show: false }
   await search({ skip, limit })
 }
+const toSclose = async () => {
+  scoreForm.value = { details: [] }
+  if (match.value.ext_finals && match.value.ext_finals.length > 0) scoreForm.value.details = cloneDeep(match.value.ext_finals)
+  dialogVisible.value = false
+}
+// 添加
+const addScore = () => {
+  scoreForm.value = { sid: moment().valueOf(), name: '', score: 0, details: [] }
+  if (match.value.ext_finals && match.value.ext_finals.length > 0) scoreForm.value.details = cloneDeep(match.value.ext_finals)
+  dialogVisible.value = true
+}
+// 修改分数
+const upadteScore = (data) => {
+  scoreForm.value = data
+  dialogVisible.value = true
+}
+// 删除
+const delScore = async (e) => {
+  let list = detailsList.value.filter((i) => i.sid != e.sid)
+  detailsList.value = list
+  emits('step7Score', { id: form.value.id, final_score_details: detailsList.value })
+}
 watch(
   match,
   async (item) => {
@@ -430,5 +538,8 @@ watch(
     text-align: center;
     width: 10px !important; /* 设置你想要的宽度 */
   }
+  .add {
+    margin: 0 0 10px 0;
+  }
 }
 </style>