Browse Source

实验室管理,人员档案

ZaiZai 2 years ago
parent
commit
bc96fcfd1f

+ 28 - 0
src/api/modules/tentative/laboratory/user.js

@@ -0,0 +1,28 @@
+import {httpApi} from "../../../request/httpApi";
+
+export default {
+    //人员档案条件分页查询
+    async queryPage(form, msg = true) {
+        return httpApi({
+            url: '/api/blade-business/laboratory/user/archives/page',
+            method: 'post',
+            params: form
+        }, msg);
+    },
+    //人员档案新增或修改
+    async submitForm(form, msg = true) {
+        return httpApi({
+            url: '/api/blade-business/laboratory/user/archives/submit',
+            method: 'post',
+            data: form
+        }, msg);
+    },
+    //人员档案批量删除
+    async removeData(form, msg = true) {
+        return httpApi({
+            url: '/api/blade-business/laboratory/user/archives/remove',
+            method: 'post',
+            params: form
+        }, msg);
+    },
+}

+ 2 - 2
src/styles/app/element.scss

@@ -341,12 +341,12 @@
 }
 
 //滚动条
-.el-scrollbar {
+/*.el-scrollbar {
     scroll-behavior: smooth;
     .el-scrollbar__wrap--hidden-default {
         scroll-behavior: smooth;
     }
-}
+}*/
 
 //弹窗
 .el-overlay-dialog {

+ 208 - 0
src/views/tentative/laboratory/components/FormItemUpload.vue

@@ -0,0 +1,208 @@
+<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>
+
+    <!--上传-->
+    <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="上传中...">
+                <template v-if="uploadFileInfo?.name">
+                    <HcIcon name="file-text" class="upload-file-icon"/>
+                    <div class="upload-file-name">{{uploadFileInfo?.name}}</div>
+                </template>
+                <template v-else>
+                    <HcIcon name="upload-cloud" class="upload-icon"/>
+                    <div class="el-upload__text">拖动文件到这里 或 <em>点击这里选择文件</em> 并上传</div>
+                </template>
+            </div>
+            <template #tip>
+                <div class="el-upload__tip">允许格式:{{formatTip}}, 文件大小 小于 {{size}}MB</div>
+            </template>
+        </el-upload>
+    </HcDialog>
+</template>
+
+<script setup>
+import {ref, watch, onMounted} from "vue";
+import {getTokenHeader} from '~src/api/request/header';
+import {isSize} from "vue-utils-plus"
+import {genFileId} from "element-plus";
+const props = defineProps({
+    modelValue: {
+        type: String,
+        default: ''
+    },
+    datas: {
+        type: Object,
+        default: () => ({})
+    },
+    action: {
+        type: String,
+        default: "upload-file"
+    },
+    accept: {
+        type: String,
+        default: "image/png,image/jpg,image/jpeg,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel,application/pdf,.doc,.docx,application/msword"
+    },
+    size: {
+        type: Number,
+        default: 20
+    },
+    formatTip: {
+        type: String,
+        default: "png/jpg/jpeg/excel/pdf/doc/docx"
+    },
+})
+
+//变量
+const uploadRef = ref(null)
+const uploadData = ref(props.datas)
+const uploadFileInfo = ref({})
+const uploadDisabled = ref(false)
+const uploadValue = ref(props.modelValue)
+
+const api = '/api/blade-resource/oss/endpoint/';
+
+//监听
+watch(() => [
+    props.datas,
+    props.modelValue
+], ([datas,val]) => {
+    uploadData.value = datas
+    uploadValue.value = val
+    getFileName(val)
+})
+
+onMounted(() => {
+    getFileName(props.modelValue)
+})
+
+//事件
+const emit = defineEmits(['progress', 'change', 'update:modelValue'])
+
+//上传弹窗
+const importModal = ref(false)
+const importModalClick = () => {
+    importModal.value = true
+}
+
+//确认上传
+const importModalYesClick = () => {
+    uploadRef.value?.submit()
+}
+
+//关闭上传
+const importModalClose = () => {
+    uploadRef.value?.clearFiles()
+    importModal.value = false
+}
+
+//获取文件名
+const fileNameValue = ref('')
+const getFileName = (url) => {
+    if (url) {
+        let num = url.lastIndexOf('/') + 1
+        fileNameValue.value = url.substring(num)
+    } else {
+        fileNameValue.value = ''
+    }
+}
+
+
+//上传前
+const beforeUpload = async (file) => {
+    if (isSize(file?.size,props.size)) {
+        return true;
+    } else {
+        window?.$message?.warning('文件大小, 不能过' + props.size + 'M!');
+        return false;
+    }
+}
+
+//超出限制时
+const uploadExceed = (files) => {
+    uploadRef.value?.clearFiles()
+    const file = files[0]
+    file.uid = genFileId()
+    uploadRef.value?.handleStart(file)
+}
+
+//上传中
+const uploadprogress = () => {
+    uploadDisabled.value = true
+    emit('progress', true)
+}
+
+//上传完成
+const uploadSuccess = ({code, data}) => {
+    uploadDisabled.value = false
+    emit('progress', false)
+    const pdfUrl = data?.pdfUrl ?? ''
+    if (code === 200 && pdfUrl) {
+        uploadValue.value = pdfUrl
+        window?.$message?.success('上传成功');
+        importModal.value = false
+        getFileName(pdfUrl)
+        //事件
+        emit('update:modelValue', pdfUrl)
+        emit('change', pdfUrl)
+    } else {
+        window?.$message?.error('上传失败');
+    }
+}
+
+//上传失败
+const uploadError = () => {
+    uploadDisabled.value = false
+    emit('progress', false)
+    window?.$message?.error('上传失败');
+}
+
+//文件改变时
+const uploadChange = (file) => {
+    uploadFileInfo.value = file
+}
+
+//预览文件
+const previewClick = () => {
+    const pdfUrl = uploadValue.value ?? ''
+    if (pdfUrl) window.open(pdfUrl,'_blank')
+}
+</script>
+
+<style lang="scss">
+.hc-upload-border.approach {
+    .el-upload-dragger {
+        padding: 24px;
+    }
+    .hc-upload-loading.upload-file-info {
+        .hc-icon-i {
+            font-size: 40px;
+        }
+        .upload-icon {
+            color: var(--el-text-color-placeholder);
+        }
+        .upload-file-icon {
+            color: var(--el-color-primary-light-5);
+        }
+        .el-upload__text {
+            margin-top: 10px;
+        }
+        .upload-file-name {
+            margin-top: 10px;
+            font-size: 14px;
+            text-align: center;
+            color: var(--el-color-primary);
+        }
+    }
+    .el-upload__tip {
+        font-size: 14px;
+        margin-top: 16px;
+        color: var(--el-text-color-placeholder);
+    }
+}
+</style>

+ 182 - 100
src/views/tentative/laboratory/user.vue

@@ -20,124 +20,128 @@
                     </el-button>
                 </HcTooltip>
                 <HcTooltip keys="tentative_parameter_density_edit">
-                    <el-button hc-btn @click="editFormModalClick">
+                    <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @click="editFormModalClick">
                         <HcIcon name="edit"/>
                         <span>编辑</span>
                     </el-button>
                 </HcTooltip>
                 <HcTooltip keys="tentative_laboratory_user_del">
-                    <el-button hc-btn @click="delModalClick">
+                    <el-button hc-btn :disabled="tableCheckedKeys.length <= 0" @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">
+                <template #sex="{row}">
+                    <span>{{row.sex === 1 ? '男':'女'}}</span>
+                </template>
+                <template #status="{row}">
+                    <span>{{row.status === 1 ? '在职':'离职'}}</span>
+                </template>
+                <template #education="{row}">
+                    <span>{{getArrKeyValue(educationData, 'dictKey', 'dictValue', row.education)}}</span>
+                </template>
+            </HcTable>
             <template #action>
                 <HcPages :pages="searchForm" @change="pageChange"/>
             </template>
         </HcCard>
 
         <!--新增/编辑-->
-        <HcDialog :show="addEditFormModal" title="新增/编辑" widths="70rem" :isClose="false" :loading="addEditFormLoading" @close="addEditFormModalClose" @save="addEditFormClick">
+        <HcDialog :show="addEditFormModal" :title="`${addEditFormModel.id?'编辑':'新增'}人员档案`" widths="70rem" :isClose="false" :loading="addEditFormLoading" @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">
                 <template v-if="tabTypeKey === 'tab1'">
                     <div class="hc-form-item">
-                        <el-form-item label="姓名" prop="key1">
-                            <el-input v-model="addEditFormModel.key1"/>
+                        <el-form-item label="姓名" prop="name">
+                            <el-input v-model="addEditFormModel.name"/>
                         </el-form-item>
-                        <el-form-item label="身份证" prop="key2">
-                            <el-input v-model="addEditFormModel.key2"/>
+                        <el-form-item label="身份证" prop="idCard">
+                            <el-input v-model="addEditFormModel.idCard"/>
                         </el-form-item>
-                        <el-form-item label="出生日期" prop="key3">
-                            <el-date-picker type="date" v-model="addEditFormModel.key3" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                        <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-form-item>
                     </div>
                     <div class="hc-form-item">
-                        <el-form-item label="性别" prop="key4">
-                            <el-select v-model="addEditFormModel.key4" block>
-                                <el-option label="男" value="1"/>
-                                <el-option label="女" value="2"/>
+                        <el-form-item label="性别">
+                            <el-select v-model="addEditFormModel.sex" block>
+                                <el-option label="男" :value="1"/>
+                                <el-option label="女" :value="2"/>
                             </el-select>
                         </el-form-item>
-                        <el-form-item label="毕业院校" prop="key5">
-                            <el-input v-model="addEditFormModel.key5"/>
+                        <el-form-item label="毕业院校">
+                            <el-input v-model="addEditFormModel.graduationSchool"/>
                         </el-form-item>
-                        <el-form-item label="专业" prop="key6">
-                            <el-input v-model="addEditFormModel.key6"/>
+                        <el-form-item label="专业">
+                            <el-input v-model="addEditFormModel.major"/>
                         </el-form-item>
                     </div>
                     <div class="hc-form-item">
                         <el-form-item label="学历">
-                            <el-select v-model="addEditFormModel.key7" block>
-                                <el-option label="小学" value="1"/>
-                                <el-option label="初中" value="2"/>
-                                <el-option label="大专" value="3"/>
-                                <el-option label="本科" value="4"/>
-                                <el-option label="研究生" value="5"/>
-                                <el-option label="硕士" value="6"/>
-                                <el-option label="博士" value="7"/>
+                            <el-select v-model="addEditFormModel.education" block>
+                                <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.key8" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                            <el-date-picker type="date" v-model="addEditFormModel.graduationDate" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
                         </el-form-item>
                         <el-form-item label="入职时间">
-                            <el-date-picker type="date" v-model="addEditFormModel.key9" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                            <el-date-picker type="date" v-model="addEditFormModel.entryTime" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
                         </el-form-item>
                     </div>
                     <div class="hc-form-item">
                         <el-form-item label="就职状态">
-                            <el-select v-model="addEditFormModel.key10" block>
-                                <el-option label="在职" value="1"/>
-                                <el-option label="离职" value="2"/>
+                            <el-select v-model="addEditFormModel.status" block>
+                                <el-option label="在职" :value="1"/>
+                                <el-option label="离职" :value="0"/>
                             </el-select>
                         </el-form-item>
-                        <el-form-item label="职称" prop="key11">
-                            <el-input v-model="addEditFormModel.key11"/>
+                        <el-form-item label="职称">
+                            <el-input v-model="addEditFormModel.jobTitleName"/>
                         </el-form-item>
-                        <el-form-item label="工作职务" prop="key12">
-                            <el-input v-model="addEditFormModel.key12"/>
+                        <el-form-item label="工作职务">
+                            <el-input v-model="addEditFormModel.jobTitlePost"/>
                         </el-form-item>
                     </div>
                     <div class="hc-form-item">
-                        <el-form-item label="进场时间" prop="key13">
-                            <el-date-picker type="date" v-model="addEditFormModel.key13" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                        <el-form-item label="进场时间">
+                            <el-date-picker type="date" v-model="addEditFormModel.mobilizationTime" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
                         </el-form-item>
                         <el-form-item label="部门">
-                            <el-input v-model="addEditFormModel.key14"/>
+                            <el-input v-model="addEditFormModel.department"/>
                         </el-form-item>
-                        <el-form-item label="从事检测工作时间" prop="key15">
-                            <el-input v-model="addEditFormModel.key15"/>
+                        <el-form-item label="从事检测工作时间(月)">
+                            <el-input v-model="addEditFormModel.workingTime"/>
                         </el-form-item>
                     </div>
                     <div class="hc-form-item">
                         <el-form-item label="退场时间">
-                            <el-date-picker type="date" v-model="addEditFormModel.key16" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                            <el-date-picker type="date" v-model="addEditFormModel.exitTime" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
                         </el-form-item>
                         <el-form-item label="劳动合同开始日期">
-                            <el-date-picker type="date" v-model="addEditFormModel.key17" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                            <el-date-picker type="date" v-model="addEditFormModel.laborContractStartDate" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
                         </el-form-item>
                         <el-form-item label="劳动合同终止日期">
-                            <el-date-picker type="date" v-model="addEditFormModel.key18" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                            <el-date-picker type="date" v-model="addEditFormModel.laborContractEndDate" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
                         </el-form-item>
                     </div>
                 </template>
                 <template v-if="tabTypeKey === 'tab2'">
-                    <el-form-item label="证书编号" prop="key19">
-                        <el-input v-model="addEditFormModel.key19"/>
+                    <el-form-item label="证书编号">
+                        <el-input v-model="addEditFormModel.certificateNo"/>
                     </el-form-item>
                     <el-form-item label="持证类型">
-                        <el-select v-model="addEditFormModel.key20" block>
+                        <el-select v-model="addEditFormModel.certificateType" block>
                             <el-option label="检测员" value="1"/>
                             <el-option label="检测工程师" value="2"/>
                         </el-select>
                     </el-form-item>
                     <el-form-item label="持证专业">
-                        <el-select v-model="addEditFormModel.key21" block>
+                        <el-select v-model="addEditFormModel.certificateMajor" block>
                             <el-option label="水运结构与地基" value="1"/>
                             <el-option label="交通工具" value="2"/>
                             <el-option label="水运材料" value="3"/>
@@ -146,15 +150,15 @@
                         </el-select>
                     </el-form-item>
                     <el-form-item label="证书文件">
-                        <div class="form-item-dashed hover">上传文件(待定,看后端接口后,再定)</div>
+                        <FormItemUpload v-model="addEditFormModel.certificateUrl"/>
                     </el-form-item>
                 </template>
                 <template v-if="tabTypeKey === 'tab3'">
                     <el-form-item label="记录日期">
-                        <el-date-picker type="date" v-model="addEditFormModel.key22" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
+                        <el-date-picker type="date" v-model="addEditFormModel.workRecordDate" class="block" value-format="YYYY-MM-DD" :clearable="false"/>
                     </el-form-item>
                     <el-form-item label="内容">
-                        <el-input v-model="addEditFormModel.desc" type="textarea" :autosize="{ minRows: 8}"/>
+                        <el-input v-model="addEditFormModel.workContent" type="textarea" :autosize="{ minRows: 8}"/>
                     </el-form-item>
                 </template>
             </el-form>
@@ -164,9 +168,12 @@
 </template>
 
 <script setup>
-import {ref} from "vue";
+import {onMounted, ref} from "vue";
 import {useAppStore} from "~src/store";
-import { isIdCard } from "vue-utils-plus"
+import dataApi from "~api/tentative/laboratory/user"
+import FormItemUpload from "./components/FormItemUpload.vue"
+import {getArrValue, getArrKeyValue, isIdCard, formValidate} from "vue-utils-plus"
+import {getDictionary} from "~api/other";
 
 //初始变量
 const useAppState = useAppStore()
@@ -175,8 +182,32 @@ const useAppState = useAppStore()
 const projectId = ref(useAppState.getProjectId);
 const contractId = ref(useAppState.getContractId);
 
+//渲染完成
+onMounted(() => {
+    getTableData()
+    getEducationType()
+})
+
+//获取学历类型
+const educationData = ref([])
+const getEducationType = async () => {
+    const { data } = await getDictionary({
+        code: 'trial_user_education'
+    })
+    const arrData = getArrValue(data)
+    arrData.forEach(item => {
+        item.dictKey = Number(item.dictKey)
+    })
+    educationData.value = arrData
+}
+
+//持证类型、持证专业
+
+
 //搜索表单
-const searchForm = ref({queryValue: null, current: 1, size: 20, total: 0})
+const searchForm = ref({
+    queryValue: null, current: 1, size: 20, total: 0
+})
 
 //回车搜索
 const keyUpEvent = (e) => {
@@ -202,50 +233,76 @@ const pageChange = ({current, size}) => {
 //表格数据
 const tableRef = ref(null)
 const tableColumn = ref([
-    {key:'key1', name: '姓名'},
-    {key:'key2', name: '部门'},
-    {key:'key3', name: '职称'},
-    {key:'key4', name: '就职状态'},
-    {key:'key5', name: '入职时间'},
-    {key:'key6', name: '从事检测工作年份'},
-    {key:'key7', name: '工作职务'},
-    {key:'key8', name: '身份证号码'},
-    {key:'key9', name: '出生日期'},
-    {key:'key10', name: '性别'},
-    {key:'key11', name: '毕业院校'},
-    {key:'key12', name: '学历'},
-    {key:'key13', name: '专业'},
-    {key:'key14', name: '毕业时间'},
-    {key:'key15', name: '劳动合同终止日期'},
-    {key:'key16', name: '进场时间'},
-    {key:'key17', name: '退场时间'},
+    {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},
 ])
 
 //获取数据
 const tableLoading = ref(false)
 const tableData = ref([])
 const getTableData = async () => {
-
+    tableLoading.value = true
+    const { error, code, data } = await dataApi.queryPage({
+        projectId: projectId.value,
+        contractId: contractId.value,
+        ...searchForm.value,
+    })
+    //处理数据
+    tableLoading.value = false
+    if (!error && code === 200) {
+        tableData.value = getArrValue(data['records'])
+        searchForm.value.total = data.total || 0
+    } else {
+        tableData.value = []
+        searchForm.value.total = 0
+    }
 }
 
 //多选
 const tableCheckedKeys = ref([]);
 const tableSelection = (rows) => {
-    tableCheckedKeys.value = rows.filter((item) => {
-        return (item??'') !== '';
-    })
+    tableCheckedKeys.value = rows
 }
 
-//新增/编辑 材料进场
+//新增表单
 const addEditFormModal = ref(false)
 const addFormModalClick = () => {
+    addEditFormModel.value = {
+        status: 1, sex: 1, certificateType: 1, certificateMajor: 1, education: 1,
+    }
     addEditFormModal.value = true
 }
+
+//编辑表单
 const editFormModalClick = () => {
-    addEditFormModal.value = true
+    const keys = tableCheckedKeys.value
+    if (keys.length === 1) {
+        addEditFormModel.value = keys[0]
+        addEditFormModal.value = true
+    } else if (keys.length > 1) {
+        window?.$message?.warning('只能选择一条数据编辑')
+    }
 }
+
+//关闭表单
 const addEditFormModalClose = () => {
     addEditFormModal.value = false
+    addEditFormModel.value = {}
 }
 
 //类型tab数据和相关处理
@@ -263,12 +320,12 @@ const tabTypeChange = (item) => {
 const addEditFormRef = ref(null)
 const addEditFormModel = ref({})
 const addEditFormRules = {
-    key1: {
+    name: {
         required: true,
         trigger: 'blur',
-        message: "请输入"
+        message: "请输入姓名"
     },
-    key2: {
+    idCard: {
         required: true,
         validator: (rule, value, callback) => {
             if (!value) {
@@ -281,35 +338,34 @@ const addEditFormRules = {
         },
         trigger: 'blur'
     },
-    key4: {
+    birthday: {
         required: true,
         trigger: 'blur',
-        message: "请选择"
-    },
-    key11: {
-        required: true,
-        trigger: 'blur',
-        message: "请输入"
-    },
-    key13: {
-        required: true,
-        trigger: 'blur',
-        message: "请选择"
-    },
-    key15: {
-        required: true,
-        trigger: 'blur',
-        message: "请选择"
+        message: "请选择出生日期"
     },
 }
 
 //新增/编辑 保存
 const addEditFormLoading = ref(false)
-const addEditFormClick = () => {
-
+const addEditFormClick = async () => {
+    const validate = await formValidate(addEditFormRef.value)
+    if (validate) {
+        addEditFormLoading.value = true
+        const { error, code } = await dataApi.submitForm({
+            ...addEditFormModel.value,
+            projectId: projectId.value,
+            contractId: contractId.value
+        })
+        //处理数据
+        addEditFormLoading.value = false
+        if (!error && code === 200) {
+            window?.$message?.success('操作成功')
+            addEditFormModal.value = false
+            await getTableData()
+        }
+    }
 }
 
-
 //删除
 const delModalClick = () => {
     window?.$messageBox?.alert('请谨慎考虑后,确认是否需要删除?', '删除提醒', {
@@ -319,11 +375,37 @@ const delModalClick = () => {
         type: 'warning',
         callback: (action) => {
             if (action === 'confirm') {
-                //removeContractTreeNode()
+                tableRemoveData()
             }
         }
     })
 }
+
+//批量删除
+const tableRemoveData = async () => {
+    const rows = tableCheckedKeys.value
+    if (rows.length > 0 ) {
+        const ids = rowsToId(rows)
+        //删除请求
+        const { error, code } = await dataApi.removeData({
+            projectId: projectId.value,
+            contractId: contractId.value,
+            ids: ids,
+        })
+        //处理数据
+        if (!error && code === 200) {
+            window?.$message?.success('操作成功')
+            searchClick()
+        }
+    }
+}
+
+//拼接ID
+const rowsToId = (rows) => {
+    return rows.map((obj) => {
+        return obj.id;
+    }).join(",")
+}
 </script>
 
 <style lang="scss" scoped>

+ 1 - 1
src/views/tentative/material/approach.vue

@@ -210,7 +210,7 @@ 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, isIdCard} from "vue-utils-plus"
+import {formValidate, getArrValue, getIndex, deepClone} from "vue-utils-plus"
 import {getDictionary} from "~api/other";
 
 //初始变量