yangys
2025-09-04 8499181e9d717bfc5a689d6a5f61c3b182f2f28e
src/views/flowmgr/taskassign.vue
@@ -8,30 +8,59 @@
-->
<template>
  <basic-container>
    <avue-form ref="form" :option="attachOption" v-model="attachForm" @submit="formSubmit"></avue-form>
    <avue-form ref="form" :option="attachOption" v-model="attachForm" @submit="formSubmit">
      <template #machineCode="{}">
        <el-tree-select ref="tree" filterable  v-model="attachForm.machineCode"
         node-key="machineCode"
          :data="treeData" :props="defaultProps">
          </el-tree-select>
      </template>
    </avue-form>
  </basic-container>
</template>
<script>
import {
  getQueryString,
} from '@/utils/util';
export default {
  watch: {
    'attachForm.drawingNo': function (val) {
      if(val && this.attachForm.processNo) {
        this.attachForm.title = `${val}-${this.attachForm.processNo}-数控程序编制`;
      if(val && this.attachForm.processNo && this.attachForm.processEdition) {
        this.attachForm.title = `${val}-${this.attachForm.processNo}-${this.attachForm.processEdition}-计划任务`;
      }
    },
    'attachForm.processNo': function (val) {
      if(val && this.attachForm.drawingNo) {
      if(val && this.attachForm.drawingNo && this.attachForm.processEdition) {
        //this.attachForm.title = `${val}-${this.attachForm.processNo}-数控程序编制`;
      this.attachForm.title = `${this.attachForm.drawingNo}-${val}-数控程序编制`;
          this.attachForm.title = `${this.attachForm.drawingNo}-${val}-${this.attachForm.processEdition}-计划任务`;
      }
    },
    'attachForm.processEdition': function (val) {
      if(val && this.attachForm.drawingNo && this.attachForm.processNo ) {
        //this.attachForm.title = `${val}-${this.attachForm.processNo}-数控程序编制`;
          this.attachForm.title = `${this.attachForm.drawingNo}-${this.attachForm.processNo}-${val}-计划任务`;
      }
    },
  },
  data() {
    //var isTempFlow = getQueryString("isTempFlow");
    //isTempFlow = isTempFlow === 'Y'?'Y':'N';
    var that = this;
    return {
      form: {},
      machineCodeList: [],
      treeData: [],
      defaultProps: {
        children: 'children',
        label: 'name',
        disabled: (data) => data.nodeType!=='machine',//仅机床节点可选
        isLeaf: (data) => !data.hasChildren
      },
      attachOption: {
        labelWidth: 160,
        submitBtn: true,
@@ -43,15 +72,18 @@
            prop: 'title',
            type: 'input',
            span: 24,
            dataType: 'string',
            rules: [{ required: true, message: '必填', trigger: 'blur' }],
            disabled:true,
            dataType: 'string'
          },
          {
            label: '图号',
            label: '零组件号',
            prop: 'drawingNo',
            type: 'input',
            span: 12,
            dataType: 'string',
            blur: (col) => {
              this.handleTrim(col)
            },
            rules: [{ required: true, message: '必填', trigger: 'blur' }],
          },
          {
@@ -61,6 +93,9 @@
            span: 12,
            dataType: 'string',
            rules: [{ required: true, message: '必填', trigger: 'blur' }],
            blur: (col) => {
              this.handleTrim(col)
            },
          },
          {
            label: '产品型号',
@@ -69,25 +104,22 @@
            span: 12,
            dataType: 'string',
            rules: [{ required: true, message: '必填', trigger: 'blur' }],
            // rules: [
            //   {
            //     required: true,
            //     message: '请选择流程类型',
            //     trigger: 'blur',
            //   },
            // ],
            blur: (col) => {
              this.handleTrim(col)
            },
          },
          {
            label: '工序号',
            prop: 'processNo',
            type: 'input',
            span: 12,
            type: 'number',
            step: 1,
            precision: 0,
            dataType: 'number',
            max: 999,
            dataType: 'string',
            rules: [{ required: true, message: '必填', trigger: 'blur' }],
            blur: (col) => {
              this.handleTrim(col)
            },
          },
          {
            label: '工序名称',
@@ -96,6 +128,9 @@
            span: 12,
            dataType: 'string',
            rules: [{ required: true, message: '必填', trigger: 'blur' }],
            blur: (col) => {
              this.handleTrim(col)
            },
          },
          {
            label: '工序版次',
@@ -104,21 +139,28 @@
            span: 12,
            dataType: 'string',
            rules: [{ required: true, message: '必填', trigger: 'blur' }],
            blur: (col) => {
              this.handleTrim(col)
            },
          },
          {
            label: '工艺版次',
            label: '批次号',
            prop: 'craftEdition',
            placeholder:'如"A"',
            type: 'input',
            span: 12,
            dataType: 'string',
            maxlength: 2,
            rules: [{ required: true, message: '必填', trigger: 'blur' }],
            maxlength: 10,
            blur: (col) => {
              this.handleTrim(col)
            },
          },
          {
          /*{
            label: '加工机床',
            prop: 'machineCode',
            type: 'select',
            dicUrl: `/blade-mdm/machine/page`,
               filterable: true,
            dicUrl: `/blade-mdm/machine/page?size=10000`,
            dicFormatter: function (res) {
              that.machineCodeList = res.data.records;
              return res.data.records;
@@ -129,13 +171,25 @@
              value: 'code',
            },
            span: 12
          },*/
          {
            label: '加工机床',
            prop: 'machineCode',
            type: 'select',
            rules: [{ required: true, message: '必填', trigger: 'blur' }],
            span: 12
          },
          {
            label: '计划锁定时间(天)',
            prop: 'planLockDays',
            type: 'input',
            type: 'number',
            min:0,
            max:30,
            span: 12,
            dataType: 'string',
            controls:true,
            dataType: 'number',
            controlsPosition:'right',
            rules: [{ required: true, message: '必填', trigger: 'blur' }],
          },
          {
@@ -154,33 +208,106 @@
            type: 'input',
            span: 12,
            dataType: 'string',
            class:'input_holder_warn',
            placeholder:'非偏离单任务请留空',
            blur: (col) => {
              this.handleTrim(col)
            },
            // rules: [{ required: true, message: '必填', trigger: 'blur' }],
          },
          }
        ],
      },
      attachForm: {},
      attachForm: {planLockDays:7,planStartTime: this.$dayjs().format('YYYY-MM-DD')},//默认7天
      defaultForm: {planLockDays:7,planStartTime: this.$dayjs().format('YYYY-MM-DD')},
    };
  },
  methods: {
    treeLoad () {
      axios({
        url: '/blade-mdm/gkw/node/load-tree',
        method: 'get',
      }).then(
        res => {
          this.treeData = this.filterTreeData(res.data.data);
          var firstIndex = 0;
          res.data.data.forEach((item,index)=> {
            if(item.children.length != 0) {
              firstIndex = index;
            }
          })
          //defaultKeys.push(item.id);
          this.defaultKeys = [res.data.data[firstIndex].id];
        }
      )
    },
    filterTreeData(oriTreeData){
      var roots = [];
      for(var i=0;i<oriTreeData.length;i++){
        roots.push(this.filterTreeNodes(oriTreeData[i]));
      }
      return roots;
    },
    filterTreeNodes(node) {
      // 如果当前节点的nodeType是'machine',则清除其子节点
      if (node.nodeType === 'machine') {
          // 创建一个新对象,复制当前节点的属性,但清除children
          return {
              ...node,
              children: []
          };
      }
      // 如果当前节点有子节点,递归处理每个子节点
      if (node.children && node.children.length > 0) {
          return {
              ...node,
              children: node.children.map(child => this.filterTreeNodes(child))
          };
      }
      // 如果既不是machine节点也没有子节点,直接返回原节点
      return node;
    },
    handleTrim(col){
      //console.log(col)
      let value = this.attachForm[col.column.prop];
      if (typeof value === 'string') {
            const trimmedValue = value.trim();
            // 只有当值确实发生变化时才更新
            if (trimmedValue !== value) {
                this.attachForm[col.column.prop] = trimmedValue;
            }
        }
     // this.attachForm[col.column.prop]='dddd'
    },
    formSubmit(form, done) {
      var form = { ...form };
      /*
      this.machineCodeList.forEach(item => {
        if (form.machineCode == item.code) {
          form.machineMode = item.name;
        }
      })
      */
      axios({
        url: '/blade-mdm/flow/dispatch/start',
        method: 'post',
        data: form,
      }).then(
        res => {
          this.$message({
            type: 'success',
            message: '操作成功!',
          });
          this.$refs.form.resetForm();
          if(res.data.code == 200){
            this.$message({
              type: 'success',
              message: '操作成功!',
            });
            this.$refs.form.resetForm();
            this.attachForm = this.defaultForm;
          }else{
            this.$alert(res.data.msg, '发起任务失败',{type:'error',confirmButtonText:'关闭'});
          }
          done();
        },
        error => {
@@ -188,9 +315,42 @@
          done();
        }
      );
    },
    handleGlobalBlur( {prop, value} ) {
      console.log('prop')
      // 1. 筛选需要处理的字段类型(仅输入类:input/textarea)
      const inputTypes = ["input", "textarea"];
      const currentColumn = this.attachOption.column.find(item => item.prop === prop);
      // 2. 若为输入类字段,且值为字符串,执行 trim 处理
      if (currentColumn && inputTypes.includes(currentColumn.type) && typeof value === "string") {
        const trimmedValue = value.trim();
        // 3. 同步处理后的值到表单 model(避免直接修改 prop,通过 $set 确保响应式)
        this.$set(this.attachForm, prop, trimmedValue);
      }
    },
    handleBlur(prop, value) {
        if (typeof value === 'string') {
            const trimmedValue = value.trim();
            // 只有当值确实发生变化时才更新
            if (trimmedValue !== value) {
                this.attachForm[prop] = trimmedValue;
            }
        }
    }
  },
  mounted() {
    this.treeLoad();
  },
};
</script>
<style lang="scss"></style>
<style lang="scss">
.input_holder_warn {
  .el-input__inner::placeholder {
  color: rgb(255, 106, 0); /* 设置颜色为红色 */
  font-size: 16px; /* 设置字体大小为16px */
  }
}
</style>