ZaiZai hace 2 años
padre
commit
08efc44e2e

+ 92 - 77
src/views/tentative/device/approach.vue

@@ -1,17 +1,18 @@
 <template>
     <div class="hc-page-layout-box">
-        <div class="hc-layout-left-box menu" :style="'width:' + leftWidth + 'px;'">
+        <div :style="'width:' + leftWidth + 'px;'" class="hc-layout-left-box menu">
             <div class="hc-menu-header-box">
                 <div class="text-xl name">设备分类</div>
                 <HcTooltip keys="tentative_device_approach_menu_add">
-                    <el-button type="primary" hc-btn _icon size="small" @click="addEditNodeFormModalClick">
+                    <el-button _icon hc-btn size="small" type="primary" @click="addEditNodeFormModalClick">
                         <HcIcon name="add"/>
                     </el-button>
                 </HcTooltip>
             </div>
             <div class="hc-menu-contents-box">
                 <el-scrollbar>
-                    <HcMenuSimple :props="menusProps" :datas="menus" :keys="menuKey" :menus="contextMenu" @change="menuChange" @menuTap="contextMenuClick"/>
+                    <HcMenuSimple :datas="menus" :keys="menuKey" :menus="contextMenu" :props="menusProps"
+                                  @change="menuChange" @menuTap="contextMenuClick"/>
                 </el-scrollbar>
             </div>
             <!--左右拖动-->
@@ -21,25 +22,26 @@
             <HcCard>
                 <template #header>
                     <HcTooltip keys="tentative_device_approach_add">
-                        <el-button type="primary" hc-btn @click="addFormModalClick">
+                        <el-button hc-btn type="primary" @click="addFormModalClick">
                             <HcIcon name="add-circle"/>
                             <span>新增</span>
                         </el-button>
                     </HcTooltip>
                     <HcTooltip keys="tentative_device_approach_edit">
-                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="editFormModalClick">
+                        <el-button :disabled="tableCheckedKeys.length <= 0" hc-btn @click="editFormModalClick">
                             <HcIcon name="edit"/>
                             <span>编辑</span>
                         </el-button>
                     </HcTooltip>
                     <HcTooltip keys="tentative_device_approach_del">
-                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="delTableModalClick">
+                        <el-button :disabled="tableCheckedKeys.length <= 0" hc-btn @click="delTableModalClick">
                             <HcIcon name="delete-bin-2"/>
                             <span>删除</span>
                         </el-button>
                     </HcTooltip>
                     <HcTooltip keys="tentative_device_approach_printer">
-                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" :loading="printerLoading" @click="printerClick">
+                        <el-button :disabled="tableCheckedKeys.length <= 0" :loading="printerLoading" hc-btn
+                                   @click="printerClick">
                             <HcIcon name="printer"/>
                             <span>打印</span>
                         </el-button>
@@ -53,22 +55,23 @@
                 </template>
                 <template #search>
                     <div class="w-32">
-                        <el-select v-model="searchForm.isCalibration" placeholder="是否需要效验" clearable>
-                            <el-option label="是" :value="1"/>
-                            <el-option label="否" :value="0"/>
+                        <el-select v-model="searchForm.isCalibration" clearable placeholder="是否需要效验">
+                            <el-option :value="1" label="是"/>
+                            <el-option :value="0" label="否"/>
                         </el-select>
                     </div>
                     <div class="w-32 ml-2">
-                        <el-select v-model="searchForm.status" placeholder="状态" clearable>
-                            <el-option label="启用中" :value="1"/>
-                            <el-option label="已停用" :value="0"/>
+                        <el-select v-model="searchForm.status" clearable placeholder="状态">
+                            <el-option :value="1" label="启用中"/>
+                            <el-option :value="0" label="已停用"/>
                         </el-select>
                     </div>
                     <div class="w-64 ml-2">
                         <HcDatePicker :dates="betweenTime" clearable @change="betweenTimeUpdate"/>
                     </div>
                     <div class="w-72 ml-2">
-                        <el-input v-model="searchForm.queryValue" placeholder="请输入设备名称\设备型号查询" clearable @keyup="keyUpEvent"/>
+                        <el-input v-model="searchForm.queryValue" clearable placeholder="请输入设备名称\设备型号查询"
+                                  @keyup="keyUpEvent"/>
                     </div>
                     <div class="ml-2">
                         <el-button type="primary" @click="searchClick">
@@ -77,12 +80,13 @@
                         </el-button>
                     </div>
                 </template>
-                <HcTable ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading" isCheck @selection-change="tableSelection">
+                <HcTable ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading" isCheck
+                         @selection-change="tableSelection">
                     <template #status="{row}">
-                        {{row.status === 1?'启用中':'已停用'}}
+                        {{ row.status === 1 ? '启用中' : '已停用' }}
                     </template>
                     <template #isCalibration="{row}">
-                        {{row.isCalibration === 1?'是':'否'}}
+                        {{ row.isCalibration === 1 ? '是' : '否' }}
                     </template>
                 </HcTable>
                 <template #action>
@@ -92,8 +96,10 @@
         </div>
 
         <!--新增/编辑 节点-->
-        <HcDialog :show="addEditNodeFormModal" :title="`${addEditNodeFormModel.id?'编辑':'新增'}分类`" widths="30rem" :loading="addEditNodeFormLoading" @save="addEditNodeFormModalSave" @close="addEditNodeFormModalClose">
-            <el-form ref="addEditNodeFormRef" :model="addEditNodeFormModel" :rules="addEditNodeFormRules" label-width="auto" label-position="top" size="large">
+        <HcDialog :loading="addEditNodeFormLoading" :show="addEditNodeFormModal" :title="`${addEditNodeFormModel.id?'编辑':'新增'}分类`"
+                  widths="30rem" @close="addEditNodeFormModalClose" @save="addEditNodeFormModalSave">
+            <el-form ref="addEditNodeFormRef" :model="addEditNodeFormModel" :rules="addEditNodeFormRules"
+                     label-position="top" label-width="auto" size="large">
                 <el-form-item class="mb-0" label="分类名称" prop="className">
                     <el-input v-model="addEditNodeFormModel.className" placeholder="请输入分类名称"/>
                 </el-form-item>
@@ -101,14 +107,17 @@
         </HcDialog>
 
         <!--新增/编辑-->
-        <HcDialog :show="addEditFormModal" :title="`${addEditFormModel.id?'编辑':'新增'}设备信息`" widths="50rem" :loading="addEditFormLoading" @close="addEditFormModalClose" @save="addEditFormClick">
-            <el-form ref="addEditFormRef" :model="addEditFormModel" :rules="addEditFormRules" label-width="auto" size="large">
+        <HcDialog :loading="addEditFormLoading" :show="addEditFormModal" :title="`${addEditFormModel.id?'编辑':'新增'}设备信息`"
+                  widths="50rem" @close="addEditFormModalClose" @save="addEditFormClick">
+            <el-form ref="addEditFormRef" :model="addEditFormModel" :rules="addEditFormRules" label-width="auto"
+                     size="large">
                 <div class="hc-form-item">
                     <el-form-item label="设备名称" prop="deviceName">
                         <el-input v-model="addEditFormModel.deviceName"/>
                     </el-form-item>
                     <el-form-item label="进场日期">
-                        <el-date-picker type="date" v-model="addEditFormModel.mobilizationDate" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                        <el-date-picker v-model="addEditFormModel.mobilizationDate" :clearable="false" class="block"
+                                        type="date" value-format="YYYY-MM-DD"/>
                     </el-form-item>
                 </div>
                 <div class="hc-form-item">
@@ -134,7 +143,7 @@
                         <el-input v-model="addEditFormModel.deviceModel"/>
                     </el-form-item>
                     <el-form-item label="效验周期">
-                        <HcCounter v-model="addEditFormModel.calibrationCycle" text="(月)" size="large" block/>
+                        <HcCounter v-model="addEditFormModel.calibrationCycle" block size="large" text="(月)"/>
                     </el-form-item>
                 </div>
                 <div class="hc-form-item">
@@ -142,17 +151,19 @@
                         <el-input v-model="addEditFormModel.manufacturer"/>
                     </el-form-item>
                     <el-form-item label="最近效验时间">
-                        <el-date-picker type="date" v-model="addEditFormModel.lastCalibrationTime" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                        <el-date-picker v-model="addEditFormModel.lastCalibrationTime" :clearable="false" class="block"
+                                        type="date" value-format="YYYY-MM-DD"/>
                     </el-form-item>
                 </div>
                 <div class="hc-form-item">
                     <el-form-item label="出厂日期">
-                        <el-date-picker type="date" v-model="addEditFormModel.factoryDate" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                        <el-date-picker v-model="addEditFormModel.factoryDate" :clearable="false" class="block"
+                                        type="date" value-format="YYYY-MM-DD"/>
                     </el-form-item>
                     <el-form-item label="状态">
-                        <el-select v-model="addEditFormModel.status" placeholder="状态" block>
-                            <el-option label="启用中" :value="1"/>
-                            <el-option label="已停用" :value="0"/>
+                        <el-select v-model="addEditFormModel.status" block placeholder="状态">
+                            <el-option :value="1" label="启用中"/>
+                            <el-option :value="0" label="已停用"/>
                         </el-select>
                     </el-form-item>
                 </div>
@@ -161,7 +172,8 @@
                         <el-input v-model="addEditFormModel.factoryNumber"/>
                     </el-form-item>
                     <el-form-item label="管理人员">
-                        <hcAutoComplete v-model="addEditFormModel.managerName" :datas="userListData" keys="userName" placeholder="请选择或输入试验人员名称"/>
+                        <hcAutoComplete v-model="addEditFormModel.managerName" :datas="userListData" keys="userName"
+                                        placeholder="请选择或输入试验人员名称"/>
                     </el-form-item>
                 </div>
                 <div class="hc-form-item">
@@ -170,34 +182,37 @@
                     </el-form-item>
                     <el-form-item label="是否需要效验">
                         <el-select v-model="addEditFormModel.isCalibration" block disabled>
-                            <el-option label="是" :value="1"/>
-                            <el-option label="否" :value="0"/>
+                            <el-option :value="1" label="是"/>
+                            <el-option :value="0" label="否"/>
                         </el-select>
                     </el-form-item>
                 </div>
                 <el-form-item label="备注">
-                    <el-input v-model="addEditFormModel.remarks" type="textarea" placeholder="备注" :autosize="{ minRows: 3}"/>
+                    <el-input v-model="addEditFormModel.remarks" :autosize="{ minRows: 3}" placeholder="备注"
+                              type="textarea"/>
                 </el-form-item>
             </el-form>
         </HcDialog>
 
         <!--导入-->
-        <HcDialog :show="importModal" title="导入设备数据" widths="70rem" isTable isFooterCenter :loading="importModalLoading" @save="importModalYesClick" @close="importModalClose">
+        <HcDialog :loading="importModalLoading" :show="importModal" isFooterCenter isTable title="导入设备数据"
+                  widths="70rem" @close="importModalClose" @save="importModalYesClick">
             <div class="text-orange mb-6">
                 <span>请先下载模板模板表格 (</span>
                 <span class="text-link" @click="downloadImportClick">范例试验设备文件</span>
                 <span>) ,按模板样式编辑试验容器后,在点击“选择文件”按钮选择编辑好的文件,点击确认即可导入成功!</span>
             </div>
 
-            <HcDragUpload action="mobilization/read-excel" @progress="uploadprogress" @finished="uploadFinished"/>
+            <HcDragUpload action="mobilization/read-excel" @finished="uploadFinished" @progress="uploadprogress"/>
 
             <div class="hc-import-modal-table-box">
-                <HcTable ref="tableImportRef" :column="tableColumn" :datas="tableImportData" :loading="tableImportLoading" isCheck @selection-change="tableImportSelection">
+                <HcTable ref="tableImportRef" :column="tableColumn" :datas="tableImportData"
+                         :loading="tableImportLoading" isCheck @selection-change="tableImportSelection">
                     <template #status="{row}">
-                        {{row.status == 1?'启用中':'已停用'}}
+                        {{ row.status == 1 ? '启用中' : '已停用' }}
                     </template>
                     <template #isCalibration="{row}">
-                        {{row.isCalibration == 1?'是':'否'}}
+                        {{ row.isCalibration == 1 ? '是' : '否' }}
                     </template>
                 </HcTable>
             </div>
@@ -212,9 +227,9 @@ import {useAppStore} from "~src/store";
 import {HcIsButton} from "~src/plugins/IsButtons";
 import HcDragUpload from "./components/HcDragUpload.vue"
 import approachApi from "~api/tentative/device/approach";
-import {formValidate, getArrValue} from "vue-utils-plus"
+import {formValidate, getArrValue} from "js-fast-way"
 import {getContractUserList} from "~api/other";
-import {getClassList,deviceClassListInit} from "~api/tentative";
+import {getClassList, deviceClassListInit} from "~api/tentative";
 
 //初始变量
 const useAppState = useAppStore()
@@ -241,7 +256,7 @@ onMounted(() => {
 //获取用户列表
 const userListData = ref([])
 const getUserListData = async () => {
-    const { data } = await getContractUserList({
+    const {data} = await getContractUserList({
         contractId: contractId.value
     })
     userListData.value = getArrValue(data)
@@ -258,7 +273,7 @@ const menusProps = ref({
 const menus = ref([]);
 const typeData = ref([]);
 const getClassListData = async () => {
-    const { data } = await getClassList({
+    const {data} = await getClassList({
         contractId: contractId.value
     })
     const arr = getArrValue(data)
@@ -266,8 +281,8 @@ const getClassListData = async () => {
     menus.value = [{id: '0', className: '全部', isNoContextMenu: true}, ...arr]
 }
 //初始化设备分类
-const deviceClassListInitdata= async () => {
-     const { data } = await deviceClassListInit({
+const deviceClassListInitdata = async () => {
+    const {data} = await deviceClassListInit({
         contractId: contractId.value
     })
 }
@@ -317,9 +332,9 @@ const betweenTimeUpdate = ({arr}) => {
     if (arr.length > 0) {
         searchForm.value.startTime = arr[0]
         searchForm.value.endTime = arr[1]
-    }else{
-       
-         searchForm.value.startTime = ''
+    } else {
+
+        searchForm.value.startTime = ''
         searchForm.value.endTime = ''
     }
 }
@@ -335,7 +350,7 @@ const keyUpEvent = (e) => {
 //搜索
 const searchClick = () => {
     searchForm.value.current = 1;
-    console.log(  searchForm.value,'  searchForm.value');
+    console.log(searchForm.value, '  searchForm.value');
     getTableData()
 }
 
@@ -349,32 +364,32 @@ const pageChange = ({current, size}) => {
 //表格数据
 const tableRef = ref(null)
 const tableColumn = ref([
-    {key:'deviceName', name: '设备名称', width: '200'},
-    {key:'deviceClassName', name: '设备分类', width: '160'},
-    {key:'deviceNumber', name: '设备编号', width: '160'},
-    {key:'deviceModel', name: '设备型号', width: '180'},
-    {key:'manufacturer', name: '生产厂家', width: '200'},
-    {key:'factoryDate', name: '出厂日期', width: '160'},
-    {key:'factoryNumber', name: '出厂编号', width: '160'},
-    {key:'mobilizationDate', name: '进场日期', width: '160'},
-    {key:'measuringRange', name: '测量范围', width: '120'},
-    {key:'accuracy', name: '精准度', width: '120'},
-    {key:'calibrationCycle', name: '校准周期(月)', width: '120'},
-    {key:'lastCalibrationTime', name: '最近效验时间', width: '160'},
-    {key:'status', name: '状态', width: '100'},
-    {key:'isCalibration', name: '是否需要效验', width: '120'},
-    {key:'equipmentAcquisitionNumber', name: '设备采集编号', width: '160'},
-    {key:'managerName', name: '设备管理人员', width: '120'},
-    {key:'remarks', name: '备注', width: '160'},
+    {key: 'deviceName', name: '设备名称', width: '200'},
+    {key: 'deviceClassName', name: '设备分类', width: '160'},
+    {key: 'deviceNumber', name: '设备编号', width: '160'},
+    {key: 'deviceModel', name: '设备型号', width: '180'},
+    {key: 'manufacturer', name: '生产厂家', width: '200'},
+    {key: 'factoryDate', name: '出厂日期', width: '160'},
+    {key: 'factoryNumber', name: '出厂编号', width: '160'},
+    {key: 'mobilizationDate', name: '进场日期', width: '160'},
+    {key: 'measuringRange', name: '测量范围', width: '120'},
+    {key: 'accuracy', name: '精准度', width: '120'},
+    {key: 'calibrationCycle', name: '校准周期(月)', width: '120'},
+    {key: 'lastCalibrationTime', name: '最近效验时间', width: '160'},
+    {key: 'status', name: '状态', width: '100'},
+    {key: 'isCalibration', name: '是否需要效验', width: '120'},
+    {key: 'equipmentAcquisitionNumber', name: '设备采集编号', width: '160'},
+    {key: 'managerName', name: '设备管理人员', width: '120'},
+    {key: 'remarks', name: '备注', width: '160'},
 ])
 const tableData = ref([])
 
 //获取数据
 const tableLoading = ref(false)
 const getTableData = async () => {
-    console.log(  searchForm.value,'  searchForm.value');
+    console.log(searchForm.value, '  searchForm.value');
     tableLoading.value = true
-    const { error, code, data } = await approachApi.queryPage({
+    const {error, code, data} = await approachApi.queryPage({
         projectId: projectId.value,
         contractId: contractId.value,
         ...searchForm.value,
@@ -424,7 +439,7 @@ const addEditNodeFormModalSave = async () => {
     const validate = await formValidate(addEditNodeFormRef.value)
     if (validate) {
         addEditNodeFormLoading.value = true
-        const { error, code } = await approachApi.getClassSubmit({
+        const {error, code} = await approachApi.getClassSubmit({
             ...addEditNodeFormModel.value,
             projectId: projectId.value,
             contractId: contractId.value
@@ -462,7 +477,7 @@ const delNodeModalClick = (id) => {
 
 //删除分类
 const setClassRemove = async (id) => {
-    const { error, code } = await approachApi.setClassRemove({
+    const {error, code} = await approachApi.setClassRemove({
         projectId: projectId.value,
         contractId: contractId.value,
         id: id
@@ -492,10 +507,10 @@ const delTableModalClick = () => {
 //批量删除
 const tableRemoveData = async () => {
     const rows = tableCheckedKeys.value
-    if (rows.length > 0 ) {
+    if (rows.length > 0) {
         const ids = rowsToId(rows)
         //删除请求
-        const { error, code } = await approachApi.removeData({
+        const {error, code} = await approachApi.removeData({
             contractId: contractId.value,
             ids: ids,
         })
@@ -512,11 +527,11 @@ const tableRemoveData = async () => {
 const printerLoading = ref(false)
 const printerClick = async () => {
     const rows = tableCheckedKeys.value
-    if (rows.length > 0 ) {
+    if (rows.length > 0) {
         printerLoading.value = true
         const ids = rowsToId(rows)
         //删除请求
-        const { error, code, data } = await approachApi.exportPdf({
+        const {error, code, data} = await approachApi.exportPdf({
             projectId: projectId.value,
             contractId: contractId.value,
             ids: ids,
@@ -524,7 +539,7 @@ const printerClick = async () => {
         //处理数据
         printerLoading.value = false
         if (!error && code === 200) {
-            window.open(data,'_blank')
+            window.open(data, '_blank')
         }
     }
 }
@@ -562,7 +577,7 @@ const importModalYesClick = () => {
 //导入数据保存
 const samplingRecord = async (keys) => {
     importModalLoading.value = true
-    const { error, code } = await approachApi.samplingRecord({
+    const {error, code} = await approachApi.samplingRecord({
         projectId: projectId.value,
         contractId: contractId.value,
         list: keys
@@ -651,7 +666,7 @@ const addEditFormClick = async () => {
     const validate = await formValidate(addEditFormRef.value)
     if (validate) {
         addEditFormLoading.value = true
-        const { error, code } = await approachApi.submitForm({
+        const {error, code} = await approachApi.submitForm({
             ...addEditFormModel.value,
             projectId: projectId.value,
             contractId: contractId.value
@@ -670,7 +685,7 @@ const addEditFormClick = async () => {
 
 //下载导入模板
 const downloadImportClick = () => {
-    window.open('https://bladex-test-info.oss-cn-chengdu.aliyuncs.com//upload/20221109/2be4f32d07f9dd3e43479038b0c4aa2d.xlsx','_blank')
+    window.open('https://bladex-test-info.oss-cn-chengdu.aliyuncs.com//upload/20221109/2be4f32d07f9dd3e43479038b0c4aa2d.xlsx', '_blank')
 }
 
 //拼接ID
@@ -686,7 +701,7 @@ const onmousedown = () => {
     const leftNum = isCollapse.value ? 142 : 272
     document.onmousemove = (ve) => {
         let diffVal = ve.clientX - leftNum;
-        if(diffVal >= 220 && diffVal <= 400) {
+        if (diffVal >= 220 && diffVal <= 400) {
             leftWidth.value = diffVal;
         }
     }

+ 13 - 10
src/views/tentative/device/components/HcDragUpload.vue

@@ -1,28 +1,31 @@
 <template>
-    <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="autoUpload">
-        <div class="hc-upload-loading upload-file-info" v-loading="uploadDisabled" element-loading-text="上传中...">
+    <el-upload ref="uploadRef" :accept="accept" :action="api + action" :auto-upload="autoUpload" :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>
 </template>
 
 <script setup>
-import {ref,watch} from "vue";
+import {ref, watch} 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({
     datas: {
         type: Object,
@@ -70,7 +73,7 @@ const emit = defineEmits(['progress', 'finished', 'change'])
 
 //上传前
 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!');

+ 14 - 13
src/views/tentative/device/components/HcSelectTree.vue

@@ -1,47 +1,48 @@
 <template>
-    <el-popover :width="widths" :visible="visible" >
+    <el-popover :visible="visible" :width="widths">
         <template #reference>
-            <div class="form-item-div" :id="uuid" @click="itemClick">
-                <div class="lable truncate" v-if="nodeId && nodeTitle">{{nodeTitle}}</div>
-                <div class="placeholder truncate" v-else>{{placeholder}}</div>
+            <div :id="uuid" class="form-item-div" @click="itemClick">
+                <div v-if="nodeId && nodeTitle" class="lable truncate">{{ nodeTitle }}</div>
+                <div v-else class="placeholder truncate">{{ placeholder }}</div>
                 <HcIcon name="arrow-down-s"/>
             </div>
         </template>
         <div v-click-outside="onClickOutside">
-            <TestTree ui="hc-select-tree" :projectId="projectId" :contractId="contractId" :wbsId="wbsId" @nodeTap="testTreeClick"/>
+            <TestTree :contractId="contractId" :projectId="projectId" :wbsId="wbsId" ui="hc-select-tree"
+                      @nodeTap="testTreeClick"/>
         </div>
     </el-popover>
 </template>
 
 <script setup>
 import {ref, watch, nextTick} from "vue";
-import {getRandom} from "vue-utils-plus"
+import {getRandom} from "js-fast-way"
 import TestTree from "./TestTree.vue"
 import {ClickOutside as vClickOutside} from 'element-plus'
 
 const props = defineProps({
     modelValue: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     title: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     projectId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     contractId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     wbsId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     placeholder: {
-        type: [String,Number],
+        type: [String, Number],
         default: '请选择一个树节点'
     },
 })
@@ -103,7 +104,7 @@ const testTreeClick = (data) => {
 
 <style lang="scss" scoped>
 .el-radio-group {
-   width: auto !important;
+    width: auto !important;
 }
 .form-item-div {
     background-color: white;

+ 12 - 10
src/views/tentative/device/components/TestTree.vue

@@ -1,8 +1,10 @@
 <template>
-    <ElTree class="hc-tree-node tree-line el-radio-group" :class="ui" ref="treeRef" :props="treeProps" :data="treeData" auto-expand-parent current-node-key="1570335808521502732" 
-            highlight-current accordion :default-expanded-keys="['1570335808521502732']" node-key="primaryKeyId" @node-click="treeClick" :indent="0">
+    <ElTree ref="treeRef" :class="ui" :data="treeData" :default-expanded-keys="['1570335808521502732']" :indent="0"
+            :props="treeProps" accordion
+            auto-expand-parent class="hc-tree-node tree-line el-radio-group" current-node-key="1570335808521502732" highlight-current
+            node-key="primaryKeyId" @node-click="treeClick">
         <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">{{ node.label }}</div>
             </div>
         </template>
@@ -10,26 +12,26 @@
 </template>
 
 <script setup>
-import {ref,nextTick,watch} from "vue";
-import {getArrValue} from "vue-utils-plus"
+import {ref, nextTick, watch} from "vue";
+import {getArrValue} from "js-fast-way"
 import {getProjectTree} from "~api/tentative";
 
 //参数
 const props = defineProps({
     projectId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     contractId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     wbsId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     wbsType: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     idPrefix: {
@@ -75,7 +77,7 @@ nextTick(() => {
 const isLoading = ref(false)
 const getTreeData = async () => {
     isLoading.value = true
-    const { data } = await getProjectTree({
+    const {data} = await getProjectTree({
         projectId: projectId.value,
         // contractId: contractId.value,
         wbsId: wbsId.value,

+ 100 - 81
src/views/tentative/device/employ.vue

@@ -1,12 +1,12 @@
 <template>
     <div class="hc-page-layout-box">
-        <div class="hc-layout-left-box menu" :style="'width:' + leftWidth + 'px;'">
+        <div :style="'width:' + leftWidth + 'px;'" class="hc-layout-left-box menu">
             <div class="hc-menu-header-box">
                 <div class="text-xl name">设备分类 - 使用记录</div>
             </div>
             <div class="hc-menu-contents-box">
                 <el-scrollbar>
-                    <HcMenuSimple :props="menusProps" :datas="menus" :keys="menuKey" @change="menuChange"/>
+                    <HcMenuSimple :datas="menus" :keys="menuKey" :props="menusProps" @change="menuChange"/>
                 </el-scrollbar>
             </div>
             <!--左右拖动-->
@@ -16,25 +16,26 @@
             <HcCard>
                 <template #header>
                     <HcTooltip keys="tentative_device_employ_add">
-                        <el-button type="primary" hc-btn @click="addFormModalClick">
+                        <el-button hc-btn type="primary" @click="addFormModalClick">
                             <HcIcon name="add-circle"/>
                             <span>新增</span>
                         </el-button>
                     </HcTooltip>
                     <HcTooltip keys="tentative_device_employ_edit">
-                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="editFormModalClick">
+                        <el-button :disabled="tableCheckedKeys.length <= 0" hc-btn @click="editFormModalClick">
                             <HcIcon name="edit"/>
                             <span>编辑</span>
                         </el-button>
                     </HcTooltip>
                     <HcTooltip keys="tentative_device_employ_del">
-                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="delNodeModalClick">
+                        <el-button :disabled="tableCheckedKeys.length <= 0" hc-btn @click="delNodeModalClick">
                             <HcIcon name="delete-bin-2"/>
                             <span>删除</span>
                         </el-button>
                     </HcTooltip>
                     <HcTooltip keys="tentative_device_employ_printer">
-                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" :loading="printerLoading" @click="printerClick">
+                        <el-button :disabled="tableCheckedKeys.length <= 0" :loading="printerLoading" hc-btn
+                                   @click="printerClick">
                             <HcIcon name="printer"/>
                             <span>打印</span>
                         </el-button>
@@ -48,10 +49,11 @@
                 </template>
                 <template #search>
                     <div class="w-64">
-                        <HcDatePicker :dates="betweenTime" clearable @change="betweenTimeUpdate" />
+                        <HcDatePicker :dates="betweenTime" clearable @change="betweenTimeUpdate"/>
                     </div>
                     <div class="w-72 ml-2">
-                        <el-input v-model="searchForm.queryValue" placeholder="请输入设备名称\设备型号查询" clearable @keyup="keyUpEvent"/>
+                        <el-input v-model="searchForm.queryValue" clearable placeholder="请输入设备名称\设备型号查询"
+                                  @keyup="keyUpEvent"/>
                     </div>
                     <div class="ml-2">
                         <el-button type="primary" @click="searchClick">
@@ -60,7 +62,8 @@
                         </el-button>
                     </div>
                 </template>
-                <HcTable ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading" isCheck @selection-change="tableSelection"/>
+                <HcTable ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading" isCheck
+                         @selection-change="tableSelection"/>
                 <template #action>
                     <HcPages :pages="searchForm" @change="pageChange"/>
                 </template>
@@ -68,73 +71,90 @@
         </div>
 
         <!--新增/编辑-->
-        <HcDialog :show="addEditFormModal" title="新增/编辑 设备使用信息" widths="50rem" :loading="addEditFormLoading" @close="addEditFormModalClose" @save="addEditFormClick">
-            <el-form ref="addEditFormRef" :model="addEditFormModel" :rules="addEditFormRules" label-width="auto" size="large">
+        <HcDialog :loading="addEditFormLoading" :show="addEditFormModal" title="新增/编辑 设备使用信息" widths="50rem"
+                  @close="addEditFormModalClose" @save="addEditFormClick">
+            <el-form ref="addEditFormRef" :model="addEditFormModel" :rules="addEditFormRules" label-width="auto"
+                     size="large">
                 <div class="hc-form-item">
                     <el-form-item label="设备分类">
-                        <el-select :disabled="deviceFormLoading" v-model="addEditFormModel.deviceClassId" block @change="deviceClassIdChange">
+                        <el-select v-model="addEditFormModel.deviceClassId" :disabled="deviceFormLoading" block
+                                   @change="deviceClassIdChange">
                             <el-option v-for="item in typeData" :label="item.className" :value="item.id"/>
                         </el-select>
                     </el-form-item>
                     <el-form-item label="检测项目">
-                        <HcSelectTree v-model="addEditFormModel.nodeId" :title="addEditFormModel.nodeName" :projectId="projectId" :contractId="contractId" :wbsId="projectInfo?.referenceWbsTemplateIdTrial" @change="HcSelectTreeChange"/>
+                        <HcSelectTree v-model="addEditFormModel.nodeId" :contractId="contractId"
+                                      :projectId="projectId" :title="addEditFormModel.nodeName"
+                                      :wbsId="projectInfo?.referenceWbsTemplateIdTrial" @change="HcSelectTreeChange"/>
                     </el-form-item>
                 </div>
                 <div class="hc-form-item">
                     <el-form-item label="设备编号" prop="deviceNumber">
-                        <el-select :disabled="deviceFormLoading" v-model="addEditFormModel.deviceNumber" block @change="deviceNumberChange">
-                            <el-option v-for="item in deviceFormSelectData" :label="item.deviceNumber" :value="item.deviceNumber"/>
+                        <el-select v-model="addEditFormModel.deviceNumber" :disabled="deviceFormLoading" block
+                                   @change="deviceNumberChange">
+                            <el-option v-for="item in deviceFormSelectData" :label="item.deviceNumber"
+                                       :value="item.deviceNumber"/>
                         </el-select>
                     </el-form-item>
                     <el-form-item label="样品名称">
-                        <hcAutoComplete v-model="addEditFormModel.materialName" :datas="nodeMaterialSelectData" keys="materialName" placeholder="请选择或输入样品名称"/>
+                        <hcAutoComplete v-model="addEditFormModel.materialName" :datas="nodeMaterialSelectData"
+                                        keys="materialName" placeholder="请选择或输入样品名称"/>
                     </el-form-item>
                 </div>
                 <div class="hc-form-item">
                     <el-form-item label="设备名称">
-                        <el-select :disabled="deviceFormLoading" v-model="addEditFormModel.deviceName" block @change="deviceNameChange">
-                            <el-option v-for="item in deviceFormSelectData" :label="item.deviceName" :value="item.deviceName"/>
+                        <el-select v-model="addEditFormModel.deviceName" :disabled="deviceFormLoading" block
+                                   @change="deviceNameChange">
+                            <el-option v-for="item in deviceFormSelectData" :label="item.deviceName"
+                                       :value="item.deviceName"/>
                         </el-select>
                     </el-form-item>
                     <el-form-item label="样品编号">
-                        <hcAutoComplete v-model="addEditFormModel.specificationNumber" :datas="nodeMaterialSelectData" keys="specificationNumber" placeholder="请选择或输入样品编号"/>
+                        <hcAutoComplete v-model="addEditFormModel.specificationNumber" :datas="nodeMaterialSelectData"
+                                        keys="specificationNumber" placeholder="请选择或输入样品编号"/>
                     </el-form-item>
                 </div>
                 <div class="hc-form-item">
                     <el-form-item label="使用日期(起)" prop="startDate">
-                        <el-date-picker type="date" v-model="addEditFormModel.startDate" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                        <el-date-picker v-model="addEditFormModel.startDate" :clearable="false" class="block"
+                                        type="date" value-format="YYYY-MM-DD"/>
                     </el-form-item>
-                    <el-form-item label="使用日期(止)"  prop="endDate">
-                        <el-date-picker type="date" v-model="addEditFormModel.endDate" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                    <el-form-item label="使用日期(止)" prop="endDate">
+                        <el-date-picker v-model="addEditFormModel.endDate" :clearable="false" class="block"
+                                        type="date" value-format="YYYY-MM-DD"/>
                     </el-form-item>
                 </div>
                 <div class="hc-form-item">
                     <el-form-item label="使用人员">
-                        <hcAutoComplete v-model="addEditFormModel.managerName" :datas="userListData" keys="userName" placeholder="请选择或输入使用人员名称"/>
+                        <hcAutoComplete v-model="addEditFormModel.managerName" :datas="userListData" keys="userName"
+                                        placeholder="请选择或输入使用人员名称"/>
                     </el-form-item>
                     <el-form-item/>
                 </div>
                 <el-form-item label="备注">
-                    <el-input v-model="addEditFormModel.remarks" type="textarea" placeholder="备注" :autosize="{ minRows: 3}"/>
+                    <el-input v-model="addEditFormModel.remarks" :autosize="{ minRows: 3}" placeholder="备注"
+                              type="textarea"/>
                 </el-form-item>
             </el-form>
         </HcDialog>
 
         <!--导入-->
-        <HcDialog :show="importModal" title="导入设备使用数据" widths="70rem" isTable isFooterCenter :loading="importModalLoading" @save="importModalYesClick" @close="importModalClose">
+        <HcDialog :loading="importModalLoading" :show="importModal" isFooterCenter isTable title="导入设备使用数据"
+                  widths="70rem" @close="importModalClose" @save="importModalYesClick">
             <div class="text-orange mb-6">
                 <span>请先下载模板模板表格 (</span>
                 <span class="text-link" @click="downloadImportClick">范例试验设备文件</span>
                 <span>) ,按模板样式编辑试验容器后,在点击“选择文件”按钮选择编辑好的文件,点击确认即可导入成功!</span>
             </div>
-            <HcDragUpload action="use/read-excel" @progress="uploadprogress" @finished="uploadFinished"/>
+            <HcDragUpload action="use/read-excel" @finished="uploadFinished" @progress="uploadprogress"/>
             <div class="hc-import-modal-table-box">
-                <HcTable ref="tableImportRef" :column="tableColumn" :datas="tableImportData" :loading="tableImportLoading" isCheck @selection-change="tableImportSelection">
+                <HcTable ref="tableImportRef" :column="tableColumn" :datas="tableImportData"
+                         :loading="tableImportLoading" isCheck @selection-change="tableImportSelection">
                     <template #status="{row}">
-                        {{row.status == 1?'启用中':'已停用'}}
+                        {{ row.status == 1 ? '启用中' : '已停用' }}
                     </template>
                     <template #isCalibration="{row}">
-                        {{row.isCalibration == 1?'是':'否'}}
+                        {{ row.isCalibration == 1 ? '是' : '否' }}
                     </template>
                 </HcTable>
             </div>
@@ -148,12 +168,11 @@ import {ref, onMounted, watch} from "vue";
 import {useAppStore} from "~src/store";
 import HcDragUpload from "./components/HcDragUpload.vue"
 import HcSelectTree from "./components/HcSelectTree.vue"
-import {getClassList,deviceClassListInit, queryDeviceList, querySampleList,getSampleInfo} from "~api/tentative";
+import {getClassList, deviceClassListInit, queryDeviceList, querySampleList, getSampleInfo} from "~api/tentative";
 import {getContractUserList} from "~api/other";
-import {formValidate, getArrValue,getObjValue} from "vue-utils-plus"
 import dataApi from "~api/tentative/device/employ";
 import {getRowsValue, rowsToId} from "~uti/tools";
-
+import {formValidate, getArrValue, getObjValue} from "js-fast-way"
 //初始变量
 const useAppState = useAppStore()
 const projectId = ref(useAppState.getProjectId);
@@ -180,7 +199,7 @@ onMounted(() => {
 //获取用户列表
 const userListData = ref([])
 const getUserListData = async () => {
-    const { data } = await getContractUserList({
+    const {data} = await getContractUserList({
         contractId: contractId.value
     })
     userListData.value = getArrValue(data)
@@ -197,7 +216,7 @@ const menusProps = ref({
 const menus = ref([]);
 const typeData = ref([]);
 const getClassListData = async () => {
-    const { data } = await getClassList({
+    const {data} = await getClassList({
         contractId: contractId.value
     })
     const arr = getArrValue(data)
@@ -205,8 +224,8 @@ const getClassListData = async () => {
     menus.value = [{id: '0', className: '全部', isNoContextMenu: true}, ...arr]
 }
 //初始化设备分类
-const deviceClassListInitdata= async () => {
-     const { data } = await deviceClassListInit({
+const deviceClassListInitdata = async () => {
+    const {data} = await deviceClassListInit({
         contractId: contractId.value
     })
 }
@@ -232,8 +251,8 @@ const betweenTimeUpdate = ({arr}) => {
     if (arr.length > 0) {
         searchForm.value.startTime = arr[0]
         searchForm.value.endTime = arr[1]
-    }else{
-         searchForm.value.startTime = ''
+    } else {
+        searchForm.value.startTime = ''
         searchForm.value.endTime = ''
     }
 }
@@ -263,18 +282,18 @@ const pageChange = ({current, size}) => {
 //表格数据
 const tableRef = ref(null)
 const tableColumn = ref([
-    {key:'deviceName', name: '设备名称'},
-    {key:'deviceClassName', name: '设备分类'},
-    {key:'deviceNumber', name: '设备编号'},
-    {key:'deviceModel', name: '设备型号'},
-    {key:'factoryNumber', name: '出厂编号'},
-    {key:'startDate', name: '使用日期(起)'},
-    {key:'endDate', name: '使用日期(止)'},
-    {key:'nodeName', name: '检测试验项目'},
-    {key:'specificationNumber', name: '样品编号'},
-    {key:'materialName', name: '样品名称'},
-    {key:'managerName', name: '使用人'},
-    {key:'remarks', name: '备注'},
+    {key: 'deviceName', name: '设备名称'},
+    {key: 'deviceClassName', name: '设备分类'},
+    {key: 'deviceNumber', name: '设备编号'},
+    {key: 'deviceModel', name: '设备型号'},
+    {key: 'factoryNumber', name: '出厂编号'},
+    {key: 'startDate', name: '使用日期(起)'},
+    {key: 'endDate', name: '使用日期(止)'},
+    {key: 'nodeName', name: '检测试验项目'},
+    {key: 'specificationNumber', name: '样品编号'},
+    {key: 'materialName', name: '样品名称'},
+    {key: 'managerName', name: '使用人'},
+    {key: 'remarks', name: '备注'},
 ])
 const tableData = ref([])
 
@@ -282,7 +301,7 @@ const tableData = ref([])
 const tableLoading = ref(false)
 const getTableData = async () => {
     tableLoading.value = true
-    const { error, code, data } = await dataApi.queryPage({
+    const {error, code, data} = await dataApi.queryPage({
         projectId: projectId.value,
         contractId: contractId.value,
         ...searchForm.value,
@@ -322,10 +341,10 @@ const delNodeModalClick = () => {
 //批量删除
 const tableRemoveData = async () => {
     const rows = tableCheckedKeys.value
-    if (rows.length > 0 ) {
+    if (rows.length > 0) {
         const ids = rowsToId(rows)
         //删除请求
-        const { error, code } = await dataApi.removeData({
+        const {error, code} = await dataApi.removeData({
             contractId: contractId.value,
             ids: ids,
         })
@@ -341,11 +360,11 @@ const tableRemoveData = async () => {
 const printerLoading = ref(false)
 const printerClick = async () => {
     const rows = tableCheckedKeys.value
-    if (rows.length > 0 ) {
+    if (rows.length > 0) {
         printerLoading.value = true
         const ids = rowsToId(rows)
         //删除请求
-        const { error, code, data } = await dataApi.exportPdf({
+        const {error, code, data} = await dataApi.exportPdf({
             projectId: projectId.value,
             contractId: contractId.value,
             ids: ids,
@@ -353,7 +372,7 @@ const printerClick = async () => {
         //处理数据
         printerLoading.value = false
         if (!error && code === 200) {
-            window.open(data,'_blank')
+            window.open(data, '_blank')
         }
     }
 }
@@ -390,7 +409,7 @@ const importModalYesClick = () => {
 //导入数据保存
 const samplingRecord = async (keys) => {
     importModalLoading.value = true
-    const { error, code } = await dataApi.samplingRecord({
+    const {error, code} = await dataApi.samplingRecord({
         projectId: projectId.value,
         contractId: contractId.value,
         list: keys
@@ -448,23 +467,23 @@ const addEditFormModalClose = () => {
 //新增/编辑 表单
 const addEditFormRef = ref(null)
 const addEditFormModel = ref({
-    deviceClassId:'',
-    nodeName:'',
-    deviceNumber:'',
-    materialName:'',
-    deviceName:'',
-    specificationNumber:'',
-    startDate:'',
-    endDate:'',
-    managerName:'',
-    remarks:'',
+    deviceClassId: '',
+    nodeName: '',
+    deviceNumber: '',
+    materialName: '',
+    deviceName: '',
+    specificationNumber: '',
+    startDate: '',
+    endDate: '',
+    managerName: '',
+    remarks: '',
 })
 const addEditFormRules = {
-      startDate: {
+    startDate: {
         required: false,
         validator: (rule, value, callback) => {
             const endTime = addEditFormModel.value?.endDate ?? ''
-            if (endTime&&value > endTime) {
+            if (endTime && value > endTime) {
                 callback(new Error('使用停止日期 不能 小于 使用起始日期'))
             } else {
                 callback()
@@ -484,10 +503,10 @@ const addEditFormRules = {
         },
         trigger: "blur",
     },
-    deviceNumber:{
-         required: true,
-         trigger: 'blur',
-         message: "请选择设备编号"
+    deviceNumber: {
+        required: true,
+        trigger: 'blur',
+        message: "请选择设备编号"
     }
 }
 
@@ -543,13 +562,13 @@ const nodeMaterialChange = async (val) => {
     //     contractId: contractId.value,
     //     nodeId: val
     // })
-      const {data} = await getSampleInfo({
+    const {data} = await getSampleInfo({
         primaryKeyId: val
     })
     //处理数据
     if (data) {
-        addEditFormModel.value.specificationNumber = data?.sampleNumbers 
-        addEditFormModel.value.materialName = data?.sampleNames  
+        addEditFormModel.value.specificationNumber = data?.sampleNumbers
+        addEditFormModel.value.materialName = data?.sampleNames
     } else {
         addEditFormModel.value.specificationNumber = ''
         addEditFormModel.value.materialName = ''
@@ -564,16 +583,16 @@ const addEditFormClick = async () => {
     console.log('提交');
     const validate = await formValidate(addEditFormRef.value)
     // console.log(validate,'validate');
-  
+
     if (validate) {
         addEditFormLoading.value = true
-        const { error, code } = await dataApi.submitForm({
+        const {error, code} = await dataApi.submitForm({
             ...addEditFormModel.value,
             projectId: projectId.value,
             contractId: contractId.value
         })
         //处理数据
-      
+
         if (!error && code === 200) {
             window?.$message?.success('操作成功')
             addEditFormModal.value = false
@@ -586,7 +605,7 @@ const addEditFormClick = async () => {
 
 //下载导入模板
 const downloadImportClick = () => {
-    window.open('https://bladex-test-info.oss-cn-chengdu.aliyuncs.com//upload/20221109/aaafe6673c0338eeeba8ff537980e093.xlsx','_blank')
+    window.open('https://bladex-test-info.oss-cn-chengdu.aliyuncs.com//upload/20221109/aaafe6673c0338eeeba8ff537980e093.xlsx', '_blank')
 }
 
 //左右拖动,改变树形结构宽度
@@ -595,7 +614,7 @@ const onmousedown = () => {
     const leftNum = isCollapse.value ? 142 : 272
     document.onmousemove = (ve) => {
         let diffVal = ve.clientX - leftNum;
-        if(diffVal >= 220 && diffVal <= 400) {
+        if (diffVal >= 220 && diffVal <= 400) {
             leftWidth.value = diffVal;
         }
     }

+ 64 - 50
src/views/tentative/device/overhaul.vue

@@ -1,12 +1,12 @@
 <template>
     <div class="hc-page-layout-box">
-        <div class="hc-layout-left-box menu" :style="'width:' + leftWidth + 'px;'">
+        <div :style="'width:' + leftWidth + 'px;'" class="hc-layout-left-box menu">
             <div class="hc-menu-header-box">
                 <div class="text-xl name">设备分类 - 检修记录</div>
             </div>
             <div class="hc-menu-contents-box">
                 <el-scrollbar>
-                    <HcMenuSimple :props="menusProps" :datas="menus" :keys="menuKey" @change="menuChange"/>
+                    <HcMenuSimple :datas="menus" :keys="menuKey" :props="menusProps" @change="menuChange"/>
                 </el-scrollbar>
             </div>
             <!--左右拖动-->
@@ -16,25 +16,26 @@
             <HcCard>
                 <template #header>
                     <HcTooltip keys="tentative_device_overhaul_add">
-                        <el-button type="primary" hc-btn @click="addFormModalClick">
+                        <el-button hc-btn type="primary" @click="addFormModalClick">
                             <HcIcon name="add-circle"/>
                             <span>新增</span>
                         </el-button>
                     </HcTooltip>
                     <HcTooltip keys="tentative_device_overhaul_edit">
-                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="editFormModalClick">
+                        <el-button :disabled="tableCheckedKeys.length <= 0" hc-btn @click="editFormModalClick">
                             <HcIcon name="edit"/>
                             <span>编辑</span>
                         </el-button>
                     </HcTooltip>
                     <HcTooltip keys="tentative_device_overhaul_del">
-                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="delNodeModalClick">
+                        <el-button :disabled="tableCheckedKeys.length <= 0" hc-btn @click="delNodeModalClick">
                             <HcIcon name="delete-bin-2"/>
                             <span>删除</span>
                         </el-button>
                     </HcTooltip>
                     <HcTooltip keys="tentative_device_overhaul_printer">
-                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" :loading="printerLoading" @click="printerClick">
+                        <el-button :disabled="tableCheckedKeys.length <= 0" :loading="printerLoading" hc-btn
+                                   @click="printerClick">
                             <HcIcon name="printer"/>
                             <span>打印</span>
                         </el-button>
@@ -51,7 +52,8 @@
                         <HcDatePicker :dates="betweenTime" clearable @change="betweenTimeUpdate"/>
                     </div>
                     <div class="w-72 ml-2">
-                        <el-input v-model="searchForm.queryValue" placeholder="请输入设备名称\设备型号查询" clearable @keyup="keyUpEvent"/>
+                        <el-input v-model="searchForm.queryValue" clearable placeholder="请输入设备名称\设备型号查询"
+                                  @keyup="keyUpEvent"/>
                     </div>
                     <div class="ml-2">
                         <el-button type="primary" @click="searchClick">
@@ -60,7 +62,8 @@
                         </el-button>
                     </div>
                 </template>
-                <HcTable ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading" isCheck @selection-change="tableSelection"/>
+                <HcTable ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading" isCheck
+                         @selection-change="tableSelection"/>
                 <template #action>
                     <HcPages :pages="searchForm" @change="pageChange"/>
                 </template>
@@ -68,55 +71,66 @@
         </div>
 
         <!--新增/编辑-->
-        <HcDialog :show="addEditFormModal" title="新增/编辑 设备检修信息" widths="50rem" :loading="addEditFormLoading" @close="addEditFormModalClose" @save="addEditFormClick">
-            <el-form ref="addEditFormRef" :model="addEditFormModel" :rules="addEditFormRules" label-width="auto" size="large">
+        <HcDialog :loading="addEditFormLoading" :show="addEditFormModal" title="新增/编辑 设备检修信息" widths="50rem"
+                  @close="addEditFormModalClose" @save="addEditFormClick">
+            <el-form ref="addEditFormRef" :model="addEditFormModel" :rules="addEditFormRules" label-width="auto"
+                     size="large">
                 <div class="hc-form-item">
                     <el-form-item label="设备分类">
-                        <el-select :disabled="deviceFormLoading" v-model="addEditFormModel.deviceClassId" block @change="deviceClassIdChange">
+                        <el-select v-model="addEditFormModel.deviceClassId" :disabled="deviceFormLoading" block
+                                   @change="deviceClassIdChange">
                             <el-option v-for="item in typeData" :label="item.className" :value="item.id"/>
                         </el-select>
                     </el-form-item>
                     <el-form-item label="维修/检定日期">
-                        <el-date-picker type="date" v-model="addEditFormModel.overhaulDate" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                        <el-date-picker v-model="addEditFormModel.overhaulDate" :clearable="false" class="block"
+                                        type="date" value-format="YYYY-MM-DD"/>
                     </el-form-item>
                 </div>
                 <div class="hc-form-item">
                     <el-form-item label="设备编号">
-                        <el-select :disabled="deviceFormLoading" v-model="addEditFormModel.deviceNumber" block @change="deviceNumberChange">
-                            <el-option v-for="item in deviceFormSelectData" :label="item.deviceNumber" :value="item.deviceNumber"/>
+                        <el-select v-model="addEditFormModel.deviceNumber" :disabled="deviceFormLoading" block
+                                   @change="deviceNumberChange">
+                            <el-option v-for="item in deviceFormSelectData" :label="item.deviceNumber"
+                                       :value="item.deviceNumber"/>
                         </el-select>
                     </el-form-item>
                     <el-form-item label="维修/检定人">
-                        <hcAutoComplete v-model="addEditFormModel.managerName" :datas="userListData" keys="userName" placeholder="请选择或输入维修/检定人"/>
+                        <hcAutoComplete v-model="addEditFormModel.managerName" :datas="userListData" keys="userName"
+                                        placeholder="请选择或输入维修/检定人"/>
                     </el-form-item>
                 </div>
                 <div class="hc-form-item">
                     <el-form-item label="设备名称">
-                        <el-select :disabled="deviceFormLoading" v-model="addEditFormModel.deviceName" block @change="deviceNameChange">
-                            <el-option v-for="item in deviceFormSelectData" :label="item.deviceName" :value="item.deviceName"/>
+                        <el-select v-model="addEditFormModel.deviceName" :disabled="deviceFormLoading" block
+                                   @change="deviceNameChange">
+                            <el-option v-for="item in deviceFormSelectData" :label="item.deviceName"
+                                       :value="item.deviceName"/>
                         </el-select>
                     </el-form-item>
                     <el-form-item/>
                 </div>
                 <el-form-item label="维修/检定内容">
-                    <el-input v-model="addEditFormModel.overhaulText" type="textarea" :autosize="{ minRows: 3}"/>
+                    <el-input v-model="addEditFormModel.overhaulText" :autosize="{ minRows: 3}" type="textarea"/>
                 </el-form-item>
                 <el-form-item label="备注">
-                    <el-input v-model="addEditFormModel.remarks" type="textarea" :autosize="{ minRows: 3}"/>
+                    <el-input v-model="addEditFormModel.remarks" :autosize="{ minRows: 3}" type="textarea"/>
                 </el-form-item>
             </el-form>
         </HcDialog>
 
         <!--导入-->
-        <HcDialog :show="importModal" title="导入设备检修数据" widths="70rem" isTable isFooterCenter :loading="importModalLoading" @save="importModalYesClick" @close="importModalClose">
+        <HcDialog :loading="importModalLoading" :show="importModal" isFooterCenter isTable title="导入设备检修数据"
+                  widths="70rem" @close="importModalClose" @save="importModalYesClick">
             <div class="text-orange mb-6">
                 <span>请先下载模板模板表格 (</span>
                 <span class="text-link" @click="downloadImportClick">范例试验设备文件</span>
                 <span>) ,按模板样式编辑试验容器后,在点击“选择文件”按钮选择编辑好的文件,点击确认即可导入成功!</span>
             </div>
-            <HcDragUpload action="overhaul/read-excel" @progress="uploadprogress" @finished="uploadFinished"/>
+            <HcDragUpload action="overhaul/read-excel" @finished="uploadFinished" @progress="uploadprogress"/>
             <div class="hc-import-modal-table-box">
-                <HcTable ref="tableImportRef" :column="tableColumn" :datas="tableImportData" :loading="tableImportLoading" isCheck @selection-change="tableImportSelection"/>
+                <HcTable ref="tableImportRef" :column="tableColumn" :datas="tableImportData"
+                         :loading="tableImportLoading" isCheck @selection-change="tableImportSelection"/>
             </div>
         </HcDialog>
     </div>
@@ -126,9 +140,9 @@
 import {ref, onMounted, watch} from "vue";
 import {useAppStore} from "~src/store";
 import HcDragUpload from "./components/HcDragUpload.vue"
-import {getClassList,deviceClassListInit, queryDeviceList, querySampleList} from "~api/tentative";
+import {getClassList, deviceClassListInit, queryDeviceList, querySampleList} from "~api/tentative";
 import {getContractUserList} from "~api/other";
-import {formValidate, getArrValue} from "vue-utils-plus"
+import {formValidate, getArrValue} from "js-fast-way"
 import dataApi from "~api/tentative/device/overhaul";
 import {getRowsValue, rowsToId} from "~uti/tools";
 
@@ -157,7 +171,7 @@ onMounted(() => {
 //获取用户列表
 const userListData = ref([])
 const getUserListData = async () => {
-    const { data } = await getContractUserList({
+    const {data} = await getContractUserList({
         contractId: contractId.value
     })
     userListData.value = getArrValue(data)
@@ -174,7 +188,7 @@ const menusProps = ref({
 const menus = ref([]);
 const typeData = ref([]);
 const getClassListData = async () => {
-    const { data } = await getClassList({
+    const {data} = await getClassList({
         contractId: contractId.value
     })
     const arr = getArrValue(data)
@@ -182,8 +196,8 @@ const getClassListData = async () => {
     menus.value = [{id: '0', className: '全部', isNoContextMenu: true}, ...arr]
 }
 //初始化设备分类
-const deviceClassListInitdata= async () => {
-     const { data } = await deviceClassListInit({
+const deviceClassListInitdata = async () => {
+    const {data} = await deviceClassListInit({
         contractId: contractId.value
     })
 }
@@ -210,8 +224,8 @@ const betweenTimeUpdate = ({arr}) => {
     if (arr.length > 0) {
         searchForm.value.startTime = arr[0]
         searchForm.value.endTime = arr[1]
-    }else{
-         searchForm.value.startTime = ''
+    } else {
+        searchForm.value.startTime = ''
         searchForm.value.endTime = ''
     }
 }
@@ -240,15 +254,15 @@ const pageChange = ({current, size}) => {
 //表格数据
 const tableRef = ref(null)
 const tableColumn = ref([
-    {key:'deviceName', name: '设备名称'},
-    {key:'deviceClassName', name: '设备分类'},
-    {key:'deviceNumber', name: '设备编号'},
-    {key:'deviceModel', name: '设备型号'},
-    {key:'factoryNumber', name: '出厂编号'},
-    {key:'overhaulDate', name: '维修/检定日期'},
-    {key:'overhaulText', name: '维修/检定内容'},
-    {key:'managerName', name: '维修/检定人'},
-    {key:'remarks', name: '备注'},
+    {key: 'deviceName', name: '设备名称'},
+    {key: 'deviceClassName', name: '设备分类'},
+    {key: 'deviceNumber', name: '设备编号'},
+    {key: 'deviceModel', name: '设备型号'},
+    {key: 'factoryNumber', name: '出厂编号'},
+    {key: 'overhaulDate', name: '维修/检定日期'},
+    {key: 'overhaulText', name: '维修/检定内容'},
+    {key: 'managerName', name: '维修/检定人'},
+    {key: 'remarks', name: '备注'},
 ])
 const tableLoading = ref(false)
 
@@ -256,7 +270,7 @@ const tableLoading = ref(false)
 const tableData = ref([])
 const getTableData = async () => {
     tableLoading.value = true
-    const { error, code, data } = await dataApi.queryPage({
+    const {error, code, data} = await dataApi.queryPage({
         projectId: projectId.value,
         contractId: contractId.value,
         ...searchForm.value,
@@ -296,10 +310,10 @@ const delNodeModalClick = () => {
 //批量删除
 const tableRemoveData = async () => {
     const rows = tableCheckedKeys.value
-    if (rows.length > 0 ) {
+    if (rows.length > 0) {
         const ids = rowsToId(rows)
         //删除请求
-        const { error, code } = await dataApi.removeData({
+        const {error, code} = await dataApi.removeData({
             contractId: contractId.value,
             ids: ids,
         })
@@ -315,11 +329,11 @@ const tableRemoveData = async () => {
 const printerLoading = ref(false)
 const printerClick = async () => {
     const rows = tableCheckedKeys.value
-    if (rows.length > 0 ) {
+    if (rows.length > 0) {
         printerLoading.value = true
         const ids = rowsToId(rows)
         //删除请求
-        const { error, code, data } = await dataApi.exportPdf({
+        const {error, code, data} = await dataApi.exportPdf({
             projectId: projectId.value,
             contractId: contractId.value,
             ids: ids,
@@ -327,7 +341,7 @@ const printerClick = async () => {
         //处理数据
         printerLoading.value = false
         if (!error && code === 200) {
-            window.open(data,'_blank')
+            window.open(data, '_blank')
         }
     }
 }
@@ -367,7 +381,7 @@ const importModalYesClick = () => {
 //导入数据保存
 const samplingRecord = async (keys) => {
     importModalLoading.value = true
-    const { error, code } = await dataApi.samplingRecord({
+    const {error, code} = await dataApi.samplingRecord({
         projectId: projectId.value,
         contractId: contractId.value,
         list: keys
@@ -478,13 +492,13 @@ const addEditFormClick = async () => {
     const validate = await formValidate(addEditFormRef.value)
     if (validate) {
         addEditFormLoading.value = true
-        const { error, code } = await dataApi.submitForm({
+        const {error, code} = await dataApi.submitForm({
             ...addEditFormModel.value,
             projectId: projectId.value,
             contractId: contractId.value
         })
         //处理数据
-     
+
         if (!error && code === 200) {
             window?.$message?.success('操作成功')
             addEditFormModal.value = false
@@ -496,7 +510,7 @@ const addEditFormClick = async () => {
 
 //下载导入模板
 const downloadImportClick = () => {
-    window.open('https://bladex-test-info.oss-cn-chengdu.aliyuncs.com//upload/20221109/d8011cf7b101ff694ed4f21ac4348542.xlsx','_blank')
+    window.open('https://bladex-test-info.oss-cn-chengdu.aliyuncs.com//upload/20221109/d8011cf7b101ff694ed4f21ac4348542.xlsx', '_blank')
 }
 
 
@@ -506,7 +520,7 @@ const onmousedown = () => {
     const leftNum = isCollapse.value ? 142 : 272
     document.onmousemove = (ve) => {
         let diffVal = ve.clientX - leftNum;
-        if(diffVal >= 220 && diffVal <= 400) {
+        if (diffVal >= 220 && diffVal <= 400) {
             leftWidth.value = diffVal;
         }
     }

+ 20 - 15
src/views/tentative/laboratory/components/FormItemUpload.vue

@@ -1,26 +1,30 @@
 <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 +33,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 +76,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 +120,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!');
@@ -170,7 +175,7 @@ const uploadChange = (file) => {
 //预览文件
 const previewClick = () => {
     const pdfUrl = uploadValue.value ?? ''
-    if (pdfUrl) window.open(pdfUrl,'_blank')
+    if (pdfUrl) window.open(pdfUrl, '_blank')
 }
 </script>
 

+ 1 - 1
src/views/tentative/laboratory/print.vue

@@ -58,7 +58,7 @@ import WbsTree from "../../data-fill/components/WbsTree.vue"
 import TestTree from "../material/components/TestTree.vue"
 import {getStoreValue, setStoreValue} from '~src/utils/storage'
 import dataApi from "~api/tentative/laboratory/print"
-import {getArrValue, getArrKeyValue, isIdCard, formValidate, isString} from "vue-utils-plus"
+import {getArrValue, isString} from "js-fast-way"
 
 //变量
 const useAppState = useAppStore()

+ 73 - 59
src/views/tentative/laboratory/user.vue

@@ -3,10 +3,11 @@
         <HcCard>
             <template #header>
                 <div class="w-72">
-                    <el-input v-model="searchForm.queryValue" placeholder="请输入人员名称查询" clearable @keyup="keyUpEvent" size="large"/>
+                    <el-input v-model="searchForm.queryValue" clearable placeholder="请输入人员名称查询"
+                              size="large" @keyup="keyUpEvent"/>
                 </div>
                 <div class="ml-2">
-                    <el-button type="primary" @click="searchClick" size="large" :disabled="tableData.length<1">
+                    <el-button :disabled="tableData.length<1" size="large" type="primary" @click="searchClick">
                         <HcIcon name="search-2"/>
                         <span>搜索</span>
                     </el-button>
@@ -14,33 +15,34 @@
             </template>
             <template #extra>
                 <HcTooltip keys="tentative_laboratory_user_add">
-                    <el-button type="primary" hc-btn @click="addFormModalClick">
+                    <el-button hc-btn type="primary" @click="addFormModalClick">
                         <HcIcon name="add-circle"/>
                         <span>新增</span>
                     </el-button>
                 </HcTooltip>
                 <HcTooltip keys="tentative_parameter_density_edit">
-                    <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="editFormModalClick">
+                    <el-button :disabled="tableCheckedKeys.length <= 0" hc-btn @click="editFormModalClick">
                         <HcIcon name="edit"/>
                         <span>编辑</span>
                     </el-button>
                 </HcTooltip>
                 <HcTooltip keys="tentative_laboratory_user_del">
-                    <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="delModalClick">
+                    <el-button :disabled="tableCheckedKeys.length <= 0" hc-btn @click="delModalClick">
                         <HcIcon name="delete-bin-2"/>
                         <span>删除</span>
                     </el-button>
                 </HcTooltip>
             </template>
-            <HcTable ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading" isCheck @selection-change="tableSelection">
+            <HcTable ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading" isCheck
+                     @selection-change="tableSelection">
                 <template #sex="{row}">
-                    <span>{{row.sex === 1 ? '男':'女'}}</span>
+                    <span>{{ row.sex === 1 ? '男' : '女' }}</span>
                 </template>
                 <template #status="{row}">
-                    <span>{{row.status === 1 ? '在职':'离职'}}</span>
+                    <span>{{ row.status === 1 ? '在职' : '离职' }}</span>
                 </template>
                 <template #education="{row}">
-                    <span>{{getArrKeyValue(educationData, 'dictKey', 'dictValue', row.education)}}</span>
+                    <span>{{ arrKeyValue(educationData, 'dictKey', 'dictValue', row.education) }}</span>
                 </template>
             </HcTable>
             <template #action>
@@ -49,11 +51,14 @@
         </HcCard>
 
         <!--新增/编辑-->
-        <HcDialog :show="addEditFormModal" :title="`${addEditFormModel.id?'编辑':'新增'}人员档案`" widths="70rem" :isClose="false" :loading="addEditFormLoading" @close="addEditFormModalClose" @save="addEditFormClick">
+        <HcDialog :isClose="false" :loading="addEditFormLoading" :show="addEditFormModal"
+                  :title="`${addEditFormModel.id?'编辑':'新增'}人员档案`" widths="70rem" @close="addEditFormModalClose"
+                  @save="addEditFormClick">
             <template #extra>
                 <HcNewSwitch :datas="tabTypeTab" :keys="tabTypeKey" @change="tabTypeChange"/>
             </template>
-            <el-form ref="addEditFormRef" :model="addEditFormModel" :rules="addEditFormRules" label-width="auto" size="large">
+            <el-form ref="addEditFormRef" :model="addEditFormModel" :rules="addEditFormRules" label-width="auto"
+                     size="large">
                 <template v-if="tabTypeKey === 'tab1'">
                     <div class="hc-form-item">
                         <el-form-item label="姓名" prop="name">
@@ -63,14 +68,15 @@
                             <el-input v-model="addEditFormModel.idCard"/>
                         </el-form-item>
                         <el-form-item label="出生日期" prop="birthday">
-                            <el-date-picker type="date" v-model="addEditFormModel.birthday" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                            <el-date-picker v-model="addEditFormModel.birthday" :clearable="false" class="block"
+                                            type="date" value-format="YYYY-MM-DD"/>
                         </el-form-item>
                     </div>
                     <div class="hc-form-item">
                         <el-form-item label="性别">
                             <el-select v-model="addEditFormModel.sex" block>
-                                <el-option label="男" :value="1"/>
-                                <el-option label="女" :value="2"/>
+                                <el-option :value="1" label="男"/>
+                                <el-option :value="2" label="女"/>
                             </el-select>
                         </el-form-item>
                         <el-form-item label="毕业院校">
@@ -83,21 +89,24 @@
                     <div class="hc-form-item">
                         <el-form-item label="学历">
                             <el-select v-model="addEditFormModel.education" block>
-                                <el-option v-for="item in educationData" :label="item['dictValue']" :value="item['dictKey']"/>
+                                <el-option v-for="item in educationData" :label="item['dictValue']"
+                                           :value="item['dictKey']"/>
                             </el-select>
                         </el-form-item>
                         <el-form-item label="毕业日期">
-                            <el-date-picker type="date" v-model="addEditFormModel.graduationDate" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                            <el-date-picker v-model="addEditFormModel.graduationDate" :clearable="false" class="block"
+                                            type="date" value-format="YYYY-MM-DD"/>
                         </el-form-item>
                         <el-form-item label="入职时间">
-                            <el-date-picker type="date" v-model="addEditFormModel.entryTime" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                            <el-date-picker v-model="addEditFormModel.entryTime" :clearable="false" class="block"
+                                            type="date" value-format="YYYY-MM-DD"/>
                         </el-form-item>
                     </div>
                     <div class="hc-form-item">
                         <el-form-item label="就职状态">
                             <el-select v-model="addEditFormModel.status" block>
-                                <el-option label="在职" :value="1"/>
-                                <el-option label="离职" :value="0"/>
+                                <el-option :value="1" label="在职"/>
+                                <el-option :value="0" label="离职"/>
                             </el-select>
                         </el-form-item>
                         <el-form-item label="职称">
@@ -109,7 +118,8 @@
                     </div>
                     <div class="hc-form-item">
                         <el-form-item label="进场时间">
-                            <el-date-picker type="date" v-model="addEditFormModel.mobilizationTime" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                            <el-date-picker v-model="addEditFormModel.mobilizationTime" :clearable="false" class="block"
+                                            type="date" value-format="YYYY-MM-DD"/>
                         </el-form-item>
                         <el-form-item label="部门">
                             <el-input v-model="addEditFormModel.department"/>
@@ -120,13 +130,16 @@
                     </div>
                     <div class="hc-form-item">
                         <el-form-item label="退场时间">
-                            <el-date-picker type="date" v-model="addEditFormModel.exitTime" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                            <el-date-picker v-model="addEditFormModel.exitTime" :clearable="false" class="block"
+                                            type="date" value-format="YYYY-MM-DD"/>
                         </el-form-item>
                         <el-form-item label="劳动合同开始日期">
-                            <el-date-picker type="date" v-model="addEditFormModel.laborContractStartDate" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                            <el-date-picker v-model="addEditFormModel.laborContractStartDate" :clearable="false" class="block"
+                                            type="date" value-format="YYYY-MM-DD"/>
                         </el-form-item>
                         <el-form-item label="劳动合同终止日期">
-                            <el-date-picker type="date" v-model="addEditFormModel.laborContractEndDate" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                            <el-date-picker v-model="addEditFormModel.laborContractEndDate" :clearable="false" class="block"
+                                            type="date" value-format="YYYY-MM-DD"/>
                         </el-form-item>
                     </div>
                 </template>
@@ -155,10 +168,11 @@
                 </template>
                 <template v-if="tabTypeKey === 'tab3'">
                     <el-form-item label="记录日期">
-                        <el-date-picker type="date" v-model="addEditFormModel.workRecordDate" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                        <el-date-picker v-model="addEditFormModel.workRecordDate" :clearable="false" class="block"
+                                        type="date" value-format="YYYY-MM-DD"/>
                     </el-form-item>
                     <el-form-item label="内容">
-                        <el-input v-model="addEditFormModel.workContent" type="textarea" :autosize="{ minRows: 8}"/>
+                        <el-input v-model="addEditFormModel.workContent" :autosize="{ minRows: 8}" type="textarea"/>
                     </el-form-item>
                 </template>
             </el-form>
@@ -172,7 +186,7 @@ import {onMounted, ref} from "vue";
 import {useAppStore} from "~src/store";
 import dataApi from "~api/tentative/laboratory/user"
 import FormItemUpload from "./components/FormItemUpload.vue"
-import {getArrValue, getArrKeyValue, isIdCard, formValidate} from "vue-utils-plus"
+import {getArrValue, arrKeyValue, isIdCard, formValidate} from "js-fast-way"
 import {getDictionary} from "~api/other";
 
 //初始变量
@@ -191,7 +205,7 @@ onMounted(() => {
 //获取学历类型
 const educationData = ref([])
 const getEducationType = async () => {
-    const { data } = await getDictionary({
+    const {data} = await getDictionary({
         code: 'trial_user_education'
     })
     const arrData = getArrValue(data)
@@ -233,23 +247,23 @@ const pageChange = ({current, size}) => {
 //表格数据
 const tableRef = ref(null)
 const tableColumn = ref([
-    {key:'name', name: '姓名', width: 100},
-    {key:'department', name: '部门', width: 120},
-    {key:'jobTitleName', name: '职称', width: 100},
-    {key:'status', name: '就职状态', width: 80},
-    {key:'entryTime', name: '入职时间', width: 140},
-    {key:'workingTime', name: '从事检测工作(月)', width: 150},
-    {key:'jobTitlePost', name: '工作职务', width: 120},
-    {key:'idCard', name: '身份证号码', width: 180},
-    {key:'birthday', name: '出生日期', width: 140},
-    {key:'sex', name: '性别', width: 80},
-    {key:'graduationSchool', name: '毕业院校'},
-    {key:'education', name: '学历', width: 120},
-    {key:'major', name: '专业', width: 150},
-    {key:'graduationDate', name: '毕业时间', width: 140},
-    {key:'laborContractEndDate', name: '劳动合同终止日期', width: 140},
-    {key:'mobilizationTime', name: '进场时间', width: 140},
-    {key:'exitTime', name: '退场时间', width: 140},
+    {key: 'name', name: '姓名', width: 100},
+    {key: 'department', name: '部门', width: 120},
+    {key: 'jobTitleName', name: '职称', width: 100},
+    {key: 'status', name: '就职状态', width: 80},
+    {key: 'entryTime', name: '入职时间', width: 140},
+    {key: 'workingTime', name: '从事检测工作(月)', width: 150},
+    {key: 'jobTitlePost', name: '工作职务', width: 120},
+    {key: 'idCard', name: '身份证号码', width: 180},
+    {key: 'birthday', name: '出生日期', width: 140},
+    {key: 'sex', name: '性别', width: 80},
+    {key: 'graduationSchool', name: '毕业院校'},
+    {key: 'education', name: '学历', width: 120},
+    {key: 'major', name: '专业', width: 150},
+    {key: 'graduationDate', name: '毕业时间', width: 140},
+    {key: 'laborContractEndDate', name: '劳动合同终止日期', width: 140},
+    {key: 'mobilizationTime', name: '进场时间', width: 140},
+    {key: 'exitTime', name: '退场时间', width: 140},
 ])
 
 //获取数据
@@ -257,7 +271,7 @@ const tableLoading = ref(false)
 const tableData = ref([])
 const getTableData = async () => {
     tableLoading.value = true
-    const { error, code, data } = await dataApi.queryPage({
+    const {error, code, data} = await dataApi.queryPage({
         projectId: projectId.value,
         contractId: contractId.value,
         ...searchForm.value,
@@ -266,9 +280,9 @@ const getTableData = async () => {
     tableLoading.value = false
     if (!error && code === 200) {
         tableData.value = getArrValue(data['records'])
-        tableData.value.forEach((item)=>{
-            if( item?.workingTime==-1){
-                item.workingTime=''
+        tableData.value.forEach((item) => {
+            if (item?.workingTime == -1) {
+                item.workingTime = ''
             }
         })
         searchForm.value.total = data.total || 0
@@ -298,8 +312,8 @@ const editFormModalClick = () => {
     const keys = tableCheckedKeys.value
     if (keys.length === 1) {
         addEditFormModel.value = keys[0]
-        addEditFormModel.value.certificateType = addEditFormModel.value.certificateType+''
-        addEditFormModel.value.certificateMajor = addEditFormModel.value.certificateMajor+''
+        addEditFormModel.value.certificateType = addEditFormModel.value.certificateType + ''
+        addEditFormModel.value.certificateMajor = addEditFormModel.value.certificateMajor + ''
         addEditFormModal.value = true
     } else if (keys.length > 1) {
         window?.$message?.warning('只能选择一条数据编辑')
@@ -315,9 +329,9 @@ const addEditFormModalClose = () => {
 //类型tab数据和相关处理
 const tabTypeKey = ref('tab1')
 const tabTypeTab = ref([
-    {key:'tab1',  name: '基本信息'},
-    {key:'tab2', name: '证书信息'},
-    {key:'tab3', name: '工作记录'},
+    {key: 'tab1', name: '基本信息'},
+    {key: 'tab2', name: '证书信息'},
+    {key: 'tab3', name: '工作记录'},
 ]);
 const tabTypeChange = (item) => {
     tabTypeKey.value = item?.key
@@ -333,7 +347,7 @@ const addEditFormRules = {
         validator: (rule, value, callback) => {
             if (!value) {
                 callback(new Error('请输入姓名'))
-            } else if (value.length>5||value.length<2) {
+            } else if (value.length > 5 || value.length < 2) {
                 callback(new Error('姓名长度必须大于等于2并且小于等于5'))
             } else {
                 callback()
@@ -366,14 +380,14 @@ const addEditFormClick = async () => {
     const validate = await formValidate(addEditFormRef.value)
     if (validate) {
         addEditFormLoading.value = true
-        addEditFormModel.value.workingTime=Number(addEditFormModel.value.workingTime)
-        const { error, code } = await dataApi.submitForm({
+        addEditFormModel.value.workingTime = Number(addEditFormModel.value.workingTime)
+        const {error, code} = await dataApi.submitForm({
             ...addEditFormModel.value,
             projectId: projectId.value,
             contractId: contractId.value
         })
         //处理数据
-      
+
         if (!error && code === 200) {
             window?.$message?.success('操作成功')
             addEditFormModal.value = false
@@ -403,10 +417,10 @@ const delModalClick = () => {
 //批量删除
 const tableRemoveData = async () => {
     const rows = tableCheckedKeys.value
-    if (rows.length > 0 ) {
+    if (rows.length > 0) {
         const ids = rowsToId(rows)
         //删除请求
-        const { error, code } = await dataApi.removeData({
+        const {error, code} = await dataApi.removeData({
             projectId: projectId.value,
             contractId: contractId.value,
             ids: ids,

+ 153 - 132
src/views/tentative/material/approach.vue

@@ -3,31 +3,32 @@
         <HcCard>
             <template #header>
                 <HcTooltip keys="tentative_material_approach_add">
-                    <el-button type="primary" hc-btn @click="addFormModalClick">
+                    <el-button hc-btn type="primary" @click="addFormModalClick">
                         <HcIcon name="add-circle"/>
                         <span>新增</span>
                     </el-button>
                 </HcTooltip>
                 <HcTooltip keys="tentative_material_approach_edit">
-                    <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="editFormModalClick">
+                    <el-button :disabled="tableCheckedKeys.length <= 0" hc-btn @click="editFormModalClick">
                         <HcIcon name="edit"/>
                         <span>编辑</span>
                     </el-button>
                 </HcTooltip>
                 <HcTooltip keys="tentative_material_approach_copy">
-                    <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="copyTableModalClick">
+                    <el-button :disabled="tableCheckedKeys.length <= 0" hc-btn @click="copyTableModalClick">
                         <HcIcon name="file-copy-2"/>
                         <span>复制</span>
                     </el-button>
                 </HcTooltip>
                 <HcTooltip keys="tentative_material_approach_del">
-                    <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="delModalClick">
+                    <el-button :disabled="tableCheckedKeys.length <= 0" hc-btn @click="delModalClick">
                         <HcIcon name="delete-bin-2"/>
                         <span>删除</span>
                     </el-button>
                 </HcTooltip>
                 <HcTooltip keys="tentative_material_approach_printer">
-                    <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" :loading="printerLoading" @click="printerClick">
+                    <el-button :disabled="tableCheckedKeys.length <= 0" :loading="printerLoading" hc-btn
+                               @click="printerClick">
                         <HcIcon name="printer"/>
                         <span>打印</span>
                     </el-button>
@@ -41,15 +42,17 @@
             </template>
             <template #search>
                 <div class="w-40">
-                    <el-select v-model="searchForm.materialType" placeholder="请选择材料类型" clearable>
-                        <el-option v-for="item in typeData" :key="item.value" :label="item['dictValue']" :value="item['dictKey']"/>
+                    <el-select v-model="searchForm.materialType" clearable placeholder="请选择材料类型">
+                        <el-option v-for="item in typeData" :key="item.value" :label="item['dictValue']"
+                                   :value="item['dictKey']"/>
                     </el-select>
                 </div>
                 <div class="w-64 ml-2">
                     <HcDatePicker :dates="betweenTime" clearable @change="betweenTimeUpdate"/>
                 </div>
                 <div class="w-72 ml-2">
-                    <el-input v-model="searchForm.queryValue" placeholder="请输入名称、规格、材料编号进行查询" clearable @keyup="keyUpEvent"/>
+                    <el-input v-model="searchForm.queryValue" clearable placeholder="请输入名称、规格、材料编号进行查询"
+                              @keyup="keyUpEvent"/>
                 </div>
                 <div class="ml-2">
                     <el-button type="primary" @click="searchClick">
@@ -58,16 +61,19 @@
                     </el-button>
                 </div>
             </template>
-            <HcTable ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading" isCheck @selection-change="tableSelection">
-                <template #materialType="{row}">{{getRowTableMaterialType(row['materialType'])}}</template>
-                <template #materialCount="{row}">{{row.materialCount===-1?"":row.materialCount}}</template>
-                <template #materialPrice="{row}">{{row.materialPrice===-1?"":row.materialPrice}}</template>
+            <HcTable ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading" isCheck
+                     @selection-change="tableSelection">
+                <template #materialType="{row}">{{ getRowTableMaterialType(row['materialType']) }}</template>
+                <template #materialCount="{row}">{{ row.materialCount === -1 ? "" : row.materialCount }}</template>
+                <template #materialPrice="{row}">{{ row.materialPrice === -1 ? "" : row.materialPrice }}</template>
                 <template #action="{row}">
                     <HcTooltip keys="tentative_material_approach_annex">
-                        <el-button type="primary" size="small" plain @click="viewAttachmentModalClick(row)">附件</el-button>
+                        <el-button plain size="small" type="primary" @click="viewAttachmentModalClick(row)">附件
+                        </el-button>
                     </HcTooltip>
                     <HcTooltip keys="tentative_material_approach_sampling">
-                        <el-button type="primary" size="small" plain @click="samplingRecordModalClick(row)">取样记录</el-button>
+                        <el-button plain size="small" type="primary" @click="samplingRecordModalClick(row)">取样记录
+                        </el-button>
                     </HcTooltip>
                 </template>
             </HcTable>
@@ -77,8 +83,10 @@
         </HcCard>
 
         <!--新增/编辑-->
-        <HcDialog :show="addEditFormModal" :title="`${addEditFormModel.id?'编辑':'新增'}材料进场`" widths="45rem" :loading="addEditFormLoading" @close="addEditFormModalClose" @save="addEditFormClick">
-            <el-form ref="addEditFormRef" :model="addEditFormModel" :rules="addEditFormRules" label-width="auto" size="large">
+        <HcDialog :loading="addEditFormLoading" :show="addEditFormModal" :title="`${addEditFormModel.id?'编辑':'新增'}材料进场`"
+                  widths="45rem" @close="addEditFormModalClose" @save="addEditFormClick">
+            <el-form ref="addEditFormRef" :model="addEditFormModel" :rules="addEditFormRules" label-width="auto"
+                     size="large">
                 <div class="hc-form-item">
                     <el-form-item label="材料类型" prop="materialType">
                         <el-select v-model="addEditFormModel.materialType" block>
@@ -94,7 +102,8 @@
                         <el-input v-model="addEditFormModel.materialName"/>
                     </el-form-item>
                     <el-form-item label="材料数量" prop="materialCount">
-                        <el-input v-model="addEditFormModel.materialCount"    onkeyup="value = value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g,'$1')"/>
+                        <el-input v-model="addEditFormModel.materialCount"
+                                  onkeyup="value = value.replace(/^\D*(\d*(?:\.\d{0,2})?).*$/g,'$1')"/>
                     </el-form-item>
                 </div>
                 <div class="hc-form-item">
@@ -115,7 +124,8 @@
                 </div>
                 <div class="hc-form-item">
                     <el-form-item label="进场日期">
-                        <el-date-picker type="date" v-model="addEditFormModel.mobilizationDate" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                        <el-date-picker v-model="addEditFormModel.mobilizationDate" :clearable="false" class="block"
+                                        type="date" value-format="YYYY-MM-DD"/>
                     </el-form-item>
                     <el-form-item label="拟用部位">
                         <el-input v-model="addEditFormModel.proposedPosition"/>
@@ -142,20 +152,23 @@
         </HcDialog>
 
         <!--复制材料登记信息-->
-        <HcDialog :show="copyTableModal" title="复制材料登记信息" widths="60rem" isTable :loading="copyTableLoading" @close="copyTableModalClose" @save="copyTableClick">
+        <HcDialog :loading="copyTableLoading" :show="copyTableModal" isTable title="复制材料登记信息" widths="60rem"
+                  @close="copyTableModalClose" @save="copyTableClick">
             <HcTable :column="copyTableColumn" :datas="copyTableData">
                 <template #materialNumber="{row}">
-                    <el-input v-model="row.materialNumber" :class="row.isMaterialNumber?'is-error':''" placeholder="请输入材料编号" @blur="materialNumberBlur(row)"/>
+                    <el-input v-model="row.materialNumber" :class="row.isMaterialNumber?'is-error':''"
+                              placeholder="请输入材料编号" @blur="materialNumberBlur(row)"/>
                 </template>
                 <template #action="{index}">
-                    <el-button type="danger" size="small" plain @click="materialNumberDel(index)">删除</el-button>
+                    <el-button plain size="small" type="danger" @click="materialNumberDel(index)">删除</el-button>
                 </template>
             </HcTable>
         </HcDialog>
 
         <!--导入-->
-        <HcDialog :show="importModal" title="导入" widths="38rem" isRowFooter @close="importModalClose">
-            <HcDragUpload ref="uploadRef" action="mobilization/import" :datas="uploadData" @progress="uploadprogress" @finished="uploadFinished" :api="'/api/blade-business/material/'"/>
+        <HcDialog :show="importModal" isRowFooter title="导入" widths="38rem" @close="importModalClose">
+            <HcDragUpload ref="uploadRef" :api="'/api/blade-business/material/'" :datas="uploadData" action="mobilization/import"
+                          @finished="uploadFinished" @progress="uploadprogress"/>
             <template #leftRowFooter>
                 <el-button size="large" @click="downloadImportClick">
                     <HcIcon name="download-2"/>
@@ -167,7 +180,7 @@
                     <HcIcon name="close"/>
                     <span>取消导入</span>
                 </el-button>
-                <el-button type="primary" hc-btn :loading="importModalLoading" @click="importModalYesClick">
+                <el-button :loading="importModalLoading" hc-btn type="primary" @click="importModalYesClick">
                     <HcIcon name="folder-upload"/>
                     <span>确认导入</span>
                 </el-button>
@@ -175,41 +188,49 @@
         </HcDialog>
 
         <!--查看附件-->
-        <HcDialog :show="viewAttachmentModal" title="查看附件" widths="70rem" :footer="false" isTable @close="viewAttachmentModalClose">
+        <HcDialog :footer="false" :show="viewAttachmentModal" isTable title="查看附件" widths="70rem"
+                  @close="viewAttachmentModalClose">
             <template #extra>
-                <HcNewSwitch :datas="tabTypeTab" :keys="tabTypeKey" @change="tabTypeChange" :disabled="tableRowPdfDisabled"/>
+                <HcNewSwitch :datas="tabTypeTab" :disabled="tableRowPdfDisabled" :keys="tabTypeKey"
+                             @change="tabTypeChange"/>
             </template>
             <div class="hc-switch-tab-content">
                 <div class="h-full w-full">
                     <div v-if="tableRowData[tabTypeKey]" style="text-align:center">
-                        <iframe allow="display-capture" width='100%' height='100%' frameborder='1' :src="tableRowData[tabTypeKey]" style="height:500px;width:90%" v-if="tableRowData[tabTypeKey]&&ispdf!==-1"/>
-                      
-                        <div class="hc-no-table-form" v-if="ispdf==-1">
+                        <iframe v-if="tableRowData[tabTypeKey]&&ispdf!==-1" :src="tableRowData[tabTypeKey]" allow="display-capture" frameborder='1'
+                                height='100%' style="height:500px;width:90%"
+                                width='100%'/>
+
+                        <div v-if="ispdf==-1" class="hc-no-table-form">
                             <div class="table-form-no" style="margin-top:100px">
                                 <!-- <img :src="notableform" alt=""/>
                                 <div class="desc">暂无 PDF 数据,请上传</div> -->
-                                <HcDragUpload autoUpload @progress="tableRowPdfProgress" @finished="tableRowPdfFinished"  :action="'endpoint/put-file-attach'" 
-                                :accept="'image/png,image/jpg,image/jpeg,application/pdf,.doc,.docx,application/msword'"
-                                :formatTip="':jpg/png/pdf/excel/word.pdf'"
+                                <HcDragUpload :accept="'image/png,image/jpg,image/jpeg,application/pdf,.doc,.docx,application/msword'" :action="'endpoint/put-file-attach'" :formatTip="':jpg/png/pdf/excel/word.pdf'"
+                                              autoUpload
+                                              @finished="tableRowPdfFinished"
+                                              @progress="tableRowPdfProgress"
                                 />
-                                  <el-link type="primary" :href="tableRowData[tabTypeKey]" style="margin-top:10px">{{splitFileName(tableRowData[tabTypeKey])}}</el-link>
+                                <el-link :href="tableRowData[tabTypeKey]" style="margin-top:10px" type="primary">
+                                    {{ splitFileName(tableRowData[tabTypeKey]) }}
+                                </el-link>
                             </div>
                         </div>
 
-                        <el-button type="primary" size="small" hc-btn  @click="deleteFile"  >
+                        <el-button hc-btn size="small" type="primary" @click="deleteFile">
                             <HcIcon name="delete-bin-2"/>
                             <span>删除</span>
                         </el-button>
-                   
+
                     </div>
-                    
-                    <div class="hc-no-table-form" v-else>
+
+                    <div v-else class="hc-no-table-form">
                         <div class="table-form-no">
                             <img :src="notableform" alt=""/>
                             <div class="desc">暂无 文件 数据,请上传</div>
-                            <HcDragUpload autoUpload @progress="tableRowPdfProgress" @finished="tableRowPdfFinished"  :action="'endpoint/put-file-attach'" 
-                            :accept="'image/png,image/jpg,image/jpeg,application/pdf,.doc,.docx,application/msword'"
-                            :formatTip="':jpg/png/pdf/excel/word.pdf'"
+                            <HcDragUpload :accept="'image/png,image/jpg,image/jpeg,application/pdf,.doc,.docx,application/msword'" :action="'endpoint/put-file-attach'" :formatTip="':jpg/png/pdf/excel/word.pdf'"
+                                          autoUpload
+                                          @finished="tableRowPdfFinished"
+                                          @progress="tableRowPdfProgress"
                             />
                         </div>
                     </div>
@@ -218,10 +239,12 @@
         </HcDialog>
 
         <!--取样记录-->
-        <HcDialog :show="samplingRecordModal" title="取样记录" widths="60%" :footer="false" isTable @close="samplingRecordModalClose">
-            <HcTable :column="samplingTableColumn" :datas="samplingTableData" :loading="samplingTableLoading" :isIndex="false">
+        <HcDialog :footer="false" :show="samplingRecordModal" isTable title="取样记录" widths="60%"
+                  @close="samplingRecordModalClose">
+            <HcTable :column="samplingTableColumn" :datas="samplingTableData" :isIndex="false"
+                     :loading="samplingTableLoading">
                 <template #isOutsourcing="{row}">
-                    <span>{{row.isOutsourcing === 1 ? '是':'否'}}</span>
+                    <span>{{ row.isOutsourcing === 1 ? '是' : '否' }}</span>
                 </template>
             </HcTable>
         </HcDialog>
@@ -230,13 +253,13 @@
 </template>
 
 <script setup>
-import {ref,onMounted} from "vue";
+import {ref, onMounted} from "vue";
 import {useAppStore} from "~src/store";
 import HcDragUpload from "./components/HcDragUpload.vue"
 import FormItemUpload from "./components/FormItemUpload.vue"
 import notableform from '~src/assets/view/notableform.svg';
 import approachApi from "~api/tentative/material/approach"
-import {formValidate, getArrValue, getIndex, deepClone} from "vue-utils-plus"
+import {formValidate, getArrValue, arrIndex, deepClone} from "js-fast-way"
 import {getDictionary} from "~api/other";
 
 //初始变量
@@ -255,7 +278,7 @@ onMounted(() => {
 //获取材料类型
 const typeData = ref([])
 const getMaterialType = async () => {
-    const { data } = await getDictionary({
+    const {data} = await getDictionary({
         code: 'material_type'
     })
     typeData.value = getArrValue(data)
@@ -266,7 +289,7 @@ const getMaterialType = async () => {
 const getRowTableMaterialType = (type) => {
     if (type > 0) {
         const nodeData = typeData.value
-        const index = getIndex(nodeData, 'dictKey', type)
+        const index = arrIndex(nodeData, 'dictKey', type)
         return nodeData[index]?.dictValue ?? type
     } else {
         return ''
@@ -286,9 +309,9 @@ const betweenTimeUpdate = ({arr}) => {
     if (arr.length > 0) {
         searchForm.value.startTime = arr[0]
         searchForm.value.endTime = arr[1]
-    }else{
-         searchForm.value.startTime = ''
-         searchForm.value.endTime =''
+    } else {
+        searchForm.value.startTime = ''
+        searchForm.value.endTime = ''
     }
 }
 
@@ -316,20 +339,20 @@ const pageChange = ({current, size}) => {
 //表格数据
 const tableRef = ref(null)
 const tableColumn = ref([
-    {key:'materialNumber', name: '材料编号'},
-    {key:'mobilizationDate', name: '进场日期'},
-    {key:'materialName', name: '材料名称'},
-    {key:'materialType', name: '材料类型'},
-    {key:'specificationModel', name: '规格型号'},
-    {key:'supplierUnit', name: '供应商单位'},
-    {key:'materialPrice', name: '材料单价'},
-    {key:'materialCount', name: '材料数量'},
-    {key:'calculationUnit', name: '计算单位'},
-    {key:'batchNumber', name: '生产批号'},
-    {key:'placeOfProduction', name: '生产地/厂家'},
-    {key:'proposedPosition', name: '拟用部位'},
-    {key:'userName', name: '记录人'},
-    {key:'action', name: '操作', width: 150, fixed: 'right', align: 'center'},
+    {key: 'materialNumber', name: '材料编号'},
+    {key: 'mobilizationDate', name: '进场日期'},
+    {key: 'materialName', name: '材料名称'},
+    {key: 'materialType', name: '材料类型'},
+    {key: 'specificationModel', name: '规格型号'},
+    {key: 'supplierUnit', name: '供应商单位'},
+    {key: 'materialPrice', name: '材料单价'},
+    {key: 'materialCount', name: '材料数量'},
+    {key: 'calculationUnit', name: '计算单位'},
+    {key: 'batchNumber', name: '生产批号'},
+    {key: 'placeOfProduction', name: '生产地/厂家'},
+    {key: 'proposedPosition', name: '拟用部位'},
+    {key: 'userName', name: '记录人'},
+    {key: 'action', name: '操作', width: 150, fixed: 'right', align: 'center'},
 ])
 const tableRowData = ref({})
 
@@ -338,7 +361,7 @@ const tableLoading = ref(false)
 const tableData = ref([])
 const getTableData = async () => {
     tableLoading.value = true
-    const { error, code, data } = await approachApi.queryPage({
+    const {error, code, data} = await approachApi.queryPage({
         projectId: projectId.value,
         contractId: contractId.value,
         ...searchForm.value,
@@ -358,7 +381,7 @@ const getTableData = async () => {
 const tableCheckedKeys = ref([]);
 const tableSelection = (rows) => {
     tableCheckedKeys.value = rows.filter((item) => {
-        return (item??'') !== '';
+        return (item ?? '') !== '';
     })
 }
 
@@ -373,9 +396,9 @@ const editFormModalClick = () => {
     const keys = tableCheckedKeys.value
     if (keys.length === 1) {
         addEditFormModel.value = keys[0]
-        addEditFormModel.value.materialType= addEditFormModel.value.materialType+''
-        addEditFormModel.value.materialCount=addEditFormModel.value.materialCount===-1?'':addEditFormModel.value.materialCount
-        addEditFormModel.value.materialPrice=addEditFormModel.value.materialPrice===-1?'':addEditFormModel.value.materialPrice
+        addEditFormModel.value.materialType = addEditFormModel.value.materialType + ''
+        addEditFormModel.value.materialCount = addEditFormModel.value.materialCount === -1 ? '' : addEditFormModel.value.materialCount
+        addEditFormModel.value.materialPrice = addEditFormModel.value.materialPrice === -1 ? '' : addEditFormModel.value.materialPrice
         addEditFormModal.value = true
     } else if (keys.length > 1) {
         window?.$message?.warning('只能选择一条数据编辑')
@@ -409,7 +432,7 @@ const addEditFormRules = {
         required: false,
         validator: async (rule, value, callback) => {
             if (!value) {
-              return
+                return
             } else {
                 const ver = await verification(value)
                 if (!ver) {
@@ -425,23 +448,21 @@ const addEditFormRules = {
         required: false,
         validator: async (rule, value, callback) => {
             if (!value) {
-              return
-            }
-            else if(value.length>8) {
+                return
+            } else if (value.length > 8) {
                 callback(new Error('材料单价长度不能超过八位数'))
-            } 
+            }
         },
         trigger: 'blur'
     },
-    materialCount:{
-         required: false,
+    materialCount: {
+        required: false,
         validator: async (rule, value, callback) => {
-             if (!value) {
+            if (!value) {
                 callback()
-            }
-            else if (value.length>10) {
+            } else if (value.length > 10) {
                 callback(new Error('材料数量长度不能超过10位数'))
-            } 
+            }
         },
         trigger: 'blur'
     }
@@ -450,7 +471,7 @@ const addEditFormRules = {
 
 //校验材料编号是否唯一
 const verification = async (val) => {
-    const { error, code, data } = await approachApi.verification({
+    const {error, code, data} = await approachApi.verification({
         projectId: projectId.value,
         contractId: contractId.value,
         materialNumber: val,
@@ -469,30 +490,30 @@ const addEditFormClick = async () => {
     const validate = await formValidate(addEditFormRef.value)
     if (validate) {
         addEditFormLoading.value = true
-        addEditFormModel.value.materialCount=Number(addEditFormModel.value.materialCount)
-        const { error, code } = await approachApi.submitForm({
+        addEditFormModel.value.materialCount = Number(addEditFormModel.value.materialCount)
+        const {error, code} = await approachApi.submitForm({
             ...addEditFormModel.value,
             projectId: projectId.value,
             contractId: contractId.value
         })
         //处理数据
-      
+
         if (!error && code === 200) {
             window?.$message?.success('操作成功')
             addEditFormModal.value = false
             addEditFormLoading.value = false
             await getTableData()
-        }else{
-              addEditFormLoading.value = false
+        } else {
+            addEditFormLoading.value = false
         }
     }
 }
 
 //复制表格
 const copyTableColumn = ref([
-    {key:'materialName', name: '材料名称'},
-    {key:'materialNumber', name: '材料编号'},
-    {key:'action', name: '操作', width: 100},
+    {key: 'materialName', name: '材料名称'},
+    {key: 'materialNumber', name: '材料编号'},
+    {key: 'action', name: '操作', width: 100},
 ])
 const copyTableData = ref([])
 
@@ -533,7 +554,7 @@ const copyTableClick = () => {
     const rows = copyTableData.value
     if (rows.length > 0) {
         //判断是否满足条件
-        const result = rows.every(({isMaterialNumber})=> {
+        const result = rows.every(({isMaterialNumber}) => {
             return isMaterialNumber === false
         })
         //判断状态
@@ -554,7 +575,7 @@ const copyTableClick = () => {
 //复制数据请求
 const tableCopyData = async (rows) => {
     copyTableLoading.value = true
-    const { error, code } = await approachApi.copyData(rows)
+    const {error, code} = await approachApi.copyData(rows)
     //处理数据
     copyTableLoading.value = false
     if (!error && code === 200) {
@@ -582,10 +603,10 @@ const delModalClick = () => {
 //批量删除
 const tableRemoveData = async () => {
     const rows = tableCheckedKeys.value
-    if (rows.length > 0 ) {
+    if (rows.length > 0) {
         const ids = rowsToId(rows)
         //删除请求
-        const { error, code } = await approachApi.removeData({
+        const {error, code} = await approachApi.removeData({
             projectId: projectId.value,
             contractId: contractId.value,
             ids: ids,
@@ -602,11 +623,11 @@ const tableRemoveData = async () => {
 const printerLoading = ref(false)
 const printerClick = async () => {
     const rows = tableCheckedKeys.value
-    if (rows.length > 0 ) {
+    if (rows.length > 0) {
         printerLoading.value = true
         const ids = rowsToId(rows)
         //删除请求
-        const { error, code, data } = await approachApi.exportPdf({
+        const {error, code, data} = await approachApi.exportPdf({
             projectId: projectId.value,
             contractId: contractId.value,
             ids: ids,
@@ -614,7 +635,7 @@ const printerClick = async () => {
         //处理数据
         printerLoading.value = false
         if (!error && code === 200) {
-            window.open(data,'_blank')
+            window.open(data, '_blank')
         }
     }
 }
@@ -662,36 +683,36 @@ const viewAttachmentModal = ref(false)
 const viewAttachmentModalClick = (row) => {
     tableRowData.value = row
     viewAttachmentModal.value = true
-     tabTypeKey.value='productionCertificate'
+    tabTypeKey.value = 'productionCertificate'
     const key = tabTypeKey.value
-    ispdf.value=getCaption( row[key])
+    ispdf.value = getCaption(row[key])
 }
 
 //类型tab数据和相关处理
 const tabTypeKey = ref('')
-const tabTypeKeyType=ref(1)
-const ispdf=ref(-1)
+const tabTypeKeyType = ref(1)
+const ispdf = ref(-1)
 const tabTypeTab = ref([
-    {key:'productionCertificate',  name: '生产合格证',type:1},
-    {key:'qualityInspectionReport', name: '厂家质检报告',type:2},
-    {key:'otherAccessories', name: '其他文件',type:3},
+    {key: 'productionCertificate', name: '生产合格证', type: 1},
+    {key: 'qualityInspectionReport', name: '厂家质检报告', type: 2},
+    {key: 'otherAccessories', name: '其他文件', type: 3},
 ]);
 const tabTypeChange = (item) => {
     tabTypeKey.value = item?.key
-    tabTypeKeyType.value=item?.type
+    tabTypeKeyType.value = item?.type
     const row = tableRowData.value, key = tabTypeKey.value
-    ispdf.value=getCaption( row[key])
+    ispdf.value = getCaption(row[key])
 }
 //截取文件名称
-const splitFileName=(str)=>{
+const splitFileName = (str) => {
     // if(str.indexOf("https://bladex-test-info.oss-cn-chengdu.aliyuncs.com//upload") != -1){
-    if(str.indexOf("https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com//upload") != -1){
-        let a=str.split('//')[2].split('/')[2]
+    if (str.indexOf("https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com//upload") != -1) {
+        let a = str.split('//')[2].split('/')[2]
         return a
-    }else{
+    } else {
         return str
     }
- 
+
 }
 //上传进度
 const tableRowPdfDisabled = ref(false)
@@ -701,12 +722,12 @@ const tableRowPdfProgress = (res) => {
 
 //上传完成
 const tableRowPdfFinished = async (data1) => {
-    console.log(data1,'data');
+    console.log(data1, 'data');
     tableRowPdfDisabled.value = true
     const row = tableRowData.value, key = tabTypeKey.value
     row[key] = data1?.link
-    console.log(row,'row');
-    ispdf.value=getCaption( row[key])
+    console.log(row, 'row');
+    ispdf.value = getCaption(row[key])
     // //保存请求
     // const { error, code } = await approachApi.submitForm({
     //     ...row,
@@ -720,13 +741,13 @@ const tableRowPdfFinished = async (data1) => {
     //     window?.$message?.success('操作成功')
     //     await getTableData()
     // }
-    const { error, code, data } = await approachApi.updateMobilizationFile(
-    {
-        id:row.id,
-        type: tabTypeKeyType.value,
-        url:data1?.link,
-       
-    })
+    const {error, code, data} = await approachApi.updateMobilizationFile(
+        {
+            id: row.id,
+            type: tabTypeKeyType.value,
+            url: data1?.link,
+
+        })
     //处理数据
     tableRowData.value = row
     tableRowPdfDisabled.value = false
@@ -735,17 +756,17 @@ const tableRowPdfFinished = async (data1) => {
         await getTableData()
     }
 }
-const getCaption =(obj)=> {
+const getCaption = (obj) => {
     const index = obj.lastIndexOf("pdf")
-   
+
     return index
 }
 
 //删除上传附件
-const deleteFile=()=>{
+const deleteFile = () => {
     console.log('删除');
     console.log(tableRowData.value[tabTypeKey]);
-    tableRowData.value[tabTypeKey.value]=''
+    tableRowData.value[tabTypeKey.value] = ''
 }
 //关闭查看附件
 const viewAttachmentModalClose = () => {
@@ -758,7 +779,7 @@ const samplingRecordModal = ref(false)
 const samplingRecordModalClick = async (row) => {
     samplingRecordModal.value = true
     samplingTableLoading.value = true
-    const { data } = await approachApi.samplingRecord({
+    const {data} = await approachApi.samplingRecord({
         projectId: projectId.value,
         contractId: contractId.value,
         id: row.id,
@@ -769,12 +790,12 @@ const samplingRecordModalClick = async (row) => {
 
 //取样记录数据
 const samplingTableColumn = ref([
-    {key:'specificationNumber', name: '样品编号'},
-    {key:'materialName', name: '样品名称'},
-    {key:'samplingDate', name: '取样日期'},
-    {key:'userName', name: '取样人'},
-    {key:'materialCount', name: '试样数量'},
-    {key:'isOutsourcing', name: '是否外委'},
+    {key: 'specificationNumber', name: '样品编号'},
+    {key: 'materialName', name: '样品名称'},
+    {key: 'samplingDate', name: '取样日期'},
+    {key: 'userName', name: '取样人'},
+    {key: 'materialCount', name: '试样数量'},
+    {key: 'isOutsourcing', name: '是否外委'},
 ])
 const samplingTableData = ref([])
 const samplingTableLoading = ref(false)
@@ -786,7 +807,7 @@ const samplingRecordModalClose = () => {
 
 //下载导入模板
 const downloadImportClick = () => {
-    window.open('https://bladex-test-info.oss-cn-chengdu.aliyuncs.com//upload/20221109/fea12aaee9d964d2d9f894cc6bf4a2f6.xlsx','_blank')
+    window.open('https://bladex-test-info.oss-cn-chengdu.aliyuncs.com//upload/20221109/fea12aaee9d964d2d9f894cc6bf4a2f6.xlsx', '_blank')
 }
 
 //拼接ID

+ 20 - 15
src/views/tentative/material/components/FormItemUpload.vue

@@ -1,26 +1,30 @@
 <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 +33,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 +76,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 +120,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!');
@@ -170,7 +175,7 @@ const uploadChange = (file) => {
 //预览文件
 const previewClick = () => {
     const pdfUrl = uploadValue.value ?? ''
-    if (pdfUrl) window.open(pdfUrl,'_blank')
+    if (pdfUrl) window.open(pdfUrl, '_blank')
 }
 </script>
 

+ 21 - 17
src/views/tentative/material/components/HcDragUpload.vue

@@ -1,28 +1,32 @@
 <template>
-    <el-upload ref="uploadRef" class="hc-upload-border approach" drag :action="api + actionData" :headers="getTokenHeader()" :data="uploadData" :accept="acceptData" :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="autoUpload">
-        <div class="hc-upload-loading upload-file-info" v-loading="uploadDisabled" element-loading-text="上传中...">
+    <el-upload ref="uploadRef" :accept="acceptData" :action="api + actionData" :auto-upload="autoUpload"
+               :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>
 </template>
 
 <script setup>
-import {ref,watch} from "vue";
+import {ref, watch} 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({
     datas: {
         type: Object,
@@ -48,7 +52,7 @@ const props = defineProps({
         type: Boolean,
         default: false
     },
-    api:{
+    api: {
         type: String,
         default: "/api/blade-resource/oss/"
     }
@@ -57,8 +61,8 @@ const props = defineProps({
 //变量
 const uploadRef = ref(null)
 const uploadData = ref(props.datas)
-const actionData=ref(props.action)
-const acceptData=ref(props.accept)
+const actionData = ref(props.action)
+const acceptData = ref(props.accept)
 const uploadFileInfo = ref({})
 const uploadDisabled = ref(false)
 
@@ -70,10 +74,10 @@ watch(() => [
     props.datas,
     props.action,
     props.accept
-], ([datas,action,accept]) => {
+], ([datas, action, accept]) => {
     uploadData.value = datas
-    actionData.value=action
-    acceptData.value=accept
+    actionData.value = action
+    acceptData.value = accept
 })
 
 //事件
@@ -81,7 +85,7 @@ const emit = defineEmits(['progress', 'finished', 'change'])
 
 //上传前
 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!');
@@ -117,7 +121,7 @@ const uploadSuccess = ({code, data}) => {
 
 //上传失败
 const uploadError = (err) => {
-    let errmsg=JSON.parse(err.message).msg
+    let errmsg = JSON.parse(err.message).msg
     uploadDisabled.value = false
     emit('progress', false)
     window?.$message?.error(errmsg);

+ 35 - 35
src/views/tentative/material/components/TestTree.vue

@@ -1,19 +1,19 @@
 <template>
-    <ElTree class="hc-tree-node tree-line"
+    <ElTree ref="ElTreeRef"
             :class="ui"
-            ref="ElTreeRef"
-            :props="ElTreeProps"
+            :default-expanded-keys="defaultExpandedCids"
+            :indent="0"
             :load="ElTreeLoadNode"
-            lazy
-            highlight-current
+            :props="ElTreeProps"
             accordion
+            class="hc-tree-node tree-line"
+            highlight-current
+            lazy
             node-key="primaryKeyId"
-            :default-expanded-keys="defaultExpandedCids"
-            @node-click="ElTreeClick"
-            :indent="0">
+            @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>
@@ -21,30 +21,30 @@
 </template>
 
 <script setup>
-import {ref,nextTick,watch} from "vue";
+import {ref, nextTick, watch} from "vue";
 import samplingApi from "~api/tentative/material/sampling"
-import {isItem,getArrValue} from "vue-utils-plus"
+import {isArrItem, getArrValue} from "js-fast-way"
 
 //参数
 const props = defineProps({
     projectId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     contractId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     wbsTempId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     tenantId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     wbsType: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     autoExpandKeys: {
@@ -59,12 +59,12 @@ const props = defineProps({
         type: String,
         default: ''
     },
-    fromType:{
-        type:Boolean,
-        default:false
+    fromType: {
+        type: Boolean,
+        default: false
     },
-    nodeId:{
-        type: [String,Number],
+    nodeId: {
+        type: [String, Number],
         default: ''
     }
 })
@@ -83,7 +83,7 @@ const wbsTempId = ref(props.wbsTempId);
 const tenantId = ref(props.tenantId);
 const wbsType = ref(props.wbsType);
 const idPrefix = ref(props.idPrefix);
-const fromTypedata=ref(props.fromType)
+const fromTypedata = ref(props.fromType)
 //监听
 watch(() => [
     props.autoExpandKeys,
@@ -94,7 +94,7 @@ watch(() => [
     props.idPrefix,
     props.wbsType,
     props.fromType
-], ([expandKeys, UserProjectId, UserContractId, UserWbsTempId, UserTenantId, UserIdPrefix, wbs_type,fromType]) => {
+], ([expandKeys, UserProjectId, UserContractId, UserWbsTempId, UserTenantId, UserIdPrefix, wbs_type, fromType]) => {
     TreeExpandKey.value = expandKeys
     projectId.value = UserProjectId
     contractId.value = UserContractId
@@ -102,16 +102,16 @@ watch(() => [
     tenantId.value = UserTenantId
     idPrefix.value = UserIdPrefix
     wbsType.value = wbs_type
-    fromTypedata.value=fromType
+    fromTypedata.value = fromType
 })
 
 //事件
-const emit = defineEmits(['menuTap','nodeTap', 'nodeLoading'])
+const emit = defineEmits(['menuTap', 'nodeTap', 'nodeLoading'])
 
 //树形结构异步加载数据
 const defaultExpandedCids = ref([])
 const ElTreeLoadNode = async (node, resolve) => {
-    console.log( fromTypedata.value,' fromTypedata.value');
+    console.log(fromTypedata.value, ' fromTypedata.value');
     let parentId = '0';
     if (node.level !== 0) {
         parentId = node?.data?.id
@@ -130,10 +130,10 @@ const ElTreeLoadNode = async (node, resolve) => {
                 resData[i].hasChildren = !resData[i].hasChildren
             }
             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)
                     }
                     //最后一个,选中点击
@@ -162,9 +162,9 @@ const ElTreeLoadNode = async (node, resolve) => {
             }
             resolve([])
         }
-        
-    }else{
-            //获取数据
+
+    } else {
+        //获取数据
         const {error, code, data} = await samplingApi.queryLazyTree({
             wbsId: wbsTempId.value,
             tenantId: tenantId.value,
@@ -181,10 +181,10 @@ const ElTreeLoadNode = async (node, resolve) => {
                 resData[i].hasChildren = !resData[i].hasChildren
             }
             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)
                     }
                     //最后一个,选中点击
@@ -218,7 +218,7 @@ const ElTreeLoadNode = async (node, resolve) => {
 }
 
 //节点被点击
-const ElTreeClick = async (data,node) => {
+const ElTreeClick = async (data, node) => {
     let autoKeysArr = []
     await getNodeExpandKeys(node, autoKeysArr)
     const autoKeys = autoKeysArr.reverse()

+ 28 - 29
src/views/tentative/material/components/TestTreeMaterial.vue

@@ -1,18 +1,18 @@
 <template>
-    <ElTree class="hc-tree-node tree-line"
+    <ElTree ref="ElTreeRef"
             :class="ui"
-            ref="ElTreeRef"
-            :props="ElTreeProps"
             :data="treedata"
-            highlight-current
+            :default-expanded-keys="defaultExpandedCids"
+            :indent="0"
+            :props="ElTreeProps"
             accordion
+            class="hc-tree-node tree-line"
+            highlight-current
             node-key="primaryKeyId"
-            :default-expanded-keys="defaultExpandedCids"
-            @node-click="ElTreeClick"
-            :indent="0">
+            @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>
@@ -20,30 +20,29 @@
 </template>
 
 <script setup>
-import {ref,nextTick,watch} from "vue";
+import {ref, nextTick, watch} from "vue";
 import samplingApi from "~api/tentative/material/sampling"
-import {isItem,getArrValue} from "vue-utils-plus"
 
 //参数
 const props = defineProps({
     projectId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     contractId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     wbsTempId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     tenantId: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     wbsType: {
-        type: [String,Number],
+        type: [String, Number],
         default: ''
     },
     autoExpandKeys: {
@@ -58,15 +57,15 @@ const props = defineProps({
         type: String,
         default: ''
     },
-    fromType:{
-        type:Boolean,
-        default:false
+    fromType: {
+        type: Boolean,
+        default: false
     },
-    nodeId:{
-        type: [String,Number],
+    nodeId: {
+        type: [String, Number],
         default: ''
     },
-    MixRatioTestTreeData:{
+    MixRatioTestTreeData: {
         type: Array,
         default: () => ([])
     }
@@ -86,8 +85,8 @@ const wbsTempId = ref(props.wbsTempId);
 const tenantId = ref(props.tenantId);
 const wbsType = ref(props.wbsType);
 const idPrefix = ref(props.idPrefix);
-const fromTypedata=ref(props.fromType)
-const treedata=ref(props.MixRatioTestTreeData)
+const fromTypedata = ref(props.fromType)
+const treedata = ref(props.MixRatioTestTreeData)
 
 //监听
 watch(() => [
@@ -100,7 +99,7 @@ watch(() => [
     props.wbsType,
     props.fromType,
     props.MixRatioTestTreeData
-], ([expandKeys, UserProjectId, UserContractId, UserWbsTempId, UserTenantId, UserIdPrefix, wbs_type,fromType,MixRatioTest_treeData]) => {
+], ([expandKeys, UserProjectId, UserContractId, UserWbsTempId, UserTenantId, UserIdPrefix, wbs_type, fromType, MixRatioTest_treeData]) => {
     TreeExpandKey.value = expandKeys
     projectId.value = UserProjectId
     contractId.value = UserContractId
@@ -108,18 +107,18 @@ watch(() => [
     tenantId.value = UserTenantId
     idPrefix.value = UserIdPrefix
     wbsType.value = wbs_type
-    fromTypedata.value=fromType
-    treedata.value=MixRatioTest_treeData
+    fromTypedata.value = fromType
+    treedata.value = MixRatioTest_treeData
 })
 
 //事件
-const emit = defineEmits(['menuTap','nodeTap', 'nodeLoading'])
+const emit = defineEmits(['menuTap', 'nodeTap', 'nodeLoading'])
 
 //树形结构异步加载数据
 const defaultExpandedCids = ref([])
 
 //节点被点击
-const ElTreeClick = async (data,node) => {
+const ElTreeClick = async (data, node) => {
     let autoKeysArr = []
     await getNodeExpandKeys(node, autoKeysArr)
     const autoKeys = autoKeysArr.reverse()

+ 2 - 3
src/views/tentative/material/sampling.vue

@@ -263,9 +263,8 @@ import {getStoreValue, setStoreValue} from '~src/utils/storage'
 import HcDragUpload from "./components/HcDragUpload.vue"
 import samplingApi from "~api/tentative/material/sampling"
 import approachApi from "~api/tentative/material/approach";
-import {deepClone, formValidate, getArrValue, getIndex} from "vue-utils-plus";
 import {getContractUserList, getDictionary} from "~api/other";
-
+import {deepClone, formValidate, getArrValue, arrIndex} from "js-fast-way"
 
 //变量
 const useAppState = useAppStore()
@@ -304,7 +303,7 @@ const getMaterialType = async () => {
 const getRowTableMaterialType = (type) => {
     if (type > 0) {
         const nodeData = typeData.value
-        const index = getIndex(nodeData, 'dictKey', type)
+        const index = arrIndex(nodeData, 'dictKey', type)
         return nodeData[index]?.dictValue ?? type
     } else {
         return ''

+ 20 - 17
src/views/tentative/parameter/compactness.vue

@@ -3,33 +3,36 @@
         <HcCard>
             <template #header>
                 <HcTooltip keys="tentative_parameter_compactness_add">
-                    <el-button type="primary" hc-btn @click="addFormModalClick">
+                    <el-button hc-btn type="primary" @click="addFormModalClick">
                         <HcIcon name="add-circle"/>
                         <span>新增</span>
                     </el-button>
                 </HcTooltip>
                 <HcTooltip keys="tentative_parameter_compactness_edit">
-                    <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="editFormModalClick">
+                    <el-button :disabled="tableCheckedKeys.length <= 0" hc-btn @click="editFormModalClick">
                         <HcIcon name="edit"/>
                         <span>编辑</span>
                     </el-button>
                 </HcTooltip>
                 <HcTooltip keys="tentative_parameter_compactness_del">
-                    <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="delModalClick">
+                    <el-button :disabled="tableCheckedKeys.length <= 0" hc-btn @click="delModalClick">
                         <HcIcon name="delete-bin-2"/>
                         <span>删除</span>
                     </el-button>
                 </HcTooltip>
             </template>
-            <HcTable ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading" isCheck @selection-change="tableSelection"></HcTable>
+            <HcTable ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading" isCheck
+                     @selection-change="tableSelection"></HcTable>
             <template #action>
                 <HcPages :pages="searchForm" @change="pageChange"/>
             </template>
         </HcCard>
 
         <!--新增/编辑-->
-        <HcDialog :show="addEditFormModal" :title="`${addEditFormModel.id?'编辑':'新增'}压实度参数`" widths="30rem" :loading="addEditFormLoading" @close="addEditFormModalClose" @save="addEditFormClick">
-            <el-form ref="addEditFormRef" :model="addEditFormModel" :rules="addEditFormRules" label-width="auto" size="large">
+        <HcDialog :loading="addEditFormLoading" :show="addEditFormModal" :title="`${addEditFormModel.id?'编辑':'新增'}压实度参数`"
+                  widths="30rem" @close="addEditFormModalClose" @save="addEditFormClick">
+            <el-form ref="addEditFormRef" :model="addEditFormModel" :rules="addEditFormRules" label-width="auto"
+                     size="large">
                 <el-form-item label="N值" prop="valueN">
                     <el-input v-model="addEditFormModel.valueN"/>
                 </el-form-item>
@@ -52,7 +55,7 @@
 import {onMounted, ref} from "vue";
 import {useAppStore} from "~src/store";
 import dataApi from "~api/tentative/parameter/compactness"
-import {formValidate, getArrValue} from "vue-utils-plus"
+import {formValidate, getArrValue} from "js-fast-way"
 import {delMessage, rowsToId} from "~uti/tools";
 
 //初始变量
@@ -96,10 +99,10 @@ const pageChange = ({current, size}) => {
 //表格数据
 const tableRef = ref(null)
 const tableColumn = ref([
-    {key:'valueN', name: 'N值'},
-    {key:'assuranceRateNinetyNinePercent', name: '保证率99%'},
-    {key:'assuranceRateNinetyFivePercent', name: '保证率95%'},
-    {key:'assuranceRateNinetyPercent', name: '保证率90%'},
+    {key: 'valueN', name: 'N值'},
+    {key: 'assuranceRateNinetyNinePercent', name: '保证率99%'},
+    {key: 'assuranceRateNinetyFivePercent', name: '保证率95%'},
+    {key: 'assuranceRateNinetyPercent', name: '保证率90%'},
 ])
 const tableData = ref([])
 
@@ -107,7 +110,7 @@ const tableData = ref([])
 const tableLoading = ref(false)
 const getTableData = async () => {
     tableLoading.value = true
-    const { error, code, data } = await dataApi.queryPage({
+    const {error, code, data} = await dataApi.queryPage({
         ...searchForm.value,
         projectId: projectId.value,
         contractId: contractId.value
@@ -180,14 +183,14 @@ const addEditFormClick = async () => {
     const validate = await formValidate(addEditFormRef.value)
     if (validate) {
         //发起请求
-        addEditFormLoading.value=true
-        const { error, code } = await dataApi.submitForm({
+        addEditFormLoading.value = true
+        const {error, code} = await dataApi.submitForm({
             ...addEditFormModel.value,
             projectId: projectId.value,
             contractId: contractId.value
         })
         //处理数据
-       
+
         if (!error && code === 200) {
             window?.$message?.success('操作成功')
             addEditFormModal.value = false
@@ -207,10 +210,10 @@ const delModalClick = () => {
 //批量删除
 const tableRemoveData = async () => {
     const rows = tableCheckedKeys.value
-    if (rows.length > 0 ) {
+    if (rows.length > 0) {
         const ids = rowsToId(rows)
         //删除请求
-        const { error, code } = await dataApi.removeData({
+        const {error, code} = await dataApi.removeData({
             projectId: projectId.value,
             contractId: contractId.value,
             ids: ids,

+ 12 - 9
src/views/tentative/parameter/components/HcDragUpload.vue

@@ -1,14 +1,16 @@
 <template>
-    <el-upload ref="uploadRef" class="hc-upload-border approach" drag :action="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">
+    <el-upload ref="uploadRef" :accept="accept" :action="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 class="hc-upload-loading upload-file-info" v-loading="uploadDisabled" element-loading-text="上传中...">
+        <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>
@@ -20,10 +22,11 @@
 </template>
 
 <script setup>
-import {ref,watch,onMounted} from "vue";
+import {ref, watch, onMounted} from "vue";
 import {getTokenHeader} from '~src/api/request/header';
-import {getObjValue, isSize} from "vue-utils-plus"
+import {getObjValue, isFileSize} from "js-fast-way"
 import {genFileId} from "element-plus";
+
 const props = defineProps({
     datas: {
         type: Object,
@@ -53,7 +56,7 @@ const emit = defineEmits(['progress', 'finished', 'change'])
 
 //上传前
 const beforeUpload = async (file) => {
-    if (isSize(file?.size,60)) {
+    if (isFileSize(file?.size, 60)) {
         return true;
     } else {
         window?.$message?.warning('文件大小, 不能过60M!');

+ 64 - 52
src/views/tentative/parameter/container.vue

@@ -1,17 +1,18 @@
 <template>
     <div class="hc-page-layout-box">
-        <div class="hc-layout-left-box menu" :style="'width:' + leftWidth + 'px;'">
+        <div :style="'width:' + leftWidth + 'px;'" class="hc-layout-left-box menu">
             <div class="hc-menu-header-box">
                 <div class="text-xl name">试验容器</div>
                 <HcTooltip keys="tentative_parameter_container_menu_add">
-                    <el-button type="primary" hc-btn _icon size="small" @click="addEditNodeFormModalClick">
+                    <el-button _icon hc-btn size="small" type="primary" @click="addEditNodeFormModalClick">
                         <HcIcon name="add"/>
                     </el-button>
                 </HcTooltip>
             </div>
             <div class="hc-menu-contents-box">
                 <el-scrollbar>
-                    <HcMenuSimple :datas="menus" :props="menuProps" :keys="menuKey" :menus="contextMenu" @change="menuChange" @menuTap="contextMenuClick"/>
+                    <HcMenuSimple :datas="menus" :keys="menuKey" :menus="contextMenu" :props="menuProps"
+                                  @change="menuChange" @menuTap="contextMenuClick"/>
                 </el-scrollbar>
             </div>
             <!--左右拖动-->
@@ -21,10 +22,11 @@
             <HcCard>
                 <template #header>
                     <div class="w-72">
-                        <el-input v-model="searchForm.queryValue" placeholder="请输入容器编号查询" clearable @keyup="keyUpEvent" size="large"/>
+                        <el-input v-model="searchForm.queryValue" clearable placeholder="请输入容器编号查询"
+                                  size="large" @keyup="keyUpEvent"/>
                     </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>
@@ -32,25 +34,25 @@
                 </template>
                 <template #extra>
                     <HcTooltip keys="tentative_parameter_container_add">
-                        <el-button type="primary" hc-btn @click="addFormModalClick">
+                        <el-button hc-btn type="primary" @click="addFormModalClick">
                             <HcIcon name="add-circle"/>
                             <span>新增</span>
                         </el-button>
                     </HcTooltip>
                     <HcTooltip keys="tentative_parameter_container_edit">
-                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="editFormModalClick">
+                        <el-button :disabled="tableCheckedKeys.length <= 0" hc-btn @click="editFormModalClick">
                             <HcIcon name="edit"/>
                             <span>编辑</span>
                         </el-button>
                     </HcTooltip>
                     <HcTooltip keys="tentative_parameter_container_del">
-                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="delTableModalClick">
+                        <el-button :disabled="tableCheckedKeys.length <= 0" hc-btn @click="delTableModalClick">
                             <HcIcon name="delete-bin-2"/>
                             <span>删除</span>
                         </el-button>
                     </HcTooltip>
                     <HcTooltip keys="tentative_parameter_container_printer">
-                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0">
+                        <el-button :disabled="tableCheckedKeys.length <= 0" hc-btn>
                             <HcIcon name="printer"/>
                             <span>打印</span>
                         </el-button>
@@ -62,7 +64,8 @@
                         </el-button>
                     </HcTooltip>
                 </template>
-                <HcTable ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading" isCheck @selection-change="tableSelection"/>
+                <HcTable ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading" isCheck
+                         @selection-change="tableSelection"/>
                 <template #action>
                     <HcPages :pages="searchForm" @change="pageChange"/>
                 </template>
@@ -70,8 +73,9 @@
         </div>
 
         <!--新增/编辑 节点-->
-        <HcDialog :show="addEditNodeFormModal" :title="`${addEditNodeFormModel.id?'编辑':'新增'}试验容器`" widths="30rem" isRowFooter @close="addEditNodeFormModalClose">
-            <el-form :model="addEditNodeFormModel" label-width="auto" label-position="top" size="large">
+        <HcDialog :show="addEditNodeFormModal" :title="`${addEditNodeFormModel.id?'编辑':'新增'}试验容器`"
+                  isRowFooter widths="30rem" @close="addEditNodeFormModalClose">
+            <el-form :model="addEditNodeFormModel" label-position="top" label-width="auto" size="large">
                 <el-form-item label="试验容器名称">
                     <el-input v-model="addEditNodeFormModel.containerName" placeholder="请输入试验容器名称"/>
                 </el-form-item>
@@ -79,18 +83,21 @@
                     <div class="hc-form-item">
                         <el-form-item class="w-32" label="数据类型" style="flex: initial;">
                             <el-select v-model="item.fieldType" block>
-                                <el-option label="文本" :value="1"/>
-                                <el-option label="日期框" :value="2"/>
+                                <el-option :value="1" label="文本"/>
+                                <el-option :value="2" label="日期框"/>
                             </el-select>
                         </el-form-item>
                         <el-form-item label="字段名">
                             <template #label>
                                 <div class="solt-label">
                                     <span class="mr-1">字段名</span>
-                                    <span class="text-xs text-slate-400" v-if="index === 0">第一个作为编号,是唯一的</span>
+                                    <span v-if="index === 0"
+                                          class="text-xs text-slate-400">第一个作为编号,是唯一的</span>
                                 </div>
                                 <div class="solt-extra">
-                                    <el-button type="primary" plain size="small" @click="addEditNodeDataDel(item,index)">删除</el-button>
+                                    <el-button plain size="small" type="primary"
+                                               @click="addEditNodeDataDel(item,index)">删除
+                                    </el-button>
                                 </div>
                             </template>
                             <el-input v-model="item.fieldName" block/>
@@ -109,7 +116,7 @@
                     <HcIcon name="close"/>
                     <span>取消</span>
                 </el-button>
-                <el-button type="primary" hc-btn :loading="addEditNodeFormLoading" @click="addEditNodeFormModalSave">
+                <el-button :loading="addEditNodeFormLoading" hc-btn type="primary" @click="addEditNodeFormModalSave">
                     <HcIcon name="check"/>
                     <span>提交</span>
                 </el-button>
@@ -117,19 +124,24 @@
         </HcDialog>
 
         <!--新增/编辑-->
-        <HcDialog :show="addEditFormModal" :title="`${addEditFormModel.id?'编辑':'新增'}数据`" widths="30rem" :loading="addEditFormLoading" @close="addEditFormModalClose" @save="addEditFormClick">
-            <el-form ref="addEditFormRef" :model="addEditFormModel" :rules="addEditFormRules" label-width="auto" size="large">
+        <HcDialog :loading="addEditFormLoading" :show="addEditFormModal" :title="`${addEditFormModel.id?'编辑':'新增'}数据`"
+                  widths="30rem" @close="addEditFormModalClose" @save="addEditFormClick">
+            <el-form ref="addEditFormRef" :model="addEditFormModel" :rules="addEditFormRules" label-width="auto"
+                     size="large">
                 <template v-for="(item, index) in tableColumn">
                     <el-form-item :label="item.name" :prop="item.key">
-                        <el-input v-model="addEditFormModel[item.key]" :placeholder="`${index===0?'作为编号,是唯一的':'请输入' + item.name}`" v-if="item.type === 1"/>
-                        <el-date-picker type="date" v-model="addEditFormModel[item.key]" class="block" value-format="YYYY-MM-DD" :clearable="false" v-if="item.type === 2"/>
+                        <el-input v-if="item.type === 1"
+                                  v-model="addEditFormModel[item.key]"
+                                  :placeholder="`${index===0?'作为编号,是唯一的':'请输入' + item.name}`"/>
+                        <el-date-picker v-if="item.type === 2" v-model="addEditFormModel[item.key]" :clearable="false"
+                                        class="block" type="date" value-format="YYYY-MM-DD"/>
                     </el-form-item>
                 </template>
             </el-form>
         </HcDialog>
 
         <!--导入-->
-        <HcDialog :show="importModal" title="导入" widths="38rem" isRowFooter @close="importModalClose">
+        <HcDialog :show="importModal" isRowFooter title="导入" widths="38rem" @close="importModalClose">
             <HcDragUpload/>
             <template #leftRowFooter>
                 <el-button size="large">
@@ -142,7 +154,7 @@
                     <HcIcon name="close"/>
                     <span>取消导入</span>
                 </el-button>
-                <el-button type="primary" hc-btn :loading="importModalLoading" @click="importModalYesClick">
+                <el-button :loading="importModalLoading" hc-btn type="primary" @click="importModalYesClick">
                     <HcIcon name="folder-upload"/>
                     <span>确认导入</span>
                 </el-button>
@@ -156,7 +168,7 @@
 import {ref, onMounted, watch} from "vue";
 import {useAppStore} from "~src/store";
 import {HcIsButton} from "~src/plugins/IsButtons";
-import {formValidate, getArrValue} from "vue-utils-plus"
+import {formValidate, getArrValue} from "js-fast-way"
 import HcDragUpload from "./components/HcDragUpload.vue"
 import dataApi from "~api/tentative/parameter/container"
 
@@ -186,7 +198,7 @@ const menuProps = {
 }
 const menus = ref([]);
 const getMenusData = async () => {
-    const { data } = await dataApi.queryClassification({
+    const {data} = await dataApi.queryClassification({
         projectId: projectId.value,
         contractId: contractId.value
     })
@@ -291,7 +303,7 @@ const getTableData = async () => {
     const fieldLists = getArrValue(fieldList)
     if (fieldLists.length > 0) {
         tableLoading.value = true
-        const { error, code, data } = await dataApi.queryPage({
+        const {error, code, data} = await dataApi.queryPage({
             projectId: projectId.value,
             contractId: contractId.value,
             containerId: id,
@@ -339,23 +351,23 @@ const addEditNodeFormModalClick = () => {
 
 //加字段
 const addEditNodeDataAdd = () => {
-    if( addEditNodeFormModel.value.fieldList.length>4){
+    if (addEditNodeFormModel.value.fieldList.length > 4) {
         window.$message?.warning('最多只能添加5个字段');
-    }else{
+    } else {
         addEditNodeFormModel.value.fieldList.push({
-        fieldType: 1,
-        fieldName: ''
-    })
+            fieldType: 1,
+            fieldName: ''
+        })
     }
-   
-    
+
+
 }
 //删除当前行
 const addEditNodeDataDel = async ({fieldId}, index) => {
     if (!fieldId) {
         addEditNodeFormModel.value.fieldList.splice(index, 1);
     } else {
-        const { error, code } = await dataApi.removeField({fieldId})
+        const {error, code} = await dataApi.removeField({fieldId})
         if (!error && code === 200) {
             addEditNodeFormModel.value.fieldList.splice(index, 1);
         }
@@ -372,7 +384,7 @@ const addEditNodeFormModalSave = () => {
         window.$message.warning('请添加容器字段')
     } else {
         //判断是否满足条件
-        const result = form.fieldList.every(({fieldName})=> {
+        const result = form.fieldList.every(({fieldName}) => {
             return fieldName !== ''
         })
         if (!result) {
@@ -388,7 +400,7 @@ const addEditNodeFormModalSave = () => {
 //提交保存分类
 const submitClassification = async (form) => {
     addEditNodeFormLoading.value = true
-    const { error, code } = await dataApi.submitClassification(form)
+    const {error, code} = await dataApi.submitClassification(form)
     //处理数据
     addEditNodeFormLoading.value = false
     if (!error && code === 200) {
@@ -421,7 +433,7 @@ const delNodeModalClick = (id) => {
 //删除容器
 const removeClassification = async (id) => {
     //删除请求
-    const { error, code } = await dataApi.removeClassification({
+    const {error, code} = await dataApi.removeClassification({
         projectId: projectId.value,
         contractId: contractId.value,
         id: id,
@@ -460,7 +472,7 @@ const setAddEditFormRules = (fieldList) => {
                 },
                 trigger: 'blur'
             }
-        } 
+        }
         // else if (item.type === 1) {
         //     newArr[item.key] = {
         //         required: true,
@@ -480,12 +492,12 @@ const setAddEditFormRules = (fieldList) => {
 
 //校验材料编号是否唯一
 const verification = async (key, val) => {
-    const { containerInitTabName } = menuItem.value
+    const {containerInitTabName} = menuItem.value
     const form = addEditFormModel.value
-    const { error, code, data } = await dataApi.verification({
+    const {error, code, data} = await dataApi.verification({
         projectId: projectId.value,
         contractId: contractId.value,
-        id:form['id'] ?? '',
+        id: form['id'] ?? '',
         bean: {
             fieldKey: key,
             fieldValue: val
@@ -526,9 +538,9 @@ const addEditFormModalClose = () => {
 const addEditFormLoading = ref(false)
 const addEditFormClick = async () => {
     const validate = await formValidate(addEditFormRef.value)
-     
+
     if (validate) {
-        const { containerInitTabName } = menuItem.value
+        const {containerInitTabName} = menuItem.value
         const form = addEditFormModel.value
         addEditFormLoading.value = true
         //处理数据格式
@@ -542,7 +554,7 @@ const addEditFormClick = async () => {
             }
         })
         //发起请求
-        const { error, code } = await dataApi.submitForm({
+        const {error, code} = await dataApi.submitForm({
             projectId: projectId.value,
             contractId: contractId.value,
             beanList,
@@ -551,15 +563,15 @@ const addEditFormClick = async () => {
             id: form['id'] ?? ''
         })
         //处理数据
-      
+
         if (!error && code === 200) {
             window?.$message?.success('操作成功')
             addEditFormModal.value = false
-            
+
             addEditFormLoading.value = false
-      
+
             await getTableData()
-            console.log(addEditFormLoading.value,'addEditFormLoading.value');
+            console.log(addEditFormLoading.value, 'addEditFormLoading.value');
         }
     }
 }
@@ -582,11 +594,11 @@ const delTableModalClick = () => {
 //批量删除
 const tableRemoveData = async () => {
     const rows = tableCheckedKeys.value
-    if (rows.length > 0 ) {
+    if (rows.length > 0) {
         const ids = rowsToId(rows)
-        const { containerInitTabName } = menuItem.value
+        const {containerInitTabName} = menuItem.value
         //删除请求
-        const { error, code } = await dataApi.removeData({
+        const {error, code} = await dataApi.removeData({
             projectId: projectId.value,
             contractId: contractId.value,
             containerInitTabName: containerInitTabName,
@@ -630,7 +642,7 @@ const onmousedown = () => {
     const leftNum = isCollapse.value ? 142 : 272
     document.onmousemove = (ve) => {
         let diffVal = ve.clientX - leftNum;
-        if(diffVal >= 220 && diffVal <= 400) {
+        if (diffVal >= 220 && diffVal <= 400) {
             leftWidth.value = diffVal;
         }
     }

+ 18 - 15
src/views/tentative/parameter/density.vue

@@ -3,33 +3,36 @@
         <HcCard>
             <template #header>
                 <HcTooltip keys="tentative_parameter_density_add">
-                    <el-button type="primary" hc-btn @click="addFormModalClick">
+                    <el-button hc-btn type="primary" @click="addFormModalClick">
                         <HcIcon name="add-circle"/>
                         <span>新增</span>
                     </el-button>
                 </HcTooltip>
                 <HcTooltip keys="tentative_parameter_density_edit">
-                    <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="editFormModalClick">
+                    <el-button :disabled="tableCheckedKeys.length <= 0" hc-btn @click="editFormModalClick">
                         <HcIcon name="edit"/>
                         <span>编辑</span>
                     </el-button>
                 </HcTooltip>
                 <HcTooltip keys="tentative_parameter_density_del">
-                    <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="delModalClick">
+                    <el-button :disabled="tableCheckedKeys.length <= 0" hc-btn @click="delModalClick">
                         <HcIcon name="delete-bin-2"/>
                         <span>删除</span>
                     </el-button>
                 </HcTooltip>
             </template>
-            <HcTable ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading" isCheck @selection-change="tableSelection"></HcTable>
+            <HcTable ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading" isCheck
+                     @selection-change="tableSelection"></HcTable>
             <template #action>
                 <HcPages :pages="searchForm" @change="pageChange"/>
             </template>
         </HcCard>
 
         <!--新增/编辑-->
-        <HcDialog :show="addEditFormModal" :title="`${addEditFormModel.id?'编辑':'新增'}温度信息`" widths="30rem" :loading="addEditFormLoading" @close="addEditFormModalClose" @save="addEditFormClick">
-            <el-form ref="addEditFormRef" :model="addEditFormModel" :rules="addEditFormRules" label-width="auto" size="large">
+        <HcDialog :loading="addEditFormLoading" :show="addEditFormModal" :title="`${addEditFormModel.id?'编辑':'新增'}温度信息`"
+                  widths="30rem" @close="addEditFormModalClose" @save="addEditFormClick">
+            <el-form ref="addEditFormRef" :model="addEditFormModel" :rules="addEditFormRules" label-width="auto"
+                     size="large">
                 <el-form-item label="温度" prop="temperature">
                     <el-input v-model="addEditFormModel.temperature"/>
                 </el-form-item>
@@ -46,7 +49,7 @@
 import {onMounted, ref} from "vue";
 import {useAppStore} from "~src/store";
 import dataApi from "~api/tentative/parameter/density"
-import {formValidate, getArrValue} from "vue-utils-plus"
+import {formValidate, getArrValue} from "js-fast-way"
 import {delMessage, rowsToId} from "~uti/tools";
 
 //初始变量
@@ -90,8 +93,8 @@ const pageChange = ({current, size}) => {
 //表格数据
 const tableRef = ref(null)
 const tableColumn = ref([
-    {key:'temperature', name: '温度'},
-    {key:'waterDensity', name: '密度'},
+    {key: 'temperature', name: '温度'},
+    {key: 'waterDensity', name: '密度'},
 ])
 
 //获取数据
@@ -99,7 +102,7 @@ const tableLoading = ref(false)
 const tableData = ref([])
 const getTableData = async () => {
     tableLoading.value = true
-    const { error, code, data } = await dataApi.queryPage({
+    const {error, code, data} = await dataApi.queryPage({
         ...searchForm.value,
         projectId: projectId.value,
         contractId: contractId.value
@@ -161,15 +164,15 @@ const addEditFormLoading = ref(false)
 const addEditFormClick = async () => {
     const validate = await formValidate(addEditFormRef.value)
     if (validate) {
-         addEditFormLoading.value = true
+        addEditFormLoading.value = true
         //发起请求
-        const { error, code } = await dataApi.submitForm({
+        const {error, code} = await dataApi.submitForm({
             ...addEditFormModel.value,
             projectId: projectId.value,
             contractId: contractId.value
         })
         //处理数据
-      
+
         if (!error && code === 200) {
             window?.$message?.success('操作成功')
             addEditFormModal.value = false
@@ -189,10 +192,10 @@ const delModalClick = () => {
 //批量删除
 const tableRemoveData = async () => {
     const rows = tableCheckedKeys.value
-    if (rows.length > 0 ) {
+    if (rows.length > 0) {
         const ids = rowsToId(rows)
         //删除请求
-        const { error, code } = await dataApi.removeData({
+        const {error, code} = await dataApi.removeData({
             projectId: projectId.value,
             contractId: contractId.value,
             ids: ids,

+ 41 - 35
src/views/tentative/parameter/sieve.vue

@@ -1,17 +1,18 @@
 <template>
     <div class="hc-page-layout-box">
-        <div class="hc-layout-left-box menu" :style="'width:' + leftWidth + 'px;'">
+        <div :style="'width:' + leftWidth + 'px;'" class="hc-layout-left-box menu">
             <div class="hc-menu-header-box">
                 <div class="text-xl name">自定义筛孔类型</div>
                 <HcTooltip keys="tentative_parameter_sieve_menu_add">
-                    <el-button type="primary" hc-btn _icon size="small" @click="addEditNodeFormModalClick">
+                    <el-button _icon hc-btn size="small" type="primary" @click="addEditNodeFormModalClick">
                         <HcIcon name="add"/>
                     </el-button>
                 </HcTooltip>
             </div>
             <div class="hc-menu-contents-box">
                 <el-scrollbar>
-                    <HcMenuSimple :datas="menus" :keys="menuKey" :props="menuProps" :menus="contextMenu" @change="menuChange" @menuTap="contextMenuClick"/>
+                    <HcMenuSimple :datas="menus" :keys="menuKey" :menus="contextMenu" :props="menuProps"
+                                  @change="menuChange" @menuTap="contextMenuClick"/>
                 </el-scrollbar>
             </div>
             <!--左右拖动-->
@@ -32,25 +33,26 @@
                 </template> -->
                 <template #extra>
                     <HcTooltip keys="tentative_parameter_sieve_add">
-                        <el-button type="primary" hc-btn :disabled="menus.length <1 " @click="addFormModalClick">
+                        <el-button :disabled="menus.length <1 " hc-btn type="primary" @click="addFormModalClick">
                             <HcIcon name="add-circle"/>
                             <span>新增</span>
                         </el-button>
                     </HcTooltip>
                     <HcTooltip keys="tentative_parameter_sieve_edit">
-                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="editFormModalClick">
+                        <el-button :disabled="tableCheckedKeys.length <= 0" hc-btn @click="editFormModalClick">
                             <HcIcon name="edit"/>
                             <span>编辑</span>
                         </el-button>
                     </HcTooltip>
                     <HcTooltip keys="tentative_parameter_sieve_del">
-                        <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="delNodeModalClick">
+                        <el-button :disabled="tableCheckedKeys.length <= 0" hc-btn @click="delNodeModalClick">
                             <HcIcon name="delete-bin-2"/>
                             <span>删除</span>
                         </el-button>
                     </HcTooltip>
                 </template>
-                <HcTable ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading" isCheck @selection-change="tableSelection"/>
+                <HcTable ref="tableRef" :column="tableColumn" :datas="tableData" :loading="tableLoading" isCheck
+                         @selection-change="tableSelection"/>
                 <template #action>
                     <HcPages :pages="searchForm" @change="pageChange"/>
                 </template>
@@ -58,8 +60,10 @@
         </div>
 
         <!--新增/编辑 节点-->
-        <HcDialog :show="addEditNodeFormModal" :title="`${addEditNodeFormModel.id?'编辑':'新增'}类型`" widths="30rem" :loading="addEditNodeFormLoading" @close="addEditNodeFormModalClose" @save="addEditNodeFormModalSave">
-            <el-form ref="addEditNodeFormRef" :model="addEditNodeFormModel" :rules="addEditNodeFormRules" label-width="auto" label-position="top" size="large">
+        <HcDialog :loading="addEditNodeFormLoading" :show="addEditNodeFormModal" :title="`${addEditNodeFormModel.id?'编辑':'新增'}类型`"
+                  widths="30rem" @close="addEditNodeFormModalClose" @save="addEditNodeFormModalSave">
+            <el-form ref="addEditNodeFormRef" :model="addEditNodeFormModel" :rules="addEditNodeFormRules"
+                     label-position="top" label-width="auto" size="large">
                 <el-form-item label="类型名称" prop="name">
                     <el-input v-model="addEditNodeFormModel.name" placeholder="请输入类型名称"/>
                 </el-form-item>
@@ -67,8 +71,10 @@
         </HcDialog>
 
         <!--新增/编辑-->
-        <HcDialog :show="addEditFormModal" :title="`${addEditFormModel.id?'编辑':'新增'}筛孔尺寸信息`" widths="45rem" :loading="addEditFormLoading" @close="addEditFormModalClose" @save="addEditFormClick">
-            <el-form ref="addEditFormRef" :model="addEditFormModel" :rules="addEditFormRules" label-width="auto" size="large">
+        <HcDialog :loading="addEditFormLoading" :show="addEditFormModal" :title="`${addEditFormModel.id?'编辑':'新增'}筛孔尺寸信息`"
+                  widths="45rem" @close="addEditFormModalClose" @save="addEditFormClick">
+            <el-form ref="addEditFormRef" :model="addEditFormModel" :rules="addEditFormRules" label-width="auto"
+                     size="large">
                 <div class="hc-form-item">
                     <el-form-item label="筛孔尺寸" prop="sievePoreSize">
                         <el-input v-model="addEditFormModel.sievePoreSize"/>
@@ -110,7 +116,7 @@
 import {ref, onMounted, watch} from "vue";
 import {useAppStore} from "~src/store";
 import {HcIsButton} from "~src/plugins/IsButtons";
-import {formValidate, getArrValue} from "vue-utils-plus"
+import {formValidate, getArrValue} from "js-fast-way"
 import dataApi from "~api/tentative/parameter/sieve"
 import {delMessage, rowsToId} from "~uti/tools";
 
@@ -141,7 +147,7 @@ const menuProps = {
     label: 'name',
 }
 const queryClassification = async () => {
-    const { data } = await dataApi.queryClassification({
+    const {data} = await dataApi.queryClassification({
         projectId: projectId.value,
         contractId: contractId.value
     })
@@ -219,14 +225,14 @@ const pageChange = ({current, size}) => {
 //表格数据
 const tableRef = ref(null)
 const tableColumn = ref([
-    {key:'sievePoreSize', name: '筛孔尺寸'},
-    {key:'lowerLimit', name: '下限'},
-    {key:'upperLimit', name: '上限'},
-    {key:'standard', name: '标准'},
-    {key:'maxLimitBoundary', name: '限制区最大'},
-    {key:'minLimitBoundary', name: '限制区最小'},
-    {key:'maxLimitControl', name: '控制点最大'},
-    {key:'minLimitControl', name: '控制点最小'},
+    {key: 'sievePoreSize', name: '筛孔尺寸'},
+    {key: 'lowerLimit', name: '下限'},
+    {key: 'upperLimit', name: '上限'},
+    {key: 'standard', name: '标准'},
+    {key: 'maxLimitBoundary', name: '限制区最大'},
+    {key: 'minLimitBoundary', name: '限制区最小'},
+    {key: 'maxLimitControl', name: '控制点最大'},
+    {key: 'minLimitControl', name: '控制点最小'},
 ])
 const tableData = ref([])
 
@@ -234,7 +240,7 @@ const tableData = ref([])
 const tableLoading = ref(false)
 const getTableData = async () => {
     tableLoading.value = true
-    const { error, code, data } = await dataApi.queryPage({
+    const {error, code, data} = await dataApi.queryPage({
         projectId: projectId.value,
         contractId: contractId.value,
         ...searchForm.value
@@ -281,22 +287,22 @@ const addEditNodeFormModalSave = async () => {
     if (validate) {
         addEditNodeFormLoading.value = true
         //发起请求
-        const { error, code } = await dataApi.submitClassification({
+        const {error, code} = await dataApi.submitClassification({
             ...addEditNodeFormModel.value,
             projectId: projectId.value,
             contractId: contractId.value
         })
         //处理数据
-      
+
         if (!error && code === 200) {
             window?.$message?.success('操作成功')
             addEditNodeFormModal.value = false
-           addEditNodeFormLoading.value = false
+            addEditNodeFormLoading.value = false
             await queryClassification()
         }
-          
-           addEditFormLoading.value = false
-            addEditNodeFormLoading.value = false
+
+        addEditFormLoading.value = false
+        addEditNodeFormLoading.value = false
     }
 }
 
@@ -308,7 +314,7 @@ const addEditNodeFormModalClose = () => {
 //删除分类
 const delClassification = async (item) => {
     //删除请求
-    const { error, code } = await dataApi.removeField({
+    const {error, code} = await dataApi.removeField({
         projectId: projectId.value,
         contractId: contractId.value,
         id: item.id,
@@ -323,7 +329,7 @@ const delClassification = async (item) => {
 //新增/编辑
 const addEditFormModal = ref(false)
 const addFormModalClick = () => {
-    const { id } = menuItem.value
+    const {id} = menuItem.value
     addEditFormModel.value = {
         classId: id
     }
@@ -395,13 +401,13 @@ const addEditFormClick = async () => {
     if (validate) {
         addEditFormLoading.value = true
         //发起请求
-        const { error, code } = await dataApi.submitForm({
+        const {error, code} = await dataApi.submitForm({
             ...addEditFormModel.value,
             projectId: projectId.value,
             contractId: contractId.value
         })
         //处理数据
-      
+
         if (!error && code === 200) {
             window?.$message?.success('操作成功')
             addEditFormModal.value = false
@@ -422,9 +428,9 @@ const delNodeModalClick = () => {
 //批量删除
 const tableRemoveData = async () => {
     const rows = tableCheckedKeys.value
-    if (rows.length > 0 ) {
+    if (rows.length > 0) {
         const ids = rowsToId(rows)
-        const { error, code } = await dataApi.removeData({
+        const {error, code} = await dataApi.removeData({
             projectId: projectId.value,
             contractId: contractId.value,
             ids: ids,
@@ -443,7 +449,7 @@ const onmousedown = () => {
     const leftNum = isCollapse.value ? 142 : 272
     document.onmousemove = (ve) => {
         let diffVal = ve.clientX - leftNum;
-        if(diffVal >= 220 && diffVal <= 400) {
+        if (diffVal >= 220 && diffVal <= 400) {
             leftWidth.value = diffVal;
         }
     }

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

@@ -20,7 +20,7 @@ import {loginByToken} from "~api/user"
 import {useRouter, useRoute} from 'vue-router'
 import svg403 from '~src/assets/view/403.svg';
 import {initUserConfigInfo, setRouterData} from "~sto/user";
-import {getObjNullValue} from "vue-utils-plus"
+import {getObjVal} from "js-fast-way"
 
 //初始变量
 const router = useRouter()
@@ -55,7 +55,7 @@ onMounted(() => {
 //请求授权登录
 const loginByTokenApi = async (form) => {
     const {error, code, data} = await loginByToken(form)
-    const res = getObjNullValue(data);
+    const res = getObjVal(data);
     if (!error && code === 200 && res) {
         useAppState.setTokenVal(res['access_token'])
         useAppState.setRefreshTokenVal(res['refresh_token'])

+ 96 - 71
src/views/user/index.vue

@@ -2,11 +2,13 @@
     <div class="hc-layout-box">
         <div class="hc-layout-left-box">
             <div class="user-avatar-box">
-                <div class="user-avatar" v-loading="avatarLoading">
+                <div v-loading="avatarLoading" class="user-avatar">
                     <img :src="userInfo['avatar'] || avatarPng" alt="" crossOrigin="anonymous"/>
                     <div class="user-avatar-upload">
-                        <el-upload class="upload-dom" :action="action" :accept="accept" :headers="getTokenHeader()" :data="upData" :show-file-list="false" :on-success="uploadFinish" :on-error="uploadError" :before-upload="beforeUpload">
-                            <HcIcon name="camera" fill/>
+                        <el-upload :accept="accept" :action="action" :before-upload="beforeUpload" :data="upData"
+                                   :headers="getTokenHeader()" :on-error="uploadError" :on-success="uploadFinish"
+                                   :show-file-list="false" class="upload-dom">
+                            <HcIcon fill name="camera"/>
                         </el-upload>
                     </div>
                 </div>
@@ -19,13 +21,17 @@
             </div>
         </div>
         <div class="hc-layout-content-box">
-            <HcCard scrollbar :title="menuItem.label" :ui="basicHight?'basic-hight':''" v-if="menuKey !== 'log' && menuKey !== 'recycle'">
+            <HcCard v-if="menuKey !== 'log' && menuKey !== 'recycle'" :title="menuItem.label" :ui="basicHight?'basic-hight':''"
+                    scrollbar>
                 <template #extra>
-                    <span class="text-link" v-if="menuKey === 'basic' && !basicFormEdit" @click="basicFormEditClick">编辑</span>
-                    <span class="text-link" v-if="menuKey === 'project'" @click="setDefaultProjectClick">设置默认项目</span>
+                    <span v-if="menuKey === 'basic' && !basicFormEdit" class="text-link"
+                          @click="basicFormEditClick">编辑</span>
+                    <span v-if="menuKey === 'project'" class="text-link"
+                          @click="setDefaultProjectClick">设置默认项目</span>
                 </template>
                 <template v-if="menuKey === 'basic'">
-                    <el-form ref="formUserRef" :model="formUserModel" :rules="formUserRules" size="large" label-position="top">
+                    <el-form ref="formUserRef" :model="formUserModel" :rules="formUserRules" label-position="top"
+                             size="large">
                         <el-row :gutter="20">
                             <el-col :span="12">
                                 <el-form-item label="用户名称">
@@ -34,48 +40,55 @@
                             </el-col>
                             <el-col :span="12">
                                 <el-form-item label="登录账号">
-                                    <el-input v-model="formUserModel.account" placeholder="" disabled/>
+                                    <el-input v-model="formUserModel.account" disabled placeholder=""/>
                                 </el-form-item>
                             </el-col>
                             <el-col :span="12">
                                 <el-form-item label="身份证号">
-                                    <el-input v-model="formUserModel.idNumber" placeholder="" disabled/>
+                                    <el-input v-model="formUserModel.idNumber" disabled placeholder=""/>
                                 </el-form-item>
                             </el-col>
                             <el-col :span="12">
-                                <el-form-item label="绑定手机" :prop="basicFormEdit?'phone':''">
-                                    <el-input v-model="formUserModel.phone" placeholder="请输入绑定手机" :disabled="!basicHight"/>
+                                <el-form-item :prop="basicFormEdit?'phone':''" label="绑定手机">
+                                    <el-input v-model="formUserModel.phone" :disabled="!basicHight"
+                                              placeholder="请输入绑定手机"/>
                                 </el-form-item>
                             </el-col>
                             <el-col :span="12">
                                 <el-form-item label="所属角色">
-                                    <el-input v-model="formUserModel.roleName" placeholder="" disabled/>
+                                    <el-input v-model="formUserModel.roleName" disabled placeholder=""/>
                                 </el-form-item>
                             </el-col>
                             <el-col :span="12">
                                 <el-form-item label="所属部门">
-                                    <el-input v-model="formUserModel.deptId" placeholder="" disabled/>
+                                    <el-input v-model="formUserModel.deptId" disabled placeholder=""/>
                                 </el-form-item>
                             </el-col>
                             <el-col :span="12">
                                 <el-form-item label="CA签字体">
-                                    <el-image style="height: 60px" :src="formUserModel?.signatureUrl" :preview-src-list="[formUserModel?.signatureUrl]" :initial-index="0" fit="cover" v-if="formUserModel?.signatureUrl"/>
-                                    <span class="text-zinc-400" v-else>无CA签字体</span>
+                                    <el-image v-if="formUserModel?.signatureUrl" :initial-index="0"
+                                              :preview-src-list="[formUserModel?.signatureUrl]" :src="formUserModel?.signatureUrl"
+                                              fit="cover" style="height: 60px"/>
+                                    <span v-else class="text-zinc-400">无CA签字体</span>
                                 </el-form-item>
                             </el-col>
                         </el-row>
                     </el-form>
                 </template>
                 <template v-if="menuKey === 'password'">
-                    <el-form ref="formUserPassRef" :model="formUserPassModel" :rules="formUserPassRules" size="large" label-position="top" style="max-width: 400px; margin: auto;">
+                    <el-form ref="formUserPassRef" :model="formUserPassModel" :rules="formUserPassRules" label-position="top"
+                             size="large" style="max-width: 400px; margin: auto;">
                         <el-form-item label="原始密码" prop="oldPassword">
-                            <el-input type="password" v-model="formUserPassModel.oldPassword" placeholder="请输入原始密码" show-password/>
+                            <el-input v-model="formUserPassModel.oldPassword" placeholder="请输入原始密码"
+                                      show-password type="password"/>
                         </el-form-item>
                         <el-form-item label="新的密码" prop="newPassword">
-                            <el-input type="password" v-model="formUserPassModel.newPassword" placeholder="请输入新的密码" show-password/>
+                            <el-input v-model="formUserPassModel.newPassword" placeholder="请输入新的密码"
+                                      show-password type="password"/>
                         </el-form-item>
                         <el-form-item label="确认新密码" prop="newPassword1">
-                            <el-input type="password" v-model="formUserPassModel.newPassword1" placeholder="请输入确认新密码" show-password/>
+                            <el-input v-model="formUserPassModel.newPassword1" placeholder="请输入确认新密码"
+                                      show-password type="password"/>
                         </el-form-item>
                     </el-form>
                 </template>
@@ -83,19 +96,20 @@
                     <el-menu :default-active="projectKey" class="hc-project-menu" unique-opened>
                         <el-sub-menu v-for="item in projectContractArr" :index="item.id">
                             <template #title>
-                                <HcIcon name="folder-2" class="hc-menu-icon"/>
+                                <HcIcon class="hc-menu-icon" name="folder-2"/>
                                 <span>{{ item?.name }}</span>
                             </template>
-                            <el-menu-item v-for="items in item?.contractInfoList ?? []" :index="items?.id" @click="projectMenuValue(item,items)">
-                                <HcIcon name="star" class="hc-menu-icon" fill v-if="projectKey === items?.id"/>
+                            <el-menu-item v-for="items in item?.contractInfoList ?? []" :index="items?.id"
+                                          @click="projectMenuValue(item,items)">
+                                <HcIcon v-if="projectKey === items?.id" class="hc-menu-icon" fill name="star"/>
                                 <span>{{ items?.name }}</span>
                             </el-menu-item>
                         </el-sub-menu>
                     </el-menu>
                 </template>
             </HcCard>
-            <div class="hc-card-foot-box" v-if="basicFormEdit">
-                <el-button type="primary" hc-btn :loading="saveUserLoading" @click="saveUserInfoClick">
+            <div v-if="basicFormEdit" class="hc-card-foot-box">
+                <el-button :loading="saveUserLoading" hc-btn type="primary" @click="saveUserInfoClick">
                     <HcIcon name="save"/>
                     <span>保存</span>
                 </el-button>
@@ -104,34 +118,41 @@
                     <span>取消</span>
                 </el-button>
             </div>
-            <HcCard :title="menuItem.label" v-if="menuKey === 'log'">
+            <HcCard v-if="menuKey === 'log'" :title="menuItem.label">
                 <template #search>
                     <div class="flex items-center">
                         <div class="w-32">
-                            <el-select v-model="searchLogForm.operationModule" placeholder="业务模块" clearable @change="BusinessModuleValue">
-                                <el-option v-for="item in operationModuleData" :key="item.value" :label="item?.dictValue" :value="item?.dictKey"/>
+                            <el-select v-model="searchLogForm.operationModule" clearable placeholder="业务模块"
+                                       @change="BusinessModuleValue">
+                                <el-option v-for="item in operationModuleData" :key="item.value"
+                                           :label="item?.dictValue" :value="item?.dictKey"/>
                             </el-select>
                         </div>
                         <div class="w-32 ml-2">
-                            <el-select v-model="searchLogForm.operationView" placeholder="页面" clearable @change="OperationViewValue">
-                                <el-option v-for="item in operationViewData" :key="item.value" :label="item?.dictValue" :value="item?.dictKey"/>
+                            <el-select v-model="searchLogForm.operationView" clearable placeholder="页面"
+                                       @change="OperationViewValue">
+                                <el-option v-for="item in operationViewData" :key="item.value" :label="item?.dictValue"
+                                           :value="item?.dictKey"/>
                             </el-select>
                         </div>
                         <div class="w-40 ml-2">
-                            <el-select v-model="searchLogForm.operationType" placeholder="操作类型" clearable>
-                                <el-option v-for="item in operationTypeData" :key="item.value" :label="item?.dictValue" :value="item?.dictKey"/>
+                            <el-select v-model="searchLogForm.operationType" clearable placeholder="操作类型">
+                                <el-option v-for="item in operationTypeData" :key="item.value" :label="item?.dictValue"
+                                           :value="item?.dictKey"/>
                             </el-select>
                         </div>
                         <div class="w-20 ml-2">
-                            <el-select v-model="searchLogForm.operationMedium" placeholder="设备" clearable>
-                                <el-option v-for="item in deviceData" :key="item.value" :label="item?.label" :value="item?.value"/>
+                            <el-select v-model="searchLogForm.operationMedium" clearable placeholder="设备">
+                                <el-option v-for="item in deviceData" :key="item.value" :label="item?.label"
+                                           :value="item?.value"/>
                             </el-select>
                         </div>
                         <div class="w-64 ml-2">
                             <HcDatePicker :dates="betweenTime" clearable @change="betweenDateUpdate"/>
                         </div>
                         <div class="w-60 ml-2">
-                            <el-input v-model="searchLogForm.queryValue" placeholder="请输入名称关键词检索" clearable @keyup="keyUpEvent"/>
+                            <el-input v-model="searchLogForm.queryValue" clearable placeholder="请输入名称关键词检索"
+                                      @keyup="keyUpEvent"/>
                         </div>
                         <div class="ml-2">
                             <el-button type="primary" @click="searchClick">
@@ -143,7 +164,9 @@
                 </template>
                 <HcTable :column="logTableColumn" :datas="logTableData" :loading="logTableLoading">
                     <template #operationContent="{row}">
-                        <div class="text-link text-cut" @click="tableOperationContent(row)">{{row?.operationContent}}</div>
+                        <div class="text-link text-cut" @click="tableOperationContent(row)">
+                            {{ row?.operationContent }}
+                        </div>
                     </template>
                 </HcTable>
                 <template #action>
@@ -152,17 +175,19 @@
             </HcCard>
             <HcCard v-if="menuKey === 'recycle'" actionSize="lg">
                 <template #header>
-                    <div class="mr-5">{{menuItem.label}}</div>
+                    <div class="mr-5">{{ menuItem.label }}</div>
                     <HcNewSwitch :datas="userTypeTab" :keys="userTypeKey" @change="userTypeChange"/>
                 </template>
                 <template #extra>
                     <HcNewSwitch :datas="tabTypeTab" :keys="tabTypeKey" @change="tabTypeChange"/>
                 </template>
-                <HcTable ref="recycleTableRef" :column="recycleTableColumn" :datas="recycleTableData" :loading="recycleTableLoading" isCheck @selection-change="recycleTableSelectionChange"/>
+                <HcTable ref="recycleTableRef" :column="recycleTableColumn" :datas="recycleTableData"
+                         :loading="recycleTableLoading" isCheck @selection-change="recycleTableSelectionChange"/>
                 <template #action>
                     <div class="foot-recycle">
-                        <el-button type="primary" hc-btn :disabled="userTypeKey === '2'" :loading="recycleBtnLoading" @click="recycleBtnClick">
-                            <HcIcon name="reply" fill/>
+                        <el-button :disabled="userTypeKey === '2'" :loading="recycleBtnLoading" hc-btn type="primary"
+                                   @click="recycleBtnClick">
+                            <HcIcon fill name="reply"/>
                             <span>恢复</span>
                         </el-button>
                         <HcPages :pages="searchRecycleForm" @change="pageRecycleChange"/>
@@ -172,8 +197,8 @@
         </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>
@@ -186,7 +211,7 @@ import userApi from "~api/userInfo/index"
 import {useRouter, useRoute} from 'vue-router'
 import avatarPng from '~src/assets/images/avatar.png';
 import {getTokenHeader} from '~src/api/request/header';
-import {getIndex,formValidate,getArrValue,isMobile} from "vue-utils-plus"
+import {arrIndex, formValidate, getArrValue, isPhone} from "js-fast-way"
 import md5 from 'js-md5';
 
 //初始变量
@@ -219,7 +244,7 @@ const uploadFinish = async (res) => {
     const link = res?.data?.link ?? '';
     const user_id = userInfo.value?.user_id ?? '';
     if (link) {
-        const { error, code } = await userApi.updateUserInfo({avatar: link, id: user_id})
+        const {error, code} = await userApi.updateUserInfo({avatar: link, id: user_id})
         if (!error && code === 200) {
             avatarLoading.value = false
             userInfo.value.avatar = link
@@ -252,7 +277,7 @@ const menuOptions = ref([
 ]);
 //获取菜单对象数据
 const menuObjItem = () => {
-    const index = getIndex(menuOptions.value, 'key', menuKey.value)
+    const index = arrIndex(menuOptions.value, 'key', menuKey.value)
     menuItem.value = menuOptions.value[index]
 }
 //菜单被点击
@@ -311,7 +336,7 @@ const formUserRules = {
         validator: (rule, value, callback) => {
             if (!value) {
                 callback(new Error('请输入手机号'))
-            } else if (!isMobile(value)) {
+            } else if (!isPhone(value)) {
                 callback(new Error('手机号码格式错误'))
             } else {
                 callback()
@@ -322,7 +347,7 @@ const formUserRules = {
 }
 //获取用户信息
 const queryCurrentUserData = async () => {
-    const { error, code, data } = await userApi.queryCurrentUserData()
+    const {error, code, data} = await userApi.queryCurrentUserData()
     if (!error && code === 200) {
         formUserModel.value.deptId = data?.deptId || ''
         formUserModel.value.idNumber = data?.idNumber || ''
@@ -361,10 +386,10 @@ const cancelUserClick = () => {
 
 //保存用户信息
 const saveUserInfoData = async () => {
-    const { phone, user_id } = formUserModel.value
-    if (phone && isMobile(phone)) {
+    const {phone, user_id} = formUserModel.value
+    if (phone && isPhone(phone)) {
         saveUserLoading.value = true
-        const { error, code } = await userApi.updateUserInfo({
+        const {error, code} = await userApi.updateUserInfo({
             phone: phone,
             id: user_id
         })
@@ -422,7 +447,7 @@ const saveUpdatePassword = async () => {
     if (res) {
         const form = formUserPassModel.value;
         saveUserLoading.value = true
-        const { error, code } = await userApi.updatePassword({
+        const {error, code} = await userApi.updatePassword({
             oldPassword: md5(form?.oldPassword),
             newPassword: md5(form?.newPassword),
             newPassword1: md5(form?.newPassword1),
@@ -445,7 +470,7 @@ const saveUpdatePassword = async () => {
 //获取默认项目
 const projectKey = ref(null)
 const getDefaultProject = async () => {
-    const { error, code, data } = await userApi.getDefaultProject()
+    const {error, code, data} = await userApi.getDefaultProject()
     if (!error && code === 200) {
         projectKey.value = data['contractId']
     }
@@ -454,7 +479,7 @@ const getDefaultProject = async () => {
 //项目被选择
 const menuProjectId = ref('')
 const menuContractId = ref('')
-const projectMenuValue = (item,items) => {
+const projectMenuValue = (item, items) => {
     menuProjectId.value = item?.id
     menuContractId.value = items?.id
     projectKey.value = items?.id
@@ -464,7 +489,7 @@ const projectMenuValue = (item,items) => {
 const setDefaultProjectClick = async () => {
     const pid = menuProjectId.value, cid = menuContractId.value
     if (pid && cid) {
-        const { error, code } = await userApi.setDefaultProject({
+        const {error, code} = await userApi.setDefaultProject({
             projectId: pid,
             contractId: cid
         })
@@ -486,7 +511,7 @@ const searchLogForm = ref({
 //业务模块
 const operationModuleData = ref([])
 const queryBusinessModule = async () => {
-    const { error, code, data } = await userApi.queryBusinessModule()
+    const {error, code, data} = await userApi.queryBusinessModule()
     if (!error && code === 200) {
         operationModuleData.value = data
     } else {
@@ -503,7 +528,7 @@ const BusinessModuleValue = () => {
 //页面
 const operationViewData = ref([])
 const queryOperationView = async () => {
-    const { error, code, data } = await userApi.queryOperationView({
+    const {error, code, data} = await userApi.queryOperationView({
         businessModule: searchLogForm.value?.operationModule || ''
     })
     if (!error && code === 200) {
@@ -520,7 +545,7 @@ const OperationViewValue = () => {
 //操作类型
 const operationTypeData = ref([])
 const operationTypeStatus = async () => {
-    const { error, code, data } = await userApi.queryOperationTypeList({
+    const {error, code, data} = await userApi.queryOperationTypeList({
         businessModule: searchLogForm.value?.operationModule || '',
         operationView: searchLogForm.value?.operationView || ''
     })
@@ -535,17 +560,17 @@ const operationTypeStatus = async () => {
 const deviceData = ref([{label: "APP", value: "APP"}, {label: "PC", value: "PC"}])
 //表格数据
 const logTableColumn = ref([
-    {key:'operationModule', name: '业务模块', width: '180'},
-    {key:'operationTypeValue', name: '操作类型', width: '220'},
-    {key:'operationMedium', name: '设备', align: 'center', width: '80'},
-    {key:'operationContent', name: '操作内容'},
-    {key:'createTime', name: '操作时间', align: 'center', width: '180'},
+    {key: 'operationModule', name: '业务模块', width: '180'},
+    {key: 'operationTypeValue', name: '操作类型', width: '220'},
+    {key: 'operationMedium', name: '设备', align: 'center', width: '80'},
+    {key: 'operationContent', name: '操作内容'},
+    {key: 'createTime', name: '操作时间', align: 'center', width: '180'},
 ])
 const logTableData = ref([]);
 
 //日期时间被选择
 const betweenTime = ref(null)
-const betweenDateUpdate = ({val,arr}) => {
+const betweenDateUpdate = ({val, arr}) => {
     betweenTime.value = arr
     searchLogForm.value.startTime = val?.start
     searchLogForm.value.endTime = val?.end
@@ -576,7 +601,7 @@ const pageLogChange = ({current, size}) => {
 const logTableLoading = ref(false)
 const getLogTableData = async () => {
     logTableLoading.value = true
-    const { error, code, data } = await userApi.getOperationLog({
+    const {error, code, data} = await userApi.getOperationLog({
         projectId: projectId.value,
         contractId: contractId.value,
         ...searchLogForm.value
@@ -602,7 +627,7 @@ const tableOperationContent = (row) => {
 
 //个人和全部切换
 const userTypeKey = ref('1')
-const userTypeTab = ref([{key:'1',  name: '个人'}, {key:'2', name: '全部'}]);
+const userTypeTab = ref([{key: '1', name: '个人'}, {key: '2', name: '全部'}]);
 const userTypeChange = (item) => {
     userTypeKey.value = item?.key;
     if (item?.key === '1') {
@@ -616,7 +641,7 @@ const userTypeChange = (item) => {
 //结构类型tab数据和相关处理
 const tabTypeKey = ref('1')
 const tabTypeTab = ref([
-    {key: '1',  name: '文件资料'},
+    {key: '1', name: '文件资料'},
     {key: '2', name: '工程划分'}
 ]);
 const tabTypeChange = (item) => {
@@ -636,10 +661,10 @@ const searchRecycleForm = ref({
 //表格数据
 const recycleTableRef = ref(null)
 const recycleTableColumn = ref([
-    {key:'fileName', name: '删除内容'},
-    {key:'position', name: '父节点名称'},
-    {key:'createUserName', name: '操作人'},
-    {key:'operationTime', name: '删除时间', align: 'center', width: '180'},
+    {key: 'fileName', name: '删除内容'},
+    {key: 'position', name: '父节点名称'},
+    {key: 'createUserName', name: '操作人'},
+    {key: 'operationTime', name: '删除时间', align: 'center', width: '180'},
 ])
 const recycleTableLoading = ref(false)
 const recycleTableData = ref(null);
@@ -653,7 +678,7 @@ const pageRecycleChange = ({current, size}) => {
 
 //获取数据
 const getRecycleTableData = async () => {
-    const { error, code, data } = await userApi.queryRecycleBinList({
+    const {error, code, data} = await userApi.queryRecycleBinList({
         projectId: projectId.value,
         contractId: contractId.value,
         delType: tabTypeKey.value,
@@ -681,7 +706,7 @@ const recycleBtnClick = async () => {
     if (rows.length > 0) {
         //请求数据
         recycleBtnLoading.value = true
-        const { error, code } = await userApi.recycleBinRegain({
+        const {error, code} = await userApi.recycleBinRegain({
             projectId: projectId.value,
             contractId: contractId.value,
             delType: tabTypeKey.value,