| | |
| | | <!-- <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>--> |
| | | </el-row> |
| | | |
| | | <el-table v-loading="state.loading" :data="state.expertList" :tree-props="{children: 'children', hasChildren: 'hasChildren'}" :border="true"> |
| | | <el-table v-loading="state.loading" :data="state.expertList" row-key="id" :border="true"> |
| | | <el-table-column label="分类名称" align="center" prop="classifyName" /> |
| | | <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
对比新文件 |
| | |
| | | <template> |
| | | <div class="riskBox"> |
| | | <el-form ref="formRef" :model="state.formData" :rules="state.rules" class="register-form" label-position="top"> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="12"> |
| | | <el-form-item prop="timeRange" label="技术服务期限"> |
| | | <el-date-picker |
| | | v-model="state.formData.timeRange" |
| | | style="width: 100%" |
| | | type="daterange" |
| | | range-separator="至" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | value-format="YYYY-MM-DD 00:00:00" |
| | | size="large" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item prop="investigationPlanDate" label="计划现场勘验时间"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="state.formData.investigationPlanDate" |
| | | type="date" |
| | | value-format="YYYY-MM-DD 00:00:00" |
| | | placeholder="选择日期" |
| | | size="large" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <!-- <el-row :gutter="30">--> |
| | | <!-- <el-col :span="6">--> |
| | | <!-- <el-form-item label="附件上传">--> |
| | | <!-- <el-upload--> |
| | | <!-- accept="image/*"--> |
| | | <!-- :action="state.uploadUrl"--> |
| | | <!-- :headers="state.header"--> |
| | | <!-- method="post"--> |
| | | <!-- :on-success="(response, file, fileList) => handleAvatarSuccess(response, file, fileList, 1)"--> |
| | | <!-- :on-preview="handlePictureCardPreview"--> |
| | | <!-- v-model:file-list="state.socialList"--> |
| | | <!-- list-type="picture-card"--> |
| | | <!-- :before-upload="picSize"--> |
| | | <!-- :on-remove="(file, file_list)=>{handleRemove(file, file_list, 1)}"--> |
| | | <!-- >--> |
| | | <!-- <el-icon><Plus /></el-icon>--> |
| | | <!-- <template #tip>--> |
| | | <!-- <div class="el-upload__tip">上传jpg/png图片尺寸小于5M</div>--> |
| | | <!-- </template>--> |
| | | <!-- </el-upload>--> |
| | | <!-- </el-form-item>--> |
| | | <!-- </el-col>--> |
| | | <!-- </el-row>--> |
| | | <el-row> |
| | | <el-col :span="18"> |
| | | <div style="display: flex;align-items: center">项目组成员<el-icon style="margin-left: 10px;margin-right: 4px"><InfoFilled /></el-icon><span style="font-size: 13px">金属、非金属矿及其他矿采选业:安全、机械、电气、采矿、通风、地质、水工结构</span></div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-table :data="state.planPersons" :border="true" style="margin: 20px 0"> |
| | | <el-table-column label="序号" width="60" align="center" type="index"></el-table-column> |
| | | <el-table-column label="评价组成员" prop="person.name" header-align="center" :show-overflow-tooltip="true"/> |
| | | <el-table-column label="资格证书" prop="person.certificateNo" header-align="center" :show-overflow-tooltip="true"/> |
| | | <el-table-column label="专业能力" prop="person.major" header-align="center" :show-overflow-tooltip="true"/> |
| | | <el-table-column label="承担工作" header-align="center" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
| | | <el-select v-model="scope.row.work" multiple placeholder="承担工作" style="width: 100%" size="large" disabled> |
| | | <el-option v-for="item in state.workList" :key="item.value" :label="item.label" :value="item.value"/> |
| | | </el-select> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="承诺后期前往现场勘验" header-align="center" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
| | | <el-radio-group v-model="scope.row.laterPromise" size="large" disabled> |
| | | <el-radio :label="1" size="large">是</el-radio> |
| | | <el-radio :label="0" size="large">否</el-radio> |
| | | </el-radio-group> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="未到现场勘验原因" header-align="center" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
| | | <el-input v-model="scope.row.reason" maxlength="30" show-word-limit type="text" size="large" readonly/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="是否已告知" header-align="center" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
| | | <el-radio-group v-model="scope.row.informed" size="large"> |
| | | <el-radio :label="1" size="large">是</el-radio> |
| | | <el-radio :label="0" size="large">否</el-radio> |
| | | </el-radio-group> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-form> |
| | | </div> |
| | | </template> |
| | | <script setup> |
| | | |
| | | import {defineEmits, onMounted, reactive, ref} from "vue" |
| | | import {ElMessage} from "element-plus" |
| | | import {Search} from '@element-plus/icons-vue' |
| | | import {addRisk, editRisk, getRiskDetail} from "@/api/projectManage/riskAnalysis" |
| | | import Cookies from "js-cookie" |
| | | const emit = defineEmits(["getNextStatus"]) |
| | | |
| | | const state = reactive({ |
| | | formData: { |
| | | projectId: null, |
| | | timeRange: [], |
| | | serviceStartDate: '', |
| | | serviceEndDate: '', |
| | | investigationPlanDate: '' |
| | | }, |
| | | planPersons: [], |
| | | rules: { |
| | | timeRange: [{required: true, message: '请选择技术服务期限', trigger: 'blur'}], |
| | | investigationPlanDate: [{required: true, message: '请选择计划现场勘验时间', trigger: 'blur'}], |
| | | } |
| | | }) |
| | | |
| | | const isAmin = ref(false) |
| | | const formRef = ref() |
| | | onMounted(() => { |
| | | const userInfo = JSON.parse(Cookies.get('userInfo')) |
| | | if(userInfo.identity === 0){ |
| | | isAmin.value = true; |
| | | } |
| | | }); |
| | | |
| | | const riskOpen = async (type,val) => { |
| | | console.log("type",type,val) |
| | | if(type === 'detail' || type === 'edit' ){ |
| | | const res = await getRiskDetail({projectId: val}); |
| | | if(res.code == 200){ |
| | | state.formData = res.data; |
| | | state.formData.project.business = parseInt(res.data.project.business); |
| | | state.formData.project.area = [res.data.project.province,res.data.project.city]; |
| | | }else { |
| | | ElMessage.warning(res.message) |
| | | } |
| | | } |
| | | if(type === 'add' || type === 'clickEdit') { |
| | | const valid = await formRef.value.validate(); |
| | | if(valid){ |
| | | if (isAmin.value) { |
| | | ElMessage.warning("当前用户暂无权限"); |
| | | return; |
| | | } |
| | | state.formData.serviceStartDate = state.formData.timeRange[0] |
| | | state.formData.serviceEndDate = state.formData.timeRange[1] |
| | | if(type === 'add'){ |
| | | const {projectId,timeRange, ...data} = JSON.parse(JSON.stringify(state.formData)) |
| | | const res = await addRisk(data); |
| | | if (res.code == 200) { |
| | | ElMessage.success('保存成功') |
| | | formRef.value.clearValidate(); |
| | | emit('getNextStatus', res.data); |
| | | |
| | | } else { |
| | | ElMessage.warning(res.message) |
| | | } |
| | | }else if(type === 'clickEdit'){ |
| | | const {timeRange, ...data} = JSON.parse(JSON.stringify(state.formData)) |
| | | const res = await editRisk(data); |
| | | if (res.code == 200) { |
| | | ElMessage.success('变更成功') |
| | | formRef.value.clearValidate(); |
| | | // emit('getNextStatus', data.project.id); |
| | | } else { |
| | | ElMessage.warning(res.message) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | defineExpose({ |
| | | riskOpen |
| | | }); |
| | | |
| | | |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | .riskBox{ |
| | | :deep(.el-form .el-form-item__label) { |
| | | font-size: 15px; |
| | | } |
| | | } |
| | | |
| | | </style> |
| | |
| | | <el-form ref="formRef" :model="state.formData" :rules="state.rules" class="register-form" label-position="top"> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="6"> |
| | | <el-form-item prop="evalStartDate" label="评价开始时间"> |
| | | <el-form-item prop="startDate" label="评价开始时间"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="state.formData.evalStartDate" |
| | | v-model="state.formData.startDate" |
| | | type="date" |
| | | value-format="YYYY-MM-DD 00:00:00" |
| | | placeholder="选择日期" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item prop="evalEndDate" label="评价结束时间"> |
| | | <el-form-item prop="endDate" label="评价结束时间"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="state.formData.evalEndDate" |
| | | v-model="state.formData.endDate" |
| | | type="date" |
| | | value-format="YYYY-MM-DD 00:00:00" |
| | | placeholder="选择日期" |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item prop="deliver" label="机构评价负责人"> |
| | | <el-form-item prop="auser.name" label="机构评价负责人"> |
| | | <el-input |
| | | v-model="state.formData.deliver" |
| | | v-model="state.formData.auser.name" |
| | | size="large" |
| | | placeholder="请选择机构评价负责人" |
| | | > |
| | |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item prop="deliver" label="技术负责人"> |
| | | <el-input |
| | | v-model="state.formData.deliver" |
| | | size="large" |
| | | placeholder="请选择技术负责人" |
| | | > |
| | | <template #append> |
| | | <el-button :icon="Search" @click="openExperts('技术负责人')"/> |
| | | </template> |
| | | </el-input> |
| | | </el-form-item> |
| | | <!-- <el-col :span="6">--> |
| | | <!-- <el-form-item prop="deliver" label="技术负责人">--> |
| | | <!-- <el-input--> |
| | | <!-- v-model="state.formData.deliver"--> |
| | | <!-- size="large"--> |
| | | <!-- placeholder="请选择技术负责人"--> |
| | | <!-- >--> |
| | | <!-- <template #append>--> |
| | | <!-- <el-button :icon="Search" @click="openExperts('技术负责人')"/>--> |
| | | <!-- </template>--> |
| | | <!-- </el-input>--> |
| | | <!-- </el-form-item>--> |
| | | <!-- </el-col>--> |
| | | </el-row> |
| | | <el-row> |
| | | <el-col :span="18"> |
| | | <div style="display: flex;align-items: center">评价日程安排</div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-table :data="state.tableData" :border="true" style="margin: 20px 0"> |
| | | <el-table :data="state.formData.estimateSchedules" :border="true" style="margin: 20px 0"> |
| | | <el-table-column label="序号" width="60" align="center" type="index"></el-table-column> |
| | | <el-table-column label="评价日程安排" prop="content" header-align="center" :show-overflow-tooltip="true"/> |
| | | <el-table-column label="评价日程安排" prop="name" header-align="center" :show-overflow-tooltip="true"/> |
| | | <el-table-column label="开始时间" header-align="center" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
| | | <el-date-picker |
| | |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-row> |
| | | <el-col :span="18"> |
| | | <div style="display: flex;align-items: center">项目组成员<el-icon style="margin-left: 10px;margin-right: 4px"><InfoFilled /></el-icon><span style="font-size: 13px">金属、非金属矿及其他矿采选业:安全、机械、电气、采矿、通风、地质、水工结构</span></div> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <div style="width: 100%;display: flex;justify-content: right"> |
| | | <el-button type="primary" icon="Plus" @click="openExperts('项目组成员')">添加成员</el-button> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-table :data="state.formData.planPersons" :border="true" style="margin: 20px 0"> |
| | | <el-table-column label="序号" width="60" align="center" type="index"></el-table-column> |
| | | <el-table-column label="评价组成员" prop="person.name" header-align="center" :show-overflow-tooltip="true"/> |
| | | <el-table-column label="资格证书" prop="person.certificateNo" header-align="center" :show-overflow-tooltip="true"/> |
| | | <el-table-column label="专业能力" prop="person.major" header-align="center" :show-overflow-tooltip="true"/> |
| | | <el-table-column label="承担工作" header-align="center" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
| | | <el-select v-model="scope.row.work" multiple placeholder="承担工作" style="width: 100%" size="large"> |
| | | <el-option v-for="item in state.workList" :key="item.value" :label="item.label" :value="item.value"/> |
| | | </el-select> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="承诺后期前往现场勘验" header-align="center" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
| | | <el-radio-group v-model="scope.row.laterPromise" size="large"> |
| | | <el-radio :label="1" size="large">是</el-radio> |
| | | <el-radio :label="0" size="large">否</el-radio> |
| | | </el-radio-group> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="未到现场勘验原因" header-align="center" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
| | | <el-input v-model="scope.row.reason" maxlength="30" show-word-limit type="text" size="large"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" header-align="center" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
| | | <el-button link type="danger" @click="delMember(scope.$index)">删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | <el-row> |
| | | <el-col :span="18"> |
| | | <div style="display: flex;align-items: center">所需仪器设备</div> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <div style="width: 100%;display: flex;justify-content: right"> |
| | | <el-button type="primary" icon="Plus" @click="addDevice">添加设备</el-button> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-table :data="state.formData.devices" :border="true" style="margin: 20px 0"> |
| | | <el-table-column label="序号" width="60" align="center" type="index"></el-table-column> |
| | | <el-table-column label="设备名称" header-align="center" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
| | | <el-input v-model="scope.row.deviceName" maxlength="30" show-word-limit type="text" size="large"/> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="开始时间" header-align="center" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="scope.row.startDate" |
| | | type="date" |
| | | value-format="YYYY-MM-DD 00:00:00" |
| | | placeholder="选择日期" |
| | | size="large" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="结束时间" header-align="center" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="scope.row.endDate" |
| | | type="date" |
| | | value-format="YYYY-MM-DD 00:00:00" |
| | | placeholder="选择日期" |
| | | size="large" |
| | | /> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="操作" header-align="center" class-name="small-padding fixed-width"> |
| | | <template #default="scope"> |
| | | <el-button link type="danger" @click="delDevice(scope.$index)">删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </el-form> |
| | | <experts-list ref="expertsListRef" @getName="getSelected"></experts-list> |
| | | </div> |
| | |
| | | |
| | | const state = reactive({ |
| | | formData: { |
| | | project: { |
| | | id: '', |
| | | |
| | | projectId: null, |
| | | auser: { |
| | | name: '' |
| | | }, |
| | | auserId: null, |
| | | estimateSchedules: [ |
| | | { |
| | | id: 1, |
| | | name: '勘验准备', |
| | | startDate: '', |
| | | endDate: '', |
| | | scheduleType: 1 |
| | | }, |
| | | { |
| | | id: 2, |
| | | name: '现场勘验', |
| | | startDate: '', |
| | | endDate: '', |
| | | scheduleType: 2 |
| | | }, |
| | | { |
| | | id: 3, |
| | | name: '材料分析整理', |
| | | startDate: '', |
| | | endDate: '', |
| | | scheduleType: 3 |
| | | }, |
| | | { |
| | | id: 4, |
| | | name: '评价报告编写', |
| | | startDate: '', |
| | | endDate: '', |
| | | scheduleType: 4 |
| | | }, |
| | | { |
| | | id: 5, |
| | | name: '整改情况现场确认', |
| | | startDate: '', |
| | | endDate: '', |
| | | scheduleType: 5 |
| | | }, |
| | | { |
| | | id: 6, |
| | | name: '整理评价报告', |
| | | startDate: '', |
| | | endDate: '', |
| | | scheduleType: 6 |
| | | }, |
| | | { |
| | | id: 7, |
| | | name: '报告审核', |
| | | startDate: '', |
| | | endDate: '', |
| | | scheduleType: 7 |
| | | }, |
| | | { |
| | | id: 8, |
| | | name: '报告修改', |
| | | startDate: '', |
| | | endDate: '', |
| | | scheduleType: 8 |
| | | }, |
| | | ], |
| | | planPersons: [], |
| | | devices: [], |
| | | startDate: '', |
| | | endDate: '', |
| | | id: '' |
| | | }, |
| | | rules: { |
| | | "project.name": [{required: true, message: '请填写项目名称', trigger: 'blur'}], |
| | | riskCharacter: [{required: true, message: '请填写行业风险特性', trigger: 'blur'}], |
| | | "auser.name": [{required: true, message: '请填写机构评价负责人', trigger: 'blur'}], |
| | | startDate: [{required: true, message: '请选择评价开始时间', trigger: 'blur'}], |
| | | endDate: [{required: true, message: '请选择评价结束时间', trigger: 'blur'}] |
| | | }, |
| | | tableData: [ |
| | | { |
| | | id: '1', |
| | | content: '勘验准备', |
| | | status: 1 |
| | | }, |
| | | { |
| | | id: '2', |
| | | content: '现场勘验', |
| | | status: 1 |
| | | }, |
| | | { |
| | | id: '3', |
| | | content: '材料分析整理', |
| | | status: 1 |
| | | }, |
| | | { |
| | | id: '4', |
| | | content: '评价报告编写', |
| | | status: 1 |
| | | }, |
| | | { |
| | | id: '5', |
| | | content: '整改情况现场确认', |
| | | status: 1 |
| | | }, |
| | | { |
| | | id: '6', |
| | | content: '整理评价报告', |
| | | status: 1 |
| | | }, |
| | | { |
| | | id: '7', |
| | | content: '报告审核', |
| | | status: 1 |
| | | }, |
| | | { |
| | | id: '8', |
| | | content: '报告修改', |
| | | status: 1 |
| | | }, |
| | | workList: [ |
| | | {value: '报告编制',label: '报告编制'}, |
| | | {value: '文字校对',label: '文字校对'}, |
| | | {value: '现场勘验',label: '现场勘验'}, |
| | | {value: '资料收集整理',label: '资料收集整理'} |
| | | ] |
| | | }) |
| | | const props = { |
| | |
| | | state.formData = res.data; |
| | | state.formData.project.business = parseInt(res.data.project.business); |
| | | state.formData.project.area = [res.data.project.province,res.data.project.city]; |
| | | state.tableData[0].status = res.data.isInBusiness ? 1 : 0; |
| | | state.tableData[1].status = res.data.isSatisfyNeed ? 1 : 0; |
| | | state.tableData[2].status = res.data.isNeedExpert ? 1 : 0; |
| | | state.tableData[3].status = res.data.isFinishReport ? 1 : 0; |
| | | state.tableData[4].status = res.data.isAcceptChargess ? 1 : 0; |
| | | state.tableData[5].status = res.data.isFeasibility ? 1 : 0; |
| | | }else { |
| | | ElMessage.warning(res.message) |
| | | } |
| | |
| | | const {id, ...data} = JSON.parse(JSON.stringify(state.formData)) |
| | | delete data.project.area; |
| | | delete data.project.id; |
| | | data.isInBusiness = state.tableData[0].status === 1; |
| | | data.isSatisfyNeed = state.tableData[1].status === 1; |
| | | data.isNeedExpert = state.tableData[2].status === 1; |
| | | data.isFinishReport = state.tableData[3].status === 1; |
| | | data.isAcceptChargess = state.tableData[4].status === 1; |
| | | data.isFeasibility = state.tableData[5].status === 1; |
| | | console.log('data', data) |
| | | const res = await addRisk(data); |
| | | if (res.code == 200) { |
| | |
| | | }else if(type === 'clickEdit'){ |
| | | const { ...data} = JSON.parse(JSON.stringify(state.formData)) |
| | | delete data.project.area; |
| | | data.isInBusiness = state.tableData[0].status === 1; |
| | | data.isSatisfyNeed = state.tableData[1].status === 1; |
| | | data.isNeedExpert = state.tableData[2].status === 1; |
| | | data.isFinishReport = state.tableData[3].status === 1; |
| | | data.isAcceptChargess = state.tableData[4].status === 1; |
| | | data.isFeasibility = state.tableData[5].status === 1; |
| | | console.log('data', data) |
| | | const res = await editRisk(data); |
| | | if (res.code == 200) { |
| | |
| | | |
| | | const getSelected = (type,obj)=>{ |
| | | if(type == '项目负责人'){ |
| | | state.formData.project.leader = obj.name |
| | | state.formData.auser.name = obj.name |
| | | state.formData.auserId = obj.id |
| | | }else{ |
| | | let member = { |
| | | person: { |
| | | name: obj.name, |
| | | certificateNo: obj.certificateNo?obj.certificateNo:'', |
| | | major: obj.speciality, |
| | | }, |
| | | informed: 0, |
| | | work: '', |
| | | laterPromise: 0, |
| | | reason: '' |
| | | } |
| | | state.formData.planPersons.push(member) |
| | | } |
| | | if(type == '任务下达人'){ |
| | | state.formData.deliver = obj.name |
| | | } |
| | | |
| | | const delMember = (index)=>{ |
| | | state.formData.planPersons.splice(index,1) |
| | | } |
| | | |
| | | const addDevice = ()=>{ |
| | | let device = { |
| | | projectId: null, |
| | | deviceName: '', |
| | | startDate: '', |
| | | endDate: '' |
| | | } |
| | | state.formData.devices.push(device) |
| | | } |
| | | |
| | | const delDevice = (index)=>{ |
| | | state.formData.devices.splice(index,1) |
| | | } |
| | | |
| | | defineExpose({ |
| | |
| | | <el-form ref="formRef" :model="state.formData" :rules="state.rules" class="register-form" label-position="top"> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="6"> |
| | | <el-form-item prop="project.leader" label="项目负责人"> |
| | | <el-form-item prop="leader.name" label="项目负责人"> |
| | | <el-input |
| | | v-model="state.formData.project.leader" |
| | | v-model="state.formData.leader.name" |
| | | size="large" |
| | | placeholder="请选择项目负责人" |
| | | > |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item prop="project.contactor" label="联系人"> |
| | | <el-form-item prop="linkMan" label="联系人"> |
| | | <el-input |
| | | v-model="state.formData.project.contactor" |
| | | v-model="state.formData.linkMan" |
| | | size="large" |
| | | placeholder="请选择联系人" |
| | | > |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item prop="project.phone" label="联系电话"> |
| | | <el-form-item prop="linkPhone" label="联系电话"> |
| | | <el-input |
| | | v-model="state.formData.project.phone" |
| | | v-model="state.formData.linkPhone" |
| | | size="large" |
| | | placeholder="请选择联系电话" |
| | | > |
| | |
| | | <el-col :span="6"> |
| | | <el-form-item label="传真"> |
| | | <el-input |
| | | v-model="state.formData.project.fax" |
| | | v-model="state.formData.fax" |
| | | size="large" |
| | | placeholder="请选择传真" |
| | | > |
| | |
| | | </el-row> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="6"> |
| | | <el-form-item prop="deliver" label="任务下达人"> |
| | | <el-form-item label="任务下达人"> |
| | | <el-input |
| | | v-model="state.formData.deliver" |
| | | v-model="state.formData.transmitPerson" |
| | | size="large" |
| | | placeholder="请选择任务下达人" |
| | | > |
| | |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item prop="deliverDate" label="任务下达时间"> |
| | | <el-form-item prop="transmitDate" label="任务下达时间"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="state.formData.deliverDate" |
| | | v-model="state.formData.transmitDate" |
| | | type="date" |
| | | value-format="YYYY-MM-DD 00:00:00" |
| | | placeholder="选择日期" |
| | |
| | | const state = reactive({ |
| | | formData: { |
| | | id: '', |
| | | deliver: '', |
| | | deliverDate: '', |
| | | project: { |
| | | id: '', |
| | | leader: '', |
| | | contactor: '', |
| | | phone: '' |
| | | } |
| | | leader: { |
| | | name: '' |
| | | }, |
| | | leaderId: null, |
| | | linkMan: '', |
| | | transmitPerson: '', |
| | | transmitDate: '' |
| | | }, |
| | | rules: { |
| | | "project.leader": [{required: true, message: '请选择项目负责人', trigger: 'blur'}], |
| | | "project.contactor": [{required: true, message: '请输入联系人', trigger: 'blur'}], |
| | | "project.phone": [{required: true, message: '请输入联系电话', trigger: 'blur'}], |
| | | deliverDate: [{required: true, message: '请选择任务下达时间', trigger: 'blur'}] |
| | | }, |
| | | estimateTypeList: [], |
| | | addressList: [], |
| | | businessList: [], |
| | | tableData: [ |
| | | { |
| | | id: '1', |
| | | content: '评价项目是否在本机构资质业务范围内', |
| | | status: 1 |
| | | }, |
| | | { |
| | | id: '2', |
| | | content: '评价人员专业构成是否满足评价项目需要', |
| | | status: 1 |
| | | }, |
| | | { |
| | | id: '3', |
| | | content: '是否需要聘请相关专业的技术专家', |
| | | status: 1 |
| | | }, |
| | | { |
| | | id: '4', |
| | | content: '是否能在约定的时间内完成评价报告', |
| | | status: 1 |
| | | }, |
| | | { |
| | | id: '5', |
| | | content: '评价费用是否在本机构所接受的范围内', |
| | | status: 1 |
| | | }, |
| | | { |
| | | id: '6', |
| | | content: '项目的可行性(风险分析结论)', |
| | | status: 1 |
| | | }, |
| | | ] |
| | | "leader.name": [{required: true, message: '请选择项目负责人', trigger: 'blur'}], |
| | | linkMan: [{required: true, message: '请输入联系人', trigger: 'blur'}], |
| | | linkPhone: [{required: true, message: '请输入联系电话', trigger: 'blur'}], |
| | | transmitDate: [{required: true, message: '请选择任务下达时间', trigger: 'blur'}] |
| | | } |
| | | }) |
| | | const props = { |
| | | expandTrigger: 'hover', |
| | |
| | | }) |
| | | |
| | | const riskOpen = async (type,val) => { |
| | | console.log("type",type,val) |
| | | if(type === 'detail' || type === 'edit' ){ |
| | | const res = await getRiskDetail({projectId: val}); |
| | | if(res.code == 200){ |
| | | state.formData = res.data; |
| | | state.formData.project.business = parseInt(res.data.project.business); |
| | | state.formData.project.area = [res.data.project.province,res.data.project.city]; |
| | | state.tableData[0].status = res.data.isInBusiness ? 1 : 0; |
| | | state.tableData[1].status = res.data.isSatisfyNeed ? 1 : 0; |
| | | state.tableData[2].status = res.data.isNeedExpert ? 1 : 0; |
| | | state.tableData[3].status = res.data.isFinishReport ? 1 : 0; |
| | | state.tableData[4].status = res.data.isAcceptChargess ? 1 : 0; |
| | | state.tableData[5].status = res.data.isFeasibility ? 1 : 0; |
| | | }else { |
| | | ElMessage.warning(res.message) |
| | | } |
| | |
| | | } |
| | | if(type === 'add'){ |
| | | const {id, ...data} = JSON.parse(JSON.stringify(state.formData)) |
| | | delete data.project.area; |
| | | delete data.project.id; |
| | | data.isInBusiness = state.tableData[0].status === 1; |
| | | data.isSatisfyNeed = state.tableData[1].status === 1; |
| | | data.isNeedExpert = state.tableData[2].status === 1; |
| | | data.isFinishReport = state.tableData[3].status === 1; |
| | | data.isAcceptChargess = state.tableData[4].status === 1; |
| | | data.isFeasibility = state.tableData[5].status === 1; |
| | | console.log('data', data) |
| | | const res = await addRisk(data); |
| | | if (res.code == 200) { |
| | | ElMessage.success('保存成功') |
| | |
| | | } |
| | | }else if(type === 'clickEdit'){ |
| | | const { ...data} = JSON.parse(JSON.stringify(state.formData)) |
| | | delete data.project.area; |
| | | data.isInBusiness = state.tableData[0].status === 1; |
| | | data.isSatisfyNeed = state.tableData[1].status === 1; |
| | | data.isNeedExpert = state.tableData[2].status === 1; |
| | | data.isFinishReport = state.tableData[3].status === 1; |
| | | data.isAcceptChargess = state.tableData[4].status === 1; |
| | | data.isFeasibility = state.tableData[5].status === 1; |
| | | const res = await editRisk(data); |
| | | if (res.code == 200) { |
| | | ElMessage.success('变更成功') |
| | |
| | | |
| | | const getSelected = (type,obj)=>{ |
| | | if(type == '项目负责人'){ |
| | | state.formData.project.leader = obj.name |
| | | state.formData.leader.name = obj.name |
| | | state.formData.leaderId = obj.id |
| | | } |
| | | if(type == '任务下达人'){ |
| | | state.formData.deliver = obj.name |
| | | state.formData.transmitPerson = obj.name |
| | | } |
| | | } |
| | | |
| | |
| | | v-model="dialogVisible" |
| | | :title="title" |
| | | width="60%" |
| | | :before-close="handleClose" |
| | | > |
| | | <el-form :model="state.queryParams" ref="queryForm" :inline="true" v-show="state.showSearch" label-width="90px"> |
| | | <el-form :model="queryParams" :inline="true" label-width="90px"> |
| | | <el-form-item label="专业类别"> |
| | | <el-cascader |
| | | clearable |
| | | v-model="state.classiFy" |
| | | :options="state.expertTypes" |
| | | :props="{ expandTrigger: 'hover', value: 'id',label: 'classifyName'}" |
| | | @change="handleChange"></el-cascader> |
| | | <el-radio-group v-model="queryParams.expertType"> |
| | | <el-radio-button label="">全部</el-radio-button> |
| | | <el-radio-button label="1">安全评价</el-radio-button> |
| | | <el-radio-button label="2">检验检测</el-radio-button> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="在岗情况" prop="dutyStatus"> |
| | | <el-select v-model="state.queryParams.dutyStatus" placeholder="岗位状态" clearable> |
| | | <el-option :key="0" label="在岗" :value="0"/> |
| | | <el-option :key="1" label="退休" :value="1"/> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="时间范围" prop="searchTime"> |
| | | <el-date-picker |
| | | v-model="state.searchTime" |
| | | type="daterange" |
| | | @change="changeTime" |
| | | range-separator="至" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | value-format="YYYY-MM-DD" |
| | | <el-form-item label="姓名"> |
| | | <el-input |
| | | v-model="queryParams.name" |
| | | placeholder="姓名" |
| | | style="width: 250px" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="手机号"> |
| | | <el-input |
| | | v-model="queryParams.phone" |
| | | placeholder="手机号" |
| | | style="width: 250px" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="评价师等级"> |
| | | <el-select v-model="queryParams.level" style="width: 250px" placeholder="评价师等级" > |
| | | <el-option |
| | | v-for="item in levelList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.name" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="专业方向"> |
| | | <el-select v-model="queryParams.major" value-key="id" style="width: 250px" placeholder="专业方向"> |
| | | <el-option |
| | | v-for="item in majorList" |
| | | :key="item.id" |
| | | :label="item.label" |
| | | :value="item.id" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="专业方向"> |
| | | <el-select v-model="queryParams.post" style="width: 250px" placeholder="请选择职务"> |
| | | <el-option |
| | | v-for="item in postList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.name" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> |
| | | <el-button icon="Refresh" @click="resetQuery">重置</el-button> |
| | | <el-button type="primary" icon="Search" @click="search">搜索</el-button> |
| | | <el-button icon="Refresh" @click="research">重置</el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | <el-table ref="tableRef" v-loading="loading" :data="state.expertList" :border="true" @select="select" @selection-change="handleSelectionChange"> |
| | | <el-table v-loading="loading" ref="tableRef" :data="dataList" :border="true" @select="select" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="55" /> |
| | | <el-table-column type="index" width="55" align="center" /> |
| | | <el-table-column label="姓名" align="center" prop="name" /> |
| | | <el-table-column label="出生日期" align="center" prop="birthday" /> |
| | | <el-table-column label="学历" align="center" prop="degree" /> |
| | | <el-table-column label="职称" align="center" prop="title"/> |
| | | <el-table-column label="专业" align="center" prop="speciality" /> |
| | | <el-table-column label="推荐类别组别" align="center"> |
| | | <el-table-column label="用户ID" prop="id" align="center" /> |
| | | <el-table-column label="姓名" prop="name" align="center" width="110" /> |
| | | <el-table-column label="手机号" prop="phone" align="center" width="125" /> |
| | | <el-table-column label="用户名" prop="username" align="center" width="110" /> |
| | | <el-table-column label="性别" prop="sex" align="center" > |
| | | <template #default="scope"> |
| | | {{findNodeById(state.expertTypes,scope.row.bigClassify)}}/{{findNodeById(state.expertTypes,scope.row.smallClassify)}} |
| | | <span v-if="scope.row.sex === 0">男</span> |
| | | <span v-if="scope.row.sex === 1">女</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="联系电话" align="center" prop="phone"/> |
| | | <el-table-column label="申请时间" align="center" prop="createTime"> |
| | | <el-table-column label="所属机构" prop="agency.name" align="center" width="110" /> |
| | | <el-table-column label="社保" prop="socialSecurity" align="center" width="120"> |
| | | <template #default="scope"> |
| | | {{scope.row.createTime?scope.row.createTime.substring(0,10):''}} |
| | | <div class="demo-image__preview" v-if="scope.row.socialAttach && scope.row.socialAttach.length>0"> |
| | | <el-image |
| | | style="width: 100px; height: 100px" |
| | | :src= "scope.row.socialAttach[0]" |
| | | :zoom-rate="1.2" |
| | | :max-scale="7" |
| | | :min-scale="0.2" |
| | | :preview-src-list="scope.row.socialAttach" |
| | | :initial-index="0" |
| | | fit="cover" |
| | | preview-teleported="true" |
| | | /> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="医保" prop="medicalInsurance" align="center" width="120"> |
| | | <template #default="scope"> |
| | | <div class="demo-image__preview" v-if="scope.row.medicalAttach && scope.row.medicalAttach.length>0"> |
| | | <el-image |
| | | style="width: 100px; height: 100px" |
| | | :src="scope.row.medicalAttach[0]" |
| | | :zoom-rate="1.2" |
| | | :max-scale="7" |
| | | :min-scale="0.2" |
| | | :preview-src-list="scope.row.medicalAttach" |
| | | :initial-index="0" |
| | | fit="cover" |
| | | preview-teleported="true" |
| | | /> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="工资清单" prop="salaryList" align="center" width="120"> |
| | | <template #default="scope"> |
| | | <div class="demo-image__preview" v-if="scope.row.salaryAttach && scope.row.salaryAttach.length>0"> |
| | | <el-image |
| | | style="width: 100px; height: 100px" |
| | | :src= "scope.row.salaryAttach[0]" |
| | | :zoom-rate="1.2" |
| | | :max-scale="7" |
| | | :min-scale="0.2" |
| | | :preview-src-list="scope.row.salaryAttach" |
| | | :initial-index="0" |
| | | fit="cover" |
| | | preview-teleported="true" |
| | | /> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="职务" prop="post" align="center" width="120" /> |
| | | <el-table-column label="职称" prop="jobTitle" align="center" /> |
| | | <el-table-column label="专业方向" prop="majorNames" align="center" width="100" /> |
| | | <el-table-column label="评价师等级" prop="level" align="center" width="100" /> |
| | | <el-table-column label="业绩汇总" prop="summary" align="center" /> |
| | | <el-table-column label="最近评价时间" prop="lastTime" align="center" width="120" /> |
| | | </el-table> |
| | | |
| | | <pagination |
| | | v-show="state.total > 0" |
| | | :total="state.total" |
| | | v-model:page="state.queryParams.pageNum" |
| | | v-model:limit="state.queryParams.pageSize" |
| | | v-show="total > 0" |
| | | :total="total" |
| | | v-model:page="queryParams.pageNum" |
| | | v-model:limit="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | <template #footer> |
| | | <span class="dialog-footer"> |
| | | <el-button @click="handleClose" size="default">取 消</el-button> |
| | | <el-button @click="dialogVisible = false" size="default">取 消</el-button> |
| | | <el-button type="primary" @click="onSubmit" size="default" v-preReClick>确认</el-button> |
| | | </span> |
| | | </template> |
| | |
| | | </div> |
| | | </template> |
| | | <script setup> |
| | | import {defineEmits, reactive, ref, toRefs} from 'vue' |
| | | import Editor from "@/components/Editor/index.vue"; |
| | | import {ElMessage} from "element-plus"; |
| | | import {addArea, editArea, getArea} from "@/api/backManage/area"; |
| | | import {getExpertsList, getExpertTypes} from "../../../../api/form"; |
| | | |
| | | const dialogVisible = ref(false) |
| | | const title = ref("") |
| | | const loading = ref(false) |
| | | const tableRef = ref() |
| | | const emit = defineEmits([""]); |
| | | const state = reactive({ |
| | | showSearch: true, |
| | | total: 0, |
| | | expertTypes: [], |
| | | expertList: [], |
| | | import {getCurrentInstance, onMounted, reactive, ref, toRefs,defineEmits} from "vue"; |
| | | import {getDictList} from "@/api/backManage/evaluate"; |
| | | import {ElMessage, ElMessageBox} from "element-plus"; |
| | | import Cookies from "js-cookie"; |
| | | import {delMonitor, getExpertList, getMonitorList} from "@/api/sysUsers"; |
| | | const { proxy } = getCurrentInstance(); |
| | | const loading = ref(false); |
| | | const emit = defineEmits(['getName']) |
| | | const data = reactive({ |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | state: 2, |
| | | bigClassify: null, |
| | | smallClassify: null, |
| | | dutyStatus: null, |
| | | params: { |
| | | startTime: '', |
| | | endTime: '' |
| | | } |
| | | expertType: "", |
| | | name: '', |
| | | phone: '', |
| | | level: '', |
| | | major: null, |
| | | post: '' |
| | | }, |
| | | classiFy: [], |
| | | searchTime: [], |
| | | total: 0, |
| | | dataList: [], |
| | | majorList: [], |
| | | levelList: [ |
| | | { |
| | | id: '1', |
| | | name: '一级' |
| | | }, |
| | | { |
| | | id: '2', |
| | | name: '二级' |
| | | }, |
| | | { |
| | | id: '3', |
| | | name: '三级' |
| | | }, |
| | | { |
| | | id: '4', |
| | | name: '其他' |
| | | }, |
| | | ], |
| | | postList: [ |
| | | { |
| | | id: '1', |
| | | name: '法人' |
| | | }, |
| | | { |
| | | id: '2', |
| | | name: '过程控制负责人' |
| | | }, |
| | | { |
| | | id: '3', |
| | | name: '机构负责人' |
| | | }, |
| | | { |
| | | id: '4', |
| | | name: '技术负责人' |
| | | }, |
| | | { |
| | | id: '5', |
| | | name: '员工' |
| | | }, |
| | | ], |
| | | dialogVisible: false, |
| | | title: '', |
| | | selected: [] |
| | | }) |
| | | const tableRef = ref() |
| | | const { queryParams, total, dataList, majorList, levelList, postList, dialogVisible,title,selected } = toRefs(data); |
| | | |
| | | const openDialog = (type) => { |
| | | resetQuery() |
| | | getTypes() |
| | | state.selected = [] |
| | | title.value = type |
| | | dialogVisible.value = true |
| | | getMajor() |
| | | research() |
| | | data.selected = [] |
| | | data.title = type |
| | | data.dialogVisible = true |
| | | } |
| | | |
| | | const onSubmit = async () => { |
| | | if(state.selected.length>0) |
| | | emit('getName',title.value,state.selected[state.selected.length - 1]) |
| | | dialogVisible.value = false |
| | | } |
| | | |
| | | const handleQuery=()=> { |
| | | state.queryParams.pageNum = 1 |
| | | if(state.classiFy && state.classiFy.length>0){ |
| | | state.queryParams.bigClassify = state.classiFy[0] |
| | | state.queryParams.smallClassify = state.classiFy[1] |
| | | } |
| | | if(state.searchTime && state.searchTime.length>0){ |
| | | state.queryParams.params.startTime = state.searchTime[0] |
| | | state.queryParams.params.endTime = state.searchTime[1] |
| | | } |
| | | getList() |
| | | if(data.selected.length>0) |
| | | emit('getName',data.title,data.selected[data.selected.length - 1]) |
| | | data.dialogVisible = false |
| | | } |
| | | |
| | | const getList = async () => { |
| | | loading.value = true; |
| | | const res = await getExpertsList(state.queryParams) |
| | | loading.value = true |
| | | const res = await getExpertList(data.queryParams) |
| | | if(res.code == 200){ |
| | | state.expertList = res.data.list |
| | | state.total = res.data.total |
| | | data.dataList = res.data.list.map(item => { |
| | | return{ |
| | | ...item, |
| | | socialAttach: item.socialAttach.map(s => { return import.meta.env.VITE_APP_BASE_API + '/' + s.path}), |
| | | medicalAttach: item.medicalAttach.map(s => { return import.meta.env.VITE_APP_BASE_API + '/' + s.path}), |
| | | salaryAttach: item.salaryAttach.map(s => { return import.meta.env.VITE_APP_BASE_API + '/' + s.path}) |
| | | } |
| | | }) |
| | | console.log('RES',data.dataList) |
| | | data.total = res.data.total |
| | | }else{ |
| | | ElMessage.warning(res.msg) |
| | | ElMessage.warning(res.message) |
| | | } |
| | | loading.value = false; |
| | | loading.value = false |
| | | } |
| | | |
| | | const getTypes = async()=> { |
| | | const res = await getExpertTypes() |
| | | if(res.code == 200){ |
| | | state.expertTypes = res.data |
| | | const getMajor = async () => { |
| | | const queryParams = { |
| | | pageNum: 1, |
| | | pageSize: 50, |
| | | dictType: 'sys_major_orientation' |
| | | } |
| | | const res = await getDictList(queryParams); |
| | | if(res.code === 200){ |
| | | data.majorList = res.data.list |
| | | }else{ |
| | | ElMessage.warning(res.msg) |
| | | ElMessage.warning(res.message) |
| | | } |
| | | } |
| | | |
| | |
| | | }) |
| | | |
| | | const handleSelectionChange = (val) => { |
| | | state.selected = val |
| | | data.selected = val |
| | | } |
| | | |
| | | const resetQuery=()=> { |
| | | state.queryParams = { |
| | | const search = ()=>{ |
| | | data.queryParams.pageNum = 1 |
| | | getList() |
| | | } |
| | | |
| | | const research = ()=>{ |
| | | data.queryParams = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | state: 2, |
| | | bigClassify: null, |
| | | smallClassify: null, |
| | | dutyStatus: null, |
| | | params: { |
| | | startTime: '', |
| | | endTime: '' |
| | | } |
| | | }; |
| | | state.classiFy = [] |
| | | state.searchTime = [] |
| | | handleQuery() |
| | | } |
| | | |
| | | const handleChange=(value)=> { |
| | | if(!value){ |
| | | data.classiFy = [] |
| | | data.queryParams.bigClassify = "" |
| | | data.queryParams.smallClassify = "" |
| | | expertType: "", |
| | | name: '', |
| | | phone: '', |
| | | level: '', |
| | | major: null, |
| | | post: '' |
| | | } |
| | | } |
| | | const changeTime=(value)=>{ |
| | | if(!value){ |
| | | data.queryParams.params.endTime = "" |
| | | data.queryParams.params.startTime = "" |
| | | } |
| | | } |
| | | |
| | | const findNodeById = (data,value)=> { |
| | | for (const node of data) { |
| | | if (node.id === value) { |
| | | return node.classifyName; |
| | | } |
| | | if (node.children) { |
| | | const foundNode = findNodeById(node.children, value); |
| | | if (foundNode) { |
| | | return foundNode; |
| | | } |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | const handleClose = () => { |
| | | dialogVisible.value = false; |
| | | getList() |
| | | } |
| | | |
| | | defineExpose({ |
对比新文件 |
| | |
| | | <template> |
| | | <el-dialog |
| | | v-model="state.mapLocationVisible" |
| | | append-to-body |
| | | :close-on-click-modal="false" |
| | | width="75%" |
| | | :title="state.title" |
| | | > |
| | | <div class="mapLocation_head"> |
| | | <div> |
| | | <el-alert |
| | | title="点击地点获取经纬度信息" |
| | | type="info" |
| | | :closable="false" |
| | | > |
| | | </el-alert> |
| | | </div> |
| | | <div class="mapLocation_latlng"> |
| | | <span>经度:</span> |
| | | <el-input class="mapLocation_latlng_input" id="lng" v-model="state.longitude"></el-input> |
| | | </div> |
| | | <div class="mapLocation_latlng"> |
| | | <span>纬度:</span> |
| | | <el-input class="mapLocation_latlng_input" id="lat" v-model="state.latitude"></el-input> |
| | | </div> |
| | | </div> |
| | | <div class="mapLocation_body"> |
| | | <baidu-map class="map" ak="BkZdiHBj9aGrMdVFM48r2njNiMzsekga" v="3.0" type="API" :center="state.center" :zoom="15" scroll-wheel-zoom @ready="initMap" @click="getPosition"> |
| | | <bm-marker :position="{lng: state.longitude, lat: state.latitude}" :dragging="true" animation="BMAP_ANIMATION_BOUNCE"> |
| | | <bm-label content="选择地点" :labelStyle="{color: 'red', fontSize : '24px'}" :offset="{width: -35, height: 30}"/> |
| | | </bm-marker> |
| | | </baidu-map> |
| | | </div> |
| | | <div align="right" style="margin-top: 10px"> |
| | | <el-button @click="state.mapLocationVisible = false">取消</el-button> |
| | | <el-button type="primary" @click="submitLatLng()">确认</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import {ref, onMounted, reactive, toRefs, defineComponent,defineExpose,defineEmits} from 'vue'; |
| | | import { BaiduMap,BmMarker } from 'vue-baidu-map-3x' |
| | | const state = reactive({ |
| | | title: '', |
| | | longitude: '', |
| | | latitude: '', |
| | | mapLocationVisible: false, |
| | | center: { |
| | | lng: '116.404', |
| | | lat: '39.915' |
| | | } |
| | | }) |
| | | |
| | | const emit = defineEmits(['giveLatLng']) |
| | | |
| | | onMounted(() => { |
| | | // ...(mounted钩子中的代码不变) |
| | | }); |
| | | const map = reactive({}) |
| | | |
| | | const getPosition = ({type, target, point, pixel, overlay})=>{ |
| | | state.longitude = point.lng |
| | | state.latitude = point.lat |
| | | } |
| | | |
| | | const openMapLocation=(longitude,latitude)=>{ |
| | | state.longitude = longitude |
| | | state.latitude = latitude |
| | | state.mapLocationVisible = true |
| | | } |
| | | |
| | | const submitLatLng=()=>{ |
| | | state.mapLocationVisible = false |
| | | emit('giveLatLng',state.longitude,state.latitude); |
| | | } |
| | | |
| | | const initMap=()=>{ |
| | | |
| | | } |
| | | |
| | | defineExpose({ |
| | | openMapLocation |
| | | }) |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .map { |
| | | width: 100%; |
| | | height: 500px; |
| | | |
| | | :deep(.BMap_cpyCtrl){ |
| | | display: none!important; |
| | | visibility: hidden!important; |
| | | } |
| | | |
| | | :deep(.anchorBL) { |
| | | display: none!important; |
| | | visibility: hidden!important; |
| | | } |
| | | } |
| | | .mapLocation_head{ |
| | | width:100%; |
| | | height:100px; |
| | | } |
| | | .mapLocation_body{ |
| | | width:100%; |
| | | height:500px |
| | | } |
| | | .mapLocation_latlng{ |
| | | padding-top:10px; |
| | | display:inline-block; |
| | | margin-right: 20px; |
| | | } |
| | | .mapLocation_latlng_input{ |
| | | width:250px; |
| | | } |
| | | </style> |
| | |
| | | size="large" |
| | | maxlength="30" |
| | | show-word-limit |
| | | placeholder="请输入风险评估人意见" |
| | | placeholder="风险评估人意见" |
| | | > |
| | | </el-input> |
| | | </el-form-item> |
| | |
| | | show-word-limit |
| | | v-model="state.formData.agencyOpinon" |
| | | size="large" |
| | | placeholder="请输入机构评价负责人意见" |
| | | placeholder="机构评价负责人意见" |
| | | > |
| | | </el-input> |
| | | </el-form-item> |
| | |
| | | data.id = val; |
| | | data.project.id = val; |
| | | delete data.project.area; |
| | | data.isInBusiness = state.tableData[0].status === 1; |
| | | data.isSatisfyNeed = state.tableData[1].status === 1; |
| | | data.isNeedExpert = state.tableData[2].status === 1; |
| | | data.isFinishReport = state.tableData[3].status === 1; |
| | | data.isAcceptChargess = state.tableData[4].status === 1; |
| | | data.isFeasibility = state.tableData[5].status === 1; |
| | | console.log('data', data) |
| | | data.isInBusiness = state.tableData[0].status === 1 |
| | | data.isSatisfyNeed = state.tableData[1].status === 1 |
| | | data.isNeedExpert = state.tableData[2].status === 1 |
| | | data.isFinishReport = state.tableData[3].status === 1 |
| | | data.isAcceptChargess = state.tableData[4].status === 1 |
| | | data.isFeasibility = state.tableData[5].status === 1 |
| | | const res = await editRisk(data); |
| | | if (res.code == 200) { |
| | | ElMessage.success('变更成功') |
对比新文件 |
| | |
| | | <template> |
| | | <div class="riskBox"> |
| | | <el-form ref="formRef" :model="state.formData" :rules="state.rules" class="register-form" label-position="top"> |
| | | <el-row :gutter="30"> |
| | | <el-col :span="6"> |
| | | <el-form-item prop="investigationDate" label="现场勘验时间"> |
| | | <el-date-picker |
| | | style="width: 100%" |
| | | v-model="state.formData.investigationPlanDate" |
| | | type="date" |
| | | value-format="YYYY-MM-DD 00:00:00" |
| | | placeholder="选择日期" |
| | | size="large" |
| | | /> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item prop="investigationDate" label="现场勘验位置"> |
| | | <el-input |
| | | v-model="state.formData.location" |
| | | size="large" |
| | | placeholder="请填写现场勘验位置" |
| | | > |
| | | <template #append> |
| | | <el-button :icon="Search" @click="openLocation"/> |
| | | </template> |
| | | </el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="6"> |
| | | <el-form-item prop="isSafetyCheck" label="编制现场安全检查表"> |
| | | <el-radio-group v-model="state.formData.isSafetyCheck" size="large"> |
| | | <el-radio :label="true" size="large">是</el-radio> |
| | | <el-radio :label="false" size="large">否</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | <!-- <el-row :gutter="30">--> |
| | | <!-- <el-col :span="6">--> |
| | | <!-- <el-form-item label="附件上传">--> |
| | | <!-- <el-upload--> |
| | | <!-- accept="image/*"--> |
| | | <!-- :action="state.uploadUrl"--> |
| | | <!-- :headers="state.header"--> |
| | | <!-- method="post"--> |
| | | <!-- :on-success="(response, file, fileList) => handleAvatarSuccess(response, file, fileList, 1)"--> |
| | | <!-- :on-preview="handlePictureCardPreview"--> |
| | | <!-- v-model:file-list="state.socialList"--> |
| | | <!-- list-type="picture-card"--> |
| | | <!-- :before-upload="picSize"--> |
| | | <!-- :on-remove="(file, file_list)=>{handleRemove(file, file_list, 1)}"--> |
| | | <!-- >--> |
| | | <!-- <el-icon><Plus /></el-icon>--> |
| | | <!-- <template #tip>--> |
| | | <!-- <div class="el-upload__tip">上传jpg/png图片尺寸小于5M</div>--> |
| | | <!-- </template>--> |
| | | <!-- </el-upload>--> |
| | | <!-- </el-form-item>--> |
| | | <!-- </el-col>--> |
| | | <!-- </el-row>--> |
| | | <el-form-item prop="recordData" label="现场勘验记录"> |
| | | <el-input |
| | | v-model="state.formData.recordData" |
| | | :autosize="{ minRows: 6 }" |
| | | maxlength="200" |
| | | show-word-limit |
| | | type="textarea"> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item label="企业陪同照片"> |
| | | |
| | | </el-form-item> |
| | | </el-form> |
| | | <map-location ref="mapLocationRef" @giveLatLng="achieveLatLng"></map-location> |
| | | </div> |
| | | </template> |
| | | <script setup> |
| | | |
| | | import {defineEmits, onMounted, reactive, ref} from "vue" |
| | | import {ElMessage} from "element-plus" |
| | | import {Search} from '@element-plus/icons-vue' |
| | | import {addRisk, editRisk, getRiskDetail} from "@/api/projectManage/riskAnalysis" |
| | | import Cookies from "js-cookie" |
| | | const emit = defineEmits(["getNextStatus"]) |
| | | import MapLocation from "./mapLocation.vue" |
| | | |
| | | const state = reactive({ |
| | | formData: { |
| | | id: null, |
| | | projectId: null, |
| | | investigationDate: '', |
| | | location: '', |
| | | isSafetyCheck: null, |
| | | recordData: '' |
| | | }, |
| | | planPersons: [], |
| | | rules: { |
| | | recordData: [{required: true, message: '请填写现场勘验记录', trigger: 'blur'}] |
| | | } |
| | | }) |
| | | |
| | | const isAmin = ref(false) |
| | | const formRef = ref() |
| | | const mapLocationRef = ref() |
| | | onMounted(() => { |
| | | const userInfo = JSON.parse(Cookies.get('userInfo')) |
| | | if(userInfo.identity === 0){ |
| | | isAmin.value = true; |
| | | } |
| | | }); |
| | | |
| | | const riskOpen = async (type,val) => { |
| | | console.log("type",type,val) |
| | | if(type === 'detail' || type === 'edit' ){ |
| | | const res = await getRiskDetail({projectId: val}); |
| | | if(res.code == 200){ |
| | | state.formData = res.data; |
| | | state.formData.project.business = parseInt(res.data.project.business); |
| | | state.formData.project.area = [res.data.project.province,res.data.project.city]; |
| | | }else { |
| | | ElMessage.warning(res.message) |
| | | } |
| | | } |
| | | if(type === 'add' || type === 'clickEdit') { |
| | | const valid = await formRef.value.validate(); |
| | | if(valid){ |
| | | if (isAmin.value) { |
| | | ElMessage.warning("当前用户暂无权限"); |
| | | return; |
| | | } |
| | | if(type === 'add'){ |
| | | const {projectId, ...data} = JSON.parse(JSON.stringify(state.formData)) |
| | | const res = await addRisk(data); |
| | | if (res.code == 200) { |
| | | ElMessage.success('保存成功') |
| | | formRef.value.clearValidate(); |
| | | emit('getNextStatus', res.data); |
| | | |
| | | } else { |
| | | ElMessage.warning(res.message) |
| | | } |
| | | }else if(type === 'clickEdit'){ |
| | | const { ...data} = JSON.parse(JSON.stringify(state.formData)) |
| | | const res = await editRisk(data); |
| | | if (res.code == 200) { |
| | | ElMessage.success('变更成功') |
| | | formRef.value.clearValidate(); |
| | | // emit('getNextStatus', data.project.id); |
| | | } else { |
| | | ElMessage.warning(res.message) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | const openLocation = ()=>{ |
| | | mapLocationRef.value.openMapLocation(state.formData.location.split(',')[0],state.formData.location.split(',')[1]) |
| | | } |
| | | |
| | | const achieveLatLng=(lng,lat)=>{ |
| | | state.formData.location = lng + ',' + lat |
| | | } |
| | | |
| | | defineExpose({ |
| | | riskOpen |
| | | }); |
| | | |
| | | |
| | | </script> |
| | | <style scoped lang="scss"> |
| | | .riskBox{ |
| | | :deep(.el-form .el-form-item__label) { |
| | | font-size: 15px; |
| | | } |
| | | } |
| | | |
| | | </style> |
| | |
| | | <div class="card-header">{{selectedObj.id}}- {{selectedObj.name}}</div> |
| | | <div class="card-content"> |
| | | <div :style="'height:' + middleContentHeight + 'px'" style="overflow-y: scroll;"> |
| | | <rickAnalysis ref="riskRef" v-if="selectedObj.id === 1" @getNextStatus="getNextStatus"></rickAnalysis> |
| | | <rickAnalysis ref="riskRef" v-if="selectedObj.id === 2" @getNextStatus="getNextStatus"></rickAnalysis> |
| | | <contract-manage ref="contractMngRef" v-if="selectedObj.id === 2" @getNextStatus="getNextStatus"></contract-manage> |
| | | <evaluate-task-notice ref="evaluteRef" v-if="selectedObj.id === 3" @getNextStatus="getNextStatus"></evaluate-task-notice> |
| | | <evaluate-plan ref="evalPlanRef" v-if="selectedObj.id === 4" @getNextStatus="getNextStatus"></evaluate-plan> |
| | | <employ-notice-record ref="employNoticeRcdRef" v-if="selectedObj.id === 5" @getNextStatus="getNextStatus"></employ-notice-record> |
| | | <site-check-rcd ref="siteCheckRcdRef" v-if="selectedObj.id === 6" @getNextStatus="getNextStatus"></site-check-rcd> |
| | | </div> |
| | | <div style="display: flex;align-items: center;justify-content: center;margin-bottom: -20px"> |
| | | <el-button type="primary" v-if="selectedObj.id !== 1" style="width: 80px" @click="back">上一步</el-button> |
| | |
| | | </el-card> |
| | | </div> |
| | | <div class="bottom"> |
| | | <el-button type="primary" v-if="selectedObj.id === 1" plain @click="downloadFile"> |
| | | <el-button type="primary" v-if="selectedObj.id === 3" plain @click="downloadFile"> |
| | | 评价任务通知书<el-icon class="el-icon--right"><Download /></el-icon> |
| | | </el-button> |
| | | </div> |
| | |
| | | import status2Png from "@/assets/images/status2.png" |
| | | import itemStatus2Png from "@/assets/images/itemStatus2.png" |
| | | import { useRoute } from 'vue-router' |
| | | import {getProjectStatus} from "@/api/projectManage/project"; |
| | | import {getProjectStatus} from "@/api/projectManage/project" |
| | | import ContractManage from "./components/contractManage"; |
| | | import EvaluateTaskNotice from "./components/evaluateTaskNotice"; |
| | | import EvaluateTaskNotice from "./components/evaluateTaskNotice" |
| | | import EvaluatePlan from "./components/evaluatePlan"; |
| | | import EmployNoticeRecord from "./components/employNoticeRecord" |
| | | import SiteCheckRcd from "./components/siteCheckRcd" |
| | | |
| | | const route = useRoute() |
| | | const menuList = ref([ |
| | |
| | | id: 11, |
| | | name: '过程控制负责人审核', |
| | | status: 0 |
| | | }, |
| | | |
| | | } |
| | | ] |
| | | }, |
| | | { |
| | |
| | | const riskRef = ref(); |
| | | const contractMngRef = ref() |
| | | const evaluteRef = ref() |
| | | const evalPlanRef = ref() |
| | | const employNoticeRcdRef = ref() |
| | | const siteCheckRcdRef = ref() |
| | | const isShowMenu = ref(false); |
| | | const selectedObj = ref({}) |
| | | const middleHeight = ref(0); |
| | |
| | | |
| | | } |
| | | const clickEdit = () => { |
| | | |
| | | goRouter(selectedObj.value.id,'clickEdit') |
| | | } |
| | | const getNextStatus = async (val) => { |
| | |
| | | <!-- <el-input v-model.trim="state.form.post" :maxlength="11" ></el-input>--> |
| | | <el-select v-model="state.form.post" class="m-2" style="width: 100%" placeholder="请选择职务" popper-class="more_select_dropdown" > |
| | | <el-option |
| | | v-for="item in state.postList" |
| | | v-for="item in props.postList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.name" |
| | |
| | | <el-form-item label="专业方向:" prop="majorShow" v-if="state.title !== '修改密码'" > |
| | | <el-select v-model="state.form.majorShow" value-key="id" class="m-2" style="width: 100%" multiple placeholder="请选择专业方向" popper-class="more_select_dropdown" @change="selectChange"> |
| | | <el-option |
| | | v-for="item in state.majorList" |
| | | v-for="item in props.majorList" |
| | | :key="item.id" |
| | | :label="item.label" |
| | | :value="item" |
| | |
| | | <el-form-item label="评价师等级:" prop="level" v-if="state.title !== '修改密码'"> |
| | | <el-select v-model="state.form.level" class="m-2" style="width: 100%" placeholder="请选择评价师等级" popper-class="more_select_dropdown" > |
| | | <el-option |
| | | v-for="item in state.levelList" |
| | | v-for="item in props.levelList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.name" |
| | |
| | | </div> |
| | | </template> |
| | | <script setup> |
| | | import {reactive, ref, toRefs, defineEmits, onMounted, nextTick} from 'vue' |
| | | import {reactive, ref, toRefs, defineEmits, defineProps, onMounted, nextTick} from 'vue' |
| | | import { View } from "@element-plus/icons-vue"; |
| | | import {ElMessage} from "element-plus"; |
| | | import {verifyPhone, verifyPwd, verifyUsername} from "../../../../../utils/validate"; |
| | |
| | | import {resetUserPwd} from "../../../../../api/sysUsers"; |
| | | import {getToken} from "@/utils/auth"; |
| | | import {getInsitutionList} from "@/api/backManage/insitution"; |
| | | import {getDictList} from "@/api/backManage/evaluate"; |
| | | |
| | | const emit = defineEmits(["getList"]); |
| | | const props = defineProps(['majorList','levelList','postList']) |
| | | const dialogVisible = ref(false) |
| | | const superRef = ref(null) |
| | | |
| | |
| | | dialogImageUrl: '', |
| | | dialogImg: false, |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | postList: [ |
| | | { |
| | | id: '1', |
| | | name: '法人' |
| | | }, |
| | | { |
| | | id: '2', |
| | | name: '过程控制负责人' |
| | | }, |
| | | { |
| | | id: '3', |
| | | name: '机构负责人' |
| | | }, |
| | | { |
| | | id: '4', |
| | | name: '技术负责人' |
| | | }, |
| | | { |
| | | id: '5', |
| | | name: '员工' |
| | | }, |
| | | ], |
| | | majorList: [], |
| | | levelList: [ |
| | | { |
| | | id: '1', |
| | | name: '一级' |
| | | }, |
| | | { |
| | | id: '2', |
| | | name: '二级' |
| | | }, |
| | | { |
| | | id: '3', |
| | | name: '三级' |
| | | }, |
| | | { |
| | | id: '4', |
| | | name: '其他' |
| | | }, |
| | | ] |
| | | pageSize: 10 |
| | | }) |
| | | |
| | | onMounted(()=>{ |
| | | getAgency() |
| | | getMajor() |
| | | }) |
| | | |
| | | const openDialog = async (type, value) => { |
| | |
| | | ElMessage.warning(res.message) |
| | | } |
| | | } |
| | | const getMajor = async () => { |
| | | const queryParams = { |
| | | pageNum: 1, |
| | | pageSize: 50, |
| | | dictType: 'sys_major_orientation' |
| | | } |
| | | const res = await getDictList(queryParams); |
| | | if(res.code === 200){ |
| | | state.majorList = res.data.list |
| | | }else{ |
| | | ElMessage.warning(res.message) |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | //触底函数 |
| | |
| | | @click="openDialog('add',{})" |
| | | >新增</el-button> |
| | | </div> |
| | | <div style="margin-top: 15px;margin-bottom: 15px;"> |
| | | <el-radio-group v-model="queryParams.expertType" @change="changeType"> |
| | | <div style="margin-top: 15px;margin-bottom: 15px"> |
| | | <el-radio-group v-model="queryParams.expertType"> |
| | | <el-radio-button label="">全部</el-radio-button> |
| | | <el-radio-button label="1">安全评价</el-radio-button> |
| | | <el-radio-button label="2">检验检测</el-radio-button> |
| | | </el-radio-group> |
| | | </div> |
| | | <div style="margin-bottom: 15px; display: flex;align-items: center"> |
| | | <el-input |
| | | v-model="queryParams.name" |
| | | placeholder="姓名" |
| | | style="width: 220px;margin-right: 12px" |
| | | /> |
| | | <el-input |
| | | v-model="queryParams.phone" |
| | | placeholder="手机号" |
| | | style="width: 220px;margin-right: 12px" |
| | | /> |
| | | <el-select v-model="queryParams.level" style="width: 220px;margin-right: 12px" placeholder="评价师等级" > |
| | | <el-option |
| | | v-for="item in levelList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.name" |
| | | /> |
| | | </el-select> |
| | | <el-select v-model="queryParams.major" value-key="id" style="width: 220px;margin-right: 12px" placeholder="专业方向"> |
| | | <el-option |
| | | v-for="item in majorList" |
| | | :key="item.id" |
| | | :label="item.label" |
| | | :value="item.id" |
| | | /> |
| | | </el-select> |
| | | <el-select v-model="queryParams.post" style="width: 220px;margin-right: 12px" placeholder="请选择职务"> |
| | | <el-option |
| | | v-for="item in postList" |
| | | :key="item.id" |
| | | :label="item.name" |
| | | :value="item.name" |
| | | /> |
| | | </el-select> |
| | | <el-button type="primary" icon="Filter" @click="search">查询</el-button> |
| | | <el-button type="primary" icon="Filter" @click="research">重置</el-button> |
| | | </div> |
| | | |
| | | <!-- 表格数据 --> |
| | |
| | | v-model:limit="queryParams.pageSize" |
| | | @pagination="getList" |
| | | /> |
| | | <expert-dialog ref="expertRef" @getList="getList"></expert-dialog> |
| | | <expert-dialog ref="expertRef" @getList="getList" :majorList="majorList" :levelList="levelList" :postList="postList"></expert-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import {getCurrentInstance, onMounted, reactive, ref, toRefs} from "vue"; |
| | | import expertDialog from "./components/expertDialog.vue" |
| | | import {getDictList} from "@/api/backManage/evaluate"; |
| | | import {ElMessage, ElMessageBox} from "element-plus"; |
| | | import Cookies from "js-cookie"; |
| | | import {delMonitor, getExpertList, getMonitorList} from "@/api/sysUsers"; |
| | |
| | | const expertRef = ref(); |
| | | const data = reactive({ |
| | | queryParams: { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | expertType: "" |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | expertType: "", |
| | | name: '', |
| | | phone: '', |
| | | level: '', |
| | | major: null, |
| | | post: '' |
| | | }, |
| | | total: 0, |
| | | dataList: [] |
| | | |
| | | |
| | | dataList: [], |
| | | majorList: [], |
| | | levelList: [ |
| | | { |
| | | id: '1', |
| | | name: '一级' |
| | | }, |
| | | { |
| | | id: '2', |
| | | name: '二级' |
| | | }, |
| | | { |
| | | id: '3', |
| | | name: '三级' |
| | | }, |
| | | { |
| | | id: '4', |
| | | name: '其他' |
| | | }, |
| | | ], |
| | | postList: [ |
| | | { |
| | | id: '1', |
| | | name: '法人' |
| | | }, |
| | | { |
| | | id: '2', |
| | | name: '过程控制负责人' |
| | | }, |
| | | { |
| | | id: '3', |
| | | name: '机构负责人' |
| | | }, |
| | | { |
| | | id: '4', |
| | | name: '技术负责人' |
| | | }, |
| | | { |
| | | id: '5', |
| | | name: '员工' |
| | | }, |
| | | ] |
| | | }); |
| | | |
| | | const { queryParams, total, dataList } = toRefs(data); |
| | | const { queryParams, total, dataList, majorList, levelList, postList } = toRefs(data); |
| | | onMounted(()=>{ |
| | | getList() |
| | | getMajor() |
| | | }) |
| | | const getList = async () => { |
| | | loading.value = true |
| | |
| | | loading.value = false |
| | | } |
| | | |
| | | const getMajor = async () => { |
| | | const queryParams = { |
| | | pageNum: 1, |
| | | pageSize: 50, |
| | | dictType: 'sys_major_orientation' |
| | | } |
| | | const res = await getDictList(queryParams); |
| | | if(res.code === 200){ |
| | | data.majorList = res.data.list |
| | | }else{ |
| | | ElMessage.warning(res.message) |
| | | } |
| | | } |
| | | |
| | | const search = ()=>{ |
| | | data.queryParams.pageNum = 1 |
| | | getList() |
| | | } |
| | | |
| | | const research = ()=>{ |
| | | data.queryParams = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | expertType: "", |
| | | name: '', |
| | | phone: '', |
| | | level: '', |
| | | major: null, |
| | | post: '' |
| | | } |
| | | getList() |
| | | } |
| | | |
| | | const openDialog = (type, value) => { |
| | | expertRef.value.openDialog(type, value); |
| | | } |
| | | const changeType = (val) => { |
| | | console.log("val", val) |
| | | queryParams.expertType = val; |
| | | queryParams.pageNum = 1; |
| | | getList(); |
| | | } |
| | | |
| | | /** 重置新增的表单以及其他数据 */ |