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

View File

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