diff --git a/src/views/quality/base/qualityInspectionBoxBtn/index.vue b/src/views/quality/base/qualityInspectionBoxBtn/index.vue
index 8c777b7c..6c6bee19 100644
--- a/src/views/quality/base/qualityInspectionBoxBtn/index.vue
+++ b/src/views/quality/base/qualityInspectionBoxBtn/index.vue
@@ -38,80 +38,7 @@
@close="cancel"
@cancel="cancel"
@confirm="submitForm">
-
+
@@ -134,6 +61,69 @@ export default {
components: {},
data() {
return {
+ rows: [
+ [
+ {
+ select: true,
+ label: '产线',
+ url: '/base/production-line/listAll',
+ prop: 'productionId',
+ rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
+ bind: {
+ filterable: true,
+ },
+ },
+ ],
+ [
+ {
+ select: true,
+ label: '工段',
+ url: '/base/workshop-section/listAll',
+ prop: 'sectionId',
+ rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
+ },
+ ],
+ [
+ {
+ input: true,
+ label: '按钮盒识别码',
+ prop: 'buttonId',
+ rules: [
+ {
+ type: 'number',
+ message: '请输入数字',
+ trigger: 'blur',
+ transform: (val) => Number(val),
+ },
+ ],
+ },
+ ],
+ [{ input: true, label: '按钮盒模式', prop: 'model' }],
+ [
+ {
+ input: true,
+ label: '按钮值',
+ prop: 'keyValue',
+ rules: [
+ {
+ type: 'number',
+ message: '请输入100以内的数字',
+ trigger: 'blur',
+ transform: (val) => Number(val) <= 100 && Number(val),
+ },
+ ],
+ bind: { type: 'number', min: 0, max: 100 },
+ },
+ ],
+ [
+ {
+ textarea: true,
+ label: '检测内容',
+ prop: 'inspectionDetContent',
+ rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
+ },
+ ],
+ ],
searchBarFormConfig: [
{
type: 'input',
diff --git a/src/views/quality/components/dialogForm.vue b/src/views/quality/components/dialogForm.vue
index 4a6b3f7d..2db7ffd9 100644
--- a/src/views/quality/components/dialogForm.vue
+++ b/src/views/quality/components/dialogForm.vue
@@ -108,6 +108,18 @@ export default {
},
},
},
+ watch: {
+ rows: {
+ handler() {
+ console.log('watch triggered!');
+ this.$nextTick(() => {
+ this.handleOptions('watch');
+ });
+ },
+ deep: true,
+ immediate: false,
+ },
+ },
mounted() {
// 处理 options
this.handleOptions();
@@ -125,32 +137,18 @@ export default {
const response = await this.$axios(url);
return response.data;
},
- handleOptions() {
+ async handleOptions(trigger = 'monuted') {
// console.log("[dialogForm:handleOptions]")
const promiseList = [];
this.rows.forEach((cols) => {
- cols.forEach(async (opt) => {
- if (opt.onChange) {
- this.$watch(`form.${opt.prop}`, {
- handler: (val) => {
- this.$emit(opt.onChange.emit, val);
- },
- immediate: true,
- });
- }
- if (opt.listen) {
- // 注册监听时间
- this.$on(opt.listen, (val) => {
- alert(val);
- });
- }
- if (opt.value) {
+ cols.forEach((opt) => {
+ if (opt.value && !this.form[opt.prop]) {
// 默认值
this.form[opt.prop] = opt.value;
}
if (opt.options) {
- this.optionListOf[opt.prop] = opt.options;
+ this.$set(this.optionListOf, opt.prop, opt.options);
} else if (opt.url) {
// 如果是下拉框,或者新增模式下的输入框,才去请求
if (opt.select || (opt.input && !this.form?.id)) {
@@ -179,19 +177,23 @@ export default {
}
});
}
- try {
- // this.formLoading = true;
- // console.log("[dialogForm:handleOptions:promiseList]", promiseList)
- await Promise.all(promiseList.map((fn) => fn()));
- this.formLoading = false;
- // console.log("[dialogForm:handleOptions:optionListOf]", this.optionListOf)
- } catch (error) {
- console.log('[dialogForm:handleOptions:error]', error);
- this.formLoading = false;
- }
}
});
});
+
+ // 如果是 watch 触发的,不需要执行进一步的请求
+ if (trigger == 'watch') {
+ this.formLoading = false;
+ return;
+ }
+ try {
+ await Promise.all(promiseList.map((fn) => fn()));
+ this.formLoading = false;
+ // console.log("[dialogForm:handleOptions:optionListOf]", this.optionListOf)
+ } catch (error) {
+ console.log('[dialogForm:handleOptions:error]', error);
+ this.formLoading = false;
+ }
if (!promiseList.length) this.formLoading = false;
},
},
diff --git a/src/views/quality/monitoring/qualityInspectionRecord/index.vue b/src/views/quality/monitoring/qualityInspectionRecord/index.vue
index 3f78ff3c..3f3a0de7 100644
--- a/src/views/quality/monitoring/qualityInspectionRecord/index.vue
+++ b/src/views/quality/monitoring/qualityInspectionRecord/index.vue
@@ -38,107 +38,7 @@
@close="cancel"
@cancel="cancel"
@confirm="submitForm">
-
+
@@ -164,6 +64,80 @@ export default {
mixins: [basicPageMixin],
data() {
return {
+ rows: [
+ [
+ {
+ select: true,
+ label: '检测内容ID',
+ url: '/base/quality-inspection-det/listAll',
+ prop: 'inspectionDetId',
+ labelKey: 'content',
+ rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
+ bind: {
+ filterable: true,
+ },
+ },
+ {
+ select: true,
+ label: '来源',
+ prop: 'source',
+ value: 1, // 默认手动
+ options: [
+ { label: '手动', value: 1 },
+ { label: '自动', value: 2 },
+ ],
+ bind: {
+ filterable: true,
+ },
+ },
+ ],
+ [
+ {
+ select: true,
+ label: '产线',
+ url: '/base/production-line/listAll',
+ prop: 'productionLineId',
+ rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
+ },
+ {
+ select: true,
+ label: '工段',
+ url: '/base/workshop-section/listAll', // 这个 url 其实可加可不加,因为下面会更新 options
+ options: [], // 这个options也可加可不加, 因为下面会更新 options
+ prop: 'sectionId',
+ rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
+ },
+ ],
+ [
+ {
+ input: true,
+ label: '检测人员',
+ prop: 'checkPerson',
+ },
+ {
+ datetime: true,
+ label: '检测时间',
+ prop: 'checkTime',
+ bind: {
+ format: 'yyyy-MM-dd HH:mm:ss',
+ 'value-format': 'timestamp',
+ // 'value-format': 'yyyy-MM-dd HH:mm:ss',
+ clearable: true,
+ },
+ },
+ ],
+ [
+ {
+ textarea: true,
+ label: '检测内容',
+ prop: 'inspectionDetContent',
+ value: '',
+ rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
+ },
+ ],
+ [{ textarea: true, label: '描述', prop: 'explainText' }],
+ [{ input: true, label: '备注', prop: 'remark' }],
+ ],
searchBarFormConfig: [
{
type: 'select',
@@ -296,6 +270,31 @@ export default {
this.getList();
this.getProductLineList();
},
+ watch: {
+ // 注册弹窗里产线改变时的监听事件
+ 'form.productionLineId': {
+ handler: function (val) {
+ if (val == null) return;
+ this.$axios('/base/workshop-section/listByParentId', {
+ params: {
+ id: val,
+ },
+ }).then((response) => {
+ this.$set(
+ this.rows[1][1], // 这里索引是硬编码,所以当 this.rows 里数据顺序改变时,此处也要改
+ 'options',
+ response.data.map((item) => {
+ return {
+ label: item.name,
+ value: item.id,
+ };
+ })
+ );
+ });
+ },
+ immediate: true,
+ },
+ },
methods: {
/** 获取搜索栏的产线列表 */
getProductLineList() {