ZaiZai пре 2 година
родитељ
комит
c42bce7e7d
43 измењених фајлова са 1213 додато и 953 уклоњено
  1. 26 0
      src/utils/tools.js
  2. 35 26
      src/views/ledger/components/WbsTree.vue
  3. 33 29
      src/views/ledger/components/construction.vue
  4. 25 24
      src/views/ledger/components/dateCalendar/index.vue
  5. 49 43
      src/views/ledger/components/internal.vue
  6. 3 3
      src/views/ledger/components/table-form.vue
  7. 47 40
      src/views/ledger/components/table-list.vue
  8. 5 4
      src/views/ledger/components/weather.vue
  9. 1 2
      src/views/ledger/query.vue
  10. 20 15
      src/views/login/index.vue
  11. 13 10
      src/views/other-file/components/HcFileUpload.vue
  12. 13 10
      src/views/other-file/components/HcFileUpload1.vue
  13. 8 7
      src/views/other-file/components/WbsTree.vue
  14. 1 2
      src/views/other-file/image-data.vue
  15. 2 1
      src/views/other-file/image-form.vue
  16. 1 2
      src/views/other-file/image-view.vue
  17. 1 1
      src/views/other-file/project-scanning.vue
  18. 12 9
      src/views/other/components/HcUpload.vue
  19. 14 7
      src/views/other/components/ListItem.vue
  20. 15 12
      src/views/other/components/WbsTree.vue
  21. 2 2
      src/views/other/first-item.vue
  22. 2 2
      src/views/other/first-itemcopy.vue
  23. 103 80
      src/views/other/order-service.vue
  24. 19 19
      src/views/schedule/hc-data.vue
  25. 48 29
      src/views/schedule/hc-table.vue
  26. 1 1
      src/views/schedule/write.vue
  27. 52 43
      src/views/tasks/components/TableCard.vue
  28. 21 17
      src/views/tasks/flow.vue
  29. 74 57
      src/views/tasks/hc-data.vue
  30. 48 46
      src/views/tasks/message-data.vue
  31. 81 24
      src/views/tasks/sign-admin.vue
  32. 11 10
      src/views/tentative/collect/components/TestTree.vue
  33. 33 26
      src/views/tentative/collect/monthly.vue
  34. 22 16
      src/views/tentative/detect/components/FormItemUpload.vue
  35. 28 25
      src/views/tentative/detect/components/HcDragUpload.vue
  36. 28 23
      src/views/tentative/detect/components/HcTreeData.vue
  37. 24 20
      src/views/tentative/detect/components/HcUpload.vue
  38. 282 253
      src/views/tentative/detect/components/ListItem.vue
  39. 1 2
      src/views/tentative/detect/outside.vue
  40. 1 3
      src/views/tentative/detect/test-form.vue
  41. 2 2
      src/views/tentative/detect/test.vue
  42. 1 1
      src/views/tentative/detect/third.vue
  43. 5 5
      src/views/user/auth.vue

+ 26 - 0
src/utils/tools.js

@@ -85,3 +85,29 @@ export const getCopyText = () => {
     })
 }
 
+
+//日期格式化
+export const dateFormat = (date, format) => {
+    format = format || 'yyyy-MM-dd hh:mm:ss';
+    if (date !== 'Invalid Date') {
+        let o = {
+            "M+": date.getMonth() + 1, //month
+            "d+": date.getDate(), //day
+            "h+": date.getHours(), //hour
+            "m+": date.getMinutes(), //minute
+            "s+": date.getSeconds(), //second
+            "q+": Math.floor((date.getMonth() + 3) / 3), //quarter
+            "S": date.getMilliseconds() //millisecond
+        }
+        if (/(y+)/.test(format)) {
+            format = format.replace(RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length));
+        }
+        for (let k in o) {
+            if (new RegExp("(" + k + ")").test(format)) {
+                format = format.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
+            }
+        }
+        return format;
+    }
+    return '';
+}

+ 35 - 26
src/views/ledger/components/WbsTree.vue

@@ -1,16 +1,25 @@
 <template>
-    <ElTree class="hc-tree-node tree-line" ref="ElTreeRef" :props="ElTreeProps" :load="ElTreeLoadNode" lazy highlight-current accordion node-key="primaryKeyId"
-            :default-expanded-keys="defaultExpandedCids" @node-click="ElTreeClick" @node-contextmenu="ElTreeLabelContextMenu" :indent="0">
+    <ElTree ref="ElTreeRef" :default-expanded-keys="defaultExpandedCids" :indent="0" :load="ElTreeLoadNode"
+            :props="ElTreeProps"
+            accordion class="hc-tree-node tree-line" highlight-current
+            lazy node-key="primaryKeyId"
+            @node-click="ElTreeClick" @node-contextmenu="ElTreeLabelContextMenu">
         <template #default="{ node, data }">
-            <div class="data-custom-tree-node" :id="`${idPrefix}${data['primaryKeyId']}`">
+            <div :id="`${idPrefix}${data['primaryKeyId']}`" class="data-custom-tree-node">
                 <!--树组件,节点名称-->
-                <div class="label" :class="node.level === 1?'level-name':''">
-                    <span :class="data?.colorStatus === 2?'text-blue':data?.colorStatus === 3?'text-orange':data?.colorStatus === 4?'text-green':''" v-if="isColor">{{ node.label }}</span>
+                <div :class="node.level === 1?'level-name':''" class="label">
+                    <span
+                        v-if="isColor"
+                        :class="data?.colorStatus === 2?'text-blue':data?.colorStatus === 3?'text-orange':data?.colorStatus === 4?'text-green':''">{{
+                            node.label
+                        }}</span>
                     <span v-else>{{ node.label }}</span>
                 </div>
                 <!--树组件,操作菜单-->
-                <div class="menu-icon" :class="node.showTreeMenu?'show':''" v-if="node.level !== 1 && menusData.length > 0">
-                    <div class="cu-tree-node-popover-menu-icon" @click.prevent.stop="ElTreeLabelContextMenu($event,data,node)">
+                <div v-if="node.level !== 1 && menusData.length > 0" :class="node.showTreeMenu?'show':''"
+                     class="menu-icon">
+                    <div class="cu-tree-node-popover-menu-icon"
+                         @click.prevent.stop="ElTreeLabelContextMenu($event,data,node)">
                         <HcIcon name="menu" ui="text-2xl"/>
                     </div>
                 </div>
@@ -19,22 +28,22 @@
         </template>
     </ElTree>
     <!--右键菜单-->
-    <HcContextMenu ref="contextMenuRef" :datas="menusData" @item-click="handleMenuSelect" v-if="menusData.length > 0">
+    <HcContextMenu v-if="menusData.length > 0" ref="contextMenuRef" :datas="menusData" @item-click="handleMenuSelect">
         <template #mark="{item}">
-            <HcIcon :name="item.icon" :fill="treeRefData?.isFirst" class="menu-item-icon"/>
-            <span class="menu-item-name">{{treeRefData?.isFirst ? '取消标记为首件' : '标记为首件'}}</span>
+            <HcIcon :fill="treeRefData?.isFirst" :name="item.icon" class="menu-item-icon"/>
+            <span class="menu-item-name">{{ treeRefData?.isFirst ? '取消标记为首件' : '标记为首件' }}</span>
         </template>
         <template #sort="{item}">
-            <HcIcon :name="item.icon" :line="false" class="menu-item-icon"/>
-            <span class="menu-item-name">{{item.label}}</span>
+            <HcIcon :line="false" :name="item.icon" class="menu-item-icon"/>
+            <span class="menu-item-name">{{ item.label }}</span>
         </template>
     </HcContextMenu>
 </template>
 
 <script setup>
-import {ref,nextTick,watch} from "vue";
+import {ref, nextTick, watch} from "vue";
 import dataFillQuery from '~api/data-fill/query';
-import {isItem,getArrValue,getObjValue} from "vue-utils-plus"
+import {isArrItem, getArrValue, getObjValue} from "js-fast-way"
 import {useAppStore} from "~src/store";
 
 //参数
@@ -44,11 +53,11 @@ const props = defineProps({
         default: () => ([])
     },
     projectId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     contractId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     autoExpandKeys: {
@@ -95,8 +104,8 @@ const contractId = ref(props.contractId);
 const idPrefix = ref(props.idPrefix);
 const useAppState = useAppStore()
 const contractInfo = ref(useAppState.getContractInfo);
-const { contractType } = contractInfo.value;
-const classifyType  = ref(contractType === 2 ? '2' : '1')
+const {contractType} = contractInfo.value;
+const classifyType = ref(contractType === 2 ? '2' : '1')
 //监听
 watch(() => [
     props.menus,
@@ -106,7 +115,7 @@ watch(() => [
     props.projectId,
     props.contractId,
     props.idPrefix,
-], ([menus, isMark, AutoKeys, expandKeys, UserProjectId, UserContractId,UserIdPrefix]) => {
+], ([menus, isMark, AutoKeys, expandKeys, UserProjectId, UserContractId, UserIdPrefix]) => {
     menusData.value = menus
     menuMark.value = isMark
     isAutoKeys.value = AutoKeys
@@ -132,7 +141,7 @@ const ElTreeLoadNode = async (node, resolve) => {
         contractIdRelation,
         primaryKeyId,
         parentId,
-        classifyType:classifyType.value,
+        classifyType: classifyType.value,
     })
     //处理数据
     if (!error && code === 200) {
@@ -140,10 +149,10 @@ const ElTreeLoadNode = async (node, resolve) => {
         const keys = TreeExpandKey.value || []
         const resData = getArrValue(data)
         if (keys.length > 0) {
-            let lastKey = keys[keys.length-1];
+            let lastKey = keys[keys.length - 1];
             for (const item of resData) {
                 //自动展开
-                if (isItem(keys,item?.primaryKeyId)) {
+                if (isArrItem(keys, item?.primaryKeyId)) {
                     defaultExpandedArr.push(item?.primaryKeyId)
                 }
                 //最后一个,选中点击
@@ -169,10 +178,10 @@ const ElTreeLoadNode = async (node, resolve) => {
 }
 
 //事件
-const emit = defineEmits(['menuTap','nodeTap'])
+const emit = defineEmits(['menuTap', 'nodeTap'])
 
 //节点被点击
-const ElTreeClick = async (data,node) => {
+const ElTreeClick = async (data, node) => {
     if (isAutoKeys.value) {
         let autoKeysArr = []
         await getNodeExpandKeys(node, autoKeysArr)
@@ -195,7 +204,7 @@ const getNodeExpandKeys = async (node, newKeys) => {
 
 //鼠标右键事件
 const contextMenuRef = ref(null)
-const ElTreeLabelContextMenu = (e,data,node) => {
+const ElTreeLabelContextMenu = (e, data, node) => {
     const rows = menusData.value || [];
     if (node.level !== 1 && rows.length > 0) {
         e.preventDefault();
@@ -223,7 +232,7 @@ const handleMenuSelect = ({key}) => {
 }
 
 //设置树菜单的标记数据
-const setElTreeMenuMark = (keys,isFirst) => {
+const setElTreeMenuMark = (keys, isFirst) => {
     keys.forEach(item => {
         //根据 data 或者 key 拿到 Tree 组件中的 node
         let node = ElTreeRef.value.getNode(item)

+ 33 - 29
src/views/ledger/components/construction.vue

@@ -3,7 +3,7 @@
         <HcTable :column="tableConstructionColumn" :datas="tableConstructionData" :loading="tableConstructionLoading">
             <template #action="{row}">
                 <HcTooltip keys="write_construction_edit">
-                    <el-button type="primary" plain size="small" @click="tableConstructionEdit(row)">
+                    <el-button plain size="small" type="primary" @click="tableConstructionEdit(row)">
                         <HcIcon name="edit"/>
                         <span>编辑</span>
                     </el-button>
@@ -16,24 +16,33 @@
     </HcCard>
 
     <!--编辑施工台账-->
-    <el-dialog v-model="showConstructionEditModal" title="编辑施工台账" width="38rem" class="hc-modal-border">
-        <el-form ref="constructionFormRef" :model="constructionFormModel" :rules="constructionFormRules" label-position="top" label-width="auto" size="large">
+    <el-dialog v-model="showConstructionEditModal" class="hc-modal-border" title="编辑施工台账" width="38rem">
+        <el-form ref="constructionFormRef" :model="constructionFormModel" :rules="constructionFormRules"
+                 label-position="top" label-width="auto" size="large">
             <div class="flex">
                 <el-form-item class="flex-1" label="施工起始日期" prop="siteStartTime">
-                    <el-date-picker class="block" v-model="constructionFormModel.siteStartTime" type="date" placeholder="施工起始日期" format="YYYY-MM-DD" value-format="YYYY-MM-DD"/>
+                    <el-date-picker v-model="constructionFormModel.siteStartTime" class="block" format="YYYY-MM-DD"
+                                    placeholder="施工起始日期" type="date" value-format="YYYY-MM-DD"/>
                 </el-form-item>
                 <el-form-item class="mx-4" label=" ">至</el-form-item>
                 <el-form-item class="flex-1" label="施工停止日期" prop="siteEndTime">
-                    <el-date-picker class="block" v-model="constructionFormModel.siteEndTime" type="date" placeholder="施工停止日期" format="YYYY-MM-DD" value-format="YYYY-MM-DD"/>
+                    <el-date-picker v-model="constructionFormModel.siteEndTime" class="block" format="YYYY-MM-DD"
+                                    placeholder="施工停止日期" type="date" value-format="YYYY-MM-DD"/>
                 </el-form-item>
             </div>
             <div class="flex">
                 <el-form-item class="flex-1" label="检测起始日期" prop="detectionStartTime">
-                    <el-date-picker class="block" v-model="constructionFormModel.detectionStartTime" :disabled="!constructionFormModel.siteStartTime || !constructionFormModel.siteEndTime" type="date" placeholder="检测起始日期" format="YYYY-MM-DD" value-format="YYYY-MM-DD"/>
+                    <el-date-picker v-model="constructionFormModel.detectionStartTime" :disabled="!constructionFormModel.siteStartTime || !constructionFormModel.siteEndTime"
+                                    class="block"
+                                    format="YYYY-MM-DD" placeholder="检测起始日期" type="date"
+                                    value-format="YYYY-MM-DD"/>
                 </el-form-item>
                 <el-form-item class="mx-4" label=" ">至</el-form-item>
                 <el-form-item class="flex-1" label="检测停止日期" prop="detectionEndTime">
-                    <el-date-picker class="block" v-model="constructionFormModel.detectionEndTime" :disabled="!constructionFormModel.siteStartTime || !constructionFormModel.siteEndTime" type="date" placeholder="检测停止日期" format="YYYY-MM-DD" value-format="YYYY-MM-DD"/>
+                    <el-date-picker v-model="constructionFormModel.detectionEndTime" :disabled="!constructionFormModel.siteStartTime || !constructionFormModel.siteEndTime"
+                                    class="block"
+                                    format="YYYY-MM-DD" placeholder="检测停止日期" type="date"
+                                    value-format="YYYY-MM-DD"/>
                 </el-form-item>
             </div>
             <el-form-item label="设计方量">
@@ -49,7 +58,7 @@
                     <HcIcon name="close"/>
                     <span>取消</span>
                 </el-button>
-                <el-button type="primary" hc-btn :loading="saveConstructionLoading" @click="saveConstructionClick">
+                <el-button :loading="saveConstructionLoading" hc-btn type="primary" @click="saveConstructionClick">
                     <HcIcon name="save"/>
                     <span>提交保存</span>
                 </el-button>
@@ -61,17 +70,17 @@
 
 <script setup>
 import {ref, nextTick, watch} from "vue";
-import {deepClone, formValidate, getArrValue} from "vue-utils-plus"
+import {deepClone, formValidate, getArrValue} from "js-fast-way"
 import constructionApi from '~api/ledger/construction';
 
 //参数
 const props = defineProps({
     projectId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     contractId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     treeData: {
@@ -132,13 +141,13 @@ const pageConstructionChange = ({current, size}) => {
 
 //施工台账表头
 const tableConstructionColumn = ref([
-    {key:'station', name: '施工桩号'},
-    {key:'site', name: '施工部位'},
-    {key:'siteTimeStr', name: '施工起止日期'},
-    {key:'detectionTimeStr', name: '检测日期'},
-    {key:'designVolume', name: '设计方量'},
-    {key:'actualVolume', name: '实际方量'},
-    {key:'action', name: '操作', width: 100}
+    {key: 'station', name: '施工桩号'},
+    {key: 'site', name: '施工部位'},
+    {key: 'siteTimeStr', name: '施工起止日期'},
+    {key: 'detectionTimeStr', name: '检测日期'},
+    {key: 'designVolume', name: '设计方量'},
+    {key: 'actualVolume', name: '实际方量'},
+    {key: 'action', name: '操作', width: 100}
 ])
 const tableConstructionData = ref([])
 
@@ -187,9 +196,7 @@ const constructionFormRules = ref({
             const endTime = constructionFormModel.value?.siteEndTime ?? ''
             if (!value) {
                 callback(new Error('请选择施工起始日期'))
-            } 
-           
-            else {
+            } else {
                 callback()
             }
         },
@@ -203,9 +210,7 @@ const constructionFormRules = ref({
                 callback(new Error('请选择施工停止日期'))
             } else if (value < startTime) {
                 callback(new Error('施工停止日期 不能 小于 施工起始日期'))
-            } 
-
-            else {
+            } else {
                 callback()
             }
         },
@@ -215,13 +220,12 @@ const constructionFormRules = ref({
         required: true,
         validator: (rule, value, callback) => {
             const endTime = constructionFormModel.value?.siteEndTime ?? ''
-             const startTime = constructionFormModel.value?.siteStartTime ?? ''
+            const startTime = constructionFormModel.value?.siteStartTime ?? ''
             if (!value) {
                 callback(new Error('请选择检测起始日期'))
             } else if (value < startTime) {
                 callback(new Error('检测起始日期 不能 小于 施工起始日期'))
-            } 
-            else {
+            } else {
                 callback()
             }
         },
@@ -258,7 +262,7 @@ const saveConstructionClick = async () => {
     const validate = await formValidate(constructionFormRef.value)
     if (validate) {
         const formData = constructionFormModel.value
-        const {siteStartTime,siteEndTime,detectionStartTime,detectionEndTime} = formData
+        const {siteStartTime, siteEndTime, detectionStartTime, detectionEndTime} = formData
         //施工时间
         formData.siteTimeStr = siteStartTime + '~' + siteEndTime
         //检测时间
@@ -276,7 +280,7 @@ const updateConstructionPage = async (formData) => {
         ...formData,
         projectId: projectId.value,
         contractId: contractId.value
-    },false)
+    }, false)
     //处理数据
     saveConstructionLoading.value = false
     if (!error && code === 200) {

+ 25 - 24
src/views/ledger/components/dateCalendar/index.vue

@@ -2,7 +2,7 @@
     <div :class="ui" class="hc-date-calendar-box">
         <div class="hc-date-picker-box">
             <div class="hc-date-picker">
-                <el-date-picker class="block" v-model="toPicker" type="month" size="large" @change="datePickerChange"/>
+                <el-date-picker v-model="toPicker" class="block" size="large" type="month" @change="datePickerChange"/>
             </div>
             <div class="hc-date-btn-box">
                 <div class="hc-div-btn" @click="prevMonthClick">
@@ -15,12 +15,12 @@
         </div>
         <div class="hc-date-weekdays">
             <template v-for="item in weekdays" :key="item">
-                <div class="hc-date-weekdays-day">{{item}}</div>
+                <div class="hc-date-weekdays-day">{{ item }}</div>
             </template>
         </div>
         <div class="hc-date-dates">
             <template v-for="item in datesDay">
-                <div class="hc-date-dates-day" :class="item.type" @click="datesDayClick(item)">{{item.key}}</div>
+                <div :class="item.type" class="hc-date-dates-day" @click="datesDayClick(item)">{{ item.key }}</div>
             </template>
         </div>
     </div>
@@ -28,9 +28,10 @@
 
 <script setup>
 import {nextTick, watch, ref} from "vue";
+import {getObjVal} from "js-fast-way"
 import dayjs from "dayjs"
 import 'dayjs/locale/zh-cn'
-import {getObjNullValue} from "vue-utils-plus";
+
 dayjs.locale('zh-cn')
 const props = defineProps({
     ui: {
@@ -64,13 +65,13 @@ const emit = defineEmits(['choice-date'])
 watch(() => [
     props.dateData,
     props.recordDate,
-], ([dateData,recordDate]) => {
+], ([dateData, recordDate]) => {
     selectedDatas.value = dateData
     setCurDateData(dateData, recordDate)
 })
 
 //渲染完成
-nextTick(()=> {
+nextTick(() => {
     const toDayJs = dayjs();
     toDays.value = {
         year: toDayJs.get('year'),
@@ -82,7 +83,7 @@ nextTick(()=> {
         year: toDayJs.get('year'),
         month: toDayJs.get('month') + 1
     }
-    choiceDate.value =  {
+    choiceDate.value = {
         year: toDayJs.get('year'),
         month: toDayJs.get('month') + 1,
         date: toDayJs.get('date')
@@ -100,13 +101,13 @@ const setCurDateData = (dateData, recordDate) => {
         const toDayJs = dayjs(toDate);
         curData.push({
             year: toDayJs.get('year'),
-            month: toDayJs.get('month') +1,
+            month: toDayJs.get('month') + 1,
             date: toDayJs.get('date')
         })
     }
     curDateData.value = curData;
     //判断是否选择了日期
-    if (getObjNullValue(recordDate)) {
+    if (getObjVal(recordDate)) {
         getDatesDay(recordDate.year, recordDate.month)
     } else {
         getDatesDay()
@@ -121,19 +122,19 @@ const getDatesDay = (year, month) => {
         let monthOneDay = dayjs(toDate).startOf("month").format("YYYY-MM-DD");  //获取当月第一天
         let weekday = dayjs(monthOneDay, "YYYY-MM-DD").day();                         //获取当月第一天是星期几
         toPicker.value = dayjs(year + '-' + month).format('YYYY-MM');
-        setDatesDay(days,weekday)
+        setDatesDay(days, weekday)
     } else {
         const toDayJs = toDays.value?.obj ?? {};
         let days = toDayJs.daysInMonth(); //天数
         let monthOneDay = toDayJs.startOf("month").format("YYYY-MM-DD");   //获取当月第一天
         let weekday = dayjs(monthOneDay, "YYYY-MM-DD").day();                    //获取当月第一天是星期几
         toPicker.value = toDayJs.format('YYYY-MM');
-        setDatesDay(days,weekday)
+        setDatesDay(days, weekday)
     }
 }
 
 //设置日期
-const setDatesDay = (days,weekday) => {
+const setDatesDay = (days, weekday) => {
     let datesDayData = [];
     const selected = selectedDate.value; //选择的日期
     const choiceData = choiceDate.value; //选择的日期
@@ -145,7 +146,7 @@ const setDatesDay = (days,weekday) => {
     //处理日期
     for (let i = 0; i < days; i++) {
         let day = i + 1, type = '';
-        type = setCurDate(selected,day)
+        type = setCurDate(selected, day)
         if (selected.year === dayData.year && selected.month === dayData.month && dayData.date === day) {
             type += ' selected'
         }
@@ -162,7 +163,7 @@ const setDatesDay = (days,weekday) => {
     datesDay.value = datesDayData;
 }
 
-const setCurDate = (selected,day) => {
+const setCurDate = (selected, day) => {
     const curDate = curDateData.value;   //设置的日期
     for (let x = 0; x < curDate.length; x++) {
         if (selected.year === curDate[x].year && selected.month === curDate[x].month && curDate[x].date === day) {
@@ -174,7 +175,7 @@ const setCurDate = (selected,day) => {
 
 //上一月
 const prevMonthClick = () => {
-    let {year,month} = selectedDate.value
+    let {year, month} = selectedDate.value
     let years = year, months;
     if (month === 1) {
         years = year - 1;
@@ -186,11 +187,11 @@ const prevMonthClick = () => {
         year: years,
         month: months
     }
-    getDatesDay(years,months)
+    getDatesDay(years, months)
 }
 //下一月
 const nextMonthClick = () => {
-    let {year,month} = selectedDate.value
+    let {year, month} = selectedDate.value
     let years, months;
     if (month === 12) {
         years = year + 1;
@@ -203,14 +204,14 @@ const nextMonthClick = () => {
         year: years,
         month: months
     }
-    getDatesDay(years,months)
+    getDatesDay(years, months)
 }
 
 //天被点击
 const datesDayClick = (item) => {
-    console.log(selectedDate.value,'selectedDate');
+    console.log(selectedDate.value, 'selectedDate');
     if (item.type !== 'excluded') {
-        let {year,month} = selectedDate.value
+        let {year, month} = selectedDate.value
         choiceDate.value = {year: year, month: month, date: item.key}
         getDatesDay(year, month)
         backChoiceDate()
@@ -221,12 +222,12 @@ const datesDayClick = (item) => {
 const datePickerChange = (val) => {
     const toDayJs = dayjs(val);
     toPicker.value = toDayJs.format('YYYY-MM')
-      selectedDate.value = {
+    selectedDate.value = {
         year: toDayJs.year(),
         month: toDayJs.month() + 1
     }
     getDatesDay(toDayJs.year(), toDayJs.month() + 1)
-    
+
 }
 
 //返回选择的日期
@@ -245,10 +246,10 @@ const backChoiceDate = () => {
 
 //回到今天
 const backToDay = () => {
-    const {year, month ,date} = toDays.value ?? {};
+    const {year, month, date} = toDays.value ?? {};
     selectedDate.value = {year: year, month: month}
     choiceDate.value = {year: year, month: month, date: date}
-    getDatesDay(year,month)
+    getDatesDay(year, month)
     emit('choice-date', isDayDateFormat(toDays.value))
 }
 

+ 49 - 43
src/views/ledger/components/internal.vue

@@ -2,30 +2,34 @@
     <HcCard>
         <template #header>
             <div class="w-32">
-                <el-select v-model="searchInternalForm.taskStatus" placeholder="审批状态" clearable size="large">
-                    <el-option v-for="item in InternalApproval" :key="item.value" :label="item['label']" :value="item['value']"/>
+                <el-select v-model="searchInternalForm.taskStatus" clearable placeholder="审批状态" size="large">
+                    <el-option v-for="item in InternalApproval" :key="item.value" :label="item['label']"
+                               :value="item['value']"/>
                 </el-select>
             </div>
             <div class="w-32 ml-2">
-                <el-select v-model="searchInternalForm.isEvaluate" placeholder="是否评定" clearable size="large">
-                    <el-option v-for="item in InternalAssess" :key="item.value" :label="item['label']" :value="item['value']"/>
+                <el-select v-model="searchInternalForm.isEvaluate" clearable placeholder="是否评定" size="large">
+                    <el-option v-for="item in InternalAssess" :key="item.value" :label="item['label']"
+                               :value="item['value']"/>
                 </el-select>
             </div>
             <div class="w-32 ml-2">
-                <el-select v-model="searchInternalForm.reportNumber" placeholder="上报批次" clearable size="large">
+                <el-select v-model="searchInternalForm.reportNumber" clearable placeholder="上报批次" size="large">
                     <el-option v-for="item in InternalReportBatch" :key="item" :label="item" :value="item"/>
                 </el-select>
             </div>
             <div class="w-32 ml-2">
-                <el-select v-model="searchInternalForm.isExperiment" placeholder="关联试验" clearable size="large">
-                    <el-option v-for="item in InternalAssociation" :key="item.value" :label="item['label']" :value="item['value']"/>
+                <el-select v-model="searchInternalForm.isExperiment" clearable placeholder="关联试验" size="large">
+                    <el-option v-for="item in InternalAssociation" :key="item.value" :label="item['label']"
+                               :value="item['value']"/>
                 </el-select>
             </div>
             <div class="w-60 ml-2">
-                <el-input v-model="searchInternalForm.queryStr" placeholder="请输入名称关键词检索" size="large" clearable @keyup="searchInternalKeyUp"/>
+                <el-input v-model="searchInternalForm.queryStr" clearable placeholder="请输入名称关键词检索"
+                          size="large" @keyup="searchInternalKeyUp"/>
             </div>
             <div class="ml-2">
-                <el-button type="primary" size="large" @click="searchInternalClick">
+                <el-button size="large" type="primary" @click="searchInternalClick">
                     <HcIcon name="search-2"/>
                     <span>搜索</span>
                 </el-button>
@@ -33,35 +37,37 @@
         </template>
         <template #extra>
             <HcTooltip keys="write_industry_download">
-                <el-button type="primary" hc-btn :disabled="tableInternalKeys.length <= 0"  @click="batchDownload"  :loading="downloadLoading">
+                <el-button :disabled="tableInternalKeys.length <= 0" :loading="downloadLoading" hc-btn type="primary"
+                           @click="batchDownload">
                     <HcIcon name="download"/>
                     <span>下载</span>
                 </el-button>
             </HcTooltip>
             <HcTooltip keys="write_industry_print">
-                <el-button hc-btn :disabled="tableInternalKeys.length <= 0" :loading="printLoading" @click="batchPrint">
+                <el-button :disabled="tableInternalKeys.length <= 0" :loading="printLoading" hc-btn @click="batchPrint">
                     <HcIcon name="printer"/>
                     <span>打印</span>
                 </el-button>
             </HcTooltip>
         </template>
-        <HcTable ref="tableInternalRef" :column="tableInternalColumn" :datas="tableInternalData" :loading="tableInternalLoading" isCheck @selection-change="tableInternalSelection">
+        <HcTable ref="tableInternalRef" :column="tableInternalColumn" :datas="tableInternalData"
+                 :loading="tableInternalLoading" isCheck @selection-change="tableInternalSelection">
             <template #taskStatus="{row}">
-                <el-tag type="success" class="mx-1" effect="dark" v-if="row['taskStatus'] === '已审批'">已审批</el-tag>
-                <el-tag type="danger" class="mx-1" effect="dark" v-if="row['taskStatus'] === '待审批'">待审批</el-tag>
-                <el-tag type="warning" class="mx-1" effect="dark" v-if="row['taskStatus'] === '未上报'">未上报</el-tag>
+                <el-tag v-if="row['taskStatus'] === '已审批'" class="mx-1" effect="dark" type="success">已审批</el-tag>
+                <el-tag v-if="row['taskStatus'] === '待审批'" class="mx-1" effect="dark" type="danger">待审批</el-tag>
+                <el-tag v-if="row['taskStatus'] === '未上报'" class="mx-1" effect="dark" type="warning">未上报</el-tag>
             </template>
             <template #isEvaluate="{row}">
-                <el-tag type="success" class="mx-1" effect="dark" v-if="row['isEvaluate']">是</el-tag>
-                <el-tag type="info" class="mx-1" effect="dark" v-else>否</el-tag>
+                <el-tag v-if="row['isEvaluate']" class="mx-1" effect="dark" type="success">是</el-tag>
+                <el-tag v-else class="mx-1" effect="dark" type="info">否</el-tag>
             </template>
-            
+
             <template #reportNumber="{row}">
-              {{row['reportNumber']==='-1'||row['reportNumber']==='0'?'':row['reportNumber']}}
+                {{ row['reportNumber'] === '-1' || row['reportNumber'] === '0' ? '' : row['reportNumber'] }}
             </template>
             <template #isExperiment="{row}">
-                <el-tag type="success" class="mx-1" effect="dark" v-if="row['isExperiment']">是</el-tag>
-                <el-tag type="info" class="mx-1" effect="dark" v-else>否</el-tag>
+                <el-tag v-if="row['isExperiment']" class="mx-1" effect="dark" type="success">是</el-tag>
+                <el-tag v-else class="mx-1" effect="dark" type="info">否</el-tag>
             </template>
         </HcTable>
         <template #action>
@@ -72,18 +78,18 @@
 
 <script setup>
 import {ref, nextTick, watch} from "vue";
-import {getArrValue,isType, downloadBlob, isString} from "vue-utils-plus"
 import internalApi from '~api/ledger/internal';
 import queryApi from '~api/data-fill/query';
+import {downloadBlob, isString, getArrValue} from "js-fast-way"
 
 //参数
 const props = defineProps({
     projectId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     contractId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     treeData: {
@@ -108,7 +114,7 @@ watch(() => [
 //渲染完成
 nextTick(() => {
     setQueryData(props.treeData)
-     queryBatchList()
+    queryBatchList()
 })
 
 //获取相关数据
@@ -145,16 +151,16 @@ const InternalReportBatch = ref([
 //获取上报批次
 
 const queryBatchList = async () => {
-  
+
     if (contractId.value) {
         // const { error, code, data } = await internalApi.queryBatchList({
         //     projectId: projectId.value,
         //     contractId: contractId.value || ''
         // })
-       const { error, code, data } = await queryApi.getReportNumber({
-           projectId:projectId.value,
-           contractId: contractId.value || '',
-           type:1
+        const {error, code, data} = await queryApi.getReportNumber({
+            projectId: projectId.value,
+            contractId: contractId.value || '',
+            type: 1
         })
         if (!error && code === 200) {
             InternalReportBatch.value = getArrValue(data)
@@ -189,7 +195,7 @@ const searchInternalClick = () => {
     if (searchInternalForm.value?.wbsIds) {
         searchInternalForm.value.current = 1;
         getTableInternalData()
-       
+
     } else {
         window?.$message?.warning('请先选择一个树节点')
     }
@@ -205,16 +211,16 @@ const pageInternalChange = ({current, size}) => {
 //内业台账表头
 const tableInternalRef = ref(null)
 const tableInternalColumn = ref([
-    {key:'unitProject', name: '单位工程'},
-    {key:'partProject', name: '分部工程'},
-    {key:'partChildProject', name: '子分部工程'},
-    {key:'subentryProject', name: '分项工程'},
-    {key:'subentryChildProject', name: '子分项工程'},
-    {key:'process', name: '工序'},
-    {key:'taskStatus', name: '审批状态', width: 120, align: 'center'},
-    {key:'reportNumber', name: '上报批次', width: 100, align: 'center'},
-    {key:'isEvaluate', name: '是否评定', width: 100, align: 'center'},
-    {key:'isExperiment', name: '关联试验', width: 100, align: 'center'},
+    {key: 'unitProject', name: '单位工程'},
+    {key: 'partProject', name: '分部工程'},
+    {key: 'partChildProject', name: '子分部工程'},
+    {key: 'subentryProject', name: '分项工程'},
+    {key: 'subentryChildProject', name: '子分项工程'},
+    {key: 'process', name: '工序'},
+    {key: 'taskStatus', name: '审批状态', width: 120, align: 'center'},
+    {key: 'reportNumber', name: '上报批次', width: 100, align: 'center'},
+    {key: 'isEvaluate', name: '是否评定', width: 100, align: 'center'},
+    {key: 'isExperiment', name: '关联试验', width: 100, align: 'center'},
 ])
 const tableInternalData = ref([])
 
@@ -241,7 +247,7 @@ const getTableInternalData = async () => {
 const tableInternalKeys = ref([]);
 const tableInternalSelection = (rows) => {
     tableInternalKeys.value = rows.filter((item) => {
-        return (item??'') !== '';
+        return (item ?? '') !== '';
     })
 }
 //拼接ID
@@ -254,7 +260,7 @@ const rowsToId = (rows) => {
 const downloadLoading = ref(false)
 const batchDownload = async () => {
     const rows = tableInternalKeys.value;
-    console.log(rows,'rows');
+    console.log(rows, 'rows');
     const ids = rowsToId(rows)
     //批量下载
     downloadLoading.value = true

+ 3 - 3
src/views/ledger/components/table-form.vue

@@ -142,10 +142,10 @@
 
 <script setup>
 import {ref, watch, onMounted, onActivated, onDeactivated, onUnmounted} from "vue";
+import {getObjValue, isString, getArrValue, isNullES, getObjVal} from "js-fast-way"
 import queryApi from '~api/ledger/query';
 import wbsQueryApi from '~api/data-fill/query';
 import DateCalendar from "./dateCalendar/index.vue"
-import {getObjValue, getObjNullValue, isString, getArrValue, isValueNull} from "vue-utils-plus"
 import HcTableForm from "~com/table-form/index.vue";
 import {useAppStore} from "~src/store";
 
@@ -300,7 +300,7 @@ const getBussDataInfo = (index = 0) => {
     const formLog = formLogDataList.value
     const info = getObjValue(formLog[index])
     formLogIndex.value = index
-    if (getObjNullValue(info)) {
+    if (getObjVal(info)) {
         tableFormData.value = info
     } else {
         tableFormData.value = {}
@@ -337,7 +337,7 @@ const checkTheLogTaskStatus = async (choices, primaryKeyId) => {
             recordTime: choices
         }, false)
         //处理数据
-        const res = isValueNull(data) ? '' : data || ''
+        const res = isNullES(data) ? '' : data || ''
         if (!error && code === 200 && res) {
             //1和2的时候所有按钮皆可操作,废除 除外
             //3和4时, 除了预览和废除 都不行

+ 47 - 40
src/views/ledger/components/table-list.vue

@@ -3,15 +3,15 @@
         <HcCard>
             <template #header>
                 <div class="w-64">
-                    <HcDatePicker :dates="betweenTime" size="large" clearable @change="betweenTimeUpdate"/>
+                    <HcDatePicker :dates="betweenTime" clearable size="large" @change="betweenTimeUpdate"/>
                 </div>
                 <div class="w-40 ml-3">
-                    <el-select v-model="searchForm.createUser" block clearable size="large" placeholder="请选择记录人">
+                    <el-select v-model="searchForm.createUser" block clearable placeholder="请选择记录人" size="large">
                         <el-option v-for="item in recordData" :label="item['userName']" :value="item['userId']"/>
                     </el-select>
                 </div>
                 <div class="ml-2">
-                    <el-button type="primary" size="large" @click="searchClick">
+                    <el-button size="large" type="primary" @click="searchClick">
                         <HcIcon name="search-2"/>
                         <span>搜索</span>
                     </el-button>
@@ -19,37 +19,44 @@
             </template>
             <template #extra>
                 <HcTooltip keys="ledger_query_report">
-                    <el-button hc-btn type="primary" :disabled="tableCheckedKeys.length <= 0" :loading="reportLoading" @click="reportModalClick">
+                    <el-button :disabled="tableCheckedKeys.length <= 0" :loading="reportLoading" hc-btn type="primary"
+                               @click="reportModalClick">
                         <HcIcon name="send-plane-2"/>
                         <span>批量上报</span>
                     </el-button>
                 </HcTooltip>
                 <HcTooltip keys="ledger_query_abolish">
-                    <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" :loading="abolishLoading" @click="batchAbolishClick">
+                    <el-button :disabled="tableCheckedKeys.length <= 0" :loading="abolishLoading" hc-btn
+                               @click="batchAbolishClick">
                         <HcIcon name="delete-bin-3"/>
                         <span>批量废除</span>
                     </el-button>
                 </HcTooltip>
                 <HcTooltip keys="ledger_query_delete">
-                    <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" :loading="deleteLoading" @click="batchDeleteClick">
+                    <el-button :disabled="tableCheckedKeys.length <= 0" :loading="deleteLoading" hc-btn
+                               @click="batchDeleteClick">
                         <HcIcon name="delete-bin"/>
                         <span>批量删除</span>
                     </el-button>
                 </HcTooltip>
                 <HcTooltip keys="ledger_query_print">
-                    <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" :loading="previewPrintLoading" @click="previewAndPrintClick">
+                    <el-button :disabled="tableCheckedKeys.length <= 0" :loading="previewPrintLoading" hc-btn
+                               @click="previewAndPrintClick">
                         <HcIcon name="printer"/>
                         <span>批量预览/打印</span>
                     </el-button>
                 </HcTooltip>
             </template>
-            <HcTable ref="tableListRef" :column="tableListColumn" :datas="tableListData" :loading="tableLoading" isCheck @selection-change="tableSelectionChange">
+            <HcTable ref="tableListRef" :column="tableListColumn" :datas="tableListData" :loading="tableLoading" isCheck
+                     @selection-change="tableSelectionChange">
                 <template #action="{row}">
                     <HcTooltip keys="ledger_query_table_query">
-                        <el-button type="primary" size="small" plain @click="handleTableQuery(row)">查询</el-button>
+                        <el-button plain size="small" type="primary" @click="handleTableQuery(row)">查询</el-button>
                     </HcTooltip>
                     <HcTooltip keys="ledger_query_table_del">
-                        <el-button type="danger" size="small" plain :disabled="!row.operation || row.status !== 0" @click="handleTableDel(row)">删除</el-button>
+                        <el-button :disabled="!row.operation || row.status !== 0" plain size="small" type="danger"
+                                   @click="handleTableDel(row)">删除
+                        </el-button>
                     </HcTooltip>
                 </template>
             </HcTable>
@@ -59,19 +66,19 @@
         </HcCard>
 
         <!--批量上报审批-->
-        <HcReportModal title="批量上报审批"
-                       url="contractLog/batchTask"
-                       :show="showReportModal"
+        <HcReportModal :contractId="contractId"
+                       :datas="reportDatas"
+                       :ids="reportIds"
                        :projectId="projectId"
-                       :contractId="contractId"
-                       type="log"
-                       :typeData="menuItem.primaryKeyId"
+                       :show="showReportModal"
                        :taskName="reportTaskName"
-                       :ids="reportIds"
+                       :typeData="menuItem.primaryKeyId"
                        isDatas
-                       :datas="reportDatas"
-                       @hide="showReportModal = false"
+                       title="批量上报审批"
+                       type="log"
+                       url="contractLog/batchTask"
                        @finish="showReportFinish"
+                       @hide="showReportModal = false"
                        @tagClose="reportTaskTagClose"
         />
     </div>
@@ -81,16 +88,16 @@
 import {ref, watch, nextTick} from "vue";
 import queryApi from '~api/ledger/query';
 import {eVisaTaskCheckApi} from "~api/other"
-import {getArrValue, getObjValue, isString} from "vue-utils-plus"
+import {getArrValue, getObjValue, isString} from "js-fast-way"
 
 //参数
 const props = defineProps({
     projectId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     contractId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     items: {
@@ -130,8 +137,8 @@ const getQueryData = () => {
 //获取记录人数据
 const recordData = ref([])
 const queryFillUser = async () => {
-    const { primaryKeyId } = menuItem.value
-    const { data } = await queryApi.queryFillUser({
+    const {primaryKeyId} = menuItem.value
+    const {data} = await queryApi.queryFillUser({
         contractId: contractId.value,
         primaryKeyId: primaryKeyId
     })
@@ -164,10 +171,10 @@ const pageChange = ({current, size}) => {
 //获取数据
 const tableLoading = ref(false)
 const tableListColumn = ref([
-    {key:'recordTime', name: '记录日期'},
-    {key:'statusValue', name: '流程状态'},
-    {key:'createUserName', name: '记录人员'},
-    {key:'action', name: '操作', width: 200}
+    {key: 'recordTime', name: '记录日期'},
+    {key: 'statusValue', name: '流程状态'},
+    {key: 'createUserName', name: '记录人员'},
+    {key: 'action', name: '操作', width: 200}
 ])
 const tableListData = ref([])
 const getTableData = async () => {
@@ -177,7 +184,7 @@ const getTableData = async () => {
     tableListRef.value?.clearSelection()
     tableCheckedKeys.value = []
     //请求数据
-    const { error, code, data } = await queryApi.constructionLogPage({
+    const {error, code, data} = await queryApi.constructionLogPage({
         ...searchForm.value,
         wbsNodeId: primaryKeyId,
         projectId: projectId.value,
@@ -200,7 +207,7 @@ const tableListRef = ref(null)
 const tableCheckedKeys = ref([])
 const tableSelectionChange = (rows) => {
     tableCheckedKeys.value = rows.filter((item) => {
-        return (item??'') !== '';
+        return (item ?? '') !== '';
     })
 }
 
@@ -213,7 +220,7 @@ const showReportModal = ref(false)
 const reportModalClick = async () => {
     const rows = tableCheckedKeys.value;
     //判断是否满足条件
-    const result = rows.every(({status})=> {
+    const result = rows.every(({status}) => {
         return status !== 1 && status !== 2
     })
     //判断状态
@@ -251,7 +258,7 @@ const reportModalClick = async () => {
 //上报的审批内容移除
 const reportTaskTagClose = (index) => {
     const row = tableCheckedKeys.value[index];
-    tableListRef.value?.toggleRowSelection(row,false)
+    tableListRef.value?.toggleRowSelection(row, false)
 }
 
 //上报完成
@@ -265,7 +272,7 @@ const abolishLoading = ref(false)
 const batchAbolishClick = () => {
     const rows = tableCheckedKeys.value;
     //判断是否满足条件
-    const result = rows.every(({status, operation})=> {
+    const result = rows.every(({status, operation}) => {
         return status !== 0 && status !== 3 && operation
     })
     //判断状态
@@ -290,7 +297,7 @@ const batchAbolishClick = () => {
 //废除勾选的已上报文件
 const batchAbolishSave = async (ids) => {
     abolishLoading.value = true
-    const { error, code } = await queryApi.batchAbolish({ids: ids})
+    const {error, code} = await queryApi.batchAbolish({ids: ids})
     //处理数据
     abolishLoading.value = false
     if (!error && code === 200) {
@@ -304,7 +311,7 @@ const batchAbolishSave = async (ids) => {
 const batchDeleteClick = () => {
     const rows = tableCheckedKeys.value;
     //判断是否满足条件
-    const result = rows.every(({status, operation})=> {
+    const result = rows.every(({status, operation}) => {
         return status === 0 && operation
     })
     //判断状态
@@ -332,23 +339,23 @@ const previewAndPrintClick = async () => {
     const rows = tableCheckedKeys.value;
     const rowsIds = rowsToId(rows)
     const ids = rowsIds.split(',')
-    const { error, code, data } = await queryApi.theLogPreviewAndPrint({
+    const {error, code, data} = await queryApi.theLogPreviewAndPrint({
         ids: ids
     })
     //处理数据
     previewPrintLoading.value = false
     const res = isString(data) ? data || '' : ''
     if (!error && code === 200 && res) {
-        window.open(res,'_blank')
+        window.open(res, '_blank')
     }
 }
 
 //查询
 const handleTableQuery = ({evisaPdfUrl, pdfUrl}) => {
     if (evisaPdfUrl) {
-        window.open(evisaPdfUrl,'_blank')
+        window.open(evisaPdfUrl, '_blank')
     } else if (pdfUrl) {
-        window.open(pdfUrl,'_blank')
+        window.open(pdfUrl, '_blank')
     } else {
         window.$message?.warning('该数据暂无PDF')
     }
@@ -377,7 +384,7 @@ const handleTableDel = ({id, status, operation}) => {
 const deleteLoading = ref(false)
 const theLogRemoveByIds = async (ids) => {
     deleteLoading.value = true
-    const { error, code } = await queryApi.theLogRemoveByIds({
+    const {error, code} = await queryApi.theLogRemoveByIds({
         ids: ids
     })
     deleteLoading.value = false

+ 5 - 4
src/views/ledger/components/weather.vue

@@ -10,13 +10,14 @@
         </template>
         <template #extra>
             <HcTooltip keys="write_weather_print">
-                <el-button hc-btn  :loading="printLoading" @click="batchPrint">
+                <el-button :loading="printLoading" hc-btn @click="batchPrint">
                     <HcIcon name="printer"/>
                     <span>打印</span>
                 </el-button>
             </HcTooltip>
         </template>
-        <HcTable :column="tableWeatherColumn" :datas="tableWeatherData" :loading="tableWeatherLoading" isCheck  @selection-change="tableWeatherSelection">
+        <HcTable :column="tableWeatherColumn" :datas="tableWeatherData" :loading="tableWeatherLoading" isCheck
+                 @selection-change="tableWeatherSelection">
             <template #tempLow="{row}">{{ row['tempLow'] }} ~ {{ row['tempHigh'] }}</template>
             <template #action="{row}">
                 <HcTooltip keys="write_weather_edit">
@@ -70,9 +71,9 @@
 
 <script setup>
 import {ref, nextTick} from "vue";
-import {deepClone, formValidate, getArrValue} from "vue-utils-plus"
 import weatherApi from '~api/ledger/weather';
 import queryApi from '~api/data-fill/query';
+import {deepClone, formValidate, getArrValue} from "js-fast-way"
 
 //参数
 const props = defineProps({
@@ -236,7 +237,7 @@ const saveWeatherClick = async () => {
 const tableweatherKeys = ref([]);
 const tableWeatherSelection = (rows) => {
     tableweatherKeys.value = rows.filter((item) => {
-        return (item??'') !== '';
+        return (item ?? '') !== '';
     })
 }
 //拼接ID

+ 1 - 2
src/views/ledger/query.vue

@@ -30,10 +30,9 @@
 import {ref, onMounted} from "vue";
 import {useAppStore} from "~src/store";
 import queryApi from '~api/ledger/query';
-import {getArrValue} from "vue-utils-plus"
 import HcTableForm from "./components/table-form.vue"
 import HcTableList from "./components/table-list.vue"
-
+import {getArrValue} from "js-fast-way"
 //初始变量
 const useAppState = useAppStore()
 

+ 20 - 15
src/views/login/index.vue

@@ -1,11 +1,11 @@
 <template>
     <div class="login-body">
-        <a href="http://hczc.hcxxy.com/" target="_blank" class="left-logo">
-            <img src="../../assets/logo/logo-2.png" alt="">
+        <a class="left-logo" href="http://hczc.hcxxy.com/" target="_blank">
+            <img alt="" src="../../assets/logo/logo-2.png">
         </a>
         <div class="left-pic-container">
             <Suspense>
-                <HcPicVue />
+                <HcPicVue/>
                 <template #fallback>
                     Loading...
                 </template>
@@ -19,13 +19,15 @@
                     <div :class="account?'active':''" @click="accountClick">密码登录</div>
                     <div :class="account?'':'active'" @click="accountClick">游客登录</div>
                 </div>
-                <div class="form-box mt-4" v-if="account">
-                    <el-form ref="formRef" :model="formValue" :rules="formRules" label-width="0px" label-position="left" size="large">
+                <div v-if="account" class="form-box mt-4">
+                    <el-form ref="formRef" :model="formValue" :rules="formRules" label-position="left" label-width="0px"
+                             size="large">
                         <el-form-item prop="username">
-                            <el-input v-model="formValue.username" placeholder="账号" clearable/>
+                            <el-input v-model="formValue.username" clearable placeholder="账号"/>
                         </el-form-item>
-                        <el-form-item prop="password" class="mt-8">
-                            <el-input type="password" v-model="formValue.password" placeholder="密码" clearable show-password @keyup="passwordKeyUp">
+                        <el-form-item class="mt-8" prop="password">
+                            <el-input v-model="formValue.password" clearable placeholder="密码" show-password
+                                      type="password" @keyup="passwordKeyUp">
                                 <template #suffix>
                                     <span class="clickable-text" @click="clickableClick">忘记密码</span>
                                 </template>
@@ -35,18 +37,21 @@
                             <el-checkbox v-model="checkbox" label="记住密码"/>
                         </el-form-item>
                         <el-form-item class="mt-8">
-                            <el-button type="primary" block :loading="loading" @click="formValidateClick">登 录</el-button>
+                            <el-button :loading="loading" block type="primary" @click="formValidateClick">登 录
+                            </el-button>
                         </el-form-item>
                     </el-form>
                 </div>
 
-                <div class="form-box mt-4" v-else>
-                    <el-form ref="touristsRef" :model="touristsForm" :rules="touristsRules" label-width="auto" label-position="left" size="large">
+                <div v-else class="form-box mt-4">
+                    <el-form ref="touristsRef" :model="touristsForm" :rules="touristsRules" label-position="left"
+                             label-width="auto" size="large">
                         <el-form-item prop="phone">
-                            <el-input v-model="touristsForm.phone" placeholder="请输入手机号" clearable/>
+                            <el-input v-model="touristsForm.phone" clearable placeholder="请输入手机号"/>
                         </el-form-item>
                         <el-form-item class="mt-8">
-                            <el-button type="primary" block :loading="loading" @click="touristsValidateClick">登 录</el-button>
+                            <el-button :loading="loading" block type="primary" @click="touristsValidateClick">登 录
+                            </el-button>
                         </el-form-item>
                     </el-form>
                 </div>
@@ -64,7 +69,7 @@ import {ref} from "vue";
 import router from '~src/router/index';
 import {useAppStore} from "~src/store";
 import {useAppLogin} from "~sto/user";
-import {formValidate} from "vue-utils-plus"
+import {formValidate} from "js-fast-way"
 import HcPicVue from './components/pic.vue'
 import HcHomeBg from './components/home-bg.vue'
 
@@ -148,7 +153,7 @@ const clickableClick = () => {
 
 <style lang="scss">
 .form-box {
-    .el-input__wrapper.is-focus{
+    .el-input__wrapper.is-focus {
         box-shadow: 0 0 0 2px var(--el-input-focus-border-color) inset;
     }
     .el-form-item.is-error .el-input__wrapper {

+ 13 - 10
src/views/other-file/components/HcFileUpload.vue

@@ -1,14 +1,17 @@
 <template>
-    <el-upload ref="uploadRef" class="hc-file-upload-box" :action="api + action" :headers="getTokenHeader()" :data="uploadData" :accept="accept" :disabled="uploadDisabled" multiple :show-file-list="false"
-               :on-success="uploadSuccess" :on-exceed="uploadExceed" :on-error="uploadError" :before-upload="beforeUpload" :on-progress="uploadprogress">
+    <el-upload ref="uploadRef" :accept="accept" :action="api + action" :before-upload="beforeUpload"
+               :data="uploadData" :disabled="uploadDisabled" :headers="getTokenHeader()" :on-error="uploadError" :on-exceed="uploadExceed"
+               :on-progress="uploadprogress" :on-success="uploadSuccess" :show-file-list="false"
+               class="hc-file-upload-box" multiple>
         <slot></slot>
     </el-upload>
 </template>
 
 <script setup>
-import {ref,watch,onMounted} from "vue";
+import {ref, watch, onMounted} from "vue";
 import {getTokenHeader} from '~src/api/request/header';
-import {isSize, deepClone, getObjValue} from "vue-utils-plus"
+import {deepClone, getObjValue, isFileSize} from "js-fast-way"
+
 const props = defineProps({
     datas: {
         type: Object,
@@ -45,7 +48,7 @@ watch(() => [
 })
 
 //渲染完成
-onMounted(()=> {
+onMounted(() => {
     beforeFileNum.value = 0
     finishFileNum.value = 0
     errorFileNum.value = 0
@@ -57,8 +60,8 @@ const emit = defineEmits(['change', 'progress'])
 //上传前
 const beforeFileNum = ref(0)
 const beforeUpload = async (file) => {
-    if (isSize(file?.size, props.size)) {
-        beforeFileNum.value ++;
+    if (isFileSize(file?.size, props.size)) {
+        beforeFileNum.value++;
         return true;
     } else {
         beforeFileNum.value = 0;
@@ -81,7 +84,7 @@ const uploadprogress = () => {
 //上传完成
 const finishFileNum = ref(0)
 const uploadSuccess = (response, uploadFile, uploadFiles) => {
-    finishFileNum.value ++;
+    finishFileNum.value++;
     if (beforeFileNum.value === finishFileNum.value) {
         const fileList = getUploadFile(deepClone(uploadFiles))
         uploadClearFiles()
@@ -92,8 +95,8 @@ const uploadSuccess = (response, uploadFile, uploadFiles) => {
 
 //上传失败
 const errorFileNum = ref(0)
-const uploadError = (error,uploadFile,uploadFiles) => {
-    errorFileNum.value ++;
+const uploadError = (error, uploadFile, uploadFiles) => {
+    errorFileNum.value++;
     window?.$message?.error('上传失败');
     const num = finishFileNum.value + errorFileNum.value;
     if (beforeFileNum.value === num) {

+ 13 - 10
src/views/other-file/components/HcFileUpload1.vue

@@ -1,15 +1,18 @@
 <template>
-    <el-upload ref="uploadRef" class="hc-file-upload-box" :action="api + action" :headers="getTokenHeader()" :data="uploadData" :accept="accept" :disabled="uploadDisabled" :limit="1" :show-file-list="false"
-               :on-success="uploadSuccess" :on-exceed="uploadExceed" :on-error="uploadError" :before-upload="beforeUpload" :on-progress="uploadprogress">
+    <el-upload ref="uploadRef" :accept="accept" :action="api + action" :before-upload="beforeUpload"
+               :data="uploadData" :disabled="uploadDisabled" :headers="getTokenHeader()" :limit="1" :on-error="uploadError"
+               :on-exceed="uploadExceed" :on-progress="uploadprogress" :on-success="uploadSuccess"
+               :show-file-list="false" class="hc-file-upload-box">
         <slot></slot>
     </el-upload>
 </template>
 
 <script setup>
-import {ref,watch,onMounted} from "vue";
+import {ref, watch, onMounted} from "vue";
 import {getTokenHeader} from '~src/api/request/header';
-import {isSize, deepClone, getObjValue} from "vue-utils-plus"
+import {deepClone, getObjValue, isFileSize} from "js-fast-way"
 import {genFileId} from "element-plus";
+
 const props = defineProps({
     datas: {
         type: Object,
@@ -46,7 +49,7 @@ watch(() => [
 })
 
 //渲染完成
-onMounted(()=> {
+onMounted(() => {
     beforeFileNum.value = 0
     finishFileNum.value = 0
     errorFileNum.value = 0
@@ -58,8 +61,8 @@ const emit = defineEmits(['change', 'progress'])
 //上传前
 const beforeFileNum = ref(0)
 const beforeUpload = async (file) => {
-    if (isSize(file?.size, props.size)) {
-        beforeFileNum.value ++;
+    if (isFileSize(file?.size, props.size)) {
+        beforeFileNum.value++;
         return true;
     } else {
         beforeFileNum.value = 0;
@@ -85,7 +88,7 @@ const uploadprogress = () => {
 //上传完成
 const finishFileNum = ref(0)
 const uploadSuccess = (response, uploadFile, uploadFiles) => {
-    finishFileNum.value ++;
+    finishFileNum.value++;
     if (beforeFileNum.value === finishFileNum.value) {
         const fileList = getUploadFile(deepClone(uploadFiles))
         uploadClearFiles()
@@ -96,8 +99,8 @@ const uploadSuccess = (response, uploadFile, uploadFiles) => {
 
 //上传失败
 const errorFileNum = ref(0)
-const uploadError = (error,uploadFile,uploadFiles) => {
-    errorFileNum.value ++;
+const uploadError = (error, uploadFile, uploadFiles) => {
+    errorFileNum.value++;
     window?.$message?.error('上传失败');
     const num = finishFileNum.value + errorFileNum.value;
     if (beforeFileNum.value === num) {

+ 8 - 7
src/views/other-file/components/WbsTree.vue

@@ -1,5 +1,6 @@
 <template>
-    <ElTree :default-expanded-keys="defaultExpandedCids" :indent="0" :load="ElTreeLoadNode" :props="ElTreeProps" accordion class="hc-tree-node tree-line"
+    <ElTree :default-expanded-keys="defaultExpandedCids" :indent="0" :load="ElTreeLoadNode" :props="ElTreeProps"
+            accordion class="hc-tree-node tree-line"
             highlight-current
             lazy node-key="primaryKeyId" @node-click="ElTreeClick">
         <template #default="{ node, data }">
@@ -21,7 +22,7 @@
 import {ref, nextTick, watch} from "vue";
 import {queryTreeList} from '~api/ledger';
 import {getTreeNodeType} from '~uti/utils';
-import {isItem, getArrValue, getObjValue} from "vue-utils-plus"
+import {isArrItem, getArrValue, getObjValue} from "js-fast-way"
 import {useAppStore} from "~src/store";
 //参数
 const props = defineProps({
@@ -79,7 +80,7 @@ watch(() => [
 })
 //获取合同段类型
 const getContractTypeKey = () => {
-    const { contractType } = contractInfo.value;
+    const {contractType} = contractInfo.value;
     if (contractType === 2 || contractType === 3) {
         return '2' ?? '1'
     } else {
@@ -97,14 +98,14 @@ const ElTreeLoadNode = async (node, resolve) => {
         parentId = nodeData?.id ?? ''
     }
     //获取数据
-      const classifyType = getContractTypeKey();
-      console.log(classifyType,'classifyType');
+    const classifyType = getContractTypeKey();
+    console.log(classifyType, 'classifyType');
     const {error, code, data} = await queryTreeList({
         contractId: contractId.value || '',
         contractIdRelation,
         primaryKeyId,
         parentId,
-        classifyType:classifyType
+        classifyType: classifyType
     })
     //处理数据
     if (!error && code === 200) {
@@ -115,7 +116,7 @@ const ElTreeLoadNode = async (node, resolve) => {
             let lastKey = keys[keys.length - 1];
             for (const item of resData) {
                 //自动展开
-                if (isItem(keys, item?.primaryKeyId)) {
+                if (isArrItem(keys, item?.primaryKeyId)) {
                     defaultExpandedArr.push(item?.primaryKeyId)
                 }
                 //最后一个,选中点击

+ 1 - 2
src/views/other-file/image-data.vue

@@ -82,8 +82,7 @@ import {useAppStore} from "~src/store";
 import {useRouter, useRoute} from 'vue-router'
 import imageApi from '~api/other-file/imageData';
 import {delStoreValue} from '~src/utils/storage'
-import {getArrValue} from "vue-utils-plus"
-
+import {getArrValue} from "js-fast-way"
 //变量
 const router = useRouter()
 const useRoutes = useRoute()

+ 2 - 1
src/views/other-file/image-form.vue

@@ -128,7 +128,8 @@ import {useRouter, useRoute} from 'vue-router'
 import WbsTree from "./components/WbsTree.vue"
 import imageApi from '~api/other-file/imageData';
 import {getStoreValue, setStoreValue} from '~src/utils/storage'
-import {formValidate, getObjValue, getRandom, deepClone, dateFormat} from "vue-utils-plus"
+import {formValidate, getObjValue, getRandom, deepClone} from "js-fast-way"
+import {dateFormat} from '~src/utils/tools'
 import ossApi from "~api/oss";
 
 //变量

+ 1 - 2
src/views/other-file/image-view.vue

@@ -124,8 +124,7 @@ import WbsTree from "./components/WbsTree.vue"
 import HcTreeData from "./components/HcTreeData.vue"
 import imageApi from '~api/other-file/imageData';
 import {getStoreValue, setStoreValue} from '~src/utils/storage'
-import {downloadBlob, getArrValue, isString} from "vue-utils-plus"
-
+import {downloadBlob, getArrValue, isString} from "js-fast-way"
 //变量
 const router = useRouter()
 const useRoutes = useRoute()

+ 1 - 1
src/views/other-file/project-scanning.vue

@@ -258,8 +258,8 @@ import HcFileUpload from "./components/HcFileUpload.vue"
 import HcFileUpload1 from "./components/HcFileUpload1.vue"
 import {getStoreValue, setStoreValue} from '~src/utils/storage'
 import projectScanningApi from "~api/other-file/projectScanning";
-import {downloadBlob, getArrValue, deepClone} from "vue-utils-plus"
 import notableform from '~src/assets/view/notableform.svg';
+import {downloadBlob, getArrValue, deepClone} from "js-fast-way"
 import {eVisaTaskCheckApi} from "~api/other"
 import tasksDataApi from '~api/tasks/data';
 import ossApi from "~api/oss";

+ 12 - 9
src/views/other/components/HcUpload.vue

@@ -1,20 +1,23 @@
 <template>
-    <el-upload class="first-item-upload" ref="uploadRef" drag
-               :limit="1" :headers="getTokenHeader()" :action="action" :data="uploadData" :accept="accept" :file-list="fileListData" :disabled="uploadDisabled" :before-remove="uploadBeforeRemove"
-               :on-preview="uploadPreview" :on-success="uploadSuccess" :on-exceed="uploadExceed" :on-error="uploadError" :before-upload="beforeUpload" :on-progress="uploadprogress">
-        <div class="hc-upload-loading" v-loading="uploadDisabled" element-loading-text="上传中...">
+    <el-upload ref="uploadRef" :accept="accept" :action="action"
+               :before-remove="uploadBeforeRemove" :before-upload="beforeUpload" :data="uploadData" :disabled="uploadDisabled" :file-list="fileListData"
+               :headers="getTokenHeader()" :limit="1" :on-error="uploadError"
+               :on-exceed="uploadExceed" :on-preview="uploadPreview" :on-progress="uploadprogress" :on-success="uploadSuccess"
+               class="first-item-upload" drag>
+        <div v-loading="uploadDisabled" class="hc-upload-loading" element-loading-text="上传中...">
             <HcIcon name="backup" ui="text-5xl mt-4"/>
             <div class="el-upload__text">拖动文件到这里 或 <em>点击这里选择文件</em> 并上传</div>
         </div>
         <template #tip>
-            <div class="el-upload__tip" style="font-size: 14px;">允许格式:jpg/png/pdf/excel/word, 文件大小 小于 60MB</div>
+            <div class="el-upload__tip" style="font-size: 14px;">允许格式:jpg/png/pdf/excel/word, 文件大小 小于 60MB
+            </div>
         </template>
     </el-upload>
 </template>
 
 <script setup>
 import {nextTick, ref, watch} from "vue";
-import {isSize} from "vue-utils-plus"
+import {isFileSize} from "js-fast-way"
 import {genFileId} from "element-plus";
 import {getTokenHeader} from '~src/api/request/header';
 
@@ -24,7 +27,7 @@ const props = defineProps({
         default: () => ([])
     },
     pkeyId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
 })
@@ -50,7 +53,7 @@ watch(() => [
 })
 
 //渲染完成
-nextTick(()=> {
+nextTick(() => {
     uploadData.value = {
         pkeyId: props.pkeyId + ''
     }
@@ -61,7 +64,7 @@ const emit = defineEmits(['finish', 'progress', 'preview'])
 
 //上传前
 const beforeUpload = async (file) => {
-    if (isSize(file?.size,60)) {
+    if (isFileSize(file?.size, 60)) {
         return true;
     } else {
         window?.$message?.warning('文件大小, 不能过60M!');

+ 14 - 7
src/views/other/components/ListItem.vue

@@ -389,9 +389,18 @@ import dataApi from "~api/tentative/detect/test";
 import thirdApi from "~api/tentative/detect/third";
 import {getTreeAll} from "~api/tentative/detect"
 import HcUpload from "./HcUpload.vue"
-import {utilsText, isType, formValidate, deepClone, getObjValue} from "vue-utils-plus"
-import {useAppStore} from "~src/store";
 import samplingApi from "~api/tentative/material/sampling"
+import {useAppStore} from "~src/store";
+import {
+    formValidate,
+    deepClone,
+    getObjValue,
+    isString,
+    getObjVal,
+    getArrValue,
+    setPosInsert,
+    setPosRange
+} from "js-fast-way"
 
 //初始
 const props = defineProps({
@@ -452,8 +461,6 @@ const props = defineProps({
         default: () => ({})
     }
 })
-const {isString, getObjNullValue, getArrValue} = isType()
-const {setPosInsert, setPosRange} = utilsText()
 const listDatas = ref(props.datas)
 const classify = ref(props.classify)
 const isStatus = ref(props.status)
@@ -697,7 +704,7 @@ const getBussDataInfo = async (item, pkeyId, index) => {
             contractId: contractId.value || '',
             firstId: pkeyId + ''
         }, false)
-        const resData = getObjNullValue(data)
+        const resData = getObjVal(data)
         if (!error && code === 200 && resData) {
             HTableForm.setPickerKey(resData)
             const InitObj = getFormDataInit(item, pkeyId) //有数据,关联数据
@@ -740,7 +747,7 @@ const rowsToArr = (rows) => {
 //保存表单数据
 const saveExcelBussData = async (item, index, showTip = true) => {
 
-    const isRegExp = !!getObjNullValue(formRegExpJson.value)
+    const isRegExp = !!getObjVal(formRegExpJson.value)
     if (!isRegExp) {
         tableFormSaveLoading.value = true
         const InitObj = getFormDataInit(item, item.id)
@@ -1675,7 +1682,7 @@ const IDVFModalSaveClick = async () => {
 
         })
         //处理数据
-        const res = getObjNullValue(data)
+        const res = getObjVal(data)
         if (!error && code === 200 && res) {
             Object.keys(data).forEach(key => {
                 formData.value[index][key] = data[key]

+ 15 - 12
src/views/other/components/WbsTree.vue

@@ -1,26 +1,29 @@
 <template>
-    <ElTree class="hc-tree-node tree-line" :props="ElTreeProps" :load="ElTreeLoadNode" lazy highlight-current accordion node-key="primaryKeyId"
-            :default-expanded-keys="defaultExpandedCids" @node-click="ElTreeClick" :indent="0">
+    <ElTree :default-expanded-keys="defaultExpandedCids" :indent="0" :load="ElTreeLoadNode" :props="ElTreeProps"
+            accordion class="hc-tree-node tree-line"
+            highlight-current
+            lazy node-key="primaryKeyId" @node-click="ElTreeClick">
         <template #default="{ node, data }">
-            <div class="data-custom-tree-node" :id="`${idPrefix}${data['primaryKeyId']}`">
-                <div class="label" :class="node.level === 1?'level-name':''">{{ node.label }}</div>
+            <div :id="`${idPrefix}${data['primaryKeyId']}`" class="data-custom-tree-node">
+                <div :class="node.level === 1?'level-name':''" class="label">{{ node.label }}</div>
             </div>
         </template>
     </ElTree>
 </template>
 
 <script setup>
-import {ref,nextTick,watch} from "vue";
+import {ref, nextTick, watch} from "vue";
 import firstApi from '~api/other/first-item';
-import {isItem,getArrValue,getObjValue} from "vue-utils-plus"
+import {getArrValue, getObjValue, isArrItem} from "js-fast-way"
+
 //参数
 const props = defineProps({
     projectId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     contractId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     autoExpandKeys: {
@@ -70,7 +73,7 @@ watch(() => [
 const defaultExpandedCids = ref([])
 const ElTreeLoadNode = async (node, resolve) => {
     //获取数据
-    const { contractIdRelation, primaryKeyId, id } = getObjValue(node?.data);
+    const {contractIdRelation, primaryKeyId, id} = getObjValue(node?.data);
     const {error, code, data} = await firstApi.queryContractWbsTreeByFirstInfo({
         contractId: contractId.value || '',
         contractIdRelation: contractIdRelation || '',
@@ -83,10 +86,10 @@ const ElTreeLoadNode = async (node, resolve) => {
         const keys = TreeExpandKey.value || []
         const resData = getArrValue(data)
         if (keys.length > 0) {
-            let lastKey = keys[keys.length-1];
+            let lastKey = keys[keys.length - 1];
             for (const item of resData) {
                 //自动展开
-                if (isItem(keys,item?.primaryKeyId)) {
+                if (isArrItem(keys, item?.primaryKeyId)) {
                     defaultExpandedArr.push(item?.primaryKeyId)
                 }
                 //最后一个,选中点击
@@ -115,7 +118,7 @@ const ElTreeLoadNode = async (node, resolve) => {
 const emit = defineEmits(['nodeTap'])
 
 //节点被点击
-const ElTreeClick = async (data,node) => {
+const ElTreeClick = async (data, node) => {
     if (isAutoKeys.value) {
         let autoKeysArr = []
         await getNodeExpandKeys(node, autoKeysArr)

+ 2 - 2
src/views/other/first-item.vue

@@ -210,9 +210,9 @@ import {getReportNumber, eVisaTaskCheckApi} from "~api/other";
 import firstApi from '~api/other/first-item';
 import tasksApi from '~api/tasks/data';
 import {getStoreValue, setStoreValue} from '~src/utils/storage'
-import {getArrValue, isString, getObjValue, getObjNullValue, deepClone} from "vue-utils-plus"
 import queryApi from "~api/data-fill/query";
 import wbsApi from "~api/data-fill/wbs";
+import {getArrValue, getObjValue, isString, deepClone, getObjVal} from "js-fast-way"
 //变量
 const router = useRouter()
 const useRoutes = useRoute()
@@ -556,7 +556,7 @@ const getFirstBussDataInfo = async (pkeyId) => {
             firstId: pkeyId + ''
         }, false)
         const info = getObjValue(data)
-        if (getObjNullValue(info)) {
+        if (getObjVal(info)) {
             HTableForm.setPickerKey(info)
             tableFormData.value = info
         } else {

+ 2 - 2
src/views/other/first-itemcopy.vue

@@ -217,7 +217,7 @@ import {getReportNumber, eVisaTaskCheckApi} from "~api/other";
 import firstApi from '~api/other/first-item';
 import tasksApi from '~api/tasks/data';
 import {getStoreValue, setStoreValue} from '~src/utils/storage'
-import {getArrValue, isString, getObjValue, getObjNullValue, deepClone} from "vue-utils-plus"
+import {getArrValue, getObjValue, isString, deepClone, getObjVal} from "js-fast-way"
 import queryApi from "~api/data-fill/query";
 import wbsApi from "~api/data-fill/wbs";
 import ListItem from "./components/ListItem.vue"
@@ -557,7 +557,7 @@ const getFirstBussDataInfo = async (pkeyId) => {
             firstId: pkeyId + ''
         }, false)
         const info = getObjValue(data)
-        if (getObjNullValue(info)) {
+        if (getObjVal(info)) {
             HTableForm.setPickerKey(info)
             tableFormData.value = info
         } else {

+ 103 - 80
src/views/other/order-service.vue

@@ -2,65 +2,74 @@
     <div class="hc-order-service">
         <div class="order-service-content">
             <el-scrollbar ref="scrollbarRef">
-                <div class="content-box" v-loading="dataLoading" element-loading-text="获取数据中...">
-                    <div class="comment-card-box" v-for="(item,index) in orderDataList" :key="item.id">
+                <div v-loading="dataLoading" class="content-box" element-loading-text="获取数据中...">
+                    <div v-for="(item,index) in orderDataList" :key="item.id" class="comment-card-box">
                         <div class="user-avatar-box">
-                            <el-avatar :size="50" :src="item.avatar || avatarPng" />
+                            <el-avatar :size="50" :src="item.avatar || avatarPng"/>
                         </div>
                         <div class="card-content-box">
                             <div class="user-info-box">
-                                <div class="text-lg">{{item['createUserName']||'用户名异常'}}</div>
-                                <div class="text-gray">{{item['createTime']}}</div>
+                                <div class="text-lg">{{ item['createUserName'] || '用户名异常' }}</div>
+                                <div class="text-gray">{{ item['createTime'] }}</div>
                             </div>
                             <div class="desc_para" v-html="item['opinionContent']"></div>
-                            <div class="image_desc" v-if="item['returnFiles']?.length > 0">
-                                <div class="hc-image-box" v-for="(items,indexs) in item['returnFiles']">
-                                    <HcImg class="hc-image" :src="items" :srcs="item['returnFiles']" :index="indexs"/>
+                            <div v-if="item['returnFiles']?.length > 0" class="image_desc">
+                                <div v-for="(items,indexs) in item['returnFiles']" class="hc-image-box">
+                                    <HcImg :index="indexs" :src="items" :srcs="item['returnFiles']" class="hc-image"/>
                                 </div>
                             </div>
                             <div class="foot-tools-box">
-                                <div class="icon-box" :class="item['commentsNumber'] >= 1 ? 'active' : ''" @click="commentExpanded(item)">
-                                    <HcIcon name="question-answer" class="icon" :fill="item['commentsNumber'] >= 1"/>
-                                    <span class="badge" v-if="item['commentsNumber'] >= 1">{{item['commentsNumber']}}</span>
+                                <div :class="item['commentsNumber'] >= 1 ? 'active' : ''" class="icon-box"
+                                     @click="commentExpanded(item)">
+                                    <HcIcon :fill="item['commentsNumber'] >= 1" class="icon" name="question-answer"/>
+                                    <span v-if="item['commentsNumber'] >= 1"
+                                          class="badge">{{ item['commentsNumber'] }}</span>
                                 </div>
-                                <div class="icon-box" :class="item['currentUserGood'] ? 'active' : ''" :data-index="item['expandedName']" @click="likeClick(item)">
-                                    <i class="hc-icon-i icon" :class="item['currentUserGood'] ? 'hcicon-praise_fill ': 'hcicon-praise'"></i>
-                                    <span class="badge" v-if="item['goodNumber'] >= 1">{{item['goodNumber']}}</span>
+                                <div :class="item['currentUserGood'] ? 'active' : ''" :data-index="item['expandedName']"
+                                     class="icon-box" @click="likeClick(item)">
+                                    <i :class="item['currentUserGood'] ? 'hcicon-praise_fill ': 'hcicon-praise'"
+                                       class="hc-icon-i icon"></i>
+                                    <span v-if="item['goodNumber'] >= 1" class="badge">{{ item['goodNumber'] }}</span>
                                 </div>
                             </div>
-                            <el-collapse class="hc-collapse-box" v-model="item['expandedName']" accordion>
-                                <el-collapse-item title="" :name="`commentList-${item['id']}`">
+                            <el-collapse v-model="item['expandedName']" accordion class="hc-collapse-box">
+                                <el-collapse-item :name="`commentList-${item['id']}`" title="">
                                     <div class="collapse-comment-box">
                                         <div class="comment-reply-content-box">
-                                            <el-input autosize type="textarea" v-model="item['replyContent']" placeholder="我也说一句"/>
-                                            <el-button type="primary" hc-btn @click="saveCommentClick(item)">评论</el-button>
+                                            <el-input v-model="item['replyContent']" autosize placeholder="我也说一句"
+                                                      type="textarea"/>
+                                            <el-button hc-btn type="primary" @click="saveCommentClick(item)">评论
+                                            </el-button>
                                         </div>
-                                        <div class="user-comment-info-box" v-for="items in item['expandedCommentList']" :key="items.id">
-                                            <el-avatar :size="50" :src="items.avatar || avatarPng" />
+                                        <div v-for="items in item['expandedCommentList']" :key="items.id"
+                                             class="user-comment-info-box">
+                                            <el-avatar :size="50" :src="items.avatar || avatarPng"/>
                                             <div class="user-comment-box">
                                                 <div class="user-info-box">
-                                                    <span class="user-name">{{items['userName']||'用户名异常'}}</span>
-                                                    <span class="create-time">{{items['createTime']}}</span>
+                                                    <span
+                                                        class="user-name">{{ items['userName'] || '用户名异常' }}</span>
+                                                    <span class="create-time">{{ items['createTime'] }}</span>
                                                 </div>
-                                                <div class="user-comment-content-box" v-html="items['replyContent']"></div>
+                                                <div class="user-comment-content-box"
+                                                     v-html="items['replyContent']"></div>
                                             </div>
                                         </div>
                                     </div>
                                 </el-collapse-item>
                             </el-collapse>
                         </div>
-                        <div class="code-status-box" v-if="parseInt(item['isSolve']) === 1">
-                            <img :src="Web515Png" class="widget" alt=""/>
+                        <div v-if="parseInt(item['isSolve']) === 1" class="code-status-box">
+                            <img :src="Web515Png" alt="" class="widget"/>
                         </div>
                     </div>
                 </div>
             </el-scrollbar>
             <div class="page-top-btn" @click="scrollToTop">
-                <HcIcon name="arrow-up" class="icon"/>
+                <HcIcon class="icon" name="arrow-up"/>
             </div>
         </div>
         <!--我的工单服务-->
-        <div class="order-service-data" :style="'width:' + leftWidth + 'px;'">
+        <div :style="'width:' + leftWidth + 'px;'" class="order-service-data">
             <HcCard :scrollbar="false">
                 <template #header>
                     <el-badge :value="2" class="item-badge">
@@ -68,45 +77,50 @@
                     </el-badge>
                 </template>
                 <template #extra>
-                    <el-tooltip effect="dark" content="发起新工单服务" placement="top">
-                        <el-button type="primary" hc-btn class="hc-add-icon" @click="newOrderServiceClick">
+                    <el-tooltip content="发起新工单服务" effect="dark" placement="top">
+                        <el-button class="hc-add-icon" hc-btn type="primary" @click="newOrderServiceClick">
                             <HcIcon name="add" style="margin-right: 0"/>
                         </el-button>
                     </el-tooltip>
                 </template>
                 <div class="mb-5">
-                    <el-select v-model="nameSelectKey" block placeholder="工单名称" size="large" @change="nameSelectUpdate">
-                        <el-option v-for="item in nameSelectData" :key="item.id" :label="item?.title" :value="item?.id"/>
+                    <el-select v-model="nameSelectKey" block placeholder="工单名称" size="large"
+                               @change="nameSelectUpdate">
+                        <el-option v-for="item in nameSelectData" :key="item.id" :label="item?.title"
+                                   :value="item?.id"/>
                     </el-select>
                 </div>
-                <div class="time-line-box" :class="isCurrentBol?'time-height':''">
+                <div :class="isCurrentBol?'time-height':''" class="time-line-box">
                     <el-scrollbar>
                         <el-timeline class="hc-time-line">
                             <template v-for="(item,index) in orderFlowList" :key="index">
-                                <el-timeline-item :class="item['currentBol']?'success':item['current']?'primary':''" size="large">
+                                <el-timeline-item :class="item['currentBol']?'success':item['current']?'primary':''"
+                                                  size="large">
                                     <div class="timeline-item-icon">
-                                        <HcIcon name="check" class="check-icon" v-if="item['currentBol']"/>
-                                        <span v-else>{{index + 1}}</span>
+                                        <HcIcon v-if="item['currentBol']" class="check-icon" name="check"/>
+                                        <span v-else>{{ index + 1 }}</span>
                                     </div>
-                                    <div class="reply-name">{{item['replyName']}}</div>
+                                    <div class="reply-name">{{ item['replyName'] }}</div>
                                     <div class="reply-content" v-html="item['replyContent']"></div>
                                 </el-timeline-item>
                             </template>
                         </el-timeline>
                     </el-scrollbar>
                 </div>
-                <div class="evaluation-box" :class="isCurrentBol?'show':''">
+                <div :class="isCurrentBol?'show':''" class="evaluation-box">
                     <div class="text-lg font-bold">评价</div>
-                    <div class="tip-box">请对工单处理评价,若是未解决问题,可进行投诉,平台核实情况,将对相关客服人员绩效考核,并且重新为您自动发起工单解决问题</div>
+                    <div class="tip-box">
+                        请对工单处理评价,若是未解决问题,可进行投诉,平台核实情况,将对相关客服人员绩效考核,并且重新为您自动发起工单解决问题
+                    </div>
                     <div class="radio-group-box">
-                        <el-radio-group class="radio-group" v-model="evaluationKey">
-                            <div class="radio-item" v-for="item in evaluationData" :key="item.value">
-                                <el-radio :label="item.value" size="large" class="size-xl">{{ item.label }}</el-radio>
+                        <el-radio-group v-model="evaluationKey" class="radio-group">
+                            <div v-for="item in evaluationData" :key="item.value" class="radio-item">
+                                <el-radio :label="item.value" class="size-xl" size="large">{{ item.label }}</el-radio>
                             </div>
                         </el-radio-group>
                     </div>
                     <div class="btn-box">
-                        <el-button type="primary" hc-btn @click="disposeUserFeedback">
+                        <el-button hc-btn type="primary" @click="disposeUserFeedback">
                             <HcIcon name="check_circle"/>
                             <span>提交</span>
                         </el-button>
@@ -117,51 +131,59 @@
             <div class="horizontal-drag-line" @mousedown="onmousedown"/>
         </div>
         <!--提交工单-->
-        <el-dialog v-model="showModal" title="发起新工单服务" width="720px" class="hc-modal-border" :before-close="handleModalClose">
+        <el-dialog v-model="showModal" :before-close="handleModalClose" class="hc-modal-border" title="发起新工单服务"
+                   width="720px">
             <div class="title">请选择您需要反馈的问题类型</div>
             <div class="hc-type-tabs my-5">
                 <el-radio-group v-model="typeTabKey" size="large" @change="typeTabChange">
-                    <el-radio-button v-for="item in typeTab" :label="item?.dictValue">{{item?.dictValue}}</el-radio-button>
+                    <el-radio-button v-for="item in typeTab" :label="item?.dictValue">{{ item?.dictValue }}
+                    </el-radio-button>
                 </el-radio-group>
             </div>
             <div class="modal-checkbox-box">
                 <el-checkbox-group v-model="typeCheckBox[typeTabIndex]">
-                    <div class="checkbox-item" v-for="item in typeTab[typeTabIndex]?.children" :key="item.id">
-                        <el-checkbox :label="item['dictValue']">{{item['dictValue']}}</el-checkbox>
+                    <div v-for="item in typeTab[typeTabIndex]?.children" :key="item.id" class="checkbox-item">
+                        <el-checkbox :label="item['dictValue']">{{ item['dictValue'] }}</el-checkbox>
                     </div>
                 </el-checkbox-group>
             </div>
             <div class="mt-5">
-                <el-input v-model="opinionContent" :rows="3" type="textarea" placeholder="请输入你宝贵的建议,我们将会跟踪解决"/>
+                <el-input v-model="opinionContent" :rows="3" placeholder="请输入你宝贵的建议,我们将会跟踪解决"
+                          type="textarea"/>
             </div>
-            <div class="mt-3 upload-img" v-loading="spinShow">
+            <div v-loading="spinShow" class="mt-3 upload-img">
                 <div class="w-full">
-                    <HcUploads :fileList="uploadFileList" :accept="uploadAccept" action="put-file" :limit="3" :size="30" :viewer="false"
-                               @change="uploadChange" @progress="uploadsProgress" @del="removeUpload" @preview="handlePreview"/>
+                    <HcUploads :accept="uploadAccept" :fileList="uploadFileList" :limit="3" :size="30" :viewer="false"
+                               action="put-file"
+                               @change="uploadChange" @del="removeUpload" @preview="handlePreview"
+                               @progress="uploadsProgress"/>
                 </div>
-                <el-image-viewer v-if="showViewer" :initial-index="initialIndex" :url-list="previewFileList" @close="previewModalClose"/>
+                <el-image-viewer v-if="showViewer" :initial-index="initialIndex" :url-list="previewFileList"
+                                 @close="previewModalClose"/>
             </div>
             <div class="mt-3">
-                <el-alert title="请上传JPG、PNG格式的图片文件,最多上传 3 张图片,文件大小不超过30M" type="error" :closable="false"/>
+                <el-alert :closable="false" title="请上传JPG、PNG格式的图片文件,最多上传 3 张图片,文件大小不超过30M"
+                          type="error"/>
             </div>
             <template #footer>
                 <div class="dialog-footer">
                     <el-button size="large" @click="handleModalClose">取消</el-button>
-                    <el-button type="primary" hc-btn :disabled="uploadsLoading" @click="saveClick">提交</el-button>
+                    <el-button :disabled="uploadsLoading" hc-btn type="primary" @click="saveClick">提交</el-button>
                 </div>
             </template>
         </el-dialog>
 
         <!--提示框-->
-        <el-dialog v-model="showTipModal" title="感谢" width="600px" class="hc-modal-border" :before-close="handleTipModalClose">
+        <el-dialog v-model="showTipModal" :before-close="handleTipModalClose" class="hc-modal-border" title="感谢"
+                   width="600px">
             <div class="tip-modal-icon-box">
-                <HcIcon name="emotion" fill/>
+                <HcIcon fill name="emotion"/>
             </div>
             <div class="tip-modal-text-box">感谢您的仗义直言,大恩不言谢,有事联系我们,我们随时都在</div>
             <template #footer>
                 <div class="dialog-footer">
                     <el-button size="large" @click="tipModalClick">下次不用感谢了</el-button>
-                    <el-button type="primary" hc-btn @click="handleTipModalClose">不客气</el-button>
+                    <el-button hc-btn type="primary" @click="handleTipModalClose">不客气</el-button>
                 </div>
             </template>
         </el-dialog>
@@ -175,12 +197,11 @@ import orderServe from '~api/other/orderServe';
 import avatarPng from '~src/assets/images/avatar.png';
 import Web515Png from '~src/assets/images/Web515.png';
 import {userConfigSave} from "~api/other";
-import {isType, base64ToFile, getObjNullValue} from "vue-utils-plus"
+import {base64ToFile, getObjVal, getArrValue, getObjValue} from "js-fast-way"
 import ossApi from "~api/oss";
 
 //初始变量
 const useAppState = useAppStore()
-const { getArrValue, getObjValue } = isType()
 const projectId = ref(useAppState.getProjectId);
 const contractId = ref(useAppState.getContractId);
 const isScreenShort = ref(useAppState.getScreenShort)
@@ -200,7 +221,7 @@ watch(() => [
     useAppState.getScreenShort
 ], ([ScreenShort]) => {
     isScreenShort.value = ScreenShort
-    if( ScreenShort ) {
+    if (ScreenShort) {
         let base64 = window.sessionStorage.getItem('screenShort-base64') || '';
         if (base64) uploadImgFile(base64)
     }
@@ -208,7 +229,7 @@ watch(() => [
 
 nextTick(() => {
     //截图数据
-    if(isScreenShort.value) {
+    if (isScreenShort.value) {
         let base64 = window.sessionStorage.getItem('screenShort-base64') || '';
         if (base64) uploadImgFile(base64)
     }
@@ -224,7 +245,7 @@ onMounted(() => {
 const dataLoading = ref(false)
 const queryUserOpinionPage = async () => {
     dataLoading.value = true
-    const { error, code, data } = await orderServe.queryUserOpinionPage(searchForm.value)
+    const {error, code, data} = await orderServe.queryUserOpinionPage(searchForm.value)
     dataLoading.value = false
     if (!error && code === 200) {
         orderDataList.value = getArrValue(data['records'])
@@ -235,7 +256,7 @@ const queryUserOpinionPage = async () => {
 
 //获取工单服务下拉列表
 const queryCurrentUserOpinionList = async () => {
-    const { error, code, data } = await orderServe.queryCurrentUserOpinionList({
+    const {error, code, data} = await orderServe.queryCurrentUserOpinionList({
         projectId: projectId.value
     })
     if (!error && code === 200) {
@@ -258,12 +279,12 @@ const isCurrentBol = ref(false)
 const orderFlowList = ref([])
 const queryUserFlowOpinion = async () => {
     let id = nameSelectKey.value || null;
-    const { error, code, data } = await orderServe.queryUserFlowOpinion({userOpinionId: id})
+    const {error, code, data} = await orderServe.queryUserFlowOpinion({userOpinionId: id})
     if (!error && code === 200) {
         const res = getArrValue(data)
         orderFlowList.value = res
         if (res.length > 0) {
-            const {currentBol, evaluation} = res[res.length-1];
+            const {currentBol, evaluation} = res[res.length - 1];
             isCurrentBol.value = !!(currentBol && parseInt(evaluation) === -1);
         }
     } else {
@@ -291,7 +312,7 @@ const commentExpanded = (item) => {
 
 //获取评论列表
 const queryCommentsList = async (item) => {
-    const { error, code, data } = await orderServe.queryCommentsList({
+    const {error, code, data} = await orderServe.queryCommentsList({
         userOpinionId: item.id
     })
     if (!error && code === 200) {
@@ -306,7 +327,7 @@ const saveCommentClick = async (item) => {
     if (!item['replyContent']) {
         window.$message?.warning('请先填写评论内容');
     } else {
-        const { error, code } = await orderServe.saveUserComments({
+        const {error, code} = await orderServe.saveUserComments({
             userOpinionId: item.id,
             replyContent: item['replyContent'],
             projectId: projectId.value,
@@ -323,21 +344,21 @@ const saveCommentClick = async (item) => {
 //点赞
 const likeClick = async (item) => {
     if (item['currentUserGood']) {
-        const { error, code } = await orderServe.cancelGood({
+        const {error, code} = await orderServe.cancelGood({
             userOpinionId: item.id
         })
         if (!error && code === 200) {
             item['currentUserGood'] = false
-            item['goodNumber'] --
+            item['goodNumber']--
         }
     } else {
-        const { error, code } = await orderServe.addGoodNumber({
+        const {error, code} = await orderServe.addGoodNumber({
             userOpinionId: item.id,
             good: 1
         })
         if (!error && code === 200) {
             item['currentUserGood'] = true
-            item['goodNumber'] ++
+            item['goodNumber']++
         }
     }
 }
@@ -370,7 +391,7 @@ const handleModalClose = () => {
 
 //获取字典信息
 const queryDictBizList = async () => {
-    const { error, code, data } = await orderServe.queryDictBizList()
+    const {error, code, data} = await orderServe.queryDictBizList()
     if (!error && code === 200) {
         const res = getArrValue(data)
         typeTab.value = res
@@ -391,7 +412,7 @@ const uploadAccept = "image/png,image/jpg,image/jpeg"
 const uploadFileList = ref([])
 
 //上传的文件结果
-const uploadChange = ({ fileList}) => {
+const uploadChange = ({fileList}) => {
     uploadFileList.value = fileList
 }
 
@@ -405,7 +426,7 @@ const uploadsProgress = (val) => {
 const showViewer = ref(false)
 const initialIndex = ref(-1)
 const previewFileList = ref([])
-const handlePreview = ({ index, fileArr}) => {
+const handlePreview = ({index, fileArr}) => {
     previewFileList.value = fileArr
     initialIndex.value = index
     showViewer.value = true
@@ -421,7 +442,7 @@ const previewModalClose = () => {
 const removeUpload = async ({link}) => {
     const arrUrl = link.split(".com//");
     if (arrUrl.length > 0) {
-        await ossApi.removeFile({fileName: arrUrl[1]},false)
+        await ossApi.removeFile({fileName: arrUrl[1]}, false)
     }
 }
 
@@ -435,7 +456,7 @@ const uploadImgFile = async (base64) => {
     //上传文件
     spinShow.value = true
     newOrderServiceClick()
-    const { error, code, data } = await ossApi.putFile(formData, false)
+    const {error, code, data} = await ossApi.putFile(formData, false)
     spinShow.value = false
     if (!error && code === 200) {
         let res = getObjValue(data)
@@ -460,14 +481,16 @@ const saveClick = async () => {
     //拼接问题类型
     let problemType = typeTabKey.value, index = typeTabIndex.value, problemVal = '';
     const checkBoxVal = typeCheckBox.value[index] || [];
-    checkBoxVal.forEach(item => {problemVal += `-${item}`})
+    checkBoxVal.forEach(item => {
+        problemVal += `-${item}`
+    })
     let filesUrl = getUploadFileUrl()
     //判断数据
     if (!problemVal) {
         window.$message?.warning('请先选择问题类型');
     } else {
         //请求接口
-        const { error, code } = await orderServe.saveUserOpinion({
+        const {error, code} = await orderServe.saveUserOpinion({
             projectId: projectId.value,
             contractId: contractId.value,
             problemType: problemType + problemVal,
@@ -485,7 +508,7 @@ const saveClick = async () => {
             //更新数据
             queryUserOpinionPage()
             queryCurrentUserOpinionList()
-              window?.location?.reload()  //刷新页面
+            window?.location?.reload()  //刷新页面
         }
     }
 }
@@ -494,7 +517,7 @@ const saveClick = async () => {
 const getUploadFileUrl = () => {
     let fileArr = [], fileList = uploadFileList.value ?? [];
     fileList.forEach(item => {
-        if (getObjNullValue(item?.response)) {
+        if (getObjVal(item?.response)) {
             fileArr.push(item?.response?.data?.link)
         } else {
             fileArr.push(item?.url)
@@ -513,7 +536,7 @@ const evaluationData = [
 ]
 const disposeUserFeedback = async () => {
     let oldEndFlow = orderFlowList.value[3]?.id || ''
-    const { error, code } = await orderServe.disposeUserFeedback({
+    const {error, code} = await orderServe.disposeUserFeedback({
         oldEndFlow: oldEndFlow,
         type: evaluationKey.value || '',
         userOpinionId: nameSelectKey.value || ''

+ 19 - 19
src/views/schedule/hc-data.vue

@@ -5,12 +5,12 @@
         </HcPageHeader>
         <div class="hc-round-chart">
             <el-row :gutter="30">
-                <el-col :span="6" v-for="item in processMaterialList">
+                <el-col v-for="item in processMaterialList" :span="6">
                     <div class="hc-round-chart-card-box">
                         <div class="hc-card-content-box">
-                            <div class="card-title">{{item['title']}}</div>
+                            <div class="card-title">{{ item['title'] }}</div>
                             <div class="card-ratio-box">
-                                <div class="ratio-num">{{item['ratio']}}</div>
+                                <div class="ratio-num">{{ item['ratio'] }}</div>
                                 <div class="ratio-text">
                                     <div class="unit">%</div>
                                     <div class="text">完成率</div>
@@ -19,18 +19,18 @@
                             <div class="card-amount-box">
                                 <div class="amount-item">
                                     <div class="text">应填(份)</div>
-                                    <div class="num">{{item['amount']}}</div>
+                                    <div class="num">{{ item['amount'] }}</div>
                                 </div>
                                 <div class="amount-divider"/>
                                 <div class="amount-item">
                                     <div class="text">已填(份)</div>
-                                    <div class="num">{{item['successAmount']}}</div>
+                                    <div class="num">{{ item['successAmount'] }}</div>
                                 </div>
                             </div>
                         </div>
                         <div class="hc-card-chart-box">
                             <RoundChart :ratio="item.ratio"/>
-                            <div class="text-num">{{item['ratio']}}%</div>
+                            <div class="text-num">{{ item['ratio'] }}%</div>
                         </div>
                     </div>
                 </el-col>
@@ -42,7 +42,7 @@
                     <div class="hc-report-chart-card-box">
                         <div class="hc-chart-title">
                             <span class="title">报表资料审批统计</span>
-                            <span class="hc-chart-text">(已审批{{materialList}}份)</span>
+                            <span class="hc-chart-text">(已审批{{ materialList }}份)</span>
                         </div>
                         <div class="hc-report-chart-box">
                             <ReportChart :datas="processMaterialStatusList"/>
@@ -53,24 +53,24 @@
                     <div class="hc-media-chart-card-box">
                         <div class="hc-chart-title">
                             <span class="title">声像媒体资料统计</span>
-                            <el-button size="large" round @click="toTableClick">
+                            <el-button round size="large" @click="toTableClick">
                                 <span>WBS节点进度</span>
-                                <HcIcon name="arrow-right-s" ui="ml-2" style="margin-right: 0;"/>
+                                <HcIcon name="arrow-right-s" style="margin-right: 0;" ui="ml-2"/>
                             </el-button>
                         </div>
                         <div class="hc-media-chart-box">
                             <div class="hc-media-pian-box">
                                 <div class="item">
                                     <span class="name">总计</span>
-                                    <span class="num">{{imageClassInfo.amount}}</span>
+                                    <span class="num">{{ imageClassInfo.amount }}</span>
                                 </div>
                                 <div class="item">
                                     <span class="name">图片</span>
-                                    <span class="num c1">{{imageClassInfo.image}}</span>
+                                    <span class="num c1">{{ imageClassInfo.image }}</span>
                                 </div>
                                 <div class="item">
                                     <span class="name">视频</span>
-                                    <span class="num c2">{{imageClassInfo.video}}</span>
+                                    <span class="num c2">{{ imageClassInfo.video }}</span>
                                 </div>
                             </div>
                             <MediaChart :datas="contractImageClassificationList"/>
@@ -89,7 +89,7 @@ import {useAppStore} from "~src/store";
 import RoundChart from "./components/echarts/RoundChart.vue"
 import ReportChart from "./components/echarts/ReportChart.vue"
 import MediaChart from "./components/echarts/MediaChart.vue"
-import {getArrValue} from "vue-utils-plus"
+import {getArrValue} from "js-fast-way"
 import DataApi from "~api/schedule/data"
 
 //变量
@@ -111,8 +111,8 @@ onMounted(() => {
 //结构类型tab数据和相关处理
 const contractTypeTabKey = ref(2)
 const contractTypeTab = ref([
-    {key:'1',  name: '施工数据'},
-    {key:'2', name: '监理数据'}
+    {key: '1', name: '施工数据'},
+    {key: '2', name: '监理数据'}
 ]);
 const contractTypeTabChange = (item) => {
     contractTypeTabKey.value = item?.key;
@@ -123,7 +123,7 @@ const contractTypeTabChange = (item) => {
 
 //获取合同段类型
 const getContractTypeKey = () => {
-    const { contractType } = contractInfo.value;
+    const {contractType} = contractInfo.value;
     if (contractType === 2 || contractType === 3) {
         return contractTypeTabKey.value ?? '1'
     } else {
@@ -137,7 +137,7 @@ const processMaterialList = ref([])
 const queryMaterialProgress = async () => {
     isProcessLoading.value = true
     const classifyType = getContractTypeKey();
-    const { error, code, data } = await DataApi.queryMaterialProgress({
+    const {error, code, data} = await DataApi.queryMaterialProgress({
         projectId: projectId.value,
         contractId: contractId.value,
         classifyType: classifyType
@@ -159,7 +159,7 @@ const processMaterialStatusList = ref([])
 const queryMaterialProgressStatus = async () => {
     isMaterialLoading.value = true
     const classifyType = getContractTypeKey();
-    const { error, code, data } = await DataApi.queryMaterialProgressStatus({
+    const {error, code, data} = await DataApi.queryMaterialProgressStatus({
         projectId: projectId.value,
         contractId: contractId.value,
         classifyType: classifyType
@@ -188,7 +188,7 @@ const imageClassInfo = ref({amount: 0, image: 0, video: 0})
 const queryImageClassification = async () => {
     isImageClassLoading.value = true
     const classifyType = getContractTypeKey();
-    const { error, code, data } = await DataApi.queryImageClassification({
+    const {error, code, data} = await DataApi.queryImageClassification({
         projectId: projectId.value,
         contractId: contractId.value,
         classifyType: classifyType

+ 48 - 29
src/views/schedule/hc-table.vue

@@ -2,40 +2,59 @@
     <div class="hc-layout-box">
         <HcCard>
             <template #header>
-                <el-button type="primary" hc-btn @click="toBackClick">
+                <el-button hc-btn type="primary" @click="toBackClick">
                     <HcIcon name="arrow-go-back"/>
                     <span>返回上一级</span>
                 </el-button>
             </template>
-            <el-table :data="tableData" lazy :load="loadData" v-loading="isLoading" border height="100%" row-key="primaryKeyId">
-                <el-table-column prop="title" label="节点名称"></el-table-column>
-                <el-table-column label="施工台账" align="center">
-                    <el-table-column prop="standingBookNotAmount" label="未开始" align="center" width="80"></el-table-column>
-                    <el-table-column prop="standingBookEndAmount" label="已完成" align="center" width="80"></el-table-column>
+            <el-table v-loading="isLoading" :data="tableData" :load="loadData" border height="100%" lazy
+                      row-key="primaryKeyId">
+                <el-table-column label="节点名称" prop="title"></el-table-column>
+                <el-table-column align="center" label="施工台账">
+                    <el-table-column align="center" label="未开始" prop="standingBookNotAmount"
+                                     width="80"></el-table-column>
+                    <el-table-column align="center" label="已完成" prop="standingBookEndAmount"
+                                     width="80"></el-table-column>
                 </el-table-column>
-                <el-table-column label="开工报告" align="center">
-                    <el-table-column prop="workStartNotSubmitAmount" label="未开始" align="center" width="80"></el-table-column>
-                    <el-table-column prop="workStartNotTaskAmount" label="未上报" align="center" width="80"></el-table-column>
-                    <el-table-column prop="workStartAwaitAmount" label="待审批" align="center" width="80"></el-table-column>
-                    <el-table-column prop="workStartApprovalAmount" label="已审批" align="center" width="80"></el-table-column>
+                <el-table-column align="center" label="开工报告">
+                    <el-table-column align="center" label="未开始" prop="workStartNotSubmitAmount"
+                                     width="80"></el-table-column>
+                    <el-table-column align="center" label="未上报" prop="workStartNotTaskAmount"
+                                     width="80"></el-table-column>
+                    <el-table-column align="center" label="待审批" prop="workStartAwaitAmount"
+                                     width="80"></el-table-column>
+                    <el-table-column align="center" label="已审批" prop="workStartApprovalAmount"
+                                     width="80"></el-table-column>
                 </el-table-column>
-                <el-table-column label="工序资料" align="center">
-                    <el-table-column prop="processNotSubmitAmount" label="未开始" align="center" width="80"></el-table-column>
-                    <el-table-column prop="processNotTaskAmount" label="未上报" align="center" width="80"></el-table-column>
-                    <el-table-column prop="processAwaitAmount" label="待审批" align="center" width="80"></el-table-column>
-                    <el-table-column prop="processApprovalAmount" label="已审批" align="center" width="80"></el-table-column>
+                <el-table-column align="center" label="工序资料">
+                    <el-table-column align="center" label="未开始" prop="processNotSubmitAmount"
+                                     width="80"></el-table-column>
+                    <el-table-column align="center" label="未上报" prop="processNotTaskAmount"
+                                     width="80"></el-table-column>
+                    <el-table-column align="center" label="待审批" prop="processAwaitAmount"
+                                     width="80"></el-table-column>
+                    <el-table-column align="center" label="已审批" prop="processApprovalAmount"
+                                     width="80"></el-table-column>
                 </el-table-column>
-                <el-table-column label="质量评定" align="center">
-                    <el-table-column prop="evaluationNotSubmitAmount" label="未开始" align="center" width="80"></el-table-column>
-                    <el-table-column prop="evaluationNotTaskAmount" label="未上报" align="center" width="80"></el-table-column>
-                    <el-table-column prop="evaluationAwaitAmount" label="待审批" align="center" width="80"></el-table-column>
-                    <el-table-column prop="evaluationApprovalAmount" label="已审批" align="center" width="80"></el-table-column>
+                <el-table-column align="center" label="质量评定">
+                    <el-table-column align="center" label="未开始" prop="evaluationNotSubmitAmount"
+                                     width="80"></el-table-column>
+                    <el-table-column align="center" label="未上报" prop="evaluationNotTaskAmount"
+                                     width="80"></el-table-column>
+                    <el-table-column align="center" label="待审批" prop="evaluationAwaitAmount"
+                                     width="80"></el-table-column>
+                    <el-table-column align="center" label="已审批" prop="evaluationApprovalAmount"
+                                     width="80"></el-table-column>
                 </el-table-column>
-                <el-table-column label="中间交工" align="center">
-                    <el-table-column prop="completionNotSubmitAmount" label="未开始" align="center" width="80"></el-table-column>
-                    <el-table-column prop="completionNotTaskAmount" label="未上报" align="center" width="80"></el-table-column>
-                    <el-table-column prop="completionAwaitAmount" label="待审批" align="center" width="80"></el-table-column>
-                    <el-table-column prop="completionApprovalAmount" label="已审批" align="center" width="80"></el-table-column>
+                <el-table-column align="center" label="中间交工">
+                    <el-table-column align="center" label="未开始" prop="completionNotSubmitAmount"
+                                     width="80"></el-table-column>
+                    <el-table-column align="center" label="未上报" prop="completionNotTaskAmount"
+                                     width="80"></el-table-column>
+                    <el-table-column align="center" label="待审批" prop="completionAwaitAmount"
+                                     width="80"></el-table-column>
+                    <el-table-column align="center" label="已审批" prop="completionApprovalAmount"
+                                     width="80"></el-table-column>
                 </el-table-column>
             </el-table>
         </HcCard>
@@ -47,7 +66,7 @@ import {ref, onMounted} from "vue";
 import {useRouter} from 'vue-router'
 import {useAppStore} from "~src/store";
 import DataApi from "~api/schedule/data"
-import {getArrValue} from "vue-utils-plus"
+import {getArrValue} from "js-fast-way"
 
 //变量
 const router = useRouter()
@@ -67,7 +86,7 @@ const isLoading = ref(false)
 const tableData = ref([])
 const getTableData = async () => {
     isLoading.value = true
-    const { error, code, data } = await DataApi.queryContractTreeMaterialProgress({
+    const {error, code, data} = await DataApi.queryContractTreeMaterialProgress({
         projectId: projectId.value,
         contractId: contractId.value,
         parentId: ''
@@ -82,7 +101,7 @@ const getTableData = async () => {
 
 //懒加载数据
 const loadData = async (row, treeNode, resolve) => {
-    const { error, code, data } = await DataApi.queryContractTreeMaterialProgress({
+    const {error, code, data} = await DataApi.queryContractTreeMaterialProgress({
         projectId: projectId.value,
         contractId: row.contractId || contractId.value,
         parentId: row.id

+ 1 - 1
src/views/schedule/write.vue

@@ -32,7 +32,7 @@ import WbsTree from "../data-fill/components/WbsTree.vue"
 import {getStoreValue, setStoreValue} from '~src/utils/storage'
 import BarChart from "./components/echarts/BarChart.vue"
 import DataApi from "~api/schedule/data"
-import {getArrValue} from "vue-utils-plus"
+import {getArrValue} from "js-fast-way"
 
 //变量
 const useAppState = useAppStore()

+ 52 - 43
src/views/tasks/components/TableCard.vue

@@ -2,33 +2,35 @@
     <HcCard>
         <template #header>
             <div class="w-32">
-                <el-select v-model="searchForm.taskType" block clearable size="large" placeholder="任务类型">
+                <el-select v-model="searchForm.taskType" block clearable placeholder="任务类型" size="large">
                     <el-option v-for="item in tasksType" :label="item.dictValue" :value="item.dictKey"/>
                 </el-select>
             </div>
             <div class="w-32 ml-3">
-                <el-select v-model="searchForm.taskStatus" block clearable size="large" placeholder="任务状态">
+                <el-select v-model="searchForm.taskStatus" block clearable placeholder="任务状态" size="large">
                     <el-option v-for="item in tasksStatus" :label="item.dictValue" :value="item.dictKey"/>
                 </el-select>
             </div>
             <div class="w-32 ml-3">
-                <el-select v-model="searchForm.contractId" placeholder="合同段" block clearable size="large" @change="ContractIdChange">
+                <el-select v-model="searchForm.contractId" block clearable placeholder="合同段" size="large"
+                           @change="ContractIdChange">
                     <el-option v-for="item in contractList" :label="item.name" :value="item.id"/>
                 </el-select>
             </div>
             <div class="w-32 ml-3">
-                <el-select v-model="searchForm.batch" block clearable size="large" placeholder="上报批次">
+                <el-select v-model="searchForm.batch" block clearable placeholder="上报批次" size="large">
                     <el-option v-for="item in reportBatch" :label="item.batch" :value="item.batch"/>
                 </el-select>
             </div>
             <div class="w-64 ml-3">
-                <HcDatePicker :dates="betweenTime" size="large" clearable @change="betweenTimeUpdate"/>
+                <HcDatePicker :dates="betweenTime" clearable size="large" @change="betweenTimeUpdate"/>
             </div>
             <div class="w-56 ml-3">
-                <el-input v-model="searchForm.queryValue" block size="large" placeholder="请输入名称关键词检索" clearable @keyup="keyUpEvent"/>
+                <el-input v-model="searchForm.queryValue" block clearable placeholder="请输入名称关键词检索"
+                          size="large" @keyup="keyUpEvent"/>
             </div>
             <div class="ml-2">
-                <el-button type="primary" size="large" @click="searchClick">
+                <el-button size="large" type="primary" @click="searchClick">
                     <HcIcon name="search-2"/>
                     <span>搜索</span>
                 </el-button>
@@ -41,25 +43,32 @@
                     <span>设置重签规则</span>
                 </el-button>
             </HcTooltip>
-            <HcTooltip keys="tasks_data_batch_review" v-if="isTableKey === 'key1'">
-                <el-button hc-btn type="primary" :disabled="tableCheckedKeys.length <= 0" @click="batchApprovalTaskClick">
+            <HcTooltip v-if="isTableKey === 'key1'" keys="tasks_data_batch_review">
+                <el-button :disabled="tableCheckedKeys.length <= 0" hc-btn type="primary"
+                           @click="batchApprovalTaskClick">
                     <HcIcon name="check-double"/>
                     <span>批量审批</span>
                 </el-button>
             </HcTooltip>
         </template>
-        <HcTable ref="tableListRef" :column="tableListColumn" :datas="tableListData" :loading="tableLoading" isCheck @selection-change="tableSelectionChange">
+        <HcTable ref="tableListRef" :column="tableListColumn" :datas="tableListData" :loading="tableLoading" isCheck
+                 @selection-change="tableSelectionChange">
             <template #taskName="{row}">
-                <span class="text-link" @click="rowTaskName(row)">{{row?.taskName}}</span>
+                <span class="text-link" @click="rowTaskName(row)">{{ row?.taskName }}</span>
             </template>
             <template #taskStatus="{row}">
-                <el-tag :type="`${row['taskStatus']['status'] === 2 ? 'success' : row['taskStatus']['status'] === 3 ? 'warning' : 'info'}`"
-                        class="mx-1" effect="dark" v-if="row?.taskStatus?.statusValue">{{row['taskStatus']['statusValue']}}</el-tag>
+                <el-tag
+                    v-if="row?.taskStatus?.statusValue"
+                    :type="`${row['taskStatus']['status'] === 2 ? 'success' : row['taskStatus']['status'] === 3 ? 'warning' : 'info'}`" class="mx-1" effect="dark">
+                    {{ row['taskStatus']['statusValue'] }}
+                </el-tag>
             </template>
             <template #waitingUserList="{row}">
                 <template v-for="item in row['waitingUserList']">
-                    <el-tag :type="`${item.status === 2 ? 'success' : item.status === 3 ? 'warning' : item.status === 999 ? 'danger' : 'info'}`"
-                            class="mx-1" effect="dark" v-if="item['waitingUserName']">{{item['waitingUserName']}}</el-tag>
+                    <el-tag
+                        v-if="item['waitingUserName']"
+                        :type="`${item.status === 2 ? 'success' : item.status === 3 ? 'warning' : item.status === 999 ? 'danger' : 'info'}`" class="mx-1" effect="dark">{{ item['waitingUserName'] }}
+                    </el-tag>
                 </template>
             </template>
         </HcTable>
@@ -67,10 +76,10 @@
             <div class="lr-dialog-footer">
                 <div class="left">
                     <span class="text-success">审批人员中:</span>
-                    <el-tag type="info" class="mx-1" effect="dark">未签字</el-tag>
-                    <el-tag type="success" class="mx-1" effect="dark">已签字</el-tag>
-                    <el-tag type="warning" class="mx-1" effect="dark">已废除</el-tag>
-                    <el-tag type="danger" class="mx-1" effect="dark">签字异常</el-tag>
+                    <el-tag class="mx-1" effect="dark" type="info">未签字</el-tag>
+                    <el-tag class="mx-1" effect="dark" type="success">已签字</el-tag>
+                    <el-tag class="mx-1" effect="dark" type="warning">已废除</el-tag>
+                    <el-tag class="mx-1" effect="dark" type="danger">签字异常</el-tag>
                 </div>
                 <div class="right">
                     <HcPages :pages="searchForm" @change="pageChange"/>
@@ -82,17 +91,17 @@
 
 <script setup>
 import {ref, nextTick, watch} from "vue";
-import {getArrValue} from "vue-utils-plus"
+import {getArrValue} from "js-fast-way"
 import tasksApi from '~api/tasks/data';
 
 //参数
 const props = defineProps({
     projectId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     contractId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     contractList: {
@@ -135,7 +144,7 @@ const setQueryData = () => {
 //获取任务类型
 const tasksType = ref([])
 const queryTaskType = async () => {
-    const { error, code, data } = await tasksApi.queryTaskTypeStatus({
+    const {error, code, data} = await tasksApi.queryTaskTypeStatus({
         typeOrStatus: 'task_type'
     })
     if (!error && code === 200) {
@@ -148,7 +157,7 @@ const queryTaskType = async () => {
 //获取任务状态
 const tasksStatus = ref([])
 const queryTaskStatus = async () => {
-    const { error, code, data } = await tasksApi.queryTaskTypeStatus({
+    const {error, code, data} = await tasksApi.queryTaskTypeStatus({
         typeOrStatus: 'task_status'
     })
     if (!error && code === 200) {
@@ -167,9 +176,9 @@ const ContractIdChange = () => {
 //获取上报批次
 const reportBatch = ref([])
 const queryBatchList = async () => {
-    const { contractId } = searchForm.value
+    const {contractId} = searchForm.value
     if (contractId) {
-        const { error, code, data } = await tasksApi.queryBatchList({
+        const {error, code, data} = await tasksApi.queryBatchList({
             projectId: projectId.value,
             contractId: contractId || ''
         })
@@ -191,7 +200,7 @@ const searchForm = ref({
 
 //日期时间被选择
 const betweenTime = ref(null)
-const betweenTimeUpdate = ({val,arr}) => {
+const betweenTimeUpdate = ({val, arr}) => {
     betweenTime.value = arr
     searchForm.value.startTime = val['start']
     searchForm.value.endTime = val['end']
@@ -221,24 +230,24 @@ const pageChange = ({current, size}) => {
 //获取数据
 const tableLoading = ref(false)
 const tableListColumn = ref([
-    {key:'taskName', name: '任务名称'},
-    {key:'typeValue', name: '任务类型', width: '120'},
-    {key:'taskStatus', name: '任务状态', width: '160'},
-    {key:'startTime', name: '开始时间', width: '180'},
-    {key:'endTime', name: '限定时间', width: '180'},
-    {key:'taskContent', name: '任务描述'},
-    {key:'reportUserName', name: '上报人', width: '120'},
-    {key:'waitingUserList', name: '签字人员'},
-    {key:'evisaContent', name: '电签状态'},
+    {key: 'taskName', name: '任务名称'},
+    {key: 'typeValue', name: '任务类型', width: '120'},
+    {key: 'taskStatus', name: '任务状态', width: '160'},
+    {key: 'startTime', name: '开始时间', width: '180'},
+    {key: 'endTime', name: '限定时间', width: '180'},
+    {key: 'taskContent', name: '任务描述'},
+    {key: 'reportUserName', name: '上报人', width: '120'},
+    {key: 'waitingUserList', name: '签字人员'},
+    {key: 'evisaContent', name: '电签状态'},
 ])
 const tableListData = ref([])
 const getTableData = () => {
     const key = isTableKey.value
     tableListRef.value?.clearSelection()
     tableCheckedKeys.value = []
-    if(key === 'key1') {
+    if (key === 'key1') {
         queryUserToDoTaskList()
-    } else if(key === 'key2') {
+    } else if (key === 'key2') {
         queryUserDoneTaskList()
     } else if (key === 'key3') {
         queryUserStartFlow()
@@ -248,7 +257,7 @@ const getTableData = () => {
 //待办任务列表
 const queryUserToDoTaskList = async () => {
     tableLoading.value = true
-    const { error, code, data } = await tasksApi.queryUserToDoTaskList({
+    const {error, code, data} = await tasksApi.queryUserToDoTaskList({
         ...searchForm.value,
         projectId: projectId.value
     })
@@ -265,7 +274,7 @@ const queryUserToDoTaskList = async () => {
 //获取已办任务
 const queryUserDoneTaskList = async () => {
     tableLoading.value = true
-    const { error, code, data } = await tasksApi.queryUserDoneTaskList({
+    const {error, code, data} = await tasksApi.queryUserDoneTaskList({
         ...searchForm.value,
         projectId: projectId.value
     })
@@ -282,7 +291,7 @@ const queryUserDoneTaskList = async () => {
 //获取我发起的
 const queryUserStartFlow = async () => {
     tableLoading.value = true
-    const { error, code, data } = await tasksApi.queryUserStartFlow({
+    const {error, code, data} = await tasksApi.queryUserStartFlow({
         ...searchForm.value,
         projectId: projectId.value
     })
@@ -302,12 +311,12 @@ const tableListRef = ref(null)
 const tableCheckedKeys = ref([]);
 const tableSelectionChange = (rows) => {
     tableCheckedKeys.value = rows.filter((item) => {
-        return (item??'') !== '';
+        return (item ?? '') !== '';
     })
 }
 
 //事件
-const emit = defineEmits(['rowTaskName','signRules','batchApproval'])
+const emit = defineEmits(['rowTaskName', 'signRules', 'batchApproval'])
 
 //任务审核
 const rowTaskName = (row) => {

+ 21 - 17
src/views/tasks/flow.vue

@@ -10,15 +10,17 @@
                 </HcTooltip>
             </template>
             <template #extra>
-                <el-alert title="同一合同段内,只需要设置重复岗位的流程即可,其他任务岗位,系统将自动推送,无需创建更多任务流" type="error" :closable="false"/>
+                <el-alert
+                    :closable="false"
+                    title="同一合同段内,只需要设置重复岗位的流程即可,其他任务岗位,系统将自动推送,无需创建更多任务流" type="error"/>
             </template>
             <HcTable :column="tableListColumn" :datas="tableListData" :loading="tableLoading">
                 <template #action="{row}">
                     <HcTooltip keys="tasks_flow_edit">
-                        <el-button type="primary" size="small" plain @click="handleTableEdit(row)">编辑</el-button>
+                        <el-button plain size="small" type="primary" @click="handleTableEdit(row)">编辑</el-button>
                     </HcTooltip>
                     <HcTooltip keys="tasks_flow_del">
-                        <el-button type="danger" size="small" plain @click="handleTableDel(row)">删除</el-button>
+                        <el-button plain size="small" type="danger" @click="handleTableDel(row)">删除</el-button>
                     </HcTooltip>
                 </template>
             </HcTable>
@@ -27,19 +29,21 @@
             </template>
         </HcCard>
         <!--新增/编辑流程 弹框-->
-        <el-dialog v-model="showEditModal" :title="`${flowFormData.id?'编辑':'新增'}流程`" width="47rem" class="hc-modal-border">
+        <el-dialog v-model="showEditModal" :title="`${flowFormData.id?'编辑':'新增'}流程`" class="hc-modal-border"
+                   width="47rem">
             <el-form ref="formFlowRef" :model="flowFormData" :rules="formFlowRules" label-width="auto" size="large">
                 <el-form-item label="流程名称" prop="fixedFlowName">
                     <el-input v-model="flowFormData.fixedFlowName" placeholder="请输入流程名称"/>
                 </el-form-item>
                 <el-form-item label="任务人" prop="linkUserJoinString">
-                    <HcTasksUser ui="w-full" :projectId="projectId" :contractId="contractId" :users="flowFormData.linkUserJoinString" @change="tasksUserChange"/>
+                    <HcTasksUser :contractId="contractId" :projectId="projectId" :users="flowFormData.linkUserJoinString"
+                                 ui="w-full" @change="tasksUserChange"/>
                 </el-form-item>
             </el-form>
             <template #footer>
                 <div class="dialog-footer">
                     <el-button size="large" @click="showEditModal = false">取消</el-button>
-                    <el-button type="primary" hc-btn :loading="sevaLoading" @click="saveFormClick">保存</el-button>
+                    <el-button :loading="sevaLoading" hc-btn type="primary" @click="saveFormClick">保存</el-button>
                 </div>
             </template>
         </el-dialog>
@@ -47,9 +51,9 @@
 </template>
 
 <script setup>
-import {ref,onMounted} from "vue";
+import {ref, onMounted} from "vue";
 import {useAppStore} from "~src/store";
-import {getArrValue, getObjValue} from "vue-utils-plus"
+import {getArrValue, getObjValue} from "js-fast-way"
 import tasksFlowApi from '~api/tasks/flow';
 
 //变量
@@ -77,14 +81,14 @@ const tableLoading = ref(false)
 const tableListData = ref([])
 
 const tableListColumn = ref([
-    {key:'fixedFlowName', name: '流程名称'},
-    {key:'linkUserJoinString', name: '流程详情'},
-    {key:'action', name: '操作', width: '200', align: 'center'},
+    {key: 'fixedFlowName', name: '流程名称'},
+    {key: 'linkUserJoinString', name: '流程详情'},
+    {key: 'action', name: '操作', width: '200', align: 'center'},
 ])
 
 const getTableData = async () => {
     tableLoading.value = true
-    const { error, code, data } = await tasksFlowApi.getPageData({
+    const {error, code, data} = await tasksFlowApi.getPageData({
         projectId: projectId.value,
         contractId: contractId.value,
         ...searchForm.value
@@ -132,11 +136,11 @@ const addFlowData = () => {
 const handleTableEdit = async (row) => {
     flowFormData.value = {id: '', fixedFlowName: '', linkUserJoinString: ''}
     showEditModal.value = true
-    const { error, code, data } = await tasksFlowApi.queryFixedFlowDetail({
+    const {error, code, data} = await tasksFlowApi.queryFixedFlowDetail({
         id: row?.id
     })
     if (!error && code === 200) {
-        let users = '',  res = getObjValue(data)
+        let users = '', res = getObjValue(data)
         const list = getArrValue(res['fixedFlowLinkList'])
         for (let i = 0; i < list.length; i++) {
             const item = getObjValue(list[i])
@@ -158,7 +162,7 @@ const saveFormClick = async () => {
     const form = flowFormData.value
     if (!form.id) {
         sevaLoading.value = true
-        const { error, code } = await tasksFlowApi.addFixedFlowData({
+        const {error, code} = await tasksFlowApi.addFixedFlowData({
             ...form,
             projectId: projectId.value,
             contractId: contractId.value
@@ -172,7 +176,7 @@ const saveFormClick = async () => {
         }
     } else {
         sevaLoading.value = true
-        const { error, code } = await tasksFlowApi.updateFixedFlowData({
+        const {error, code} = await tasksFlowApi.updateFixedFlowData({
             ...form,
             projectId: projectId.value,
             contractId: contractId.value
@@ -203,7 +207,7 @@ const handleTableDel = (row) => {
 
 //确认删除
 const removeFixedFlowData = async (row) => {
-    const { error, code } = await tasksFlowApi.removeFixedFlowData({
+    const {error, code} = await tasksFlowApi.removeFixedFlowData({
         ids: row?.id || '',
         projectId: projectId.value,
         contractId: contractId.value

+ 74 - 57
src/views/tasks/hc-data.vue

@@ -1,70 +1,88 @@
 <template>
     <div class="hc-layout-box">
-        <HcTabsSimple :datas="sbTableData" :cur="sbTableKey" @tabClick="sbTableClick">
+        <HcTabsSimple :cur="sbTableKey" :datas="sbTableData" @tabClick="sbTableClick">
             <template #tab-key1>
-                <TableCard v-if="sbTableKey === 'key1'" :projectId="projectId" :contractId="contractId" :contractList="projectInfo['contractInfoList']" :tableKey="sbTableKey"
-                           @rowTaskName="rowTaskName" @signRules="setSignRulesClick" @batchApproval="batchApprovalTaskClick"/>
+                <TableCard v-if="sbTableKey === 'key1'" :contractId="contractId"
+                           :contractList="projectInfo['contractInfoList']"
+                           :projectId="projectId" :tableKey="sbTableKey"
+                           @batchApproval="batchApprovalTaskClick" @rowTaskName="rowTaskName"
+                           @signRules="setSignRulesClick"/>
             </template>
             <template #tab-key2>
-                <TableCard v-if="sbTableKey === 'key2'" :projectId="projectId" :contractId="contractId" :contractList="projectInfo['contractInfoList']" :tableKey="sbTableKey"
-                           @rowTaskName="rowTaskName" @signRules="setSignRulesClick" @batchApproval="batchApprovalTaskClick"/>
+                <TableCard v-if="sbTableKey === 'key2'" :contractId="contractId"
+                           :contractList="projectInfo['contractInfoList']"
+                           :projectId="projectId" :tableKey="sbTableKey"
+                           @batchApproval="batchApprovalTaskClick" @rowTaskName="rowTaskName"
+                           @signRules="setSignRulesClick"/>
             </template>
             <template #tab-key3>
-                <TableCard v-if="sbTableKey === 'key3'" :projectId="projectId" :contractId="contractId" :contractList="projectInfo['contractInfoList']" :tableKey="sbTableKey"
-                           @rowTaskName="rowTaskName" @signRules="setSignRulesClick" @batchApproval="batchApprovalTaskClick"/>
+                <TableCard v-if="sbTableKey === 'key3'" :contractId="contractId"
+                           :contractList="projectInfo['contractInfoList']"
+                           :projectId="projectId" :tableKey="sbTableKey"
+                           @batchApproval="batchApprovalTaskClick" @rowTaskName="rowTaskName"
+                           @signRules="setSignRulesClick"/>
             </template>
         </HcTabsSimple>
 
         <!--任务审核-->
-        <el-dialog v-model="showTaskReviewModal" width="80vw" class="hc-modal-border hc-modal-table" draggable destroy-on-close>
+        <el-dialog v-model="showTaskReviewModal" class="hc-modal-border hc-modal-table" destroy-on-close draggable
+                   width="80vw">
             <template #header="{ titleId, titleClass }">
                 <div class="hc-card-header flex items-center">
                     <div :id="titleId" :class="titleClass">任务审核 【已开启电签】</div>
-                    <div class="ml-6 font-bold text-main" v-if="taskReviewType === '1'">任务名称:{{taskReviewInfo.taskName}}</div>
+                    <div v-if="taskReviewType === '1'" class="ml-6 font-bold text-main">
+                        任务名称:{{ taskReviewInfo.taskName }}
+                    </div>
                 </div>
             </template>
             <div class="hc-card-body-flex">
-                <div class="flex-iframe" v-if="batchPdfUrl">
-                    <embed :src="batchPdfUrl" width='100%' height='100%' type="application/pdf"/>
+                <div v-if="batchPdfUrl" class="flex-iframe">
+                    <embed :src="batchPdfUrl" height='100%' type="application/pdf" width='100%'/>
                     <!--iframe allow="display-capture" width='100%' height='100%' frameborder='1' :src="batchPdfUrl"></iframe-->
                 </div>
-                <div class="flex-iframe hc-no-table-form" v-else>
+                <div v-else class="flex-iframe hc-no-table-form">
                     <div class="table-form-no">
                         <img :src="notableform" alt=""/>
                         <div class="desc">暂无 PDF 数据</div>
                     </div>
                 </div>
-                <div class="flex-table" :class="sbTableKey === 'key1'?'':'vh'">
-                    <div class="data-table taskReviewData" v-if="taskReviewType==='1'">
+                <div :class="sbTableKey === 'key1'?'':'vh'" class="flex-table">
+                    <div v-if="taskReviewType==='1'" class="data-table taskReviewData">
                         <HcTable :column="taskReviewColumns" :datas="taskReviewData" @row-click="rowTaskReviewClick"/>
                     </div>
-                    <div class="data-table checkedRowsRef" v-if="taskReviewType==='2'">
+                    <div v-if="taskReviewType==='2'" class="data-table checkedRowsRef">
                         <HcTable :column="checkedRowsColumns" :datas="checkedRowsRef" @row-click="rowTaskReviewClick"/>
                     </div>
-                    <div class="radio-group-box" v-if="sbTableKey === 'key1'">
+                    <div v-if="sbTableKey === 'key1'" class="radio-group-box">
                         <span class="label">审批操作:</span>
                         <el-radio-group v-model="taskReviewForm.flag">
                             <el-radio label="OK">同意</el-radio>
                             <el-radio label="NO">废除任务</el-radio>
                         </el-radio-group>
                     </div>
-                    <div class="textarea-box" v-if="sbTableKey === 'key1'">
-                        <el-input type="textarea" v-model="taskReviewForm.comment" placeholder="请输入审核意见" :autosize="{ minRows: 3, maxRows: 5 }"/>
+                    <div v-if="sbTableKey === 'key1'" class="textarea-box">
+                        <el-input v-model="taskReviewForm.comment" :autosize="{ minRows: 3, maxRows: 5 }"
+                                  placeholder="请输入审核意见"
+                                  type="textarea"/>
                     </div>
                 </div>
             </div>
-            <template #footer v-if="sbTableKey === 'key1'">
+            <template v-if="sbTableKey === 'key1'" #footer>
                 <div class="dialog-footer">
                     <el-button size="large" @click="showTaskReviewModal = false">取消</el-button>
-                    <el-button type="primary" hc-btn :loading="SMSAuthLoading" @click="ConfirmApprovalClick">确认审批</el-button>
+                    <el-button :loading="SMSAuthLoading" hc-btn type="primary" @click="ConfirmApprovalClick">确认审批
+                    </el-button>
                 </div>
             </template>
         </el-dialog>
 
         <!--设置重签规则-->
-        <el-dialog v-model="showSetSignRulesModal" title="设置重签规则" width="38rem" class="hc-modal-border" draggable destroy-on-close>
+        <el-dialog v-model="showSetSignRulesModal" class="hc-modal-border" destroy-on-close draggable
+                   title="设置重签规则"
+                   width="38rem">
             <div class="text-orange mb-10">
-                <span class="mr-4">提示:设置默认时长,在任务被废除需要重签的时候,规定的重签上报时间提示时间段内,系统提示用户重签信息,但是超过处理时间,系统可默认自动授权重签</span>
+                <span
+                    class="mr-4">提示:设置默认时长,在任务被废除需要重签的时候,规定的重签上报时间提示时间段内,系统提示用户重签信息,但是超过处理时间,系统可默认自动授权重签</span>
                 <el-checkbox v-model="setPactVal" label="Option 1" size="large">
                     <span class="text-main">《授权系统自动电签协议》</span>
                 </el-checkbox>
@@ -75,18 +93,18 @@
             </div>
             <div class="obj-item-cell">
                 <div class="label">开启系统自动电签</div>
-                <el-switch v-model="formReport.active" />
+                <el-switch v-model="formReport.active"/>
             </div>
             <template #footer>
                 <div class="dialog-footer">
                     <el-button size="large" @click="showSetSignRulesModal = false">取消</el-button>
-                    <el-button type="primary" hc-btn>保存</el-button>
+                    <el-button hc-btn type="primary">保存</el-button>
                 </div>
             </template>
         </el-dialog>
 
         <!--短信认证-->
-        <HcSmsAuth :show="SMSAuthShow" :loading="SMSAuthLoading" @cancel="SMSAuthCancel" @confirm="SMSAuthConfirm"/>
+        <HcSmsAuth :loading="SMSAuthLoading" :show="SMSAuthShow" @cancel="SMSAuthCancel" @confirm="SMSAuthConfirm"/>
     </div>
 </template>
 
@@ -96,12 +114,11 @@ import {useAppStore} from "~src/store";
 import {useRouter, useRoute} from 'vue-router'
 import TableCard from './components/TableCard.vue';
 import notableform from '~src/assets/view/notableform.svg';
-import {getObjValue, getArrValue, isString} from "vue-utils-plus"
 import {checkFlowUserIsExistPfxFile} from "~api/other"
+import {getArrValue, isString} from "js-fast-way"
 import tasksApi from '~api/tasks/data';
 import dayjs from "dayjs"
 
-
 //初始变量
 const router = useRouter()
 const useRoutes = useRoute()
@@ -144,22 +161,22 @@ const taskReviewData = ref([])
 const batchPdfUrl = ref('')
 const taskReviewForm = ref({flag: 'OK', comment: ''})
 const taskReviewColumns = ref([
-    {key:'fileName', name: '文件名称'}
+    {key: 'fileName', name: '文件名称'}
 ])
 //任务审核
 const rowTaskName = async (row) => {
     if (row.formDataId) {
         taskReviewInfo.value = row
-        const { error, code, data } = await tasksApi.queryApprovalParameter({
+        const {error, code, data} = await tasksApi.queryApprovalParameter({
             parallelProcessInstanceId: row['parallelProcessInstanceId'],
             formDataId: row.formDataId,
             approvalType: row.approvalType,
         })
         if (!error && code === 200) {
-              const approvalFileList = getArrValue(data['approvalFileList'])
-             if(approvalFileList[approvalFileList.length-1].fileName===''){
-                 approvalFileList.pop()
-             }
+            const approvalFileList = getArrValue(data['approvalFileList'])
+            if (approvalFileList[approvalFileList.length - 1].fileName === '') {
+                approvalFileList.pop()
+            }
             taskReviewData.value = approvalFileList
             if (approvalFileList.length > 0) {
                 batchPdfUrl.value = approvalFileList[0].fileUrl
@@ -180,7 +197,7 @@ const rowTaskName = async (row) => {
 
 //批量审批
 const checkedRowsColumns = ref([
-    {key:'taskName', name: '任务名称'}
+    {key: 'taskName', name: '任务名称'}
 ])
 const checkedRowsRef = ref([])
 
@@ -188,12 +205,12 @@ const batchApprovalTaskClick = (rows) => {
     taskReviewType.value = '2'
     showTaskReviewModal.value = true
     checkedRowsRef.value = rows
-    let taskids=[]
-    rows.forEach((item)=>{
+    let taskids = []
+    rows.forEach((item) => {
         taskids.push(item.formDataId)
     })
-    taskids=taskids.join()
-    queryTaskInfo(rows[0],taskids)
+    taskids = taskids.join()
+    queryTaskInfo(rows[0], taskids)
 }
 
 //行被点击
@@ -209,10 +226,10 @@ const rowTaskReviewClick = async ({row}) => {
 }
 
 //获取PDF数据
-const queryTaskInfo = async (row,taskids) => {
-    const { error, code, data } = await tasksApi.queryTaskInfo({
+const queryTaskInfo = async (row, taskids) => {
+    const {error, code, data} = await tasksApi.queryTaskInfo({
         // formDataId: row['formDataId'] || '',
-        formDataId:taskids&&taskids.length>0?taskids:row['formDataId'] ,
+        formDataId: taskids && taskids.length > 0 ? taskids : row['formDataId'],
         approvalType: row['approvalType']
     })
     //处理数据
@@ -226,13 +243,13 @@ const queryTaskInfo = async (row,taskids) => {
         //     row['hc_batchPdfUrl'] = ''
         //     window?.$message?.warning('PDF获取异常')
         // }
-        const alldata=getArrValue(data)
-        let approvalFileList=[]
-        alldata.forEach((item)=>{
-           let innerfilist =item?.approvalFileList
-           innerfilist.forEach((item1)=>{
-               approvalFileList.push(item1)
-           })
+        const alldata = getArrValue(data)
+        let approvalFileList = []
+        alldata.forEach((item) => {
+            let innerfilist = item?.approvalFileList
+            innerfilist.forEach((item1) => {
+                approvalFileList.push(item1)
+            })
         })
         if (approvalFileList.length > 0) {
             batchPdfUrl.value = approvalFileList[0].fileUrl
@@ -256,7 +273,7 @@ const ConfirmApprovalClick = async () => {
         window?.$message?.warning('请先输入审核意见')
     } else {
         SMSAuthLoading.value = true
-        const {error, code, msg, data} = await checkFlowUserIsExistPfxFile({},false)
+        const {error, code, msg, data} = await checkFlowUserIsExistPfxFile({}, false)
         //判断数据
         SMSAuthLoading.value = false
         if (!error && code === 200 && data === true) {
@@ -321,7 +338,7 @@ const saveCompleteApprovalTask = async () => {
         parallelProcessInstanceId: DataInfo['parallelProcessInstanceId'] || '',
         formDataId: DataInfo['formDataId'] || '',
         approvalType: DataInfo['approvalType']
-    },false)
+    }, false)
     //处理数据
     SMSAuthLoading.value = false
     if (!error && code === 200) {
@@ -337,20 +354,20 @@ const saveCompleteApprovalTask = async () => {
 }
 
 //批量审批
-const batchCompleteApprovalTask = async() => {
+const batchCompleteApprovalTask = async () => {
     const rows = checkedRowsRef.value
     SMSAuthLoading.value = true
-    let taskIds = rowsToId(rows,'taskId')
-    let approvalType = rowsToId(rows,'approvalType')
-    let formDataId = rowsToId(rows,'formDataId')
-    let parallelProcessInstanceIds = rowsToId(rows,'parallelProcessInstanceId')
+    let taskIds = rowsToId(rows, 'taskId')
+    let approvalType = rowsToId(rows, 'approvalType')
+    let formDataId = rowsToId(rows, 'formDataId')
+    let parallelProcessInstanceIds = rowsToId(rows, 'parallelProcessInstanceId')
     const {error, code} = await tasksApi.batchCompleteApprovalTask({
         ...taskReviewForm.value,
         taskIds,
         approvalType,
         formDataId,
         parallelProcessInstanceIds
-    },false)
+    }, false)
     //处理数据
     SMSAuthLoading.value = false
     if (!error && code === 200) {
@@ -366,7 +383,7 @@ const batchCompleteApprovalTask = async() => {
 }
 
 //拼接ID
-const rowsToId = (rows,key) => {
+const rowsToId = (rows, key) => {
     return rows.map((obj) => {
         return obj[key];
     }).join(",")

+ 48 - 46
src/views/tasks/message-data.vue

@@ -9,33 +9,35 @@
             <HcCard actionSize="lg">
                 <template #header>
                     <div class="w-32 ml-2">
-                        <el-select v-model="searchForm.smsType" placeholder="消息类型" size="large" clearable>
+                        <el-select v-model="searchForm.smsType" clearable placeholder="消息类型" size="large">
                             <el-option v-for="item in smsTypeData" :label="item['label']" :value="item['value']"/>
                         </el-select>
                     </div>
                     <div class="w-64 ml-2">
-                        <HcDatePicker :dates="betweenTime" size="large" clearable @change="betweenTimeUpdate"/>
+                        <HcDatePicker :dates="betweenTime" clearable size="large" @change="betweenTimeUpdate"/>
                     </div>
                     <div class="ml-2">
-                        <el-button type="primary" size="large" @click="searchClick">
+                        <el-button size="large" type="primary" @click="searchClick">
                             <HcIcon name="search-2"/>
                             <span>搜索</span>
                         </el-button>
                     </div>
                 </template>
                 <template #extra>
-                    <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" :loading="delLoading" @click="delClick">
+                    <el-button :disabled="tableCheckedKeys.length <= 0" :loading="delLoading" hc-btn @click="delClick">
                         <HcIcon name="delete-bin-3"/>
                         <span>删除消息</span>
                     </el-button>
-                    <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" :loading="markReadLoading" @click="markReadClick">
+                    <el-button :disabled="tableCheckedKeys.length <= 0" :loading="markReadLoading" hc-btn
+                               @click="markReadClick">
                         <HcIcon name="bookmark"/>
                         <span>标记已读</span>
                     </el-button>
                 </template>
-                <HcTable ref="tableListRef" :column="tableListColumn" :datas="tableListData" :loading="tableLoading" isCheck @selection-change="tableSelectionChange">
+                <HcTable ref="tableListRef" :column="tableListColumn" :datas="tableListData" :loading="tableLoading"
+                         isCheck @selection-change="tableSelectionChange">
                     <template #content="{row}">
-                        <div class="text-link text-cut" @click="tableContent(row)">{{row.content}}</div>
+                        <div class="text-link text-cut" @click="tableContent(row)">{{ row.content }}</div>
                     </template>
                 </HcTable>
                 <template #action>
@@ -44,18 +46,18 @@
             </HcCard>
         </div>
         <!--日志内容-->
-        <el-dialog v-model="operationContentModal" title="消息内容" width="38rem" class="hc-modal-border">
-            {{operationContent}}
+        <el-dialog v-model="operationContentModal" class="hc-modal-border" title="消息内容" width="38rem">
+            {{ operationContent }}
         </el-dialog>
     </div>
 </template>
 
 <script setup>
-import {ref,onMounted,watch} from "vue";
+import {ref, onMounted, watch} from "vue";
 import {useAppStore} from "~src/store";
 import {useRouter, useRoute} from 'vue-router'
 import messageApi from '~api/tasks/message';
-import {getObjValue,getArrValue} from "vue-utils-plus"
+import {getArrValue} from "js-fast-way"
 import website from '~src/config/index'
 
 //变量
@@ -71,37 +73,37 @@ const routerQuery = useRoutes?.query;
 let MenuType = routerQuery?.MenuType || '1'
 //消息数量
 const props = defineProps(
- {
-    msgCount: {
-        type: Object,
-        default: () => ({
-            allCount: 0,
-            taskCount: 0,
-            messageCount: 0,
-            messageCount_1:0,
-            messageCount_2:0,
-            messageCount_3:0,
-            messageCount_4:0,
-            messageCount_5:0,
-        })
-    },
- }
+    {
+        msgCount: {
+            type: Object,
+            default: () => ({
+                allCount: 0,
+                taskCount: 0,
+                messageCount: 0,
+                messageCount_1: 0,
+                messageCount_2: 0,
+                messageCount_3: 0,
+                messageCount_4: 0,
+                messageCount_5: 0,
+            })
+        },
+    }
 )
 const menumsgCount = ref(props.msgCount)
 //监听
 //监听
 watch(() => [
-    props.msgCount,
-], ([val]) => {
-   menumsgCount.value=val
-   if(val){
-        queryCurrentUserMessageCount()
-   }
-  
-}  
+        props.msgCount,
+    ], ([val]) => {
+        menumsgCount.value = val
+        if (val) {
+            queryCurrentUserMessageCount()
+        }
+
+    }
 )
 //渲染完成
-onMounted(()=> {
+onMounted(() => {
     searchForm.value.type = MenuType
     searchForm.value.current = 1
     searchClick()
@@ -130,9 +132,9 @@ const handleMenuValue = (item) => {
 
 //获取消息数量
 const queryCurrentUserMessageCount = async () => {
-    const typeArr = ['messageCount_1','messageCount_2','messageCount_3','messageCount_4','messageCount_5'];
+    const typeArr = ['messageCount_1', 'messageCount_2', 'messageCount_3', 'messageCount_4', 'messageCount_5'];
     for (let i = 0; i < typeArr.length; i++) {
-        menuOptions.value[i].badge =menumsgCount.value[typeArr[i]] ?? 0
+        menuOptions.value[i].badge = menumsgCount.value[typeArr[i]] ?? 0
     }
 }
 //消息类型
@@ -146,7 +148,7 @@ const searchForm = ref({
 
 //日期时间被选择
 const betweenTime = ref(null)
-const betweenTimeUpdate = ({val,arr}) => {
+const betweenTimeUpdate = ({val, arr}) => {
     betweenTime.value = arr
     if (val && val.length > 0) {
         searchForm.value.startTime = val['start']
@@ -173,9 +175,9 @@ const pageChange = ({current, size}) => {
 //设置表头数据
 const tableListRef = ref(null)
 const tableListColumn = ref([
-    {key:'typeValue', name: '类型', width: '120'},
-    {key:'time', name: '日期时间', width: '180'},
-    {key:'content', name: '内容'},
+    {key: 'typeValue', name: '类型', width: '120'},
+    {key: 'time', name: '日期时间', width: '180'},
+    {key: 'content', name: '内容'},
 ])
 const tableListData = ref([])
 
@@ -188,7 +190,7 @@ const getTableData = async () => {
     tableListRef.value?.clearSelection()
     tableCheckedKeys.value = []
     //获取数据
-    const { error, code, data } = await messageApi.getPageData({
+    const {error, code, data} = await messageApi.getPageData({
         ...searchForm.value,
         projectId: projectId.value,
         contractId: contractId.value,
@@ -208,7 +210,7 @@ const getTableData = async () => {
 const tableCheckedKeys = ref([]);
 const tableSelectionChange = (rows) => {
     tableCheckedKeys.value = rows.filter((item) => {
-        return (item??'') !== '';
+        return (item ?? '') !== '';
     })
 }
 
@@ -218,7 +220,7 @@ const operationContent = ref('')
 const tableContent = (row) => {
     operationContent.value = row['content'] ?? ''
     operationContentModal.value = true
-    setMessageWarningReadApi(row['id'],false)
+    setMessageWarningReadApi(row['id'], false)
 }
 
 //删除消息
@@ -246,7 +248,7 @@ const removeData = async (rows) => {
     delLoading.value = true
     const ids = rowsToId(rows)
     //请求数据
-    const { error, code } = await messageApi.removeData({
+    const {error, code} = await messageApi.removeData({
         ids: ids
     }, false)
     //处理返回数据
@@ -286,7 +288,7 @@ const markReadLoading = ref(false)
 const setMessageWarningReadApi = async (ids, getTable = true) => {
     markReadLoading.value = true
     //请求数据
-    const { error, code } = await messageApi.setMessageWarningRead({
+    const {error, code} = await messageApi.setMessageWarningRead({
         ids: ids
     }, false)
     //处理返回数据

+ 81 - 24
src/views/tasks/sign-admin.vue

@@ -3,28 +3,30 @@
         <HcCard :scrollbar="false" actionSize="lg">
             <template #header>
                 <div class="w-32">
-                    <el-select v-model="searchForm.tasks" block clearable size="large" placeholder="电签任务人">
+                    <el-select v-model="searchForm.tasks" block clearable placeholder="电签任务人" size="large">
                         <el-option v-for="item in tasksData" :label="item.dictValue" :value="item.dictKey"/>
                     </el-select>
                 </div>
                 <div class="w-32 ml-3">
-                    <el-select v-model="searchForm.contract" placeholder="合同段" block clearable size="large" @change="ContractIdChange">
+                    <el-select v-model="searchForm.contract" block clearable placeholder="合同段" size="large"
+                               @change="ContractIdChange">
                         <el-option v-for="item in contractList" :label="item.name" :value="item.id"/>
                     </el-select>
                 </div>
                 <div class="w-32 ml-3">
-                    <el-select v-model="searchForm.status" block clearable size="large" placeholder="电签状态">
+                    <el-select v-model="searchForm.status" block clearable placeholder="电签状态" size="large">
                         <el-option v-for="item in statusData" :label="item.dictValue" :value="item.dictKey"/>
                     </el-select>
                 </div>
                 <div class="w-64 ml-3">
-                    <HcDatePicker :dates="betweenTime" size="large" clearable @change="betweenTimeUpdate"/>
+                    <HcDatePicker :dates="betweenTime" clearable size="large" @change="betweenTimeUpdate"/>
                 </div>
                 <div class="w-56 ml-3">
-                    <el-input v-model="searchForm.queryValue" block size="large" placeholder="请输入名称关键词检索" clearable @keyup="keyUpEvent"/>
+                    <el-input v-model="searchForm.queryValue" block clearable placeholder="请输入名称关键词检索"
+                              size="large" @keyup="keyUpEvent"/>
                 </div>
                 <div class="ml-2">
-                    <el-button type="primary" size="large" @click="searchClick">
+                    <el-button size="large" type="primary" @click="searchClick">
                         <HcIcon name="search-2"/>
                         <span>搜索</span>
                     </el-button>
@@ -38,7 +40,8 @@
                     </el-button>
                 </HcTooltip>
             </template>
-            <HcTable ref="tableListRef" :column="tableListColumn" :datas="tableData" :loading="tableLoading" isCheck @selection-change="tableSelectionChange"/>
+            <HcTable ref="tableListRef" :column="tableListColumn" :datas="tableData" :loading="tableLoading" isCheck
+                     @selection-change="tableSelectionChange"/>
             <template #action>
                 <HcPages :pages="searchForm" @change="pageChange"/>
             </template>
@@ -47,9 +50,9 @@
 </template>
 
 <script setup>
-import {ref,onMounted} from "vue";
+import {ref, onMounted} from "vue";
 import {useAppStore} from "~src/store";
-import {getObjValue,  getArrValue} from "vue-utils-plus"
+import {getObjValue, getArrValue} from "js-fast-way"
 
 //变量
 const useAppState = useAppStore()
@@ -75,7 +78,7 @@ const ContractIdChange = () => {
 
 //日期时间被选择
 const betweenTime = ref(null)
-const betweenTimeUpdate = ({val,arr}) => {
+const betweenTimeUpdate = ({val, arr}) => {
     betweenTime.value = arr
     searchForm.value.startTime = val['start']
     searchForm.value.endTime = val['end']
@@ -120,25 +123,79 @@ const tableListRef = ref(null)
 const tableCheckedKeys = ref([]);
 const tableSelectionChange = (rows) => {
     tableCheckedKeys.value = rows.filter((item) => {
-        return (item??'') !== '';
+        return (item ?? '') !== '';
     })
 }
 const tableListColumn = ref([
-    {key:'name', name: '流程名称'},
-    {key:'date', name: '任务状态'},
-    {key:'status', name: '电签状态'},
-    {key:'batch', name: '审批时间'},
-    {key:'person', name: '电签失败原因'},
-    {key:'tesk', name: '上报人'},
-    {key:'tesk1', name: '电签任务人'}
+    {key: 'name', name: '流程名称'},
+    {key: 'date', name: '任务状态'},
+    {key: 'status', name: '电签状态'},
+    {key: 'batch', name: '审批时间'},
+    {key: 'person', name: '电签失败原因'},
+    {key: 'tesk', name: '上报人'},
+    {key: 'tesk1', name: '电签任务人'}
 ])
 const tableData = ref([
-    { num: 1, name: "test1", date: "已审批-电签失败", status: "电签失败", batch: "2022-05-16 13:35", person: "xxxxx原因", tesk: "李四", tesk1: '张三' },
-    { num: 2, name: "test2", date: "已审批-电签中", status: "电签中", batch: "2022-05-16 13:35", person: "xxxxx原因", tesk: "李四", tesk1: '张三'  },
-    { num: 3, name: "test3", date: "已审批完成", status: "电签完成", batch: "2022-05-16 13:35", person: "xxxxx原因", tesk: "李四", tesk1: '张三'  },
-    { num: 4, name: "test4", date: "已审批-电签中", status: "等待电签", batch: "2022-05-16 13:35", person: "xxxxx原因", tesk: "李四", tesk1: '张三'  },
-    { num: 5, name: "test5", date: "xxxxxxxxxx", status: "xxxx", batch: "2022-05-16 13:35", person: "xxxxx原因", tesk: "李四", tesk1: '张三'  },
-    { num: 6, name: "test6", date: "xxxxxxxxxx", status: "xxxxxx", batch: "2022-05-16 13:35", person: "xxxxx原因", tesk: "李四", tesk1: '张三'  },
+    {
+        num: 1,
+        name: "test1",
+        date: "已审批-电签失败",
+        status: "电签失败",
+        batch: "2022-05-16 13:35",
+        person: "xxxxx原因",
+        tesk: "李四",
+        tesk1: '张三'
+    },
+    {
+        num: 2,
+        name: "test2",
+        date: "已审批-电签中",
+        status: "电签中",
+        batch: "2022-05-16 13:35",
+        person: "xxxxx原因",
+        tesk: "李四",
+        tesk1: '张三'
+    },
+    {
+        num: 3,
+        name: "test3",
+        date: "已审批完成",
+        status: "电签完成",
+        batch: "2022-05-16 13:35",
+        person: "xxxxx原因",
+        tesk: "李四",
+        tesk1: '张三'
+    },
+    {
+        num: 4,
+        name: "test4",
+        date: "已审批-电签中",
+        status: "等待电签",
+        batch: "2022-05-16 13:35",
+        person: "xxxxx原因",
+        tesk: "李四",
+        tesk1: '张三'
+    },
+    {
+        num: 5,
+        name: "test5",
+        date: "xxxxxxxxxx",
+        status: "xxxx",
+        batch: "2022-05-16 13:35",
+        person: "xxxxx原因",
+        tesk: "李四",
+        tesk1: '张三'
+    },
+    {
+        num: 6,
+        name: "test6",
+        date: "xxxxxxxxxx",
+        status: "xxxxxx",
+        batch: "2022-05-16 13:35",
+        person: "xxxxx原因",
+        tesk: "李四",
+        tesk1: '张三'
+    },
 ]);
 </script>
 

+ 11 - 10
src/views/tentative/collect/components/TestTree.vue

@@ -1,23 +1,24 @@
 <template>
-    <ElTree class="hc-tree-node tree-line" :class="ui" ref="ElTreeRef" :props="ElTreeProps" :load="ElTreeLoadNode" lazy show-checkbox accordion node-key="primaryKeyId"
-            :default-expanded-keys="defaultExpandedCids" :indent="0" @check="ElTreeCheckChange">
+    <ElTree ref="ElTreeRef" :class="ui" :default-expanded-keys="defaultExpandedCids" :indent="0" :load="ElTreeLoadNode" :props="ElTreeProps"
+            accordion class="hc-tree-node tree-line" lazy
+            node-key="primaryKeyId" show-checkbox @check="ElTreeCheckChange">
     </ElTree>
 </template>
 
 <script setup>
-import {ref,watch} from "vue";
+import {ref, watch} from "vue";
 import dataFillQuery from '~api/data-fill/query';
-import {getArrValue,getObjValue} from "vue-utils-plus"
+import {getArrValue, getObjValue} from "js-fast-way"
 import {useAppStore} from "~src/store";
 
 //参数
 const props = defineProps({
     projectId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     contractId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     ui: {
@@ -37,8 +38,8 @@ const projectId = ref(props.projectId);
 const contractId = ref(props.contractId);
 const useAppState = useAppStore()
 const contractInfo = ref(useAppState.getContractInfo);
-const { contractType } = contractInfo.value;
-const classifyType  = ref(contractType === 2 ? '2' : '1')
+const {contractType} = contractInfo.value;
+const classifyType = ref(contractType === 2 ? '2' : '1')
 
 //监听
 watch(() => [
@@ -64,12 +65,12 @@ const ElTreeLoadNode = async (node, resolve) => {
         primaryKeyId = nodeData?.id || ''
     }
     //获取数据
-    const { data } = await dataFillQuery.queryWbsTreeData({
+    const {data} = await dataFillQuery.queryWbsTreeData({
         contractId: contractId.value || '',
         contractIdRelation,
         primaryKeyId,
         parentId,
-        classifyType:classifyType.value
+        classifyType: classifyType.value
     })
     const resData = getArrValue(data)
     if (resData.length > 0 && node.level === 0) {

+ 33 - 26
src/views/tentative/collect/monthly.vue

@@ -1,31 +1,33 @@
 <template>
     <div class="hc-page-layout-box">
-        <div class="hc-layout-left-box" :style="'width:' + leftWidth + 'px;'">
+        <div :style="'width:' + leftWidth + 'px;'" class="hc-layout-left-box">
             <div class="hc-project-box">
                 <div class="hc-project-icon-box">
                     <HcIcon name="stack"/>
                 </div>
                 <div class="ml-2 project-name-box">
-                    <span class="text-xl text-cut project-alias">{{projectInfo['projectAlias']}}</span>
-                    <div class="text-xs text-cut project-name">{{projectInfo['name']}}</div>
+                    <span class="text-xl text-cut project-alias">{{ projectInfo['projectAlias'] }}</span>
+                    <div class="text-xs text-cut project-name">{{ projectInfo['name'] }}</div>
                 </div>
             </div>
             <div class="hc-tree-search-box">
                 <div class="hc-search-tree-val">
-                    <el-input v-model="searchTreeVal" block size="large" placeholder="请输入名称关键词检索" clearable @keyup="searchTreeKeyUp">
+                    <el-input v-model="searchTreeVal" block clearable placeholder="请输入名称关键词检索" size="large"
+                              @keyup="searchTreeKeyUp">
                         <template #suffix>
                             <HcIcon name="search-2" ui="text-xl"/>
                         </template>
                     </el-input>
                 </div>
-                <div class="hc-tree-scrollbar" v-loading="treeLoading" element-loading-text="获取数据中...">
+                <div v-loading="treeLoading" class="hc-tree-scrollbar" element-loading-text="获取数据中...">
                     <el-scrollbar>
                         <KeepAlive>
                             <template v-if="isSearchTree">
                                 <HcTreeData :datas="searchTreeData" @change="testTreeCheckChange"/>
                             </template>
                             <template v-else>
-                                <TestTree :projectId="projectId" :contractId="contractId" @change="testTreeCheckChange"/>
+                                <TestTree :contractId="contractId" :projectId="projectId"
+                                          @change="testTreeCheckChange"/>
                             </template>
                         </KeepAlive>
                     </el-scrollbar>
@@ -38,15 +40,16 @@
             <HcCard>
                 <template #header>
                     <div class="w-40">
-                        <el-select v-model="searchForm.type" placeholder="请选择材料类别" clearable size="large">
-                            <el-option v-for="item in typeData" :key="item.value" :label="item['label']" :value="item['value']"/>
+                        <el-select v-model="searchForm.type" clearable placeholder="请选择材料类别" size="large">
+                            <el-option v-for="item in typeData" :key="item.value" :label="item['label']"
+                                       :value="item['value']"/>
                         </el-select>
                     </div>
                     <div class="w-64 ml-2">
-                        <HcDatePicker :dates="betweenTime" clearable @change="betweenTimeUpdate" size="large"/>
+                        <HcDatePicker :dates="betweenTime" clearable size="large" @change="betweenTimeUpdate"/>
                     </div>
                     <div class="ml-2">
-                        <el-button type="primary" @click="searchClick" size="large">
+                        <el-button size="large" type="primary" @click="searchClick">
                             <HcIcon name="search-2"/>
                             <span>搜索</span>
                         </el-button>
@@ -54,7 +57,7 @@
                 </template>
                 <template #extra>
                     <HcTooltip keys="tentative_collect_monthly_report">
-                        <el-button type="primary" hc-btn>
+                        <el-button hc-btn type="primary">
                             <HcIcon name="send-plane-2"/>
                             <span>上报</span>
                         </el-button>
@@ -73,21 +76,24 @@
                     </HcTooltip>
                 </template>
                 <div class="hc-table-ref-box">
-                    <el-table class="hc-table-diy-box" :data="tableData" :span-method="tableSpanMethod" height="100%" style="width: 100%">
-                        <el-table-column label="试验组数" width="300" align="right">
-                            <el-table-column prop="title" label="试验项目" width="220" align="left"></el-table-column>
-                            <el-table-column prop="month" label="月" align="center" width="80"></el-table-column>
+                    <el-table :data="tableData" :span-method="tableSpanMethod" class="hc-table-diy-box" height="100%"
+                              style="width: 100%">
+                        <el-table-column align="right" label="试验组数" width="300">
+                            <el-table-column align="left" label="试验项目" prop="title" width="220"></el-table-column>
+                            <el-table-column align="center" label="月" prop="month" width="80"></el-table-column>
                         </el-table-column>
-                        <el-table-column label="承包人" align="center">
-                            <el-table-column prop="name" label="合格数" align="center"></el-table-column>
-                            <el-table-column prop="state" label="不合格数" align="center"></el-table-column>
-                            <el-table-column prop="zip" label="备注" align="center"></el-table-column>
+                        <el-table-column align="center" label="承包人">
+                            <el-table-column align="center" label="合格数" prop="name"></el-table-column>
+                            <el-table-column align="center" label="不合格数" prop="state"></el-table-column>
+                            <el-table-column align="center" label="备注" prop="zip"></el-table-column>
                         </el-table-column>
-                        <el-table-column label="操作" width="140" align="center">
+                        <el-table-column align="center" label="操作" width="140">
                             <template #default="scope">
                                 <!--scope.row scope.$index-->
                                 <HcTooltip keys="tentative_material_approach_annex">
-                                    <el-button type="primary" size="small" plain @click="editorsNoteModalClick(scope.row)">编辑备注</el-button>
+                                    <el-button plain size="small" type="primary"
+                                               @click="editorsNoteModalClick(scope.row)">编辑备注
+                                    </el-button>
                                 </HcTooltip>
                             </template>
                         </el-table-column>
@@ -100,8 +106,9 @@
         </div>
 
         <!--编辑备注-->
-        <HcDialog :show="editorsNoteModal" title="编辑备注信息" widths="45rem" :loading="editorsNoteLoading" @close="editorsNoteModalClose" @save="editorsNoteModalSave">
-            <el-input v-model="editorsNoteVal" type="textarea" placeholder="编辑备注信息" :autosize="{ minRows: 5}"/>
+        <HcDialog :loading="editorsNoteLoading" :show="editorsNoteModal" title="编辑备注信息" widths="45rem"
+                  @close="editorsNoteModalClose" @save="editorsNoteModalSave">
+            <el-input v-model="editorsNoteVal" :autosize="{ minRows: 5}" placeholder="编辑备注信息" type="textarea"/>
         </HcDialog>
 
     </div>
@@ -114,7 +121,7 @@ import {useRouter, useRoute} from 'vue-router'
 import TestTree from "./components/TestTree.vue"
 import HcTreeData from "./components/HcTreeData.vue"
 import queryApi from "~api/data-fill/query";
-import {getArrValue} from "vue-utils-plus"
+import {getArrValue} from "js-fast-way"
 
 //初始变量
 const router = useRouter()
@@ -195,7 +202,7 @@ const typeData = ref([
 
 //日期时间被选择
 const betweenTime = ref(null)
-const betweenTimeUpdate = ({arr,query}) => {
+const betweenTimeUpdate = ({arr, query}) => {
     betweenTime.value = arr
     searchForm.value.betweenTime = query
 }
@@ -304,7 +311,7 @@ const onmousedown = () => {
     const leftNum = isCollapse.value ? 142 : 272
     document.onmousemove = (ve) => {
         let diffVal = ve.clientX - leftNum;
-        if(diffVal >= 310 && diffVal <= 900) {
+        if (diffVal >= 310 && diffVal <= 900) {
             leftWidth.value = diffVal;
         }
     }

+ 22 - 16
src/views/tentative/detect/components/FormItemUpload.vue

@@ -1,26 +1,31 @@
 <template>
     <div class="form-item-dashed hover flex" @click="importModalClick">
-        <div class="flex-1 truncate" v-if="uploadValue">{{fileNameValue}}</div>
-        <div class="flex-1" v-else>点此上传文件</div>
-        <div class="text-hover" @click.stop="previewClick" v-if="uploadValue">预览文件</div>
+        <div v-if="uploadValue" class="flex-1 truncate">{{ fileNameValue }}</div>
+        <div v-else class="flex-1">点此上传文件</div>
+        <div v-if="uploadValue" class="text-hover" @click.stop="previewClick">预览文件</div>
     </div>
 
     <!--上传-->
-    <HcDialog :show="importModal" title="上传文件" widths="38rem" saveText="确认上传" :loading="uploadDisabled" @close="importModalClose" @save="importModalYesClick">
-        <el-upload ref="uploadRef" class="hc-upload-border approach" drag :action="api + action" :headers="getTokenHeader()" :data="uploadData" :accept="accept" :disabled="uploadDisabled" :limit="1" :show-file-list="false"
-                   :before-upload="beforeUpload" :on-exceed="uploadExceed" :on-progress="uploadprogress" :on-success="uploadSuccess" :on-error="uploadError" :on-change="uploadChange" :auto-upload="false">
-            <div class="hc-upload-loading upload-file-info" v-loading="uploadDisabled" element-loading-text="上传中...">
+    <HcDialog :loading="uploadDisabled" :show="importModal" saveText="确认上传" title="上传文件" widths="38rem"
+              @close="importModalClose" @save="importModalYesClick">
+        <el-upload ref="uploadRef" :accept="accept" :action="api + action" :auto-upload="false"
+                   :before-upload="beforeUpload" :data="uploadData" :disabled="uploadDisabled"
+                   :headers="getTokenHeader()" :limit="1"
+                   :on-change="uploadChange"
+                   :on-error="uploadError" :on-exceed="uploadExceed" :on-progress="uploadprogress"
+                   :on-success="uploadSuccess" :show-file-list="false" class="hc-upload-border approach" drag>
+            <div v-loading="uploadDisabled" class="hc-upload-loading upload-file-info" element-loading-text="上传中...">
                 <template v-if="uploadFileInfo?.name">
-                    <HcIcon name="file-text" class="upload-file-icon"/>
-                    <div class="upload-file-name">{{uploadFileInfo?.name}}</div>
+                    <HcIcon class="upload-file-icon" name="file-text"/>
+                    <div class="upload-file-name">{{ uploadFileInfo?.name }}</div>
                 </template>
                 <template v-else>
-                    <HcIcon name="upload-cloud" class="upload-icon"/>
+                    <HcIcon class="upload-icon" name="upload-cloud"/>
                     <div class="el-upload__text">拖动文件到这里 或 <em>点击这里选择文件</em> 并上传</div>
                 </template>
             </div>
             <template #tip>
-                <div class="el-upload__tip">允许格式:{{formatTip}}, 文件大小 小于 {{size}}MB</div>
+                <div class="el-upload__tip">允许格式:{{ formatTip }}, 文件大小 小于 {{ size }}MB</div>
             </template>
         </el-upload>
     </HcDialog>
@@ -29,8 +34,9 @@
 <script setup>
 import {ref, watch, onMounted} from "vue";
 import {getTokenHeader} from '~src/api/request/header';
-import {isSize} from "vue-utils-plus"
+import {isFileSize} from "js-fast-way"
 import {genFileId} from "element-plus";
+
 const props = defineProps({
     modelValue: {
         type: String,
@@ -71,7 +77,7 @@ const api = '/api/blade-resource/oss/endpoint/';
 watch(() => [
     props.datas,
     props.modelValue
-], ([datas,val]) => {
+], ([datas, val]) => {
     uploadData.value = datas
     uploadValue.value = val
     getFileName(val)
@@ -115,7 +121,7 @@ const getFileName = (url) => {
 
 //上传前
 const beforeUpload = async (file) => {
-    if (isSize(file?.size,props.size)) {
+    if (isFileSize(file?.size, props.size)) {
         return true;
     } else {
         window?.$message?.warning('文件大小, 不能过' + props.size + 'M!');
@@ -142,7 +148,7 @@ const uploadSuccess = ({code, data}) => {
     uploadDisabled.value = false
     emit('progress', false)
     // const pdfUrl = data?.pdfUrl ?? ''
-      const pdfUrl = data
+    const pdfUrl = data
     if (code === 200 && pdfUrl) {
         uploadValue.value = pdfUrl
         window?.$message?.success('上传成功');
@@ -171,7 +177,7 @@ const uploadChange = (file) => {
 //预览文件
 const previewClick = () => {
     const pdfUrl = uploadValue.value ?? ''
-    if (pdfUrl) window.open(pdfUrl,'_blank')
+    if (pdfUrl) window.open(pdfUrl, '_blank')
 }
 </script>
 

+ 28 - 25
src/views/tentative/detect/components/HcDragUpload.vue

@@ -1,8 +1,10 @@
 <template>
-    <el-upload class="hc-upload-border" drag :action="action" :headers="getTokenHeader()" :data="uploadData" :accept="accept" :file-list="fileListData"  :disabled="uploadDisabled"
-               :on-preview="uploadPreview"  :on-success="uploadSuccess" :on-exceed="uploadExceed" :on-error="uploadError" :before-upload="beforeUpload" :on-change="onChangeToolFile"
-               :on-progress="uploadprogress" :on-remove="uploadRemove"  ref="upload">
-        <div class="hc-upload-loading" v-loading="uploadDisabled" :element-loading-text="loadingText">
+    <el-upload ref="upload" :accept="accept" :action="action" :before-upload="beforeUpload" :data="uploadData"
+               :disabled="uploadDisabled" :file-list="fileListData" :headers="getTokenHeader()"
+               :on-change="onChangeToolFile" :on-error="uploadError" :on-exceed="uploadExceed" :on-preview="uploadPreview"
+               :on-progress="uploadprogress" :on-remove="uploadRemove"
+               :on-success="uploadSuccess" class="hc-upload-border" drag>
+        <div v-loading="uploadDisabled" :element-loading-text="loadingText" class="hc-upload-loading">
             <HcIcon name="backup" ui="text-5xl mt-4"/>
             <div class="el-upload__text">拖动文件到这里 或 <em>点击这里选择文件</em> 并上传</div>
         </div>
@@ -13,11 +15,12 @@
 </template>
 
 <script setup>
-import {ref,watch,onMounted} from "vue";
+import {ref, watch, onMounted} from "vue";
 import {getTokenHeader} from '~src/api/request/header';
 import wbsApi from "~api/data-fill/wbs"
-import {isSize} from "vue-utils-plus"
-import { genFileId } from 'element-plus'
+import {isFileSize} from "js-fast-way"
+import {genFileId} from 'element-plus'
+
 const props = defineProps({
     fileList: {
         type: Array,
@@ -27,10 +30,10 @@ const props = defineProps({
         type: Object,
         default: () => ({})
     },
-    uploadData:{
-      type: Array,
+    uploadData: {
+        type: Array,
         default: () => ([])
-  }
+    }
 })
 
 //变量
@@ -45,44 +48,44 @@ const uploadDisabled = ref(false)
 watch(() => [
     props.fileList,
     props.datas,
-    
+
 ], ([fileList, datas]) => {
     uploadData.value = datas
     fileListData.value = fileList
-  
+
 })
 
 //渲染完成
-onMounted(()=> {
+onMounted(() => {
     beforeFileNum.value = 0
     finishFileNum.value = 0
     errorFileNum.value = 0
 })
 
 //事件
-const emit = defineEmits(['change','progress','finished'])
+const emit = defineEmits(['change', 'progress', 'finished'])
 
 //上传前
 const beforeFileNum = ref(0)
 const beforeUpload = async (file) => {
-    if (isSize(file?.size,60)) {
-        beforeFileNum.value ++;
+    if (isFileSize(file?.size, 60)) {
+        beforeFileNum.value++;
         return true;
     } else {
         window?.$message?.warning('文件大小, 不能过60M!');
         return false;
     }
 }
-const upload=ref('')
+const upload = ref('')
 //超出限制时
 const uploadExceed = (files) => {
 }
 //文件改变
 
-const onChangeToolFile = (files,fileList) => {
-     fileListData.value = [files] 
-     fileList.splice(0, 1)
-        
+const onChangeToolFile = (files, fileList) => {
+    fileListData.value = [files]
+    fileList.splice(0, 1)
+
 }
 //上传中
 const loadingText = ref('上传中...')
@@ -116,7 +119,7 @@ const uploadSuccess = ({code, data}) => {
 //上传失败
 const errorFileNum = ref(0)
 const uploadError = () => {
-    errorFileNum.value ++;
+    errorFileNum.value++;
     window?.$message?.error('上传失败');
     const num = finishFileNum.value + errorFileNum.value;
     if (beforeFileNum.value === num) {
@@ -149,10 +152,10 @@ const delUploadData = async ({id}) => {
 }
 
 const uploadRemove = ({code, data}) => {
-    if(fileListData.value.length <= 0) {
+    if (fileListData.value.length <= 0) {
         emit('change', {type: 'del'})
-         emit('delFile', {type: 'del'})
-        
+        emit('delFile', {type: 'del'})
+
     }
 }
 </script>

+ 28 - 23
src/views/tentative/detect/components/HcTreeData.vue

@@ -1,13 +1,16 @@
 <template>
-    <ElTree class="hc-tree-node tree-line" ref="ElTreeRef" :props="ElTreeProps" :data="treeDatas" highlight-current accordion node-key="id"
-            :default-expanded-keys="[treeKey]" :current-node-key="treeKey" @node-click="ElTreeClick" @node-contextmenu="ElTreeLabelContextMenu" :indent="0">
+    <ElTree ref="ElTreeRef" :current-node-key="treeKey" :data="treeDatas" :default-expanded-keys="[treeKey]" :indent="0"
+            :props="ElTreeProps" accordion
+            class="hc-tree-node tree-line" highlight-current node-key="id"
+            @node-click="ElTreeClick" @node-contextmenu="ElTreeLabelContextMenu">
         <template #default="{ node, data }">
-            <div class="data-custom-tree-node" :id="`${idPrefix}${data['id']}`">
+            <div :id="`${idPrefix}${data['id']}`" class="data-custom-tree-node">
                 <!--树组件,节点名称-->
                 <div class="label">{{ node.label }}</div>
                 <!--树组件,操作菜单-->
-                <div class="menu-icon" :class="node.showTreeMenu?'show':''" v-if="menusData.length > 0" @click.stop>
-                    <div class="cu-tree-node-popover-menu-icon" @click.prevent.stop="ElTreeLabelContextMenu($event,data,node)">
+                <div v-if="menusData.length > 0" :class="node.showTreeMenu?'show':''" class="menu-icon" @click.stop>
+                    <div class="cu-tree-node-popover-menu-icon"
+                         @click.prevent.stop="ElTreeLabelContextMenu($event,data,node)">
                         <HcIcon name="menu" ui="text-2xl"/>
                     </div>
                 </div>
@@ -16,16 +19,18 @@
         </template>
     </ElTree>
     <!--右键菜单-->
-    <HcContextMenu ref="contextMenuRef" :datas="menusData" @item-click="handleMenuSelect" v-if="menusData.length > 0">
+    <HcContextMenu v-if="menusData.length > 0" ref="contextMenuRef" :datas="menusData" @item-click="handleMenuSelect">
         <template #sort="{item}">
-            <HcIcon :name="item.icon" :line="false" class="menu-item-icon"/>
-            <span class="menu-item-name">{{item.label}}</span>
+            <HcIcon :line="false" :name="item.icon" class="menu-item-icon"/>
+            <span class="menu-item-name">{{ item.label }}</span>
         </template>
     </HcContextMenu>
 
     <!--新增/编辑 节点-->
-    <HcDialog :show="nodeFormModal" :title="`${nodeFormModel.id?'编辑':'新增'}节点`" widths="30rem" :loading="nodeFormLoading" @save="nodeFormModalSave" @close="nodeFormModalClose">
-        <el-form ref="nodeFormRef"  :model="nodeFormModel" :rules="nodeFormRules" label-width="auto" label-position="top" size="large">
+    <HcDialog :loading="nodeFormLoading" :show="nodeFormModal" :title="`${nodeFormModel.id?'编辑':'新增'}节点`"
+              widths="30rem" @close="nodeFormModalClose" @save="nodeFormModalSave">
+        <el-form ref="nodeFormRef" :model="nodeFormModel" :rules="nodeFormRules" label-position="top" label-width="auto"
+                 size="large">
             <el-form-item class="mb-0" label="节点名称">
                 <el-input v-model="nodeFormModel.nodeName" placeholder="请输入节点名称"/>
             </el-form-item>
@@ -37,22 +42,22 @@
 <script setup>
 import {nextTick, onMounted, ref, watch} from "vue";
 import {HcIsButton} from "~src/plugins/IsButtons";
-import {formValidate, getArrValue} from "vue-utils-plus"
 import {getTreeAll, submitTree, removeTree} from "~api/tentative/detect"
+import {formValidate, getArrValue} from "js-fast-way"
 import {delMessage} from "~uti/tools";
 
 //参数
 const props = defineProps({
     autoExpandKeys: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     projectId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     contractId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     type: {
@@ -112,7 +117,7 @@ const setElTreeMenu = () => {
 //获取树数据
 const treeDatas = ref([])
 const getTreeDatas = async () => {
-    const { error, code, data } = await getTreeAll({
+    const {error, code, data} = await getTreeAll({
         projectId: projectId.value,
         contractId: contractId.value
     })
@@ -129,10 +134,10 @@ const getTreeDatas = async () => {
 }
 
 //事件
-const emit = defineEmits(['menuTap','nodeTap'])
+const emit = defineEmits(['menuTap', 'nodeTap'])
 
 //节点被点击
-const ElTreeClick = async (data,node) => {
+const ElTreeClick = async (data, node) => {
     emit('nodeTap', {node, data, keys: data.id})
 }
 
@@ -140,7 +145,7 @@ const ElTreeClick = async (data,node) => {
 const treeRefNode = ref(null)
 const treeRefData = ref(null)
 const contextMenuRef = ref(null)
-const ElTreeLabelContextMenu = (e,data,node) => {
+const ElTreeLabelContextMenu = (e, data, node) => {
     const rows = menusData.value || [];
     if (rows.length > 0) {
         e.preventDefault();
@@ -155,16 +160,16 @@ const ElTreeLabelContextMenu = (e,data,node) => {
 const handleMenuSelect = ({key}) => {
     const data = treeRefData.value;
     if (key === 'add') {
-        emit('menuTap', { data})
+        emit('menuTap', {data})
         nodeFormModel.value = {
             parentId: data.id,
             nodeType: data.nodeType,
             nodeName: ''
         }
-        if(data?.isData!==1){
+        if (data?.isData !== 1) {
             nodeFormModal.value = true
         }
-        
+
     } else if (key === 'edit') {
         nodeFormModel.value = data
         nodeFormModal.value = true
@@ -195,7 +200,7 @@ const nodeFormModalSave = async () => {
     const validate = await formValidate(nodeFormRef.value)
     if (validate) {
         //发起请求
-        const { error, code } = await submitTree({
+        const {error, code} = await submitTree({
             ...nodeFormModel.value,
             projectId: projectId.value,
             contractId: contractId.value
@@ -216,7 +221,7 @@ const nodeFormModalClose = () => {
 
 //删除节点
 const treeRemoveData = async (id) => {
-    const { error, code } = await removeTree({
+    const {error, code} = await removeTree({
         projectId: projectId.value,
         contractId: contractId.value,
         id: id

+ 24 - 20
src/views/tentative/detect/components/HcUpload.vue

@@ -1,22 +1,26 @@
 <template>
-    <el-upload class="hc-upload-border" drag :action="action" :headers="getTokenHeader()" :data="uploadData" :accept="accept" :file-list="fileListData" multiple :disabled="uploadDisabled"
-               :on-preview="uploadPreview" :before-remove="delUploadData" :on-success="uploadSuccess" :on-exceed="uploadExceed" :on-error="uploadError" :before-upload="beforeUpload"
-               :on-progress="uploadprogress" :on-remove="uploadRemove">
-        <div class="hc-upload-loading" v-loading="uploadDisabled" :element-loading-text="loadingText">
+    <el-upload :accept="accept" :action="action" :before-remove="delUploadData" :before-upload="beforeUpload" :data="uploadData"
+               :disabled="uploadDisabled" :file-list="fileListData" :headers="getTokenHeader()" :on-error="uploadError"
+               :on-exceed="uploadExceed" :on-preview="uploadPreview" :on-progress="uploadprogress"
+               :on-remove="uploadRemove" :on-success="uploadSuccess" class="hc-upload-border"
+               drag multiple>
+        <div v-loading="uploadDisabled" :element-loading-text="loadingText" class="hc-upload-loading">
             <HcIcon name="backup" ui="text-5xl mt-4"/>
             <div class="el-upload__text">拖动文件到这里 或 <em>点击这里选择文件</em> 并上传</div>
         </div>
         <template #tip>
-            <div class="el-upload__tip" style="font-size: 14px;">允许格式:jpg/png/pdf/excel/word, 文件大小 小于 60MB</div>
+            <div class="el-upload__tip" style="font-size: 14px;">允许格式:jpg/png/pdf/excel/word, 文件大小 小于 60MB
+            </div>
         </template>
     </el-upload>
 </template>
 
 <script setup>
-import {ref,watch,onMounted} from "vue";
+import {ref, watch, onMounted} from "vue";
 import {getTokenHeader} from '~src/api/request/header';
 import wbsApi from "~api/data-fill/wbs"
-import {isSize} from "vue-utils-plus"
+import {isFileSize} from "js-fast-way"
+
 const props = defineProps({
     fileList: {
         type: Array,
@@ -26,15 +30,15 @@ const props = defineProps({
         type: Object,
         default: () => ({})
     },
-    baseData:{
+    baseData: {
         type: Object,
         default: () => ({})
     },
-    contractId:{
+    contractId: {
         type: String,
         default: () => ('')
     },
-    tableTypeValue:{
+    tableTypeValue: {
         type: String,
         default: () => ('')
     }
@@ -61,7 +65,7 @@ watch(() => [
 })
 
 //渲染完成
-onMounted(()=> {
+onMounted(() => {
     beforeFileNum.value = 0
     finishFileNum.value = 0
     errorFileNum.value = 0
@@ -73,8 +77,8 @@ const emit = defineEmits(['change'])
 //上传前
 const beforeFileNum = ref(0)
 const beforeUpload = async (file) => {
-    if (isSize(file?.size,60)) {
-        beforeFileNum.value ++;
+    if (isFileSize(file?.size, 60)) {
+        beforeFileNum.value++;
         return true;
     } else {
         window?.$message?.warning('文件大小, 不能过60M!');
@@ -97,7 +101,7 @@ const uploadprogress = () => {
 //上传完成
 const finishFileNum = ref(0)
 const uploadSuccess = () => {
-    finishFileNum.value ++;
+    finishFileNum.value++;
     if (beforeFileNum.value === finishFileNum.value) {
         uploadDisabled.value = false
         emit('change', {type: 'success'})
@@ -107,7 +111,7 @@ const uploadSuccess = () => {
 //上传失败
 const errorFileNum = ref(0)
 const uploadError = () => {
-    errorFileNum.value ++;
+    errorFileNum.value++;
     window?.$message?.error('上传失败');
     const num = finishFileNum.value + errorFileNum.value;
     if (beforeFileNum.value === num) {
@@ -125,14 +129,14 @@ const uploadPreview = ({url}) => {
 
 //删除文件
 const delUploadData = async ({id}) => {
- 
+
     loadingText.value = '删除中...'
     uploadDisabled.value = true
     const {error, code} = await wbsApi.removeBussFile1({
         ids: id,
-        tableType:tableType.value,
-        contractId:contractId.value,
-        id:baseData.value.id
+        tableType: tableType.value,
+        contractId: contractId.value,
+        id: baseData.value.id
     })
     uploadDisabled.value = false
     if (!error && code === 200) {
@@ -144,7 +148,7 @@ const delUploadData = async ({id}) => {
 }
 
 const uploadRemove = () => {
-    if(fileListData.value.length <= 0) {
+    if (fileListData.value.length <= 0) {
         emit('change', {type: 'del'})
     }
 }

Разлика између датотеке није приказан због своје велике величине
+ 282 - 253
src/views/tentative/detect/components/ListItem.vue


+ 1 - 2
src/views/tentative/detect/outside.vue

@@ -294,9 +294,8 @@ import TestTree from "../material/components/TestTree.vue"
 import {getStoreValue, setStoreValue} from '~src/utils/storage'
 import dataApi from "~api/tentative/detect/third";
 import samplingApi from "~api/tentative/material/sampling"
-import {formValidate, getArrValue} from "vue-utils-plus";
 import {delMessage, rowsToId} from "~uti/tools";
-
+import {formValidate, getArrValue} from "js-fast-way"
 //变量
 const useAppState = useAppStore()
 const projectId = ref(useAppState.getProjectId);

+ 1 - 3
src/views/tentative/detect/test-form.vue

@@ -216,7 +216,7 @@ import queryApi from '~api/data-fill/query';
 import {getStoreValue, setStoreValue} from '~src/utils/storage'
 import TestTree from "../material/components/TestTree.vue"
 import TestTreeMaterial from "../material/components/TestTreeMaterial.vue"
-import {getArrValue, getObjValue, getObjNullValue, isString} from "vue-utils-plus";
+import {getArrValue, getObjValue, isString} from "js-fast-way"
 import {getDictionary} from "~api/other";
 import {rowsToId} from "~uti/tools";
 import dayjs from "dayjs"
@@ -224,9 +224,7 @@ import {Loading} from "element-plus/es/components/loading/src/service";
 import {eVisaTaskCheckApi} from "~api/other"
 import wbsApi from "~api/data-fill/wbs"
 
-
 //变量
-
 const router = useRouter()
 const useRoutes = useRoute()
 const useAppState = useAppStore()

+ 2 - 2
src/views/tentative/detect/test.vue

@@ -131,7 +131,7 @@
                         </el-tag>
                     </template>
                     <template #detectionCategory="{row}">
-                        <!-- <span>{{getArrKeyValue(categoryData, 'dictKey', 'dictValue', row.detectionCategory)}}</span> -->
+                        <!-- <span>{{arrKeyValue(categoryData, 'dictKey', 'dictValue', row.detectionCategory)}}</span> -->
                         <span>{{ row.detectionCategoryName }}</span>
                     </template>
                     <template #isUploadCertificate="{row}">
@@ -215,13 +215,13 @@ import {useRouter} from 'vue-router'
 import {useAppStore} from "~src/store";
 import TestTree from "../material/components/TestTree.vue"
 import {getStoreValue, setStoreValue, delStoreValue} from '~src/utils/storage'
-import {getArrValue, getArrKeyValue, isString} from "vue-utils-plus";
 import HcDragUpload from "./components/HcDragUpload.vue"
 import dataApi from "~api/tentative/detect/test";
 import {delMessage, rowsToId} from "~uti/tools";
 import {getDictionary} from "~api/other";
 import {eVisaTaskCheckApi} from "~api/other"
 import wbsApi from "~api/data-fill/wbs"
+import {getArrValue, arrKeyValue, isString} from "js-fast-way"
 import {Loading} from "element-plus/es/components/loading/src/service";
 import notableform from '~src/assets/view/notableform.svg';
 

+ 1 - 1
src/views/tentative/detect/third.vue

@@ -293,7 +293,7 @@ import TestTree from "../material/components/TestTree.vue"
 import {getStoreValue, setStoreValue} from '~src/utils/storage'
 import dataApi from "~api/tentative/detect/third";
 import samplingApi from "~api/tentative/material/sampling"
-import {formValidate, getArrValue} from "vue-utils-plus";
+import {formValidate, getArrValue} from "js-fast-way"
 import {delMessage, rowsToId} from "~uti/tools";
 
 //变量

+ 5 - 5
src/views/user/auth.vue

@@ -1,12 +1,12 @@
 <template>
-    <div class="hc-body-loading" v-loading="loading" element-loading-text="授权登录中...">
-        <div class="error-page" v-if="isErrorShow">
-            <div class="img" :style="`background-image: url(${svg403});`"/>
+    <div v-loading="loading" class="hc-body-loading" element-loading-text="授权登录中...">
+        <div v-if="isErrorShow" class="error-page">
+            <div :style="`background-image: url(${svg403});`" class="img"/>
             <div class="content">
                 <h1>403</h1>
                 <div class="desc">抱歉,token授权登录异常,请重新进入</div>
                 <div class="actions">
-                    <el-button type="primary" block @click="toLoginTap" size="large">手动登录</el-button>
+                    <el-button block size="large" type="primary" @click="toLoginTap">手动登录</el-button>
                 </div>
             </div>
         </div>
@@ -36,7 +36,7 @@ const isErrorShow = ref(false)
 //渲染完成
 onMounted(() => {
     // 域名后加  /#/auth?token=xxxxxxx&account=aaaa&timestamp=1670233144838&timeInterval=300&moduleCode=UTF-8
-    const { token, account, timestamp, timeInterval, moduleCode } = useRoutes?.query;
+    const {token, account, timestamp, timeInterval, moduleCode} = useRoutes?.query;
     if (token && account && timestamp && timeInterval && moduleCode) {
         isErrorShow.value = false
         loginByTokenApi({

Неке датотеке нису приказане због велике количине промена