From 592c1750b148874737cdfba4b22b6229f9805fe6 Mon Sep 17 00:00:00 2001 From: zhouwx <1175765986@qq.com> Date: 星期三, 02 七月 2025 14:55:27 +0800 Subject: [PATCH] 新增 --- src/views/build/conpanyFunctionConsult/qualityObjectives/objective/components/objectiveDialog.vue | 348 +++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 272 insertions(+), 76 deletions(-) diff --git a/src/views/build/conpanyFunctionConsult/qualityObjectives/objective/components/objectiveDialog.vue b/src/views/build/conpanyFunctionConsult/qualityObjectives/objective/components/objectiveDialog.vue index e8d2b7d..7b51a39 100644 --- a/src/views/build/conpanyFunctionConsult/qualityObjectives/objective/components/objectiveDialog.vue +++ b/src/views/build/conpanyFunctionConsult/qualityObjectives/objective/components/objectiveDialog.vue @@ -8,37 +8,71 @@ :close-on-press-escape="false" :close-on-click-modal="false" > - <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-width="120px" > + <el-form :model="state.form" size="default" ref="busRef" :rules="state.rules" label-width="120px" > + <el-row :gutter="24"> + <el-col :span="24"> + <el-form-item label="企业名称:" prop="companyName" v-if="state.isAdmin"> + <el-select + v-model="state.form.companyName" + filterable + remote + :disabled="title == '查看' || title == '编辑' || !state.isAdmin" + @change="selectValueCom" + reserve-keyword + placeholder="请输入企业名称" + remote-show-suffix + :remote-method="getCompanyList" + style="width: 100%" + > + <el-option + v-for="item in state.companyList" + :key="item.id" + :label="item.name" + :value="item.name" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> <el-row :gutter="24"> <el-col :span="12"> - <el-form-item label="年份:" prop="creditCode" > + <el-form-item label="年份:" prop="year" > +<!-- <el-input v-model="state.form.year" placeholder="请输入年份"></el-input>--> <el-select + :disabled="title === '查看'" v-model="state.form.year" + filterable + allow-create + default-first-option + :reserve-keyword="false" placeholder="请选择年份" + @change="handleChangeNum" style="width: 100%" > <el-option v-for="item in state.yearList" :key="item.value" :label="item.label" - :value="item.value" + :value="item.label" /> </el-select> </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="序号:" prop="creditCode" > - <el-input v-model="state.form.code" placeholder="请输入序号" style="width: 100%"></el-input> + <el-form-item label="序号:" prop="num" > + <el-input :disabled="title === '查看'" v-model="state.form.num" placeholder="请输入序号" style="width: 100%"></el-input> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="12"> - <el-form-item label="质量目标级别:" prop="creditCode" > + <el-form-item label="质量目标级别:" prop="type" > <el-select - v-model="state.form.level" + :disabled="title === '查看'" + v-model="state.form.type" placeholder="请选择质量目标级别" style="width: 100%" + @change="changeLevel" > <el-option v-for="item in state.levelList" @@ -50,20 +84,22 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="公司名称:" prop="creditCode" v-if="state.form.level == 1"> - <el-input v-model="state.form.companyName" disabled></el-input> + <el-form-item label="公司名称:" prop="creditCode" v-if="state.form.type == 1"> + <el-input v-model="state.form.companyName" disabled></el-input> </el-form-item> - <el-form-item label="部门名称:" prop="creditCode" v-else-if="state.form.level == 2"> + <el-form-item label="部门名称:" prop="departId" v-else-if="state.form.type == 2"> +<!-- <el-cascader v-model="state.form.departId" :options="state.deptList" />--> <el-select - v-model="state.form.dept" + :disabled="title === '查看'" + v-model="state.form.departId" placeholder="请选择部门" style="width: 240px" > <el-option v-for="item in state.deptList" - :key="item.value" - :label="item.label" - :value="item.value" + :key="item.deptId" + :label="item.deptName" + :value="item.deptId" /> </el-select> </el-form-item> @@ -71,24 +107,25 @@ </el-row> <el-row :gutter="24"> <el-col :span="24"> - <el-form-item :label= "state.form.level==1 ? '公司质量目标' :state.form.level==2 ?'部门质量目标':'质量目标'" > - <div style="display: flex;width: 100%"> - <el-table :data="state.form.objectList" :border="true"> + <el-form-item required :label= "state.form.type==1 ? '公司质量目标' :state.form.type==2 ?'部门质量目标':'质量目标'" > + <div style="display: flex;width: 100%;margin-top: 5px"> + <el-table :data="state.form.qualityTargets" :border="true"> <el-table-column type="index" label="序号" width="80" align="center"></el-table-column> <el-table-column label="目标" align="center" > <template #default="{row,$index}"> - <el-form-item :prop="'objectList.' + '[' + $index + ']' + '.objName'" :rules="state.rules.objName"> - <el-input v-model.number="row.objName" placeholder="请输入质量目标"></el-input> + <el-form-item :prop="'qualityTargets.' + '[' + $index + ']' + '.message'" :rules="state.rules.message"> + <el-input :disabled="title === '查看'" type="textarea" v-model="row.message" placeholder="请输入质量目标"></el-input> </el-form-item> </template> </el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width" > + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" v-if="title !== '查看'" > <template #default="scope" > <el-button link type="danger" @click="handleDelete(scope.row)" >删除</el-button> </template> </el-table-column> </el-table> <el-button + :disabled="title === '查看'" style="margin-left: 20px" type="primary" @click="addObject" @@ -100,15 +137,16 @@ <el-row :gutter="24"> <el-col :span="24"> <el-form-item label="目标测量方法:" prop="method" > - <el-input v-model="state.form.method" :rows="4" type="textarea" placeholder="请输入目标测量方法"/> + <el-input :disabled="title === '查看'" v-model="state.form.method" :rows="4" type="textarea" placeholder="请输入目标测量方法"/> </el-form-item> </el-col> </el-row> - <el-row :gutter="24" v-if="state.form.level == 2"> + <el-row :gutter="24" v-if="state.form.type == 2"> <el-col :span="12"> - <el-form-item label="编制:" prop="creditCode" > + <el-form-item label="编制:" prop="compilationName" > <el-select - v-model="state.form.peopleName" + :disabled="title === '查看'" + v-model="state.form.compilationName" filterable remote @change="selectValue" @@ -128,9 +166,10 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="日期:" prop="creditCode" > + <el-form-item label="日期:" prop="compilationTime" > <el-date-picker - v-model="value1" + :disabled="title === '查看'" + v-model="state.form.compilationTime" type="date" placeholder="请选择日期" /> @@ -139,12 +178,13 @@ </el-row> <el-row :gutter="24" > <el-col :span="12"> - <el-form-item label="质量管理部:" prop="creditCode" > + <el-form-item label="质量管理部:" prop="qualityName" > <el-select - v-model="state.form.peopleName2" + :disabled="title === '查看'" + v-model="state.form.qualityName" filterable remote - @change="selectValue" + @change="selectValue1" reserve-keyword placeholder="请输入人员名称" remote-show-suffix @@ -161,9 +201,10 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="日期:" prop="creditCode" > + <el-form-item label="日期:" prop="qualityTime" > <el-date-picker - v-model="value1" + :disabled="title === '查看'" + v-model="state.form.qualityTime" type="date" placeholder="请选择日期" /> @@ -172,12 +213,13 @@ </el-row> <el-row :gutter="24"> <el-col :span="12"> - <el-form-item label="公司分管领导:" prop="creditCode" > + <el-form-item label="公司分管领导:" prop="leadName" > <el-select - v-model="state.form.peopleName3" + :disabled="title === '查看'" + v-model="state.form.leadName" filterable remote - @change="selectValue" + @change="selectValue2" reserve-keyword placeholder="请输入人员名称" remote-show-suffix @@ -194,9 +236,10 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item label="日期:" prop="creditCode" > + <el-form-item label="日期:" prop="leadTime" > <el-date-picker - v-model="value1" + :disabled="title === '查看'" + v-model="state.form.leadTime" type="date" placeholder="请选择日期" /> @@ -204,7 +247,7 @@ </el-col> </el-row> </el-form> - <template #footer> + <template #footer v-if="title !== '查看'"> <span class="dialog-footer"> <el-button @click="handleClose" size="default">取 消</el-button> <el-button type="primary" @click="onSubmit" size="default" v-preReClick>确认</el-button> @@ -219,6 +262,7 @@ import {getCompany} from "@/api/onlineEducation/company"; import {ElMessage} from "element-plus"; import {getUser} from "@/api/onlineEducation/user"; +import {addObjective, editObject, getDept} from "@/api/qualityObjectives/object"; const dialogVisible = ref(false); const title = ref(""); @@ -229,28 +273,59 @@ const state = reactive({ form: { id: '', - objectList:[], + year: '', + num: '', + type: '', + departId: '', + method: '', + compilationBy:'', + compilationTime:'', + qualityBy: '', + qualityTime:'', + leadBy:'', + leadTime: '', + qualityTargets:[], }, rules: { - objName: [ - {required: true, message: "质量目标不能为空", trigger: "blur"} - ], + companyName: [{ required: true, message: '请选择企业', trigger: 'blur' }], + year: [{ required: true, message: '请输入年份', trigger: 'blur' }], + num: [{ required: true, message: '请输入序号', trigger: 'blur' }], + type: [{ required: true, message: '请选择级别', trigger: 'blur' }], + method: [{ required: true, message: '请输入目标测量方法', trigger: 'blur' }], + compilationName: [{ required: true, message: '请选择编制人员', trigger: 'blur' }], + compilationTime: [{ required: true, message: '请选择日期', trigger: 'blur' }], + qualityName: [{ required: true, message: '请选择质量管理部人员', trigger: 'blur' }], + qualityTime: [{ required: true, message: '请选择日期', trigger: 'blur' }], + leadName: [{ required: true, message: '请选择公司分管领导', trigger: 'blur' }], + leadTime: [{ required: true, message: '请选择日期', trigger: 'blur' }], + departId: [{ required: true, message: '请选择部门', trigger: 'blur' }], + objName: [{required: true, message: "质量目标不能为空", trigger: "blur"}], }, + isAdmin: false, + companyList: [], deptList: [], peopleList: [], yearList: [ { value: 1, - label: '2025年' + label: '2025' }, { value: 2, - label: '2024年' + label: '2024' }, { value: 3, - label: '2023年' + label: '2023' + }, + { + value: 4, + label: '2022' + }, + { + value: 5, + label: '2021' }, ], levelList: [ @@ -265,52 +340,78 @@ ] }) -onMounted(() => { +const openDialog = async (type, value) => { const userInfo = JSON.parse(Cookies.get('userInfo')) + state.isAdmin = userInfo.userType === 0; state.form.companyName = userInfo.companyName state.form.companyId = userInfo.companyId - -}); -const openDialog = async (type, value) => { title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看' ; - if(type === 'edit' || type === 'view') { + if(type === 'edit' || type === 'review') { state.form = JSON.parse(JSON.stringify(value)); + if(state.isAdmin){ + state.form.companyId = value.companyId + state.form.companyName = value.companyName + } } + await getDeptList() + if(state.isAdmin){ + await getCompanyList() + } + await getPeopleList() dialogVisible.value = true; } const addObject = () => { - state.form.objectList.push({}) + state.form.qualityTargets.push({}) +} +const getDeptList = async () => { + const param = { + pageNum: 1, + pageSize: 999, + companyId: state.form.companyId + } + const res = await getDept(param) + if(res.code === 200){ + state.deptList = res.data + } } const onSubmit = async () => { const valid = await busRef.value.validate(); if(valid){ if(title.value === '新增'){ console.log('sta',state.form) - // const {id, ...data} = JSON.parse(JSON.stringify(state.form)) - // const res = await addCompany(data) - // if(res.code === 200){ - // ElMessage({ - // type: 'success', - // message: '新增成功' - // }); - // }else{ - // ElMessage.warning(res.message) - // } + const {id, ...data} = JSON.parse(JSON.stringify(state.form)) + if(data.qualityTargets && data.qualityTargets.length == 0){ + ElMessage.warning('请填写质量目标') + return + } + const res = await addObjective(data) + if(res.code === 200){ + ElMessage({ + type: 'success', + message: '新增成功' + }); + }else{ + ElMessage.warning(res.message) + } emit("getList") busRef.value.clearValidate(); reset(); dialogVisible.value = false; }else if(title.value === '编辑'){ - // const {...data} = JSON.parse(JSON.stringify(state.form)) - // const res = await editCompany(data) - // if(res.code === 200){ - // ElMessage({ - // type: 'success', - // message: '编辑成功' - // }); - // }else{ - // ElMessage.warning(res.message) - // } + const {...data} = JSON.parse(JSON.stringify(state.form)) + if(data.qualityTargets && data.qualityTargets.length == 0){ + ElMessage.warning('请填写质量目标') + return + } + const res = await editObject(data) + if(res.code === 200){ + ElMessage({ + type: 'success', + message: '编辑成功' + }); + }else{ + ElMessage.warning(res.message) + } emit("getList") busRef.value.clearValidate(); reset(); @@ -329,17 +430,31 @@ const reset = () => { state.form = { id: '', - + year: '', + num: '', + type: '', + departId: '', + method: '', + compilationBy:'', + compilationTime:'', + qualityBy: '', + qualityTime:'', + leadBy:'', + leadTime: '', + qualityTargets:[], } - state.form.objectList=[] + state.peopleList = [] + state.companyList = [] + } const handleDelete = (val) => { - state.form.objectList = state.form.objectList.filter(item=> item != val) + state.form.qualityTargets = state.form.qualityTargets.filter(item=> item != val) } const getPeopleList = async (val)=>{ - if(val != ""){ + if(val){ const queryParams = { - name: val + name: val, + companyId: state.form.companyId == 0 ? null : state.form.companyId } const res = await getUser(queryParams) if (res.code == 200) { @@ -348,15 +463,96 @@ } else { ElMessage.warning(res.message) } + }else { + const queryParams = { + pageNum: 1, + pageSize: 10, + companyId: state.form.companyId == 0 ? null : state.form.companyId + } + const res = await getUser(queryParams) + if (res.code == 200) { + state.peopleList = res.data.list + + } else { + ElMessage.warning(res.message) + } + } } const selectValue = (val) => { state.peopleList.forEach(item => { if(item.name === val){ - state.form.peopleId = item.id + state.form.compilationBy = item.id } }) } +const selectValue1 = (val) => { + state.peopleList.forEach(item => { + if(item.name === val){ + state.form.qualityBy = item.id + } + }) +} +const selectValue2 = (val) => { + state.peopleList.forEach(item => { + if(item.name === val){ + state.form.leadBy = item.id + } + }) +} +const handleChangeNum = (value) => { + if (!/^\d+$/.test(value)) { // 验证是否为数字 + ElMessage.warning('只能输入数字') + state.form.year = '' // 重置选择,避免非法值被添加到options中 + } else if (!state.yearList.some(option => option.label === value)) { // 确保不是已存在的选项 + state.yearList.push({ value, label: value }); // 添加新选项(这里简单地将值和标签设为相同) + } +} +const selectValueCom = (val) => { + state.form.leadBy = null + state.form.qualityBy = null + state.form.compilationBy = null + state.form.leadName = null + state.form.qualityName = null + state.form.compilationName = null + state.form.departId = null + state.companyList.forEach(item => { + if(item.name === val){ + state.form.companyId = item.id + } + }) + getDeptList() + getPeopleList() +} +const changeLevel = () => { + // state.form.companyName = '' + state.form.departId = null +} +const getCompanyList = async (val)=>{ + if(val){ + const queryParams = { + name: val + } + const res = await getCompany(queryParams) + if (res.code == 200) { + state.companyList = res.data.list + + } else { + ElMessage.warning(res.message) + } + }else { + const queryParams = { + pageSize: 10, + pageNum: 1, + } + const res = await getCompany(queryParams) + if (res.code == 200) { + state.companyList = res.data.list + } else { + ElMessage.warning(res.message) + } + } +} defineExpose({ openDialog -- Gitblit v1.9.2