chenhao 2 жил өмнө
parent
commit
4f0a5dee6a

+ 1 - 1
src/components/shared/MarkHistoryList.vue

@@ -78,7 +78,7 @@ const tableData = computed(() => {
 
 const columns = computed<EpTableColumn<ExtractArrayValue<ExtractApiResponse<'getMarkScoreHistoryListWithTask'>>>[]>(
   () => [
-    { label: '评卷员' },
+    { label: '评卷员', prop: 'markerName' },
     {
       label: `分数${props.showLevel ? '(档次)' : ''}`,
       prop: 'markScore',

+ 1 - 1
src/components/shared/RightButton.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="pointer right-button" @click="$emit('click')">
+  <div class="pointer right-button">
     <svg-icon name="right"></svg-icon>
   </div>
 </template>

+ 22 - 18
src/components/shared/ScoringPanel.vue

@@ -75,13 +75,33 @@ const ScoringPanelContainer = computed(() => {
   return dialogMode.value ? BaseDialog : LessRenderComponent
 })
 
-const { fetch: getQuestionStruct, reset, result: questionStruct } = useFetch('getQuestionStruct')
+const modalVisible = useVModel(props, 'visible')
+
+watch(modalVisible, () => {
+  if (!modalVisible.value) {
+    activeIndex.value = 0
+  }
+})
+
+const getClass = (val: string, callback?: string) => {
+  return dialogMode.value ? val : callback || ''
+}
+
+const scoreValues = useVModel(props, 'score')
+
+const activeIndex = ref<number>(0)
+
+const { fetch: getQuestionStruct, reset: resetQuestionStruct, result: questionStruct } = useFetch('getQuestionStruct')
 
 watch(
   () => props.mainNumber,
   () => {
+    /** reset scores */
+    scoreValues.value = []
+    /** auto show */
+    modalVisible.value = true
     if (props.mainNumber) {
-      reset()
+      resetQuestionStruct()
       getQuestionStruct({ mainNumber: props.mainNumber })
     }
   },
@@ -96,22 +116,6 @@ const questionList = computed(() => {
   return questionList.map((q) => ({ ...q, mainNumber, mainTitle }))
 })
 
-const modalVisible = useVModel(props, 'visible')
-
-watch(modalVisible, () => {
-  if (!modalVisible.value) {
-    activeIndex.value = 0
-  }
-})
-
-const getClass = (val: string, callback?: string) => {
-  return dialogMode.value ? val : callback || ''
-}
-
-const scoreValues = useVModel(props, 'score')
-
-const activeIndex = ref<number>(0)
-
 const onSubmit = () => {
   emits('submit', questionStruct.value)
 }

+ 21 - 2
src/components/shared/ScoringPanelWithConfirm.vue

@@ -18,7 +18,15 @@
     <div class="text-center m-t-base confirm-text">确认提交?</div>
     <template #footer>
       <div class="flex items-center justify-between">
-        <el-button class="confirm-button" type="primary" @click="onConfirmSubmit">是(Y)</el-button>
+        <el-button
+          ref="confirmButtonRef"
+          class="confirm-button"
+          autofocus="autofocus"
+          type="primary"
+          @click="onConfirmSubmit"
+        >
+          是(Y)
+        </el-button>
         <el-button class="confirm-button" plain @click="onCancelSubmit">否(N)</el-button>
       </div>
     </template>
@@ -26,7 +34,7 @@
 </template>
 
 <script setup lang="ts" name="ScoringPanelWithConfirm">
-import { computed, ref, useAttrs } from 'vue'
+import { computed, ref, useAttrs, watch, nextTick } from 'vue'
 import { add } from '@/utils/common'
 import { ElButton } from 'element-plus'
 import ScoringPanel from '@/components/shared/ScoringPanel.vue'
@@ -62,6 +70,17 @@ const modelScore = useVModel(props, 'score')
 /** 确认给分 */
 const submitModalVisible = ref<boolean>(false)
 
+/** 确认给分按钮 */
+const confirmButtonRef = ref<typeof ElButton>()
+
+watch(submitModalVisible, () => {
+  if (submitModalVisible.value) {
+    nextTick(() => {
+      ;(confirmButtonRef.value?.ref as unknown as HTMLButtonElement).focus()
+    })
+  }
+})
+
 /** 总分 */
 const totalScore = computed(() => {
   return add(...modelScore.value)

+ 4 - 3
src/components/shared/UpdateUserPwd.vue

@@ -9,7 +9,8 @@
 </template>
 
 <script setup lang="ts" name="UpdateUserPwd">
-import { reactive, ref } from 'vue'
+import { reactive } from 'vue'
+import { ElMessage } from 'element-plus'
 import useFetch from '@/hooks/useFetch'
 import useVModel from '@/hooks/useVModel'
 import useVW from '@/hooks/useVW'
@@ -38,7 +39,6 @@ const userModel = reactive<{ name: string; password: string; rePassword?: string
 })
 
 const rules: EpFormRules = {
-  name: [{ required: true, message: '请填写用户姓名' }],
   password: [{ required: true, message: '请填写登录密码' }],
   rePassword: [
     {
@@ -57,7 +57,7 @@ const rules: EpFormRules = {
 }
 
 const items: EpFormItem[] = [
-  { label: '姓名', prop: 'name', slotType: 'input' },
+  { label: '姓名', prop: 'name', slotType: 'input', slot: { disabled: true } },
   { label: '新密码', prop: 'password', slotType: 'input', slot: { type: 'password' } },
   { label: '确认密码', prop: 'rePassword', slotType: 'input', slot: { type: 'password' } },
   { slotName: 'confirm' },
@@ -68,6 +68,7 @@ const onSubmit = async () => {
     const valid = await elFormRef?.value?.validate()
     valid && (await useFetch('updateUserPwd').fetch({ password: userModel.password }))
     visible.value = false
+    ElMessage.success('修改成功')
   } catch (error) {
     console.error(error)
   }

+ 11 - 6
src/modules/admin-role/setting/index.vue

@@ -17,7 +17,7 @@
 <script setup lang="ts" name="RoleSetting">
 /** 角色权限管理 */
 import { computed, nextTick, ref, watch } from 'vue'
-import { ElButton, ElTree } from 'element-plus'
+import { ElButton, ElTree, ElMessage } from 'element-plus'
 import { ROLE_OPTION } from '@/constants/dicts'
 import useFetch from '@/hooks/useFetch'
 import useMainLayoutStore from '@/store/layout'
@@ -82,11 +82,16 @@ const onCheckChange = () => {
 }
 
 /** 保存 */
-const onSubmit = () => {
-  const checkedNodes = treeRef?.value?.getCheckedNodes() || []
-  const checkedHalfNodes = treeRef?.value?.getHalfCheckedNodes() || []
-  const privilegeIds = checkedNodes.concat(checkedHalfNodes).map((d) => d.id)
-  setPrivilege({ role: role.value, privilegeIds })
+const onSubmit = async () => {
+  try {
+    const checkedNodes = treeRef?.value?.getCheckedNodes() || []
+    const checkedHalfNodes = treeRef?.value?.getHalfCheckedNodes() || []
+    const privilegeIds = checkedNodes.concat(checkedHalfNodes).map((d) => d.id)
+    await setPrivilege({ role: role.value, privilegeIds })
+    ElMessage.success('保存成功')
+  } catch (error) {
+    console.error(error)
+  }
 }
 </script>
 

+ 2 - 2
src/modules/analysis/group-monitoring-detail/index.vue

@@ -1,8 +1,8 @@
 <template>
   <div class="flex direction-column full">
     <div class="flex items-center p-extra-small fill-blank header-view">
-      <el-button size="small" plain @click="back">返回</el-button>
-      <message class="m-l-auto m-r-base"></message>
+      <el-button class="m-r-auto" size="small" plain @click="back">返回</el-button>
+      <message></message>
       <user-info></user-info>
     </div>
     <div class="flex fill-blank detail-info">

+ 16 - 2
src/modules/analysis/marking-progress/components/TotalProgress.vue

@@ -280,9 +280,23 @@ type GroupProgress = ExtractArrayValue<ExtractApiResponse<'getMarkProgressByGrou
 const groupColumns: EpTableColumn<GroupProgress>[] = [
   { label: '小组', formatter: (row) => (row.markingGroupNumber ? `第${row.markingGroupNumber}组` : '全体') },
   { label: '完成总量', prop: 'finishCount', align: 'center' },
-  { label: '完成比', prop: 'finishRate', align: 'center' },
+  {
+    label: '完成比',
+    prop: 'finishRate',
+    align: 'center',
+    formatter(row) {
+      return `${row.finishRate}%`
+    },
+  },
   { label: '当日已完成', prop: 'dayFinishCount', align: 'center' },
-  { label: '当日完成比', prop: 'dayFinishRate', align: 'center' },
+  {
+    label: '当日完成比',
+    prop: 'dayFinishRate',
+    align: 'center',
+    formatter(row) {
+      return `${row.dayFinishRate}%`
+    },
+  },
 ]
 
 const { fetch: getMarkProgressByGroup, result: groupProgressResult } = useFetch('getMarkProgressByGroup')

+ 23 - 14
src/modules/marking/repeat/index.vue

@@ -23,7 +23,7 @@
           @submit="onSubmit"
         ></scoring-panel-with-confirm>
       </div>
-      <div class="p-base radius-base fill-blank scroll-auto m-l-base table-view">
+      <div class="flex direction-column p-base radius-base fill-blank scroll-auto m-l-base table-view">
         <base-form size="small" :model="formModel" :items="formItems" :label-width="useVW(62)">
           <template #form-item-search>
             <el-button type="primary" @click="onSearch">查询</el-button>
@@ -33,15 +33,18 @@
           <span>重评卷</span>
           <span>: 共{{ tableData.length }}</span>
         </div>
-        <base-table
-          ref="tableRef"
-          size="small"
-          :data="tableData"
-          :columns="columns"
-          highlight-current-row
-          @current-change="onCurrentChange"
-          @row-dblclick="onDbClick"
-        ></base-table>
+        <div class="flex-1 overflow-hidden">
+          <base-table
+            ref="tableRef"
+            size="small"
+            height="100%"
+            :data="tableData"
+            :columns="columns"
+            highlight-current-row
+            @current-change="onCurrentChange"
+            @row-dblclick="onDbClick"
+          ></base-table>
+        </div>
       </div>
     </div>
   </div>
@@ -92,7 +95,7 @@ const {
 } = useMarkHeader()
 
 /** 给分板 */
-const scoringPanelVisible = ref<boolean>(true)
+const scoringPanelVisible = ref<boolean>(false)
 
 /** 图片预览 */
 const previewModalVisible = ref<boolean>(false)
@@ -213,10 +216,16 @@ const onSearch = async () => {
 const { fetch: markReMarkPaper } = useFetch('markReMarkPaper')
 
 const onSubmit = async () => {
-  if (currentReMarkPaper.value) {
-    await markReMarkPaper({ id: currentReMarkPaper.value.id, scores: modelScore.value })
-    await onSearch()
+  try {
+    if (currentReMarkPaper.value) {
+      await markReMarkPaper({ id: currentReMarkPaper.value.id, scores: modelScore.value })
+      await onSearch()
+    }
+  } catch (error) {
+    console.error(error)
   }
+  modelScore.value = []
+  scoringPanelVisible.value = true
 }
 
 onOptionInit(onSearch)

+ 2 - 0
src/modules/marking/statistics/index.vue

@@ -74,6 +74,8 @@ const tableData = computed<ExtractApiResponse<'getPersonalStatistic'>[]>(() => {
 const onSearch = () => {
   getPersonalStatistic({ startTime: model.time[0], endTime: model.time[1], markerId: mainStore.myUserInfo?.id })
 }
+
+onSearch()
 </script>
 
 <style scoped lang="scss"></style>

+ 2 - 0
src/modules/marking/training-record/index.vue

@@ -19,8 +19,10 @@
         <base-table
           ref="tableRef"
           size="small"
+          height="100%"
           :data="tableData"
           :columns="columns"
+          highlight-current-row
           @current-change="onCurrentChange"
           @row-dblclick="onDbClick"
         ></base-table>

+ 1 - 0
src/modules/monitor/training-monitoring-detail/index.vue

@@ -28,6 +28,7 @@
           size="small"
           :data="tableData"
           :columns="columns"
+          highlight-current-row
           @current-change="onCurrentChange"
           @row-dblclick="onDbClick"
         ></base-table>