浏览代码

Merge branch 'master' of http://git.qmth.com.cn/sop/web

刘洋 1 年之前
父节点
当前提交
7f287c2c74
共有 55 个文件被更改,包括 639 次插入257 次删除
  1. 14 16
      src/api/work-hours.js
  2. 14 0
      src/assets/icons/icon-delay-warning.svg
  3. 12 0
      src/assets/icons/icon-device-outin.svg
  4. 13 0
      src/assets/icons/icon-enlarge.svg
  5. 12 0
      src/assets/icons/icon-filter.svg
  6. 12 0
      src/assets/icons/icon-more.svg
  7. 12 0
      src/assets/icons/icon-office-sop.svg
  8. 12 0
      src/assets/icons/icon-progress.svg
  9. 12 0
      src/assets/icons/icon-project-change.svg
  10. 12 0
      src/assets/icons/icon-refresh.svg
  11. 12 0
      src/assets/icons/icon-sop-warning.svg
  12. 12 0
      src/assets/icons/icon-sort.svg
  13. 12 0
      src/assets/icons/icon-student-sop.svg
  14. 12 0
      src/assets/icons/icon-view.svg
  15. 12 0
      src/assets/icons/icon-violation.svg
  16. 0 36
      src/components/global/search-form/index.vue
  17. 16 0
      src/config/constants.js
  18. 1 2
      src/layout/index.vue
  19. 6 6
      src/router/modules/sop.js
  20. 28 1
      src/style/global.less
  21. 2 1
      src/style/tdesign-reset.less
  22. 12 0
      src/utils/filter.js
  23. 6 0
      src/utils/request.md
  24. 17 0
      src/utils/tool.js
  25. 1 1
      src/views/my-workbenches/workbenches/message-reminder/index.vue
  26. 1 1
      src/views/my-workbenches/workbenches/my-waits/index.vue
  27. 1 1
      src/views/my-workbenches/workbenches/notice/index.vue
  28. 1 1
      src/views/project-quality/project-quality-manage/issues-feedback/index.vue
  29. 1 1
      src/views/project-quality/project-quality-manage/issues-query/index.vue
  30. 23 9
      src/views/resource-guard/device-guard/registration-query/index.vue
  31. 86 0
      src/views/resource-guard/device-guard/registration-query/registration-detail-dialog.vue
  32. 33 38
      src/views/resource-guard/person-guard/person-allocate/index.vue
  33. 62 47
      src/views/resource-guard/person-guard/person-files/index.vue
  34. 1 1
      src/views/service-unit/dispatch/dispatch-manage/index.vue
  35. 1 1
      src/views/service-unit/service-unit-manage/range-manage/add-range-dialog.vue
  36. 1 1
      src/views/service-unit/service-unit-manage/range-manage/index.vue
  37. 1 1
      src/views/service-unit/service-unit-manage/regional-planning/index.vue
  38. 1 1
      src/views/service-unit/service-unit-manage/unit-manage/index.vue
  39. 1 1
      src/views/sop/sop-manage/device-out-in/index.vue
  40. 1 1
      src/views/sop/sop-manage/project-change-report/index.vue
  41. 1 1
      src/views/sop/sop-monitor/delay-warning/index.vue
  42. 1 1
      src/views/sop/sop-monitor/violation-registration/index.vue
  43. 1 1
      src/views/system/config-manage/checkin-manage/index.vue
  44. 1 1
      src/views/system/config-manage/customer-manage/index.vue
  45. 1 1
      src/views/system/config-manage/device-manage/index.vue
  46. 1 1
      src/views/system/config-manage/service-level-manage/index.vue
  47. 1 1
      src/views/system/notice-log/log-manage/index.vue
  48. 1 1
      src/views/system/notice-log/notice-manage/index.vue
  49. 1 1
      src/views/system/notice-log/notice-manage/notice-message-dialog.vue
  50. 1 3
      src/views/system/task/task-manage/index.vue
  51. 1 1
      src/views/work-hours/work-hours-manage/abnormal-check/done-check.vue
  52. 1 1
      src/views/work-hours/work-hours-manage/abnormal-check/wait-check.vue
  53. 1 1
      src/views/work-hours/work-hours-manage/work-attendance-detail/index.vue
  54. 134 72
      src/views/work-hours/work-hours-manage/work-attendance/index.vue
  55. 3 2
      src/views/work-hours/work-hours-manage/work-statistics/index.vue

+ 14 - 16
src/api/work-hours.js

@@ -24,35 +24,33 @@ export const workHoursWaitCheckAuditApi = (data, isBatch) => {
 // work-attendance
 export const workAttendanceListApi = (data) =>
   request({
-    url: '/api/system/work-attendance/list',
+    url: '/api/admin/tb/ding/submit/page',
     params: data,
   });
 export const workAttendanceInfoApi = (data) =>
   request({
-    url: '/api/system/work-attendance/info',
+    url: '/api/admin/tb/ding/submit/sub_total',
     params: data,
   });
-export const workAttendanceSubmitApi = (ids) =>
+export const workAttendanceSubmitApi = (data) =>
   request({
-    url: '/api/system/work-attendance/submit',
-    params: { ids },
-    paramsSerializer,
+    url: '/api/admin/tb/ding/submit/submit_batch',
+    data,
   });
-export const workAttendanceExportApi = (ids) =>
+export const workAttendanceExportApi = (data) =>
   request({
-    url: '/api/system/work-attendance/export',
-    params: { ids },
-    paramsSerializer,
+    url: '/api/admin/tb/ding/submit/export',
+    params: data,
   });
-export const workAttendanceWithdrawApi = (id) =>
+export const workAttendanceWithdrawApi = (data) =>
   request({
-    url: '/api/system/work-attendance/withdraw',
-    params: { id },
+    url: '/api/admin/tb/ding/submit/apply_withdraw',
+    data,
   });
-export const workAttendanceCancelWithdrawApi = (id) =>
+export const workAttendanceCancelWithdrawApi = (data) =>
   request({
-    url: '/api/system/work-attendance/withdraw-cancel',
-    params: { id },
+    url: '/api/admin/tb/ding/submit/cancel_withdraw',
+    data,
   });
 
 // work-attendance-detail

+ 14 - 0
src/assets/icons/icon-delay-warning.svg

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="17.5px" height="17.5px" viewBox="0 0 17.5 17.5" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-延期预警</title>
+    <g id="SOP管理" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="10.1-教务处SOP管理" transform="translate(-97.25, -265.25)">
+            <g id="3.Navigation导航/4.Menu导航菜单/左侧导航选项/一级有图标/默认备份-13" transform="translate(80, 256)">
+                <g id="icon-延期预警" transform="translate(16, 8)">
+                    <rect id="error-circle-(Background)" opacity="0" x="0" y="0" width="20" height="20"></rect>
+                    <path d="M10.625,11.875 L9.375,11.875 L9.375,5.00045776 L10.625,5.00045776 L10.625,11.875 Z M9.24285889,13.125 L9.24285889,14.624939 L10.7427979,14.624939 L10.7427979,13.125 L9.24285889,13.125 Z M10,1.25 C5.1675415,1.25 1.25,5.1675415 1.25,10 C1.25,14.8324585 5.1675415,18.75 10,18.75 C14.8324585,18.75 18.75,14.8324585 18.75,10 C18.75,5.1675415 14.8324585,1.25 10,1.25 Z M10,2.5 C5.85784912,2.5 2.5,5.85784912 2.5,10 C2.5,14.1421509 5.85784912,17.5 10,17.5 C14.1421509,17.5 17.5,14.1421509 17.5,10 C17.5,5.85784912 14.1421509,2.5 10,2.5 Z" id="Union" fill="#262626"></path>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/icon-device-outin.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="15px" height="15px" viewBox="0 0 15 15" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-设备出入库登记</title>
+    <g id="SOP管理" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="10.1-教务处SOP管理" transform="translate(-98.4988, -146.4986)">
+            <g id="icon-设备出入库登记" transform="translate(96, 144)">
+                <rect id="print-(Background)" opacity="0" x="0" y="0" width="20" height="20"></rect>
+                <path d="M4.9987793,4.99862671 L3.7487793,4.99862671 C3.05360131,4.99862671 2.4987793,5.5534488 2.4987793,6.24862671 L2.4987793,12.4986267 C2.4987793,13.1938052 3.05360131,13.7486267 3.7487793,13.7486267 L4.9987793,13.7486267 L4.9987793,17.4986267 L14.9987793,17.4986267 L14.9987793,13.7486267 L16.2487793,13.7486267 C16.9439578,13.7486267 17.4987793,13.1938052 17.4987793,12.4986267 L17.4987793,6.24862671 C17.4987793,5.5534488 16.9439578,4.99862671 16.2487793,4.99862671 L14.9987793,4.99862671 L14.9987793,2.49862671 L4.9987793,2.49862671 L4.9987793,4.99862671 Z M13.7487793,3.74862671 L6.2487793,3.74862671 L6.2487793,4.99862671 L13.7487793,4.99862671 L13.7487793,3.74862671 Z M3.7487793,12.4986267 L4.9987793,12.4986267 L4.9987793,9.99862671 L14.9987793,9.99862671 L14.9987793,12.4986267 L16.2487793,12.4986267 L16.2487793,6.24862671 L3.7487793,6.24862671 L3.7487793,12.4986267 Z M6.2487793,11.2486267 L13.7487793,11.2486267 L13.7487793,16.2486267 L6.2487793,16.2486267 L6.2487793,11.2486267 Z" id="print" fill="#262626"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 13 - 0
src/assets/icons/icon-enlarge.svg

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="11px" height="11px" viewBox="0 0 11 11" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-放大</title>
+    <g id="SOP管理" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="10.1-教务处SOP管理" transform="translate(-766.5, -26.5)">
+            <g id="icon-放大" transform="translate(764, 24)">
+                <rect id="fullsreen-(Background)" opacity="0" x="0" y="0" width="16" height="16"></rect>
+                <path d="M3.5,7 L2.5,7 L2.5,3 C2.5,2.72385763 2.72385763,2.5 3,2.5 L7,2.5 L7,2.5 L7,3.5 L4.20710385,3.5 L7.35355425,6.64646101 L6.64644623,7.35356665 L3.5,4.20710969 L3.5,7 Z M12.5,9 L13.5,9 L13.5,13 C13.5,13.2761424 13.2761424,13.5 13,13.5 L9,13.5 L9,13.5 L9,12.5 L11.7928972,12.5 L8.64644575,9.35353231 L9.35355425,8.64642763 L12.5,11.7928886 L12.5,9 Z" id="fullsreen" fill="#262626"></path>
+                <path d="M3.5,7 L2.5,7 L2.5,3 C2.5,2.72385763 2.72385763,2.5 3,2.5 L7,2.5 L7,2.5 L7,3.5 L4.20710385,3.5 L7.35355425,6.64646101 L6.64644623,7.35356665 L3.5,4.20710969 L3.5,7 Z M12.5,9 L13.5,9 L13.5,13 C13.5,13.2761424 13.2761424,13.5 13,13.5 L9,13.5 L9,13.5 L9,12.5 L11.7928972,12.5 L8.64644575,9.35353231 L9.35355425,8.64642763 L12.5,11.7928886 L12.5,9 Z" id="fullsreen" fill="#262626" transform="translate(8, 8) scale(1, -1) translate(-8, -8)"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/icon-filter.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="12px" height="12px" viewBox="0 0 12 12" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-筛选条件</title>
+    <g id="SOP管理" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="10.1-教务处SOP管理" transform="translate(-858, -74)">
+            <g id="icon-筛选条件" transform="translate(856, 72)">
+                <rect id="filter-(Background)" opacity="0" x="0" y="0" width="16" height="16"></rect>
+                <path d="M3,2 L13,2 C13.5522842,2 14,2.4477151 14,3 L14,4.78597307 L9.75,7.28597307 L9.75,14 L6.25,14 L6.25,7.28597307 L2,4.78597307 L2,3 C2,2.44771528 2.44771528,2 3,2 Z M3,3 L3,4.21402693 L7.25,6.71402693 L7.25,13 L8.75,13 L8.75,6.71402693 L13,4.21402669 L13,3 L3,3 Z" id="filter" fill="#262626"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/icon-more.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="2.5px" height="15px" viewBox="0 0 2.5 15" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-用户中心</title>
+    <g id="SOP管理" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="10.1-教务处SOP管理" transform="translate(-267.75, -778.5)">
+            <g id="icon-用户中心" transform="translate(259, 776)">
+                <rect id="more-(Background)" opacity="0" x="0" y="0" width="20" height="20"></rect>
+                <path d="M11.25,3.75 C11.25,3.05965424 10.6903076,2.5 10,2.5 C9.30969238,2.5 8.75,3.05965424 8.75,3.75 C8.75,4.44034576 9.30969238,5 10,5 C10.6903076,5 11.25,4.44034576 11.25,3.75 Z M11.25,10 C11.25,9.30965424 10.6903076,8.75 10,8.75 C9.30969238,8.75 8.75,9.30965424 8.75,10 C8.75,10.6903458 9.30969238,11.25 10,11.25 C10.6903076,11.25 11.25,10.6903458 11.25,10 Z M10,17.5 C9.30969238,17.5 8.75,16.9403458 8.75,16.25 C8.75,15.5596542 9.30969238,15 10,15 C10.6903076,15 11.25,15.5596542 11.25,16.25 C11.25,16.9403458 10.6903076,17.5 10,17.5 Z" id="more" fill-opacity="0.9" fill="#000000"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/icon-office-sop.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="15px" height="15px" viewBox="0 0 15 15" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-教务处SOP管理</title>
+    <g id="SOP管理" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="10.1-教务处SOP管理" transform="translate(-98.5, -66.5)">
+            <g id="icon-教务处SOP管理" transform="translate(96, 64)">
+                <rect id="矩形" opacity="0" x="0" y="0" width="20" height="20"></rect>
+                <path d="M11.25,2.5 C11.9403559,2.5 12.5,3.05964406 12.5,3.75 L12.5,7.5 L16.25,7.5 C16.9403559,7.5 17.5,8.05964406 17.5,8.75 L17.5,16.25 C17.5,16.9403559 16.9403559,17.5 16.25,17.5 L3.75,17.5 C3.05964406,17.5 2.5,16.9403559 2.5,16.25 L2.5,3.75 C2.5,3.05964406 3.05964406,2.5 3.75,2.5 L11.25,2.5 Z M11.25,3.75 L3.75,3.75 L3.75,16.25 L11.25,16.25 L11.25,3.75 Z M16.25,8.75 L12.5,8.75 L12.5,16.25 L16.25,16.25 L16.25,8.75 Z M9.375,12.5 L9.375,13.75 L5.625,13.75 L5.625,12.5 L9.375,12.5 Z M9.375,9.375 L9.375,10.625 L5.625,10.625 L5.625,9.375 L9.375,9.375 Z M9.375,6.25 L9.375,7.5 L5.625,7.5 L5.625,6.25 L9.375,6.25 Z" id="形状结合" fill="#165DFF" fill-rule="nonzero"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/icon-progress.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="15px" height="15px" viewBox="0 0 15 15" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-项目进度监控</title>
+    <g id="SOP管理" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="10.1-教务处SOP管理" transform="translate(-98.5, -386.5)">
+            <g id="icon-项目进度监控" transform="translate(96, 384)">
+                <rect id="矩形" x="0" y="0" width="20" height="20"></rect>
+                <path d="M17.5,2.5 L17.5,3.75 L15,3.75 L15,6.25 C15,7.74401515 14.3447368,9.08498538 13.3059259,10.0011951 C14.3447368,10.9150146 15,12.2559849 15,13.75 L15,16.25 L17.5,16.25 L17.5,17.5 L2.5,17.5 L2.5,16.25 L5,16.25 L5,13.75 C5,12.2559849 5.65526321,10.9150146 6.69407409,9.99880485 C5.65526321,9.08498538 5,7.74401515 5,6.25 L5,3.75 L2.5,3.75 L2.5,2.5 L17.5,2.5 Z M6.249,3.75 L6.25,6.25 C6.25,7.34179126 6.71748279,8.35457996 7.51968883,9.06026327 L8.58521053,9.99757967 L7.52090421,10.9362759 C6.71752638,11.6448386 6.25,12.6581974 6.25,13.75 L6.25,16.25 L13.75,16.25 L13.75,13.75 C13.75,12.7421927 13.3516715,11.8017012 12.6594334,11.1079345 L12.4803112,10.9397367 L11.4147895,10.0024203 L12.4790958,9.06372411 C13.2824736,8.35516143 13.75,7.34180262 13.75,6.25 L13.75,3.75 L6.249,3.75 Z M11.875,13.75 L11.875,15 L8.125,15 L8.125,13.75 L11.875,13.75 Z" id="形状结合" fill="#262626"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/icon-project-change.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="15px" height="15px" viewBox="0 0 15 15" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-项目计划变更报备</title>
+    <g id="SOP管理" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="10.1-教务处SOP管理" transform="translate(-98.5, -186.5)">
+            <g id="icon-项目计划变更报备" transform="translate(96, 184)">
+                <rect id="view-module-(Background)" opacity="0" x="0" y="0" width="20" height="20"></rect>
+                <path d="M13.75,9.37500119 L13.75,10.6250012 L5,10.6249994 L5,9.3749994 L13.75,9.37500119 Z M5,12.5 L5,13.75 L12.5,13.75 L12.5,12.5 L5,12.5 Z M3.75,2.5 L16.25,2.5 C16.9403565,2.5 17.5,3.0596441 17.5,3.75 L17.5,16.25 C17.5,16.9403565 16.9403553,17.5 16.25,17.5 L3.7499997,17.5 C3.05964381,17.5 2.5,16.9403553 2.5,16.25 L2.5,3.7499997 C2.5,3.05964381 3.0596441,2.5 3.75,2.5 Z M16.25,3.75 L16.25,6.25 L3.74999993,6.25 L3.75,3.75 L16.25,3.75 Z M3.7499997,16.25 L16.25,16.25 L16.25,7.5 L3.74999993,7.5 L3.7499997,16.25 Z" id="view-module" fill="#262626"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/icon-refresh.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="12.5px" height="12.4973631px" viewBox="0 0 12.5 12.4973631" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-刷新</title>
+    <g id="SOP管理" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="10.1-教务处SOP管理" transform="translate(-565.75, -25.75)">
+            <g id="icon-刷新" transform="translate(564, 24)">
+                <rect id="refresh-(Background)" opacity="0" x="0" y="0" width="16" height="16"></rect>
+                <path d="M13.253437,7.99868345 L14.2147732,7.99868345 C14.2147741,4.54763269 11.4323964,1.75 8.00015783,1.75 C5.7638154,1.75 3.80336469,2.93771338 2.70870465,4.72001243 L2.70870453,2.64251906 L1.75,2.64251906 L1.75,5.74893761 C1.74999993,6.02507998 1.97385756,6.24893761 2.24999993,6.24893761 C2.24999996,6.24893761 2.24999998,6.24893761 2.25,6.24893754 L5.33675885,6.24893713 L5.33675885,6.24893713 L5.33675885,5.28497791 L3.49045432,5.28497815 C4.40906155,3.74210536 6.08691859,2.71133503 8.00015783,2.7113356 C10.8965168,2.7113364 13.253438,5.07360196 13.253437,7.99868345 Z M2.74687386,7.998631 C2.74687305,10.9237127 5.1037941,13.286026 8.0001545,13.286027 C9.91339242,13.286027 11.591249,12.2552587 12.5098562,10.7123852 L10.6632414,10.7123852 L10.6632414,9.74842548 L13.75,9.74842548 C14.0261424,9.74842548 14.25,9.97228311 14.25,10.2484255 L14.25,13.3548441 L14.25,13.3548441 L13.291296,13.3548441 L13.291296,11.2778559 C12.1965759,13.0598733 10.2362852,14.2473631 8.00015402,14.2473631 C4.56791544,14.2473631 1.78553631,11.449683 1.78553822,7.998631 L2.74687386,7.998631 Z" id="refresh" fill="#262626"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/icon-sop-warning.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="15px" height="15px" viewBox="0 0 15 15" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-SOP预警监控</title>
+    <g id="SOP管理" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="10.1-教务处SOP管理" transform="translate(-98.5, -346.5)">
+            <g id="icon-SOP预警监控" transform="translate(96, 344)">
+                <rect id="矩形" x="0" y="0" width="20" height="20"></rect>
+                <path d="M10,2.5 C13.1066017,2.5 15.625,5.01839828 15.625,8.125 L15.625,16.25 L17.5,16.25 L17.5,17.5 L2.5,17.5 L2.5,16.25 L4.375,16.25 L4.375,8.125 C4.375,5.01839828 6.89339828,2.5 10,2.5 Z M10,3.75 C7.58375422,3.75 5.625,5.70875422 5.625,8.125 L5.625,16.25 L14.375,16.25 L14.375,8.125 C14.375,5.78929575 12.544653,3.88109194 10.240044,3.75647358 L10,3.75 Z M9.71273372,6.7465917 L10.8282444,7.31062713 L10.5462267,7.86838246 L9.75637051,9.42761475 L12.2818594,9.42779541 L11.8140925,10.3383801 L10.5381526,12.8222058 L10.2525679,13.3781432 L9.14069313,12.8069737 L9.42627787,12.2510364 L10.2326205,10.6776147 L7.725,10.6777954 L8.18361518,9.7707777 L9.43071601,7.30434703 L9.71273372,6.7465917 Z" id="形状结合" fill="#262626"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/icon-sort.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="12.853549px" height="11.4586382px" viewBox="0 0 12.853549 11.4586382" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-排序</title>
+    <g id="SOP管理" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="10.1-教务处SOP管理" transform="translate(-666, -26.0414)">
+            <g id="icon-排序" transform="translate(664, 24)">
+                <rect id="order-ascending-(Background)" opacity="0" x="0" y="0" width="16" height="16"></rect>
+                <path d="M12,3.70712328 L14.1464424,5.8535707 L14.853549,5.14646435 L11.9047661,2.19767812 C11.5708866,1.86379775 11,2.10026139 11,2.57244462 L10.9999895,13.50002 L11.9999895,13.50002 L12,3.70712328 Z M2,13.50002 L2,12.50002 L9.5,12.5000191 L9.5,13.50002 L2,13.50002 Z M9.5,8.50001812 L9.5,7.50001812 L2,7.5000186 L2,8.5000186 L9.5,8.50001812 Z M2,3.50001895 L2,2.50001892 L9.5,2.50001821 L9.5,3.50001824 L2,3.50001895 Z" id="order-ascending" fill="#262626"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/icon-student-sop.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="17.5px" height="16.2245178px" viewBox="0 0 17.5 16.2245178" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-研究生SOP管理</title>
+    <g id="SOP管理" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="10.1-教务处SOP管理" transform="translate(-97.25, -105.9)">
+            <g id="icon-研究生SOP管理" transform="translate(96, 104)">
+                <rect id="矩形" opacity="0" x="0" y="0" width="20" height="20"></rect>
+                <path d="M10,1.9 L18.7499237,6.87451782 L18.75,11.8745178 L17.5,11.8745178 L17.5,7.61 L16.25,8.347 L16.25,14.9995178 C16.25,16.7254077 13.4517797,18.1245178 10,18.1245178 C6.54822031,18.1245178 3.75,16.7254077 3.75,14.9995178 L3.75,8.347 L1.25,6.87451782 L10,1.9 Z M15,9.0873822 L10.6395397,11.6843332 L10,12.0651607 L9.36046033,11.6843332 L5,9.0873822 L5,14.9995178 C5,15.7709463 6.99917118,16.7980829 9.69738751,16.8704658 L10,16.8745178 C12.8499997,16.8745178 15,15.7995177 15,14.9995178 L15,9.0873822 Z M9.99996185,3.33593295 L3.751,6.889 L5.085,7.683 L9.99996185,10.5784742 L15.025,7.618 L16.248,6.889 L9.99996185,3.33593295 Z" id="形状结合" fill="#262626"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/icon-view.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="14px" height="9px" viewBox="0 0 14 9" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-显示字段</title>
+    <g id="SOP管理" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="10.1-教务处SOP管理" transform="translate(-437, -27.4999)">
+            <g id="icon-显示字段" transform="translate(436, 24)">
+                <rect id="browse-(Background)" opacity="0" x="0" y="0" width="16" height="16"></rect>
+                <path d="M7.99975586,10.8797607 C6.40917969,10.8797607 5.11987305,9.59039307 5.11987305,7.99987793 C5.11987305,6.40942383 6.40917969,5.12005615 7.99975586,5.12005615 C9.59033203,5.12005615 10.8796387,6.40942383 10.8796387,7.99987793 C10.8796387,9.59039307 9.59033203,10.8797607 7.99975586,10.8797607 Z M7.99975586,9.87976074 C6.96142578,9.87976074 6.11987305,9.03808594 6.11987305,7.99987793 C6.11987305,6.96166992 6.96142578,6.12005615 7.99975586,6.12005615 C9.0378418,6.12005615 9.87963867,6.96166992 9.87963867,7.99987793 C9.87963867,9.03808594 9.0378418,9.87976074 7.99975586,9.87976074 Z M8.00488281,12.4998779 C10.8984375,12.4998779 13.5385742,10.869873 14.8830566,8.2298584 L15,7.99987793 L14.8830566,7.76989746 C13.5385742,5.13989258 10.8984375,3.49987793 8.00488281,3.49987793 C5.1015625,3.49987793 2.46142578,5.13989258 1.11694336,7.76989746 L1,7.99987793 L1.11694336,8.2298584 C2.46142578,10.869873 5.1015625,12.4998779 8.00488281,12.4998779 Z M2.1105957,7.99987793 C3.31860352,5.82989502 5.54980469,4.49987793 8.00488281,4.49987793 C10.4501953,4.49987793 12.6813965,5.82989502 13.8991699,7.99987793 C12.690918,10.1698608 10.4501953,11.4998779 8.00488281,11.4998779 C5.54980469,11.4998779 3.31860352,10.1698608 2.1105957,7.99987793 Z" id="browse" fill="#262626"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 12 - 0
src/assets/icons/icon-violation.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16.2499988px" height="16.25px" viewBox="0 0 16.2499988 16.25" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon-违规登记</title>
+    <g id="SOP管理" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="10.1-教务处SOP管理" transform="translate(-98.5, -305.25)">
+            <g id="edit-1" transform="translate(96, 304)">
+                <rect id="edit-1-(Background)" opacity="0" x="0" y="0" width="20" height="20"></rect>
+                <path d="M13.6109579,2.13388354 L14.4948423,1.25 L18.5490656,5.3042233 L17.6651812,6.18810654 L13.6109579,2.13388354 Z M2.94875231,17.291739 C2.68635722,17.3442173 2.45501126,17.1128738 2.50749083,16.8504775 L3.41073111,12.3342752 L12.5327337,3.21227267 L16.586957,7.26649642 L7.46495426,16.3884985 L2.94875231,17.291739 Z M12.5327337,4.9800393 L4.56223279,12.9505408 L3.99061859,15.8086109 L6.84868902,15.2369964 L14.8191905,7.26649642 L12.5327337,4.9800393 Z M13.75,13.75 L13.75,15 L18.7499988,15 L18.7499988,13.75 L13.75,13.75 Z M10.625,16.25 L10.625,17.5 L18.7499988,17.5 L18.7499988,16.25 L10.625,16.25 Z" fill-opacity="0.81" fill="#000000"></path>
+            </g>
+        </g>
+    </g>
+</svg>

+ 0 - 36
src/components/global/search-form/index.vue

@@ -245,39 +245,3 @@ const colToWidth = (colSpan) => {
   return Math.floor((canUseWidth * colSpan) / 24) + 'px';
 };
 </script>
-<style lang="less" scoped>
-.table-search {
-  padding: 16px 16px 1px;
-  background-color: #fff;
-  border-bottom: 1px solid #e5e5e5;
-
-  :deep(.t-date-range-picker) {
-    width: 100%;
-  }
-  :deep(.t-form__item.buttons-wrap) {
-    .t-form__controls-content {
-      .t-button {
-        margin-left: 10px;
-      }
-    }
-  }
-  .other-rows {
-    height: 0;
-    overflow: hidden;
-    transition: all 0.2s;
-    flex-wrap: wrap;
-    display: flex;
-  }
-  // :deep(
-  //     .other-rows
-  //       .t-form__item.buttons-wrap
-  //       .t-form__controls-content
-  //       .t-button:first-child
-  //   ) {
-  //   margin-left: 0;
-  // }
-  &.in-padding {
-    margin: -10px;
-  }
-}
-</style>

+ 16 - 0
src/config/constants.js

@@ -108,6 +108,22 @@ export const ATTENDANCE_RESULT = {
   NORMAL: '正常',
   EXCEPTION: '异常',
 };
+// 考勤提交
+export const ATTENDANCE_SUBMIT_STATUS = {
+  WILL_SUBMIT: '待提交',
+  ALREADY_SUBMIT: '已提交',
+  APPLY_WITHDRAW: '已提交',
+  AGREE_WITHDRAW: '待提交',
+  AGREE_DING: '审核通过',
+};
+// 工时统计
+export const ATTENDANCE_STATISTICS_SUBMIT_STATUS = {
+  WILL_SUBMIT: '--',
+  ALREADY_SUBMIT: '已提交',
+  APPLY_WITHDRAW: '申请撤回',
+  AGREE_WITHDRAW: '已撤回',
+  AGREE_DING: '审核通过',
+};
 // 资源保障
 // 人员档案管理
 export const AUTHENTICATION_STATUS = {

+ 1 - 2
src/layout/index.vue

@@ -37,7 +37,7 @@
                 userStore.user?.mobileNumber
               }}</span>
             </div>
-            <ChevronDownIcon size="16px" />
+            <svg-icon name="more"></svg-icon>
           </div>
         </t-dropdown>
       </div>
@@ -58,7 +58,6 @@ import { useUserStore, useWorkStore } from '@/store';
 import { useRouter, useRoute } from 'vue-router';
 import LeftMenu from './left-menu.vue';
 import { moduleMap } from '@/router/asyncRoutes';
-import { ChevronDownIcon } from 'tdesign-icons-vue-next';
 
 const router = useRouter();
 const route = useRoute();

+ 6 - 6
src/router/modules/sop.js

@@ -29,7 +29,7 @@ export default {
             title: '教务处SOP管理',
             sort: 1,
             alias: 'office',
-            icon: 'service-crm',
+            icon: 'office-sop',
           },
         },
         {
@@ -70,7 +70,7 @@ export default {
             title: '研究生SOP管理', //后端菜单暂时没有提供,等待需求落定
             sort: 2,
             alias: 'cloudMark',
-            icon: 'service-crm',
+            icon: 'student-sop',
           },
         },
         {
@@ -82,7 +82,7 @@ export default {
             title: '设备出入库登记',
             sort: 3,
             alias: 'deviceInOutSop',
-            icon: 'service-crm',
+            icon: 'device-outin',
           },
         },
         {
@@ -94,7 +94,7 @@ export default {
             title: '项目计划变更报备',
             sort: 4,
             alias: 'projectExchange',
-            icon: 'service-crm',
+            icon: 'project-change',
           },
         },
       ],
@@ -118,7 +118,7 @@ export default {
             title: '延期预警',
             sort: 2,
             alias: 'delayWarn',
-            icon: 'service-crm',
+            icon: 'delay-warning',
           },
         },
         {
@@ -130,7 +130,7 @@ export default {
             title: '违规登记',
             sort: 3,
             alias: 'violation',
-            icon: 'service-crm',
+            icon: 'violation',
           },
         },
       ],

+ 28 - 1
src/style/global.less

@@ -38,10 +38,26 @@ body {
   border-bottom: 1px solid @light-border-color;
 }
 .table-search {
+  padding: 16px 16px 1px;
+  background-color: #fff;
+  border-bottom: 1px solid #e5e5e5;
+
+  .other-rows {
+    height: 0;
+    overflow: hidden;
+    transition: all 0.2s;
+    flex-wrap: wrap;
+    display: flex;
+  }
+
+  &.in-padding {
+    margin: -10px;
+  }
+
   .t-form__item {
     margin-bottom: 16px;
     .t-form__label {
-      padding-right: var(--td-comp-paddingLR-m);
+      padding-right: 8px;
     }
     .t-form__controls-content {
       & > .t-date-picker,
@@ -50,11 +66,22 @@ body {
       }
     }
   }
+  .t-date-range-picker {
+    width: 100%;
+  }
+  .t-form__item.buttons-wrap {
+    .t-form__controls-content {
+      .t-button {
+        margin-left: 10px;
+      }
+    }
+  }
 }
 .page-wrap {
   margin: 16px;
   &-tips {
     color: #4e5969;
+    margin-bottom: 12px;
     .t-icon {
       margin-top: -3px;
     }

+ 2 - 1
src/style/tdesign-reset.less

@@ -13,7 +13,8 @@
   padding-top: 25px;
   overflow: initial;
 }
-.t-dialog__body .t-form__label {
+.t-dialog__body .t-form__label,
+.t-drawer__body .t-form__label {
   color: #595959;
   padding-right: 8px;
 }

+ 12 - 0
src/utils/filter.js

@@ -1,4 +1,5 @@
 import {
+  ROLE_TYPE,
   CUSTOMER_TYPE,
   SUPPLIER_TYPE,
   RUNNING_STATUS,
@@ -22,6 +23,8 @@ import {
   MESSAGE_TYPE,
   WAIT_HANDLE_TYPE,
   DEVICE_USAGE_TYPE,
+  ATTENDANCE_SUBMIT_STATUS,
+  ATTENDANCE_STATISTICS_SUBMIT_STATUS,
 } from '@/config/constants';
 import { dateFormat } from './tool';
 
@@ -34,6 +37,9 @@ export function enableFilter(val) {
 export function auditingResultFilter(val) {
   return AUDITING_RESULT[val] || DEFAULT_FIELD;
 }
+export function roleTypeFilter(val) {
+  return ROLE_TYPE[val] || DEFAULT_FIELD;
+}
 export function genderTypeFilter(val) {
   return GENDER_TYPE[val] || DEFAULT_FIELD;
 }
@@ -119,3 +125,9 @@ export function deviceUsageTypeFilter(val) {
 export function flowStatusFilter(val) {
   return FLOW_STATUS[val] || DEFAULT_FIELD;
 }
+export function attendanceSubmitStatusFilter(val) {
+  return ATTENDANCE_SUBMIT_STATUS[val] || DEFAULT_FIELD;
+}
+export function attendanceStatisticsSubmitStatusFilter(val) {
+  return ATTENDANCE_STATISTICS_SUBMIT_STATUS[val] || DEFAULT_FIELD;
+}

+ 6 - 0
src/utils/request.md

@@ -0,0 +1,6 @@
+### 错误类型
+
+| status | code   | message  | error               |
+| ------ | ------ | -------- | ------------------- |
+| 401    | 401001 | 没有权限 | authorization error |
+| 401    | 401001 | 请先登录 | authorization error |

+ 17 - 0
src/utils/tool.js

@@ -387,3 +387,20 @@ export const hasPerm = (key) => {
   const userStore = useUserStore();
   return userStore.finePermissionIds.includes(key);
 };
+
+/**
+ * 获取随机code,默认获取16位
+ * @param {Number} len 推荐8的倍数
+ *
+ */
+export function randomCode(len = 16) {
+  if (len <= 0) return;
+  let steps = Math.ceil(len / 8);
+  let stepNums = [];
+  for (let i = 0; i < steps; i++) {
+    let ranNum = Math.random().toString(32).slice(-8);
+    stepNums.push(ranNum);
+  }
+
+  return stepNums.join('');
+}

+ 1 - 1
src/views/my-workbenches/workbenches/message-reminder/index.vue

@@ -119,7 +119,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
         },

+ 1 - 1
src/views/my-workbenches/workbenches/my-waits/index.vue

@@ -106,7 +106,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
         },

+ 1 - 1
src/views/my-workbenches/workbenches/notice/index.vue

@@ -143,7 +143,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
         },

+ 1 - 1
src/views/project-quality/project-quality-manage/issues-feedback/index.vue

@@ -130,7 +130,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
         },

+ 1 - 1
src/views/project-quality/project-quality-manage/issues-query/index.vue

@@ -102,7 +102,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
         },

+ 23 - 9
src/views/resource-guard/device-guard/registration-query/index.vue

@@ -4,12 +4,6 @@
       <template #service="{ item, params }">
         <select-service-unit v-model="params[item.prop]"></select-service-unit>
       </template>
-      <template #supplier="{ item, params }">
-        <select-supplier
-          v-model="params[item.prop]"
-          type="DEVICE"
-        ></select-supplier>
-      </template>
       <template #user="{ item, params }">
         <select-filter-user
           v-model="params[item.prop]"
@@ -46,8 +40,19 @@
         <template #inout-time="{ col, row }">
           {{ timestampFilter(row[col.colKey]) }}
         </template>
+        <template #detail="{ col, row }">
+          <t-link theme="primary" hover="color" @click="handleDetail(row)">
+            {{ row[col.colKey] }}
+          </t-link>
+        </template>
       </t-table>
     </div>
+
+    <!-- RegistrationDetailDialog -->
+    <registration-detail-dialog
+      v-model:visible="showRegistrationDetailDialog"
+      :cur-row="curRow"
+    ></registration-detail-dialog>
   </div>
 </template>
 
@@ -65,6 +70,10 @@ import {
   runningStatusFilter,
   timestampFilter,
 } from '@/utils/filter';
+import RegistrationDetailDialog from './registration-detail-dialog.vue';
+
+const showRegistrationDetailDialog = ref(false);
+const curRow = ref(null);
 
 const fields = ref([
   {
@@ -95,6 +104,7 @@ const fields = ref([
   },
   {
     prop: 'deviceStatus',
+    type: 'select',
     label: '运行状态',
     labelWidth: 100,
     colSpan: 5,
@@ -109,7 +119,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
         },
@@ -179,7 +189,6 @@ const params = reactive({
   deviceStatus: '',
   deviceNo: '',
   inOutTime: [],
-  supplierId: '',
   customName: '',
   location: '',
   address: '',
@@ -194,7 +203,7 @@ const computedParams = computed(() => {
 });
 
 const columns = [
-  { colKey: 'serialNo', title: '登记流水号', width: 200 },
+  { colKey: 'serialNo', title: '登记流水号', width: 200, cell: 'detail' },
   { colKey: 'serviceUnitName', title: '服务单元名称', width: 160 },
   { colKey: 'usageType', title: '用途类型', width: 100, cell: 'usage' },
   { colKey: 'deviceNo', title: '设备编号', width: 120 },
@@ -217,4 +226,9 @@ const { pagination, tableData, search, onChange } = useFetchTable(
     params: computedParams,
   }
 );
+
+const handleDetail = (row) => {
+  curRow.value = row;
+  showRegistrationDetailDialog.value = true;
+};
 </script>

+ 86 - 0
src/views/resource-guard/device-guard/registration-query/registration-detail-dialog.vue

@@ -0,0 +1,86 @@
+<template>
+  <my-drawer
+    :visible="visible"
+    size="80%"
+    header="登记详情"
+    attach="body"
+    :close-btn="true"
+    @close="emit('update:visible', false)"
+  >
+    <t-form ref="formRef" labelWidth="130px" colon>
+      <t-row :gutter="[0, 0]">
+        <t-col :span="6">
+          <t-form-item label="登记流水号">
+            <span>{{ curRow.serialNo }}</span>
+          </t-form-item>
+        </t-col>
+        <t-col :span="6">
+          <t-form-item label="设备出入库选择">
+            <span>{{ inoutTypeFilter(curRow.inOutType) }}</span>
+          </t-form-item>
+        </t-col>
+        <t-col :span="6">
+          <t-form-item label="用途类型">
+            <span>{{ deviceUsageTypeFilter(curRow.usageType) }}</span>
+          </t-form-item>
+        </t-col>
+        <t-col :span="6">
+          <t-form-item label="设备出入库时间">
+            <span>{{ timestampFilter(curRow.inOutTime) }}</span>
+          </t-form-item>
+        </t-col>
+        <t-col :span="12">
+          <t-form-item label="设备出入库登记"> </t-form-item>
+        </t-col>
+        <t-col :span="12">
+          <t-table
+            size="small"
+            row-key="id"
+            :columns="columns"
+            :data="[curRow]"
+            bordered
+          >
+            <template #status="{ col, row }">
+              {{ runningStatusFilter(row[col.colKey]) }}
+            </template>
+            <template #photo="{ col, row }">
+              <t-image-viewer :images="[row[col.colKey]]"> </t-image-viewer>
+            </template>
+          </t-table>
+        </t-col>
+      </t-row>
+    </t-form>
+    <template #foot>
+      <t-button theme="primary" @click="emit('update:visible', false)"
+        >返回</t-button
+      >
+    </template>
+  </my-drawer>
+</template>
+
+<script setup name="RegistrationDetailDialog">
+import {
+  deviceUsageTypeFilter,
+  inoutTypeFilter,
+  runningStatusFilter,
+  timestampFilter,
+} from '@/utils/filter';
+// import { BrowseIcon } from 'tdesign-icons-vue-next';
+
+const emit = defineEmits(['update:visible']);
+const props = defineProps({
+  visible: Boolean,
+  curRow: Object,
+});
+
+const columns = [
+  { colKey: 'deviceNo', title: '设备编号', width: 120 },
+  { colKey: 'deviceModel', title: '型号', width: 120 },
+  { colKey: 'supplierName', title: '供应商', width: 200 },
+  { colKey: 'deviceStatus', title: '运行状态', width: 80, cell: 'status' },
+  { colKey: 'scanCount', title: '总扫描量', width: 80 },
+  { colKey: 'location', title: '当前所在地' },
+  { colKey: 'address', title: '发往地' },
+  { colKey: 'basePhotoPath', title: '快递单拍照', width: 100, cell: 'photo' },
+];
+</script>

+ 33 - 38
src/views/resource-guard/person-guard/person-allocate/index.vue

@@ -1,5 +1,13 @@
 <template>
   <div class="person-allocate flex flex-col h-full">
+    <div class="page-action">
+      <t-button
+        theme="primary"
+        :disabled="!selectedRowKeys.length"
+        @click="handleBatchDeploy"
+        >批量调配</t-button
+      >
+    </div>
     <SearchForm :fields="fields" :params="params">
       <template #service="{ item, params }">
         <select-service-unit
@@ -17,34 +25,21 @@
       </template>
     </SearchForm>
     <div class="flex-1 page-wrap">
-      <div class="flex justify-between items-center">
-        <t-space>
-          <span
-            >已发布派单:{{ statisticsInfo.publishedCrmCount }} /
-            {{ statisticsInfo.totalCrmCount }}</span
-          >
-          <span
-            >实施工程师配额:{{ statisticsInfo.effectDistributed }} /
-            {{ statisticsInfo.effectQuota }}</span
-          >
-          <span
-            >助理工程师配额:{{ statisticsInfo.assistantDistributed }}/
-            {{ statisticsInfo.assistantQuota }}</span
-          >
-          <span
-            >区域协调人配额:{{ statisticsInfo.coordinatorDistributed }} /
-            {{ statisticsInfo.coordinatorQuota }}</span
-          >
-        </t-space>
-        <div class="btn-group">
-          <t-button
-            theme="success"
-            :disabled="!selectedRowKeys.length"
-            @click="handleBatchDeploy"
-            >批量调配</t-button
-          >
-        </div>
-      </div>
+      <p class="page-wrap-tips">
+        <ErrorCircleFilledIcon /> 已发布派单:{{
+          statisticsInfo.publishedCrmCount
+        }}
+        / {{ statisticsInfo.totalCrmCount }},实施工程师配额:{{
+          statisticsInfo.effectDistributed
+        }}
+        / {{ statisticsInfo.effectQuota }},助理工程师配额:{{
+          statisticsInfo.assistantDistributed
+        }}/ {{ statisticsInfo.assistantQuota }},区域协调人配额:{{
+          statisticsInfo.coordinatorDistributed
+        }}
+        / {{ statisticsInfo.coordinatorQuota }}
+      </p>
+
       <t-table
         size="small"
         row-key="crmId"
@@ -107,6 +102,8 @@
 <script setup name="PersonAllocate">
 import { reactive, ref } from 'vue';
 import { DialogPlugin, MessagePlugin } from 'tdesign-vue-next';
+import { ErrorCircleFilledIcon } from 'tdesign-icons-vue-next';
+
 import useFetchTable from '@/hooks/useFetchTable';
 import {
   personAllocateListApi,
@@ -177,7 +174,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
           getStatisticsInfo();
@@ -202,25 +199,23 @@ const columns = [
     width: 50,
     fixed: 'left',
   },
-  { colKey: 'serviceUnitName', title: '服务单元' },
-  { colKey: 'crmNo', title: '项目单号' },
-  { colKey: 'customName', title: '客户名称' },
-  { colKey: 'customType', title: '客户类型', cell: 'custom-type', width: 100 },
+  { colKey: 'serviceUnitName', title: '服务单元', width: 160 },
+  { colKey: 'crmNo', title: '项目单号', width: 200 },
+  { colKey: 'customName', title: '客户名称', width: 120 },
+  { colKey: 'customType', title: '客户类型', cell: 'custom-type', width: 120 },
   { colKey: 'province', title: '省份' },
   { colKey: 'city', title: '城市' },
   { colKey: 'area', title: '区县' },
-  { colKey: 'level', title: '服务挡位' },
+  { colKey: 'level', title: '服务挡位', width: 100 },
   { colKey: 'roles', title: '项目角色配置', cell: 'roles', width: 200 },
-  { colKey: 'quota', title: '配额(人)', width: 100 },
+  { colKey: 'quota', title: '配额(人)', width: 120 },
   { colKey: 'distributed', title: '已分配(人)', width: 120 },
   { colKey: 'unDistributed', title: '分配差额(人)', width: 140 },
   {
     title: '管理',
     colKey: 'operate',
     fixed: 'right',
-    width: 120,
-    align: 'center',
-    cell: 'operate',
+    width: 160,
   },
 ];
 const { pagination, tableData, fetchData, search, onChange } = useFetchTable(

+ 62 - 47
src/views/resource-guard/person-guard/person-files/index.vue

@@ -1,5 +1,32 @@
 <template>
-  <div class="person-files flex flex-col h-full">
+  <div class="flex flex-col h-full">
+    <div class="page-action">
+      <t-space size="small">
+        <t-button theme="primary" @click="handleAdd">
+          <template #icon><svg-icon name="add-circle" color="#fff" /></template>
+          新增
+        </t-button>
+        <upload-button
+          upload-url="/api/admin/user/archives/import"
+          :button-props="{
+            content: '批量导入',
+            variant: 'outline',
+            theme: 'default',
+          }"
+          param-file-name="MultipartFile"
+        ></upload-button>
+        <t-button variant="outline" @click="multExport">批量导出</t-button>
+        <t-button
+          variant="outline"
+          :disabled="!selectedRowKeys.length"
+          @click="handleDestroy"
+        >
+          <template #icon><svg-icon name="delete" color="#262626" /></template
+          >作废
+        </t-button>
+      </t-space>
+    </div>
+
     <SearchForm :fields="fields" :params="params">
       <template #city="{ item, params }">
         <select-area v-model="params[item.prop]" :level="2"></select-area>
@@ -9,42 +36,18 @@
       </template>
     </SearchForm>
     <div class="flex-1 page-wrap">
-      <div class="flex justify-between items-center">
-        <t-space>
-          <span>在册:{{ statisticsInfo.totalCount }}人</span>
-          <span>无效:{{ statisticsInfo.validCount }}人</span>
-          <span>有效:{{ statisticsInfo.invalidCount }}人</span>
-          <span
-            >实施工程师有效:{{ statisticsInfo.effectEngineerCount }}人</span
-          >
-          <span
-            >区域负责人有效:{{ statisticsInfo.regionCoordinatorCount }}人</span
-          >
-          <span
-            >助理实施工程师有效:{{
-              statisticsInfo.assistantEngineerCount
-            }}人</span
-          >
-        </t-space>
-        <t-space size="small">
-          <t-button theme="success" @click="handleAdd">新增</t-button>
-          <upload-button
-            upload-url="/api/admin/user/archives/import"
-            :button-props="{
-              content: '批量导入',
-              theme: 'success',
-            }"
-            param-file-name="MultipartFile"
-          ></upload-button>
-          <t-button theme="success" @click="multExport">批量导出</t-button>
-          <t-button
-            theme="success"
-            :disabled="!selectedRowKeys.length"
-            @click="handleDestroy"
-            >作废</t-button
-          >
-        </t-space>
-      </div>
+      <p class="page-wrap-tips">
+        <ErrorCircleFilledIcon /> 在册:{{
+          statisticsInfo.totalCount
+        }}人,无效:{{ statisticsInfo.validCount }}人,有效:{{
+          statisticsInfo.invalidCount
+        }}人, 实施工程师有效:{{
+          statisticsInfo.effectEngineerCount
+        }}人,区域负责人有效:{{
+          statisticsInfo.regionCoordinatorCount
+        }}人,助理实施工程师有效:{{ statisticsInfo.assistantEngineerCount }}人
+      </p>
+
       <t-table
         size="small"
         row-key="userArchivesId"
@@ -116,6 +119,7 @@ import { ref, reactive, computed, onMounted } from 'vue';
 import { omit } from 'lodash';
 
 import { DialogPlugin, MessagePlugin } from 'tdesign-vue-next';
+import { ErrorCircleFilledIcon } from 'tdesign-icons-vue-next';
 import useFetchTable from '@/hooks/useFetchTable';
 import AddPersonFileDialog from './add-person-file-dialog';
 import {
@@ -181,7 +185,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
           getStatisticsInfo();
@@ -212,10 +216,18 @@ const fields = ref([
   },
   {
     prop: 'remainValidDay',
-    label: '剩余有效天数:≥',
+    label: '剩余有效天数',
     labelWidth: 140,
     colSpan: 6,
     type: 'number',
+    attrs: {
+      theme: 'column',
+      decimalPlaces: 0,
+      max: 1000000,
+      min: 0,
+      label: '≥',
+      style: 'width: 100%',
+    },
   },
 ]);
 const params = reactive({
@@ -241,13 +253,13 @@ const columns = [
     width: 50,
     fixed: 'left',
   },
-  { colKey: 'userArchivesId', title: '档案流水号' },
-  { colKey: 'name', title: '姓名' },
+  { colKey: 'userArchivesId', title: '档案流水号', width: 200 },
+  { colKey: 'name', title: '姓名', width: 120 },
   { colKey: 'province', title: '省份' },
   { colKey: 'city', title: '城市' },
   { colKey: 'area', title: '区县' },
-  { colKey: 'gender', title: '性别', cell: 'gender', width: 60 },
-  { colKey: 'age', title: '年龄', width: 60 },
+  { colKey: 'gender', title: '性别', cell: 'gender', width: 70 },
+  { colKey: 'age', title: '年龄', width: 70 },
   { colKey: 'identity', title: '身份证号', width: 160 },
   { colKey: 'education', title: '学历', cell: 'education' },
   { colKey: 'mobileNumber', title: '手机号', width: 120 },
@@ -264,7 +276,7 @@ const columns = [
     colKey: 'roleInfoList',
     title: '认证项目角色',
     cell: 'roles',
-    minWidth: 110,
+    minWidth: 150,
   },
   { colKey: 'authenticationScore', title: '认证分数' },
   {
@@ -273,16 +285,19 @@ const columns = [
     cell: 'valid-time',
     width: 180,
   },
-  { colKey: 'r', title: '剩余有效天数', cell: 'remain-day', width: 110 },
+  {
+    colKey: 'remainValidDay',
+    title: '剩余有效天数',
+    cell: 'remain-day',
+    width: 80,
+  },
   { colKey: 'authenticationStatus', title: '认证状态', cell: 'status' },
   { colKey: 'remark', title: '备注' },
   {
     title: '管理',
     colKey: 'operate',
-    cell: 'operate',
     fixed: 'right',
     width: 80,
-    align: 'center',
   },
 ];
 const { pagination, tableData, fetchData, search, onChange } = useFetchTable(

+ 1 - 1
src/views/service-unit/dispatch/dispatch-manage/index.vue

@@ -230,7 +230,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           refresh();
         },

+ 1 - 1
src/views/service-unit/service-unit-manage/range-manage/add-range-dialog.vue

@@ -145,7 +145,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
         },

+ 1 - 1
src/views/service-unit/service-unit-manage/range-manage/index.vue

@@ -125,7 +125,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
           getTotalData();

+ 1 - 1
src/views/service-unit/service-unit-manage/regional-planning/index.vue

@@ -103,7 +103,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
         },

+ 1 - 1
src/views/service-unit/service-unit-manage/unit-manage/index.vue

@@ -187,7 +187,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
         },

+ 1 - 1
src/views/sop/sop-manage/device-out-in/index.vue

@@ -149,7 +149,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
         },

+ 1 - 1
src/views/sop/sop-manage/project-change-report/index.vue

@@ -152,7 +152,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
         },

+ 1 - 1
src/views/sop/sop-monitor/delay-warning/index.vue

@@ -198,7 +198,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
         },

+ 1 - 1
src/views/sop/sop-monitor/violation-registration/index.vue

@@ -206,7 +206,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
         },

+ 1 - 1
src/views/system/config-manage/checkin-manage/index.vue

@@ -104,7 +104,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
         },

+ 1 - 1
src/views/system/config-manage/customer-manage/index.vue

@@ -132,7 +132,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
         },

+ 1 - 1
src/views/system/config-manage/device-manage/index.vue

@@ -210,7 +210,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
         },

+ 1 - 1
src/views/system/config-manage/service-level-manage/index.vue

@@ -70,7 +70,7 @@ const curRow = ref(null);
 
 const columns = [
   { colKey: 'level', title: '服务档位名称', minWidth: 140 },
-  { colKey: 'type', title: '业务类型', width: 100 },
+  { colKey: 'type', title: '业务类型', width: 120 },
   {
     colKey: 'roleList',
     title: '项目角色配置',

+ 1 - 1
src/views/system/notice-log/log-manage/index.vue

@@ -61,7 +61,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
         },

+ 1 - 1
src/views/system/notice-log/notice-manage/index.vue

@@ -173,7 +173,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
         },

+ 1 - 1
src/views/system/notice-log/notice-manage/notice-message-dialog.vue

@@ -124,7 +124,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
           getCount();

+ 1 - 3
src/views/system/task/task-manage/index.vue

@@ -110,7 +110,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
         },
@@ -135,8 +135,6 @@ const columns = [
     colKey: 'operate',
     fixed: 'right',
     width: 160,
-    align: 'center',
-    cell: 'operate',
   },
 ];
 const {

+ 1 - 1
src/views/work-hours/work-hours-manage/abnormal-check/done-check.vue

@@ -131,7 +131,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
         },

+ 1 - 1
src/views/work-hours/work-hours-manage/abnormal-check/wait-check.vue

@@ -131,7 +131,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
         },

+ 1 - 1
src/views/work-hours/work-hours-manage/work-attendance-detail/index.vue

@@ -100,7 +100,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
           getStatisticsInfo();

+ 134 - 72
src/views/work-hours/work-hours-manage/work-attendance/index.vue

@@ -29,11 +29,11 @@
     <div class="flex-1 page-wrap">
       <p class="page-wrap-tips">
         <ErrorCircleFilledIcon /> 考勤总计:{{
-          statisticsInfo.total
-        }},已提交:{{ statisticsInfo.submitted }},待提交:{{
-          statisticsInfo.unSubmitted
-        }},累计人天:{{ statisticsInfo.allDays }}天,累计工时:{{
-          statisticsInfo.allHours
+          statisticsInfo.dingCount
+        }},已提交:{{ statisticsInfo.submitCount }},待提交:{{
+          statisticsInfo.willSubmitCount
+        }},累计人天:{{ statisticsInfo.totalActualDays }}天,累计工时:{{
+          statisticsInfo.totalWorkHours
         }}小时
       </p>
 
@@ -41,7 +41,7 @@
         size="small"
         row-key="id"
         :columns="columns"
-        :data="tableData"
+        :data="tableList"
         bordered
         :pagination="{
           defaultCurrent: 1,
@@ -55,8 +55,8 @@
         :selected-row-keys="selectedRowKeys"
         @select-change="selectChange"
       >
-        <template #user="{ row }">
-          {{ row.userName }}({{ row.userNo }})
+        <template #role="{ col, row }">
+          {{ roleTypeFilter(row[col.colKey]) }}
         </template>
         <template #enter-time="{ col, row }">
           {{ timestampFilter(row[col.colKey]) }}
@@ -68,18 +68,29 @@
           {{ timestampFilter(row[col.colKey]) }}
         </template>
         <template #status="{ col, row }">
-          {{ flowStatusFilter(row[col.colKey]) }}
+          {{ attendanceSubmitStatusFilter(row[col.colKey]) }}
         </template>
         <template #operate="{ row }">
           <div class="table-operations" @click.stop>
-            <t-link theme="primary" hover="color" @click="handleSubmit(row)">
+            <t-link
+              v-if="row.submitStatus === 'WILL_SUBMIT'"
+              theme="primary"
+              hover="color"
+              @click="handleSubmit(row)"
+            >
               提交
             </t-link>
-            <t-link theme="danger" hover="color" @click="handleWithdraw(row)">
+            <t-link
+              v-if="row.submitStatus === 'ALREADY_SUBMIT'"
+              theme="primary"
+              hover="color"
+              @click="handleWithdraw(row)"
+            >
               撤回
             </t-link>
             <t-link
-              theme="danger"
+              v-if="row.submitStatus === 'APPLY_WITHDRAW'"
+              theme="primary"
               hover="color"
               @click="handleCancelWithdraw(row)"
             >
@@ -93,30 +104,43 @@
 </template>
 
 <script setup name="WorkAttendance">
-import { reactive, ref } from 'vue';
+import { computed, onMounted, reactive, ref } from 'vue';
 import { DialogPlugin, MessagePlugin } from 'tdesign-vue-next';
 import { ErrorCircleFilledIcon } from 'tdesign-icons-vue-next';
 import useFetchTable from '@/hooks/useFetchTable';
 import {
   workAttendanceListApi,
-  workStatisticsInfoApi,
+  workAttendanceInfoApi,
   workAttendanceSubmitApi,
   workAttendanceExportApi,
   workAttendanceWithdrawApi,
   workAttendanceCancelWithdrawApi,
 } from '@/api/work-hours';
-import { timestampFilter, flowStatusFilter } from '@/utils/filter';
-import { FLOW_STATUS } from '@/config/constants';
-import { dictToOptionList } from '@/utils/tool';
+import {
+  timestampFilter,
+  attendanceSubmitStatusFilter,
+  roleTypeFilter,
+} from '@/utils/filter';
+import { randomCode } from '@/utils/tool';
 
 const selectedRowKeys = ref([]);
-const selectChange = (value) => {
+const selectedRowDatas = ref([]);
+const selectChange = (value, { selectedRowData }) => {
   selectedRowKeys.value = value;
+  selectedRowDatas.value = selectedRowData.map((item) => getSelectedData(item));
 };
 
+function getSelectedData(data) {
+  return {
+    serviceUnitId: data.serviceUnitId,
+    sopNo: data.sopNo,
+    userArchivesId: data.archivesId,
+  };
+}
+
 const fields = ref([
   {
-    prop: 'serviceId',
+    prop: 'serviceUnitId',
     label: '服务单元',
     type: 'select',
     labelWidth: 100,
@@ -124,18 +148,27 @@ const fields = ref([
     cell: 'service',
   },
   {
-    prop: 'status',
+    prop: 'dingSubmitStatusDesc',
     label: '提交状态',
     type: 'select',
     labelWidth: 100,
     colSpan: 5,
-    options: dictToOptionList(FLOW_STATUS),
+    options: [
+      {
+        value: '已提交',
+        label: '已提交',
+      },
+      {
+        value: '未提交',
+        label: '未提交',
+      },
+    ],
     attrs: {
       clearable: true,
     },
   },
   {
-    prop: 'createId',
+    prop: 'submitUserId',
     label: '提交人',
     type: 'select',
     labelWidth: 100,
@@ -143,7 +176,7 @@ const fields = ref([
     cell: 'creator',
   },
   {
-    prop: 'userName',
+    prop: 'archivesName',
     label: '姓名',
     labelWidth: 100,
     colSpan: 5,
@@ -157,7 +190,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
           getStatisticsInfo();
@@ -174,7 +207,7 @@ const fields = ref([
     cell: 'supplier',
   },
   {
-    prop: 'custom',
+    prop: 'customName',
     label: '客户名称',
     labelWidth: 100,
     colSpan: 5,
@@ -192,9 +225,9 @@ const fields = ref([
     },
   },
   {
-    prop: 'days',
+    prop: 'violationHoursLimit',
     type: 'number',
-    label: '违规工时>',
+    label: '违规工时',
     labelWidth: 100,
     colSpan: 5,
     attrs: {
@@ -202,64 +235,68 @@ const fields = ref([
       decimalPlaces: 0,
       max: 1000000,
       min: 0,
+      label: '>',
       style: 'width: 100%',
     },
   },
   {
-    prop: 'i',
+    prop: 'dingExceptionLimit',
     type: 'number',
-    label: '考勤异常数>',
-    labelWidth: 120,
+    label: '考勤异常数',
+    labelWidth: 100,
     colSpan: 5,
     attrs: {
       theme: 'column',
       decimalPlaces: 0,
       max: 1000000,
       min: 0,
+      label: '>',
       style: 'width: 100%',
     },
   },
   {
-    prop: 'j',
+    prop: 'remainLimit',
     type: 'number',
-    label: '剩余补卡次数>',
-    labelWidth: 120,
+    label: '剩余补卡次数',
+    labelWidth: 100,
     colSpan: 5,
     attrs: {
       theme: 'column',
       decimalPlaces: 0,
       max: 1000000,
       min: 0,
+      label: '>',
       style: 'width: 100%',
     },
   },
   {
-    prop: 'k',
+    prop: 'exceptionLimit',
     type: 'number',
-    label: '待处理异常数>',
-    labelWidth: 120,
+    label: '待处理异常数',
+    labelWidth: 100,
     colSpan: 5,
     attrs: {
       theme: 'column',
       decimalPlaces: 0,
       max: 1000000,
       min: 0,
+      label: '>',
       style: 'width: 100%',
     },
   },
 ]);
 const params = reactive({
-  serviceId: '',
-  status: '',
-  createId: '',
-  userName: '',
+  serviceUnitId: '',
+  dingSubmitStatusDesc: '',
+  submitUserId: '',
+  archivesName: '',
   supplierId: '',
-  custom: '',
+  customName: '',
   sopNo: '',
-  days: null,
-  i: null,
-  j: null,
-  k: null,
+  violationHoursLimit: null,
+  dingExceptionLimit: null,
+  remainLimit: null,
+  exceptionLimit: null,
 });
 
 const columns = [
@@ -274,24 +311,33 @@ const columns = [
   { colKey: 'customName', title: '客户名称', width: 120 },
   { colKey: 'province', title: '省份', width: 120 },
   { colKey: 'city', title: '城市', width: 120 },
-  { colKey: 'enterTime', title: '进场时间', cell: 'enter-time', width: 180 },
-  { colKey: 'outerTime', title: '撤场时间', cell: 'outer-time', width: 180 },
-  { colKey: 'userName', title: '姓名(人员档案号)', cell: 'user', width: 170 },
-  { colKey: 'roleName', title: '项目角色' },
-  { colKey: 'supplier', title: '供应商' },
-  { colKey: 'attendance', title: '实际出勤(天)', width: 140 },
+  { colKey: 'approachTime', title: '进场时间', cell: 'enter-time', width: 180 },
+  {
+    colKey: 'departureTime',
+    title: '撤场时间',
+    cell: 'outer-time',
+    width: 180,
+  },
+  {
+    colKey: 'archivesInfo',
+    title: '姓名(人员档案号)',
+    width: 260,
+  },
+  { colKey: 'roleType', title: '项目角色', width: 120, cell: 'role' },
+  { colKey: 'supplierName', title: '供应商' },
+  { colKey: 'actualDays', title: '实际出勤(天)', width: 140 },
   { colKey: 'weekdays', title: '工作日(天)', width: 130 },
   { colKey: 'weekends', title: '周末(天)', width: 120 },
-  { colKey: 'holidays', title: '法定节假日(天)', width: 160 },
+  { colKey: 'legalHolidays', title: '法定节假日(天)', width: 160 },
   { colKey: 'workHours', title: '累计工时(天)', width: 140 },
   { colKey: 'violationDays', title: '违规工时(天)', width: 140 },
-  { colKey: 'q', title: '考勤异常数(天)', width: 150 },
-  { colKey: 'r', title: '剩余补卡次数', width: 120 },
-  { colKey: 's', title: '待处理异常数', width: 120 },
-  { colKey: 'status', title: '提交状态', cell: 'status', width: 120 },
-  { colKey: 'submitter', title: '提交人', width: 120 },
+  { colKey: 'dingExceptionCount', title: '考勤异常数(天)', width: 150 },
+  { colKey: 'remainCount', title: '剩余补卡次数', width: 120 },
+  { colKey: 'exceptionCount', title: '待处理异常数', width: 120 },
+  { colKey: 'submitStatus', title: '提交状态', cell: 'status', width: 120 },
+  { colKey: 'submitUserName', title: '提交人', width: 120 },
   {
-    colKey: 'submissionTime',
+    colKey: 'submitTime',
     title: '提交时间',
     cell: 'submit-time',
     width: 180,
@@ -300,9 +346,10 @@ const columns = [
     title: '管理',
     colKey: 'operate',
     fixed: 'right',
-    width: 160,
+    width: 120,
   },
 ];
+
 const { pagination, tableData, fetchData, search, onChange } = useFetchTable(
   workAttendanceListApi,
   {
@@ -312,9 +359,16 @@ const { pagination, tableData, fetchData, search, onChange } = useFetchTable(
     params,
   }
 );
+
+const tableList = computed(() => {
+  return tableData.value.map((item) => {
+    return { ...item, id: randomCode() };
+  });
+});
+
 let statisticsInfo = ref({});
 const getStatisticsInfo = async () => {
-  const res = await workStatisticsInfoApi(params);
+  const res = await workAttendanceInfoApi(params);
   statisticsInfo.value = res || {};
 };
 
@@ -331,7 +385,7 @@ const multSubmit = () => {
     theme: 'success',
     onConfirm: async () => {
       confirmDia.hide();
-      const res = await workAttendanceSubmitApi(selectedRowKeys.value).catch(
+      const res = await workAttendanceSubmitApi(selectedRowDatas.value).catch(
         () => {}
       );
       if (!res) return;
@@ -341,21 +395,19 @@ const multSubmit = () => {
   });
 };
 const multExport = () => {
-  if (!selectedRowKeys.value.length) {
-    MessagePlugin.error('请选择要导出的记录');
-    return;
-  }
+  // if (!selectedRowKeys.value.length) {
+  //   MessagePlugin.error('请选择要导出的记录');
+  //   return;
+  // }
   const confirmDia = DialogPlugin({
     header: '操作提示',
-    body: `确定要导出选择的所有记录吗?`,
+    body: `确定要导出查询的所有记录吗?`,
     confirmBtn: '确定',
     cancelBtn: '取消',
     theme: 'info',
     onConfirm: async () => {
       confirmDia.hide();
-      const res = await workAttendanceExportApi(selectedRowKeys.value).catch(
-        () => {}
-      );
+      const res = await workAttendanceExportApi(params).catch(() => {});
       if (!res) return;
       MessagePlugin.success('导出任务提交成功,请前往任务管理中下载');
     },
@@ -371,7 +423,9 @@ const handleSubmit = (row) => {
     theme: 'success',
     onConfirm: async () => {
       confirmDia.hide();
-      const res = await workAttendanceSubmitApi([row.id]).catch(() => {});
+      const res = await workAttendanceSubmitApi([getSelectedData(row)]).catch(
+        () => {}
+      );
       if (!res) return;
       MessagePlugin.success('操作成功');
       fetchData();
@@ -387,7 +441,9 @@ const handleWithdraw = (row) => {
     theme: 'warning',
     onConfirm: async () => {
       confirmDia.hide();
-      const res = await workAttendanceWithdrawApi(row.id).catch(() => {});
+      const res = await workAttendanceWithdrawApi(getSelectedData(row)).catch(
+        () => {}
+      );
       if (!res) return;
       MessagePlugin.success('操作成功');
       fetchData();
@@ -403,11 +459,17 @@ const handleCancelWithdraw = (row) => {
     theme: 'warning',
     onConfirm: async () => {
       confirmDia.hide();
-      const res = await workAttendanceCancelWithdrawApi(row.id).catch(() => {});
+      const res = await workAttendanceCancelWithdrawApi(
+        getSelectedData(row)
+      ).catch(() => {});
       if (!res) return;
       MessagePlugin.success('操作成功');
       fetchData();
     },
   });
 };
+
+onMounted(() => {
+  getStatisticsInfo();
+});
 </script>

+ 3 - 2
src/views/work-hours/work-hours-manage/work-statistics/index.vue

@@ -131,7 +131,7 @@ const fields = ref([
     children: [
       {
         type: 'button',
-        text: '查询',
+        text: '搜索',
         onClick: () => {
           search();
           getStatisticsInfo();
@@ -168,7 +168,7 @@ const fields = ref([
   {
     prop: 'days',
     type: 'number',
-    label: '违规工时>',
+    label: '违规工时',
     labelWidth: 100,
     colSpan: 5,
     attrs: {
@@ -176,6 +176,7 @@ const fields = ref([
       decimalPlaces: 0,
       max: 1000000,
       min: 0,
+      label: '>',
       style: 'width: 100%',
     },
   },