Browse Source

新增需求和优化

刘洋 1 năm trước cách đây
mục cha
commit
ee4f89effd

+ 2 - 2
src/App.vue

@@ -90,8 +90,8 @@ onMounted(() => {
         <component :is="Component" />
         <component :is="Component" />
       </keep-alive>
       </keep-alive>
     </router-view>
     </router-view>
-    <lock-screen v-if="mainStore.lockScreenStatus"></lock-screen>
-    <pause-marker v-if="mainStore.markerPausedLimit > 0"></pause-marker>
+    <lock-screen v-if="mainStore.lockScreenStatus && route.name !== 'Login'"></lock-screen>
+    <pause-marker v-if="mainStore.markerPausedLimit > 0 && route.name !== 'Login'"></pause-marker>
     <loading-flag v-if="mainStore.globalLoading"></loading-flag>
     <loading-flag v-if="mainStore.globalLoading"></loading-flag>
     <row-next-bottom-dialog />
     <row-next-bottom-dialog />
   </el-config-provider>
   </el-config-provider>

+ 1 - 0
src/api/api-types/question.d.ts

@@ -101,6 +101,7 @@ export namespace Question {
     /** 成绩表对应题目类型,可用值:WRITING,TRANSLATION */
     /** 成绩表对应题目类型,可用值:WRITING,TRANSLATION */
     category?: QuestionCategory
     category?: QuestionCategory
     relationMainNumber?: any
     relationMainNumber?: any
+    markSpeedLimit?: any
   }
   }
 
 
   /** 新增大题 */
   /** 新增大题 */

+ 2 - 15
src/api/api-types/role.d.ts

@@ -12,22 +12,9 @@ export namespace Role {
 
 
   type GetRoleList = BaseDefine<{ role?: ROLE }, RawRole[]>
   type GetRoleList = BaseDefine<{ role?: ROLE }, RawRole[]>
   type GetAllRoleList = BaseDefine<{ role?: ROLE }, RawRole[]>
   type GetAllRoleList = BaseDefine<{ role?: ROLE }, RawRole[]>
-  type GetRolePrivilege = BaseDefine<
-    { role: ROLE },
-    {
-      code: string
-      hasPrivilege: boolean
-      id: number
-      name: string
-      nodeCode: string
-      nodeId: number
-      nodeName: string
-      parentId: number
-      parentNodeId: number
-    }[]
-  >
+  type GetRolePrivilege = BaseDefine<{ role: ROLE }, any>
 
 
-  type SetRolePrivilege = BaseDefine<{ role: ROLE; privilegeIds: number[] }>
+  type SetRolePrivilege = BaseDefine<{ role: ROLE; privilegeCodes: string[] }>
 
 
   /** role api end */
   /** role api end */
 
 

+ 1 - 1
src/api/api-types/user.d.ts

@@ -150,7 +150,7 @@ export namespace User {
     privilegeUri: string
     privilegeUri: string
   }
   }
   /** 获取当前用户菜单 */
   /** 获取当前用户菜单 */
-  type GetUserPrivilege = BaseDefine<null, PrivilegeInfo[]>
+  type GetUserPrivilege = BaseDefine<null, any>
 
 
   /** 超管选择考试 */
   /** 超管选择考试 */
   type CheckExam = BaseDefine<{ examId: number }>
   type CheckExam = BaseDefine<{ examId: number }>

+ 1 - 1
src/components/common/ChooseMarkers.vue

@@ -90,7 +90,7 @@ const chooseResult = ref<any>([])
 const confirmResult = ref<any>([])
 const confirmResult = ref<any>([])
 const selectChangeEvent: VxeTableEvents.CheckboxChange<any> = ({ $table }) => {
 const selectChangeEvent: VxeTableEvents.CheckboxChange<any> = ({ $table }) => {
   const records = $table.getCheckboxRecords()
   const records = $table.getCheckboxRecords()
-  console.info(`勾选${records.length}个树形节点`, records)
+  // console.info(`勾选${records.length}个树形节点`, records)
   chooseResult.value = records.filter((item) => !!item.loginName)
   chooseResult.value = records.filter((item) => !!item.loginName)
 }
 }
 
 

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

@@ -11,7 +11,7 @@
       <base-form class="p-t-base" size="small" :model="formModel" :items="formItems" :label-width="'78px'">
       <base-form class="p-t-base" size="small" :model="formModel" :items="formItems" :label-width="'78px'">
         <template #form-item-search>
         <template #form-item-search>
           <el-button :loading="loading" type="primary" @click="onSearch">查询</el-button>
           <el-button :loading="loading" type="primary" @click="onSearch">查询</el-button>
-          <span v-if="mainStore.markerPausedLimit > 0" class="limit-time">{{ limitTime }}</span>
+          <!-- <span v-if="mainStore.markerPausedLimit > 0" class="limit-time">{{ limitTime }}</span> -->
         </template>
         </template>
       </base-form>
       </base-form>
       <iframe
       <iframe

+ 1 - 0
src/constants/app.ts

@@ -6,4 +6,5 @@ export const ROLE_BUTTON_CODES = [
   'analysis-marking_progress_export',
   'analysis-marking_progress_export',
   'analysis-marking_progress_province_export',
   'analysis-marking_progress_province_export',
   'user-manage_name_import',
   'user-manage_name_import',
+  'analysis-monitoring-batch_reject',
 ]
 ]

+ 6 - 1
src/hooks/useOptions.ts

@@ -83,7 +83,12 @@ const useOptions = (
             dataModel[key] = groupListWithAll.value.map((item: any) => item.value)
             dataModel[key] = groupListWithAll.value.map((item: any) => item.value)
           }
           }
         } else {
         } else {
-          if (!v.includes(undefined) && v?.length === groupListWithAll.value.length - 1) {
+          console.log(v, dataModel[key])
+          if (
+            !v.includes(undefined) &&
+            v?.length === groupListWithAll.value.length - 1 &&
+            dataModel[key]?.includes(undefined)
+          ) {
             //说明在全部勾选的情况下,点了“全部”,则要全部取消勾选;
             //说明在全部勾选的情况下,点了“全部”,则要全部取消勾选;
             dataModel[key] = []
             dataModel[key] = []
           } else {
           } else {

+ 26 - 10
src/layout/PauseMarker.vue

@@ -6,28 +6,39 @@
         <el-form-item label="">
         <el-form-item label="">
           <el-input class="tip-input" size="large" clearable value="老师幸苦了,请稍作休息" readonly></el-input>
           <el-input class="tip-input" size="large" clearable value="老师幸苦了,请稍作休息" readonly></el-input>
         </el-form-item>
         </el-form-item>
-        <el-form-item>
+        <!-- <el-form-item>
           <el-button type="primary" size="large" class="m-l-base" @click="confirm">确定</el-button>
           <el-button type="primary" size="large" class="m-l-base" @click="confirm">确定</el-button>
-        </el-form-item>
+        </el-form-item> -->
       </el-form>
       </el-form>
     </div>
     </div>
-    <standard-dialog v-model="standardVisible" :can-resize="'can-resize3'" resize-key="can-resize3"></standard-dialog>
+    <!-- <standard-dialog v-model="standardVisible" :can-resize="'can-resize3'" resize-key="can-resize3"></standard-dialog> -->
+    <el-progress
+      type="circle"
+      :percentage="percentage"
+      class="progress"
+      :width="80"
+      :format="() => mainStore.markerPausedLimit + ''"
+    >
+    </el-progress>
   </div>
   </div>
 </template>
 </template>
 <script lang="ts" setup name="PauseMarker">
 <script lang="ts" setup name="PauseMarker">
-import { ElInput, ElButton, ElForm, ElMessage } from 'element-plus'
-import { onMounted, reactive, ref } from 'vue'
-import StandardDialog from '@/components/shared/StandardDialog.vue'
+import { ElInput, ElButton, ElForm, ElMessage, ElProgress } from 'element-plus'
+import { onMounted, reactive, ref, computed } from 'vue'
+// import StandardDialog from '@/components/shared/StandardDialog.vue'
 import useFetch from '@/hooks/useFetch'
 import useFetch from '@/hooks/useFetch'
 import useMainStore from '@/store/main'
 import useMainStore from '@/store/main'
 const mainStore = useMainStore()
 const mainStore = useMainStore()
-const standardVisible = ref(false)
+// const standardVisible = ref(false)
 onMounted(() => {
 onMounted(() => {
   useFetch('pauseMarkStart').fetch()
   useFetch('pauseMarkStart').fetch()
 })
 })
-const confirm = () => {
-  standardVisible.value = true
-}
+// const confirm = () => {
+//   standardVisible.value = true
+// }
+const percentage = computed<number>(() => {
+  return (mainStore.markerPausedLimit / (2 * 60 * 1000)) * 100
+})
 </script>
 </script>
 <style lang="scss" scoped>
 <style lang="scss" scoped>
 .lock-screen {
 .lock-screen {
@@ -38,6 +49,11 @@ const confirm = () => {
   top: 0;
   top: 0;
   z-index: 3000;
   z-index: 3000;
   background: rgba(0, 0, 0, 0.9);
   background: rgba(0, 0, 0, 0.9);
+  .progress {
+    position: absolute;
+    right: 20px;
+    top: 20px;
+  }
   .tip-input {
   .tip-input {
     width: 200px;
     width: 200px;
 
 

+ 40 - 43
src/modules/admin-role/setting/index.vue

@@ -11,7 +11,7 @@
         <el-tree
         <el-tree
           ref="treeRef"
           ref="treeRef"
           show-checkbox
           show-checkbox
-          node-key="id"
+          node-key="code"
           :data="myTreeData || []"
           :data="myTreeData || []"
           :props="treeProps"
           :props="treeProps"
           :filter-node-method="filterTree"
           :filter-node-method="filterTree"
@@ -74,13 +74,13 @@ const getTreeList = (oldDataList: any[], sortField = false): any[] => {
   const dataList: any[] = cloneDeep(oldDataList)
   const dataList: any[] = cloneDeep(oldDataList)
   // 第一次是将全部的permissionId作为对象的key重组成一个对象
   // 第一次是将全部的permissionId作为对象的key重组成一个对象
   const formatObj: any = dataList.reduce((pre, cur) => {
   const formatObj: any = dataList.reduce((pre, cur) => {
-    return { ...pre, [cur['id']]: cur }
+    return { ...pre, [cur['code']]: cur }
   }, {})
   }, {})
   // 排序
   // 排序
   const sortArray = sortField ? dataList.sort((a: any, b: any) => a['sort'] - b['sort']) : dataList
   const sortArray = sortField ? dataList.sort((a: any, b: any) => a['sort'] - b['sort']) : dataList
   const formatArray = sortArray.reduce((arr: any[], cur: any) => {
   const formatArray = sortArray.reduce((arr: any[], cur: any) => {
-    const pid = cur.parentId ? cur.parentId : 0
-    const parent = formatObj[pid]
+    const pCode = cur.parentCode ? cur.parentCode : '0'
+    const parent = formatObj[pCode]
     if (parent) {
     if (parent) {
       parent.children ? parent.children.push(cur) : (parent.children = [cur])
       parent.children ? parent.children.push(cur) : (parent.children = [cur])
     } else {
     } else {
@@ -99,7 +99,7 @@ watch(
   { immediate: true }
   { immediate: true }
 )
 )
 const filterTree = (value: string, data: any) => {
 const filterTree = (value: string, data: any) => {
-  return !data.originId
+  return !data.originCode
 }
 }
 const myTreeData = ref<any[]>([])
 const myTreeData = ref<any[]>([])
 const treeProps = {
 const treeProps = {
@@ -111,7 +111,7 @@ watch(myTreeData, () => {
   })
   })
 })
 })
 const renderContent = (h: any, { node, data, store }: any) => {
 const renderContent = (h: any, { node, data, store }: any) => {
-  if (data.originId) {
+  if (data.originCode) {
     return h(
     return h(
       'span',
       'span',
       {
       {
@@ -133,15 +133,15 @@ const renderContent = (h: any, { node, data, store }: any) => {
   return data.name
   return data.name
 }
 }
 
 
-const getPIds = (treeData: any, pIds: any = []) => {
+const getPCodes = (treeData: any, pCodes: any = []) => {
   for (let i = 0; i < treeData.length; i++) {
   for (let i = 0; i < treeData.length; i++) {
     let item: any = treeData[i]
     let item: any = treeData[i]
     if (item.children && item.children.length) {
     if (item.children && item.children.length) {
-      pIds.push(item.id)
-      getPIds(item.children, pIds)
+      pCodes.push(item.code)
+      getPCodes(item.children, pCodes)
     }
     }
   }
   }
-  return pIds
+  return pCodes
 }
 }
 const newFlatArr = ref<any[]>([])
 const newFlatArr = ref<any[]>([])
 watch(privilege, () => {
 watch(privilege, () => {
@@ -155,18 +155,15 @@ watch(privilege, () => {
   for (let i = 0; i < data.length; i++) {
   for (let i = 0; i < data.length; i++) {
     let node = data[i]
     let node = data[i]
     if (ROLE_BUTTON_CODES.includes(node.code)) {
     if (ROLE_BUTTON_CODES.includes(node.code)) {
-      let pNode: any = data.find((v: any) => v.id == node.parentId) || {}
+      let pNode: any = data.find((v: any) => v.code == node.parentCode) || {}
       if (!hasPermBtnPageNodes.find((v: any) => v.code == pNode.code + '_in_page')) {
       if (!hasPermBtnPageNodes.find((v: any) => v.code == pNode.code + '_in_page')) {
         let id = createNum(-100000, -10000)
         let id = createNum(-100000, -10000)
         hasPermBtnPageNodes.push(
         hasPermBtnPageNodes.push(
           Object.assign({}, node, {
           Object.assign({}, node, {
             code: pNode.code + '_in_page',
             code: pNode.code + '_in_page',
-            nodeCode: pNode.nodeCode + '_in_page',
             name: '页面',
             name: '页面',
             hasPrivilege: !!pNode.hasPrivilege,
             hasPrivilege: !!pNode.hasPrivilege,
-            id,
-            nodeId: id + '',
-            originId: node.id,
+            originCode: node.code,
             type: 'page',
             type: 'page',
           })
           })
         )
         )
@@ -179,34 +176,34 @@ watch(privilege, () => {
   let treeData = getTreeList(concatData)
   let treeData = getTreeList(concatData)
   myTreeData.value = treeData
   myTreeData.value = treeData
 
 
-  let pIds = getPIds(treeData)
+  let pCodes = getPCodes(treeData)
 
 
   nextTick(() => {
   nextTick(() => {
     treeRef?.value?.setCheckedKeys(
     treeRef?.value?.setCheckedKeys(
-      newFlatArr.value?.filter((d) => d.hasPrivilege && pIds.indexOf(d.id) == -1)?.map((d) => d.id)
+      newFlatArr.value?.filter((d) => d.hasPrivilege && pCodes.indexOf(d.code) == '-1')?.map((d) => d.code)
     )
     )
   })
   })
 })
 })
 
 
-function filterPrivilege(
-  item: MenuItem,
-  privilege: ExtractApiResponse<'getRolePrivilege'>
-): MenuItemWithId | undefined {
-  const privilegeItem = privilege.find((d) => item.index === d.code)
-  if (privilegeItem) {
-    return {
-      ...item,
-      id: privilegeItem.id,
-      children: item.children?.map((child) => filterPrivilege(child, privilege)).filter((d) => !!d) as MenuItemWithId[],
-    }
-  }
-}
+// function filterPrivilege(
+//   item: MenuItem,
+//   privilege: ExtractApiResponse<'getRolePrivilege'>
+// ): MenuItemWithId | undefined {
+//   const privilegeItem = privilege.find((d) => item.index === d.code)
+//   if (privilegeItem) {
+//     return {
+//       ...item,
+//       id: privilegeItem.id,
+//       children: item.children?.map((child) => filterPrivilege(child, privilege)).filter((d) => !!d) as MenuItemWithId[],
+//     }
+//   }
+// }
 
 
-const menuTree = computed(() => {
-  return mainLayoutStore.menuList?.reduce((menus, menu) => {
-    return menus.concat(filterPrivilege(menu, privilege.value || []) || [])
-  }, [] as MenuItem[])
-})
+// const menuTree = computed(() => {
+//   return mainLayoutStore.menuList?.reduce((menus, menu) => {
+//     return menus.concat(filterPrivilege(menu, privilege.value || []) || [])
+//   }, [] as MenuItem[])
+// })
 const onCheckChange = (a: any, b: any) => {
 const onCheckChange = (a: any, b: any) => {
   let resultKeys: any = treeRef?.value?.getCheckedKeys(true)
   let resultKeys: any = treeRef?.value?.getCheckedKeys(true)
   if (a.type == 'page') {
   if (a.type == 'page') {
@@ -214,8 +211,8 @@ const onCheckChange = (a: any, b: any) => {
     if (!b) {
     if (!b) {
       for (let i = 0; i < newFlatArr.value.length; i++) {
       for (let i = 0; i < newFlatArr.value.length; i++) {
         let item = newFlatArr.value[i]
         let item = newFlatArr.value[i]
-        if (item.parentId == a.parentId && item.type === 'button') {
-          underPageBtnKeys.push(item.id)
+        if (item.parentCode == a.parentCode && item.type === 'button') {
+          underPageBtnKeys.push(item.code)
         }
         }
       }
       }
       resultKeys = resultKeys?.filter((k: any) => !underPageBtnKeys.includes(k))
       resultKeys = resultKeys?.filter((k: any) => !underPageBtnKeys.includes(k))
@@ -224,10 +221,10 @@ const onCheckChange = (a: any, b: any) => {
   }
   }
   if (a.type == 'button') {
   if (a.type == 'button') {
     if (!!b) {
     if (!!b) {
-      let page = newFlatArr.value.find((item: any) => item.type === 'page' && item.parentId == a.parentId)
+      let page = newFlatArr.value.find((item: any) => item.type === 'page' && item.parentCode == a.parentCode)
 
 
-      if (!resultKeys?.includes(page.id)) {
-        treeRef?.value?.setCheckedKeys([...resultKeys, page.id])
+      if (!resultKeys?.includes(page.code)) {
+        treeRef?.value?.setCheckedKeys([...resultKeys, page.code])
       }
       }
     }
     }
   }
   }
@@ -243,10 +240,10 @@ const onSubmit = async () => {
     const checkedHalfNodes = treeRef?.value?.getHalfCheckedNodes() || []
     const checkedHalfNodes = treeRef?.value?.getHalfCheckedNodes() || []
     const privilegeIds = checkedNodes
     const privilegeIds = checkedNodes
       .concat(checkedHalfNodes)
       .concat(checkedHalfNodes)
-      .map((d) => d.id)
-      .filter((id) => id > -1)
+      .map((d) => d.code)
+      .filter((code) => code != '-1')
 
 
-    await setPrivilege({ role: roleSelf.value, privilegeIds })
+    await setPrivilege({ role: roleSelf.value, privilegeCodes: privilegeIds })
     ElMessage.success('保存成功')
     ElMessage.success('保存成功')
   } catch (error) {
   } catch (error) {
     console.error(error)
     console.error(error)

+ 22 - 8
src/modules/admin-subject/edit-main-question/index.vue

@@ -80,6 +80,7 @@ import BaseForm from '@/components/element/BaseForm.vue'
 import useFetch from '@/hooks/useFetch'
 import useFetch from '@/hooks/useFetch'
 import useForm from '@/hooks/useForm'
 import useForm from '@/hooks/useForm'
 import useVW from '@/hooks/useVW'
 import useVW from '@/hooks/useVW'
+import { TrueOrFalse } from '@/constants/dicts'
 
 
 import type { ExtractApiParams } from '@/api/api'
 import type { ExtractApiParams } from '@/api/api'
 import type { EpFormItem, EpFormRules, FormGroup } from 'global-type'
 import type { EpFormItem, EpFormRules, FormGroup } from 'global-type'
@@ -149,6 +150,7 @@ const model = reactive<ExtractApiParams<'addMainQuestion'>>({
   systemRate: void 0,
   systemRate: void 0,
   startNumber: 1,
   startNumber: 1,
   relationMainNumber: void 0,
   relationMainNumber: void 0,
+  markSpeedLimit: false,
 })
 })
 
 
 const levelRangeView = computed(() => {
 const levelRangeView = computed(() => {
@@ -202,10 +204,10 @@ const compare = ref('0')
 const groups = computed<FormGroup[]>(() => {
 const groups = computed<FormGroup[]>(() => {
   return [
   return [
     {
     {
-      rowKeys: Array.from({ length: 10 }).map((_, i) => `row-${i + 1}`),
+      rowKeys: Array.from({ length: 11 }).map((_, i) => `row-${i + 1}`),
     },
     },
     {
     {
-      rowKeys: ['row-11', 'row-12', 'row-13'],
+      rowKeys: ['row-12', 'row-13', 'row-14'],
       groupTitle: '高级设置',
       groupTitle: '高级设置',
       hidden: !expand.value,
       hidden: !expand.value,
     },
     },
@@ -333,6 +335,18 @@ const items = computed<any>(() =>
       },
       },
       'row-10'
       'row-10'
     ),
     ),
+    Span8(
+      {
+        label: '是否进行限速提醒',
+        slotType: 'select',
+        prop: 'markSpeedLimit',
+        slot: {
+          placeholder: '是否进行限速提醒',
+          options: TrueOrFalse,
+        },
+      },
+      'row-11'
+    ),
     Span8(
     Span8(
       {
       {
         label: '标准卷分发频度',
         label: '标准卷分发频度',
@@ -340,7 +354,7 @@ const items = computed<any>(() =>
         prop: 'standardRate',
         prop: 'standardRate',
         slot: { placeholder: '标准卷分发频度', stepStrictly: true, step: 1 },
         slot: { placeholder: '标准卷分发频度', stepStrictly: true, step: 1 },
       },
       },
-      'row-11'
+      'row-12'
     ),
     ),
     Span8(
     Span8(
       {
       {
@@ -349,7 +363,7 @@ const items = computed<any>(() =>
         prop: 'selfRate',
         prop: 'selfRate',
         slot: { placeholder: '自查卷分发频度', stepStrictly: true, step: 1 },
         slot: { placeholder: '自查卷分发频度', stepStrictly: true, step: 1 },
       },
       },
-      'row-11'
+      'row-12'
     ),
     ),
     Span8(
     Span8(
       {
       {
@@ -358,21 +372,21 @@ const items = computed<any>(() =>
         prop: 'systemRate',
         prop: 'systemRate',
         slot: { placeholder: '系统抽查卷比例', stepStrictly: true, step: 1 },
         slot: { placeholder: '系统抽查卷比例', stepStrictly: true, step: 1 },
       },
       },
-      'row-12'
+      'row-13'
     ),
     ),
     Span8(
     Span8(
       {
       {
         label: '档次抽查比例',
         label: '档次抽查比例',
         slotName: 'setLevelRange',
         slotName: 'setLevelRange',
       },
       },
-      'row-12'
+      'row-13'
     ),
     ),
     Span8(
     Span8(
       {
       {
         label: '人机抽查比对',
         label: '人机抽查比对',
         slotName: 'compare',
         slotName: 'compare',
       },
       },
-      'row-13'
+      'row-14'
     ),
     ),
     compare.value == '1'
     compare.value == '1'
       ? Span8(
       ? Span8(
@@ -385,7 +399,7 @@ const items = computed<any>(() =>
               options: mainQuestionOptions.value,
               options: mainQuestionOptions.value,
             },
             },
           },
           },
-          'row-13'
+          'row-14'
         )
         )
       : null,
       : null,
     Span8({ slotName: 'expand' }, 'expand'),
     Span8({ slotName: 'expand' }, 'expand'),

+ 1 - 0
src/modules/analysis/group-monitoring/hooks/useFormFilter.ts

@@ -135,6 +135,7 @@ const useFormFilter = () => {
         // onChange: customGroupChange,
         // onChange: customGroupChange,
         onChange: changeModelValue('group'),
         onChange: changeModelValue('group'),
         multiple: true,
         multiple: true,
+        collapseTags: model.markingGroupNumbers?.includes(undefined),
       },
       },
     }),
     }),
     OneRowSpan5({
     OneRowSpan5({

+ 1 - 0
src/modules/analysis/personnel-compare/hooks/useCompareFilter.ts

@@ -110,6 +110,7 @@ const useCompareFilter = () => {
         options: transGroupOptions.value,
         options: transGroupOptions.value,
         onChange: changeModelValue('group'),
         onChange: changeModelValue('group'),
         multiple: true,
         multiple: true,
+        collapseTags: model.markingGroupNumber?.includes(undefined),
       },
       },
     }),
     }),
 
 

+ 2 - 2
src/modules/analysis/personnel-statistics/components/RightKeyMenu.vue

@@ -15,13 +15,13 @@
     >
     >
       发送消息
       发送消息
     </div>
     </div>
-    <div
+    <!-- <div
       v-if="!curRow.paused"
       v-if="!curRow.paused"
       class="rightKeyMenuItem"
       class="rightKeyMenuItem"
       @click="curRow?.markerId && emits('onPauseMark', unref(curRow))"
       @click="curRow?.markerId && emits('onPauseMark', unref(curRow))"
     >
     >
       暂停评卷
       暂停评卷
-    </div>
+    </div> -->
     <div
     <div
       class="rightKeyMenuItem"
       class="rightKeyMenuItem"
       :class="{ disabled: !curRow.markerId }"
       :class="{ disabled: !curRow.markerId }"

+ 1 - 0
src/modules/analysis/personnel-statistics/hooks/useStatisticsFilter.ts

@@ -202,6 +202,7 @@ const useStatisticsFilter = () => {
         options: transGroupOptions.value,
         options: transGroupOptions.value,
         onChange: changeModelValue('group'),
         onChange: changeModelValue('group'),
         multiple: true,
         multiple: true,
+        collapseTags: model.markingGroupNumber?.includes(undefined),
         disabled: isDeputy.value,
         disabled: isDeputy.value,
       },
       },
     }),
     }),

+ 1 - 0
src/modules/analysis/view-marked-detail/index.vue

@@ -13,6 +13,7 @@
         >打回</el-button
         >打回</el-button
       >
       >
       <el-button
       <el-button
+        v-permBtn="'analysis-monitoring-batch_reject'"
         custom-1
         custom-1
         class="m-l-base m-r-auto"
         class="m-l-base m-r-auto"
         size="small"
         size="small"

+ 1 - 0
src/modules/marking/inquiry/index.vue

@@ -326,6 +326,7 @@ const items = computed<EpFormItem[]>(() => [
       options: transGroupOptions.value,
       options: transGroupOptions.value,
       onChange: changeModelValue('group'),
       onChange: changeModelValue('group'),
       multiple: true,
       multiple: true,
+      collapseTags: model.markingGroupNumbers?.includes(undefined),
     },
     },
   }),
   }),
   ThreeRow({
   ThreeRow({

+ 1 - 0
src/modules/monitor/training-monitoring/hooks/useFormFilter.ts

@@ -179,6 +179,7 @@ const useFormFilter = () => {
           options: transGroupOptions.value,
           options: transGroupOptions.value,
           onChange: changeModelValue('group'),
           onChange: changeModelValue('group'),
           multiple: true,
           multiple: true,
+          collapseTags: model.markingGroupNumbers?.includes(undefined),
         },
         },
       }),
       }),
 
 

+ 6 - 1
src/modules/quality/self-check/index.vue

@@ -144,7 +144,12 @@ const items = computed<EpFormItem[]>(() => {
       label: '小组',
       label: '小组',
       slotType: 'select',
       slotType: 'select',
       prop: 'markingGroupNumbers',
       prop: 'markingGroupNumbers',
-      slot: { options: transGroupOptions.value, onChange: changeModelValue('group'), multiple: true },
+      slot: {
+        options: transGroupOptions.value,
+        onChange: changeModelValue('group'),
+        multiple: true,
+        collapseTags: model.markingGroupNumbers?.includes(undefined),
+      },
     }),
     }),
     OneRowSpan6({
     OneRowSpan6({
       label: '时间',
       label: '时间',

+ 2 - 3
src/store/layout.ts

@@ -121,7 +121,7 @@ const useMainLayoutStore = defineStore<
         //     })
         //     })
         //   }
         //   }
         // })
         // })
-        if (!privilege.find((item) => item.code === 'analysis')) {
+        if (!privilege.find((item: any) => item.code === 'analysis')) {
           privilege.push({
           privilege.push({
             code: 'analysis',
             code: 'analysis',
             id: 1000,
             id: 1000,
@@ -129,8 +129,7 @@ const useMainLayoutStore = defineStore<
             nodeCode: 'analysis',
             nodeCode: 'analysis',
             nodeId: '1000',
             nodeId: '1000',
             nodeName: '决策分析',
             nodeName: '决策分析',
-            parentId: -1,
-            parentNodeId: '-1',
+            parentCode: -1,
             privilegeType: 'MENU',
             privilegeType: 'MENU',
             privilegeUri: '/analysis',
             privilegeUri: '/analysis',
           })
           })

+ 2 - 2
src/store/main.ts

@@ -72,13 +72,13 @@ const useMainStore = defineStore<'main', MainStoreState, Record<string, any>, Ma
       if (time > 0 && this.markerPausedLimit == 0 && !this.markerPausedTimer) {
       if (time > 0 && this.markerPausedLimit == 0 && !this.markerPausedTimer) {
         this.markerPausedLimit = time
         this.markerPausedLimit = time
         this.markerPausedTimer = setInterval(() => {
         this.markerPausedTimer = setInterval(() => {
-          this.markerPausedLimit = this.markerPausedLimit - 1000 < 0 ? 0 : this.markerPausedLimit - 1000
+          this.markerPausedLimit = this.markerPausedLimit - 50 < 0 ? 0 : this.markerPausedLimit - 50
           if (this.markerPausedLimit == 0) {
           if (this.markerPausedLimit == 0) {
             this.markerPausedLimit = 0
             this.markerPausedLimit = 0
             clearInterval(this.markerPausedTimer)
             clearInterval(this.markerPausedTimer)
             this.markerPausedTimer = null
             this.markerPausedTimer = null
           }
           }
-        }, 1000)
+        }, 50)
       }
       }
     },
     },
     setRowNextBottomDialogStatus(bool: boolean) {
     setRowNextBottomDialogStatus(bool: boolean) {