UPDATE: 1、测试项改成检测项;

2、检测项勾选闪变添加提示;
        3、检测项由误差体系反推为下拉框让用户多选,默认全选;
        4、修改检测计划有子计划后部分字段不可编辑;
This commit is contained in:
贾同学
2025-09-23 10:55:07 +08:00
parent d08194bfd8
commit fcdbbce7a9
2 changed files with 59 additions and 30 deletions

View File

@@ -41,17 +41,18 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item v-if="selectByMode" :label-width="110" label="测项" prop="testItems"> <el-form-item v-if="selectByMode" :label-width="110" label="测项" prop="testItems">
<el-select <el-select
v-model="formContent.testItems" v-model="formContent.testItems"
:disabled="planType != 0 || allDisabled" :disabled="planType != 0 || allDisabled || !canEdited"
:max-collapse-tags="1" :max-collapse-tags="1"
clearable clearable
collapse-tags collapse-tags
collapse-tags-tooltip collapse-tags-tooltip
filterable filterable
multiple multiple
placeholder="请选择测项" placeholder="请选择测项"
@blur="handleTestItemChange"
> >
<el-option <el-option
v-for="(option, index) in secondLevelOptions" v-for="(option, index) in secondLevelOptions"
@@ -122,7 +123,7 @@
<el-form-item :label-width="110" label="误差体系" prop="errorSysId"> <el-form-item :label-width="110" label="误差体系" prop="errorSysId">
<el-select <el-select
v-model="formContent.errorSysId" v-model="formContent.errorSysId"
:disabled="isSelectDisabled || allDisabled" :disabled="isSelectDisabled || allDisabled || !canEdited"
autocomplete="off" autocomplete="off"
clearable clearable
filterable filterable
@@ -140,7 +141,7 @@
<el-form-item :label-width="110" label="数据处理原则" prop="dataRule"> <el-form-item :label-width="110" label="数据处理原则" prop="dataRule">
<el-select <el-select
v-model="formContent.dataRule" v-model="formContent.dataRule"
:disabled="isSelectDisabled || allDisabled" :disabled="isSelectDisabled || allDisabled || !canEdited"
autocomplete="off" autocomplete="off"
clearable clearable
placeholder="请选择数据处理原则" placeholder="请选择数据处理原则"
@@ -154,7 +155,10 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item :label-width="110" label="守时检测" prop="timeCheck"> <el-form-item :label-width="110" label="守时检测" prop="timeCheck">
<el-radio-group v-model="formContent.timeCheck" :disabled="planType != 0 || allDisabled"> <el-radio-group
v-model="formContent.timeCheck"
:disabled="planType != 0 || allDisabled || !canEdited"
>
<el-radio :value="1"></el-radio> <el-radio :value="1"></el-radio>
<el-radio :value="0"></el-radio> <el-radio :value="0"></el-radio>
</el-radio-group> </el-radio-group>
@@ -173,7 +177,7 @@
> >
<el-select <el-select
v-model="formContent.reportTemplateName" v-model="formContent.reportTemplateName"
:disabled="planType != 0 || allDisabled" :disabled="planType != 0 || allDisabled || !canEdited"
autocomplete="off" autocomplete="off"
placeholder="请选择报告模版" placeholder="请选择报告模版"
> >
@@ -188,7 +192,7 @@
<el-form-item v-if="selectByMode" :label-width="110" label="项目负责人" prop="leader"> <el-form-item v-if="selectByMode" :label-width="110" label="项目负责人" prop="leader">
<el-select <el-select
v-model="formContent.leader" v-model="formContent.leader"
:disabled="planType != 0 || allDisabled" :disabled="planType != 0 || allDisabled || !canEdited"
clearable clearable
autocomplete="off" autocomplete="off"
placeholder="请选择项目负责人" placeholder="请选择项目负责人"
@@ -278,7 +282,7 @@
prop="testConfig.maxTime" prop="testConfig.maxTime"
> >
<el-input-number <el-input-number
:disabled="isSelectDisabled || allDisabled" :disabled="isSelectDisabled || allDisabled || !canEdited"
style="width: 240px" style="width: 240px"
v-model="formContent.testConfig!.maxTime" v-model="formContent.testConfig!.maxTime"
:precision="0" :precision="0"
@@ -296,7 +300,7 @@
prop="testConfig.waveRecord" prop="testConfig.waveRecord"
> >
<el-input-number <el-input-number
:disabled="isSelectDisabled || allDisabled" :disabled="isSelectDisabled || allDisabled || !canEdited"
style="width: 240px" style="width: 240px"
v-model="formContent.testConfig!.waveRecord" v-model="formContent.testConfig!.waveRecord"
:precision="0" :precision="0"
@@ -314,7 +318,7 @@
prop="testConfig.realTime" prop="testConfig.realTime"
> >
<el-input-number <el-input-number
:disabled="isSelectDisabled || allDisabled" :disabled="isSelectDisabled || allDisabled || !canEdited"
style="width: 240px" style="width: 240px"
v-model="formContent.testConfig!.realTime" v-model="formContent.testConfig!.realTime"
:precision="0" :precision="0"
@@ -332,7 +336,7 @@
prop="testConfig.statistics" prop="testConfig.statistics"
> >
<el-input-number <el-input-number
:disabled="isSelectDisabled || allDisabled" :disabled="isSelectDisabled || allDisabled || !canEdited"
style="width: 240px" style="width: 240px"
v-model="formContent.testConfig!.statistics" v-model="formContent.testConfig!.statistics"
:precision="0" :precision="0"
@@ -350,7 +354,7 @@
prop="testConfig.flicker" prop="testConfig.flicker"
> >
<el-input-number <el-input-number
:disabled="isSelectDisabled || allDisabled" :disabled="isSelectDisabled || allDisabled || !canEdited"
style="width: 240px" style="width: 240px"
v-model="formContent.testConfig!.flicker" v-model="formContent.testConfig!.flicker"
:precision="0" :precision="0"
@@ -434,6 +438,7 @@ const unboundPqDevList = ref<Device.ResPqDev[]>([]) //指定模式下所有未
const boundPqDevList = ref<Device.ResPqDev[]>([]) //根据检测计划id查询出所有已绑定的设备 const boundPqDevList = ref<Device.ResPqDev[]>([]) //根据检测计划id查询出所有已绑定的设备
const devData = ref<any[]>([]) const devData = ref<any[]>([])
const isSelectDisabled = ref(false) const isSelectDisabled = ref(false)
const canEdited = ref(true)
const planType = ref<number>(0) const planType = ref<number>(0)
const subPlanBindStandardDev = ref<any>([]) //哪些标准设备已经被子计划绑定 const subPlanBindStandardDev = ref<any>([]) //哪些标准设备已经被子计划绑定
const activeNames = ref(['1']) const activeNames = ref(['1'])
@@ -611,7 +616,7 @@ const baseRules: Record<string, Array<FormItemRule>> = {
errorSysId: [{ required: true, message: '误差体系必选!', trigger: 'change' }], errorSysId: [{ required: true, message: '误差体系必选!', trigger: 'change' }],
dataRule: [{ required: true, message: '数据处理原则必选!', trigger: 'change' }], dataRule: [{ required: true, message: '数据处理原则必选!', trigger: 'change' }],
standardDevIds: [{ required: true, message: '标准设备必选!', trigger: 'change' }], standardDevIds: [{ required: true, message: '标准设备必选!', trigger: 'change' }],
testItems: [{ required: true, message: '测项必选!', trigger: 'change' }], testItems: [{ required: true, message: '测项必选!', trigger: 'change' }],
'testConfig.maxTime': [{ required: true, message: '检测最大次数必填!', trigger: 'blur' }], 'testConfig.maxTime': [{ required: true, message: '检测最大次数必填!', trigger: 'blur' }],
'testConfig.waveRecord': [{ required: true, message: '录波数据有效组数必填!', trigger: 'blur' }], 'testConfig.waveRecord': [{ required: true, message: '录波数据有效组数必填!', trigger: 'blur' }],
'testConfig.realTime': [{ required: true, message: '实时数据有效组数必填!', trigger: 'blur' }], 'testConfig.realTime': [{ required: true, message: '实时数据有效组数必填!', trigger: 'blur' }],
@@ -721,6 +726,7 @@ const save = () => {
// 打开弹窗,可能是新增,也可能是编辑 // 打开弹窗,可能是新增,也可能是编辑
const open = async (sign: string, data: Plan.ReqPlan, currentMode: string, plan: number) => { const open = async (sign: string, data: Plan.ReqPlan, currentMode: string, plan: number) => {
canEdited.value = true
unboundPqDevList.value = [] unboundPqDevList.value = []
boundPqDevList.value = [] boundPqDevList.value = []
//处理异步调用 //处理异步调用
@@ -834,6 +840,9 @@ const open = async (sign: string, data: Plan.ReqPlan, currentMode: string, plan:
user_Result: any user_Result: any
if (mode.value === '比对式') { if (mode.value === '比对式') {
if (data.children && data.children.length > 0) {
canEdited.value = false
}
if (data.importFlag === 1 || (data.testState !== 0 && plan === 0)) { if (data.importFlag === 1 || (data.testState !== 0 && plan === 0)) {
allDisabled.value = true allDisabled.value = true
formContent.leader = data.leader formContent.leader = data.leader
@@ -932,6 +941,14 @@ const open = async (sign: string, data: Plan.ReqPlan, currentMode: string, plan:
if (planType.value === 0) { if (planType.value === 0) {
unboundPqDevList.value = unboundData as Device.ResPqDev[] unboundPqDevList.value = unboundData as Device.ResPqDev[]
boundPqDevList.value = boundData as Device.ResPqDev[] boundPqDevList.value = boundData as Device.ResPqDev[]
if (data.children && data.children.length > 0) {
// 子计划已选成员不可移除
const childrenMembers = [...new Set(data.children.map((item: any) => item.members))]
memberData.value = user_Result.data.map((user: any) => ({
...user,
disabled: childrenMembers.includes(user.id) || formContent.leader === user.id
}))
}
} else if (planType.value === 1) { } else if (planType.value === 1) {
unboundPqDevList.value = boundData.filter((i: any) => !i.boundPlanName) as Device.ResPqDev[] unboundPqDevList.value = boundData.filter((i: any) => !i.boundPlanName) as Device.ResPqDev[]
memberData.value = user_Result.data memberData.value = user_Result.data
@@ -955,11 +972,14 @@ const open = async (sign: string, data: Plan.ReqPlan, currentMode: string, plan:
pqToArray() //将对象转为数组 pqToArray() //将对象转为数组
//比对式测项下拉框 //比对式测项下拉框
if (mode.value == '比对式') { if (mode.value == '比对式') {
// 如果是编辑模式且已有误差体系ID则加载对应的测 // 如果是编辑模式且已有误差体系ID则加载对应的测项
if (formContent.errorSysId) { if (formContent.errorSysId) {
await loadTestItemsForErrorSys(formContent.errorSysId) await loadTestItemsForErrorSys(formContent.errorSysId)
if (data.testItems) {
formContent.testItems = data.testItems
}
} }
} }
@@ -994,11 +1014,19 @@ const open = async (sign: string, data: Plan.ReqPlan, currentMode: string, plan:
dialogVisible.value = true dialogVisible.value = true
} }
// 检测项选择变化时的处理函数
const handleTestItemChange = () => {
if (formContent.testItems.length > 0) {
const hasShanBian = secondLevelOptions
.filter(option => formContent.testItems.includes(option.value))
.find(option => option.label === '闪变')
if (hasShanBian) {
ElMessage.warning('闪变耗时较长,不推荐批量被检设备在检测过程中采集该指标')
}
}
}
// 误差体系选择变化时的处理函数 // 误差体系选择变化时的处理函数
const handleErrorSysChange = async (value: string) => { const handleErrorSysChange = async (value: string) => {
// 清空测试项选择
formContent.testItems = []
// 如果是比对式模式且选择了误差体系 // 如果是比对式模式且选择了误差体系
if (mode.value === '比对式' && value) { if (mode.value === '比对式' && value) {
try { try {
@@ -1015,18 +1043,21 @@ const handleErrorSysChange = async (value: string) => {
}) })
}) })
} }
formContent.testItems = secondLevelOptions.map(option => option.value)
} catch (error) { } catch (error) {
console.error('获取测试项失败:', error) formContent.testItems = []
console.error('获取检测项失败:', error)
// 发生错误时清空选项 // 发生错误时清空选项
secondLevelOptions.length = 0 secondLevelOptions.length = 0
} }
} else { } else {
// 如果没有选择误差体系,清空测试项选项 formContent.testItems = []
// 如果没有选择误差体系,清空检测项选项
secondLevelOptions.length = 0 secondLevelOptions.length = 0
} }
} }
// 根据误差体系ID加载测项(用于初始化) // 根据误差体系ID加载测项(用于初始化)
const loadTestItemsForErrorSys = async (errorSysId: string) => { const loadTestItemsForErrorSys = async (errorSysId: string) => {
if (!errorSysId) return if (!errorSysId) return
@@ -1043,9 +1074,10 @@ const loadTestItemsForErrorSys = async (errorSysId: string) => {
label: (res.data as Record<string, string>)[key] label: (res.data as Record<string, string>)[key]
}) })
}) })
formContent.testItems = secondLevelOptions.map(option => option.value)
} }
} catch (error) { } catch (error) {
console.error('获取测项失败:', error) console.error('获取测项失败:', error)
secondLevelOptions.length = 0 secondLevelOptions.length = 0
} }
} }

View File

@@ -27,9 +27,9 @@
> >
导出 导出
</el-button> </el-button>
<!-- <el-button type='primary' v-auth.plan="'combine'" :icon='ScaleToOriginal' :disabled='!(scope.selectedList.length > 1)' @click='combineClick'> <el-button type="primary" v-auth.plan="'add'" :icon="CirclePlus" @click="openDialog('add')">
合并 新增
</el-button> --> </el-button>
<el-button <el-button
type="primary" type="primary"
v-auth.plan="'import_subplan'" v-auth.plan="'import_subplan'"
@@ -39,9 +39,6 @@
> >
导入检测计划 导入检测计划
</el-button> </el-button>
<el-button type="primary" v-auth.plan="'add'" :icon="CirclePlus" @click="openDialog('add')">
新增
</el-button>
<el-button <el-button
type="primary" type="primary"
v-auth.plan="'analysis'" v-auth.plan="'analysis'"
@@ -467,7 +464,7 @@ const columns = reactive<ColumnProps<Plan.ReqPlan>[]>([
}, },
{ {
prop: 'testItemNameStr', prop: 'testItemNameStr',
label: '测项', label: '测项',
minWidth: 300, minWidth: 300,
isShow: modeStore.currentMode == '比对式' isShow: modeStore.currentMode == '比对式'
}, },