<!-- 技术能力分析报告编辑页面 --> <script name="ReviewTechnologyReportHandler" lang="ts" setup> import type { FormInstance, FormRules, UploadUserFile } from 'element-plus' import { ElLoading, ElMessage, ElMessageBox } from 'element-plus' import dayjs from 'dayjs' import { getReviewWorkList } from '@/api/quality/review/work' import { getDictByCode } from '@/api/system/dict' import useUserStore from '@/store/modules/user' import { addTechnology, detailTechnology, getTechnologyList, updateTechnology } from '@/api/quality/review/technology' const $props = defineProps({ showBase: { type: Boolean, default: true, }, }) const $route = useRoute() const $router = useRouter() const userStore = useUserStore() const ruleFormRef = ref<FormInstance>() // from组件 const ruleForm = ref({ content: '', bizLabCode: 'A', commanderName: '', commanderId: '', createTime: '', managementReviewId: '', fileName: `${new Date().getFullYear()}年实验室技术能力分析报告`, fileCode: '', recordStatus: '0', id: '', }) // 表单 const rules = ref<FormRules>({ bizLabCode: [{ required: true, message: '实验室必选', trigger: ['blur', 'change'] }], managementReviewId: [{ required: true, message: '评审工作必选', trigger: ['blur', 'change'] }], }) // 表单验证规则 onMounted(() => { if ($route.path.includes('create')) { ruleForm.value.createTime = dayjs().format('YYYY-MM-DD') ruleForm.value.commanderId = userStore.id ruleForm.value.commanderName = userStore.name // 自动填充 if ($route.query.data) { const data = JSON.parse($route.query.data as string) console.log(data, 'data') ruleForm.value.bizLabCode = data.bizLabCode ruleForm.value.managementReviewId = data.id } } else { rules.value.fileCode = [{ required: true, message: '文件编号必填', trigger: ['blur', 'change'] }] detailTechnology({ id: $route.query.id }).then((res) => { ruleForm.value = res.data nextTick(() => { ruleFormRef.value?.clearValidate() }) }) } }) // 保存 const submitId = ref('') const saveRow = (data: any) => { if ($route.path.includes('create')) { addTechnology(data).then((res) => { submitId.value = 'true' ElMessage.success('操作成功') // 获取当前条数据 getTechnologyList({ offset: 1, limit: 999, recordStatus: '0', commanderName: userStore.name }).then((res) => { const data = res.data.rows[0] detailTechnology({ id: data.id }).then((res) => { ruleForm.value = res.data }) }) }) } else { updateTechnology(data).then((res) => { ElMessage.success('操作成功') submitId.value = 'true' if ($route.query.statusName === '全部') { $router.go(-1) } }) } } const saveForm = async (formEl: FormInstance | undefined) => { if (!formEl) { return } await formEl.validate((valid, fields) => { if (valid) { ElMessageBox.confirm( '确认保存吗?', '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning', }, ).then((res) => { const data = { ...ruleForm.value, } saveRow(data) }) } }) } // 发布 const submitForm = () => { if (submitId.value) { updateTechnology({ ...ruleForm.value, recordStatus: '1' }).then((res) => { ElMessage.success('操作成功') $router.go(-1) }) } else { ElMessage.warning('请先保存') } } const labelList = ref<{ id: string; value: string; name: string }[]>()// 实验室 const workList = ref<{ id: string; value: string; name: string }[]>()// 实验室 const fetchDict = () => { // 获取实验室字典 getDictByCode('bizLabCode').then((res) => { labelList.value = res.data }) // 评审工作 getReviewWorkList({ limit: 999, offset: 1, managementStatus: '1' }).then((res) => { workList.value = res.data.rows.map((item: any) => ({ name: item.workName, value: item.id, id: item.id })) }) } fetchDict() function close() { if ($route.query.data) { $router.go(-1) } else { $router.push({ path: '/qreview/qreviewtechnology', }) } } </script> <template> <app-container style="overflow: hidden;"> <detail-page title="技术能力分析报告"> <template #btns> <el-button v-if="!($route.query.statusName === '全部' && $route.path.includes('update'))" type="primary" @click="submitForm"> 发布 </el-button> <el-button v-if="!$route.path.includes('detail')" :disabled="Boolean(submitId)" type="primary" @click="saveForm(ruleFormRef)"> 保存 </el-button> <el-button type="info" @click="close"> 关闭 </el-button> </template> </detail-page> <el-form ref="ruleFormRef" :model="ruleForm" :class="$route.path.includes('detail') ? 'isDetail' : ''" :rules="rules" label-position="right" label-width="120px" class="form" :disabled="$route.path.includes('detail')"> <detail-block title=""> <el-row :gutter="24" class="marg"> <el-col :span="6"> <el-form-item label="实验室" prop="bizLabCode"> <el-select v-model="ruleForm.bizLabCode" placeholder="实验室" class="short-input" filterable style="width: 100%;" > <el-option v-for="item in labelList" :key="item.id" :label="item.name" :value="item.value" /> </el-select> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="文件编号" prop="fileCode"> <el-input v-model.trim="ruleForm.fileCode" :placeholder="$route.path.includes('create') ? '系统自动生成' : ''" /> </el-form-item> </el-col> <el-col :span="7"> <el-form-item label="文件名称" prop="fileName" label-width="160px"> <el-input v-model.trim="ruleForm.fileName" placeholder="文件名称" /> </el-form-item> </el-col> </el-row> <el-row :gutter="24" class="marg"> <el-col :span="6"> <el-form-item label="创建人" prop="commanderName"> <el-input v-model.trim="ruleForm.commanderName" disabled placeholder="创建人" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item label="创建时间" prop="createTime"> <el-date-picker v-model="ruleForm.createTime" type="date" placeholder="创建时间" style="width: 100%;" disabled /> </el-form-item> </el-col> <el-col :span="7"> <el-form-item label="关联管理评审工作" prop="managementReviewId" label-width="160px"> <el-select v-model="ruleForm.managementReviewId" placeholder="关联管理评审工作" class="short-input" filterable style="width: 100%;" > <el-option v-for="item in workList" :key="item.id" :label="item.name" :value="item.value" /> </el-select> </el-form-item> </el-col> </el-row> </detail-block> <detail-block v-if="$props.showBase" title=""> <el-row :gutter="24" class="marg"> <el-col :span="24"> <el-form-item label="报告内容" prop="content"> <el-input v-model="ruleForm.content" placeholder="报告内容" type="textarea" :rows="12" /> </el-form-item> </el-col> </el-row> </detail-block> </el-form> </app-container> </template> <style lang="scss" scoped> .user-container { width: 100%; height: 120px; overflow-y: scroll; border: 1px solid #dcdfe6; border-radius: 5px; } .mx-1 { margin-top: 5px; margin-right: 5px; margin-left: 5px; } </style>