xiejun
2023-09-21 52ffefd06e59cbd56c1a919972866592379cfed2
Source/UBCS-WEB/src/components/FormTemplate/index.vue
@@ -1,589 +1,219 @@
<template>
  <el-dialog
    :visible.sync="dialogVisible"
    v-if="dialogVisible"
    v-dialogDrag
    top="0vh"
    title="提示"
    top="-5vh"
    class="avue-dialog avue-dialog--top"
    :width="dialogOptions.width"
    :title="title"
    :width="width"
    append-to-body
    @opened="openDialog"
  >
    <avue-form
      v-model="form"
      :option="option"
      v-loading="loading"
      ref="form"
      :key="index"
    <FormTemplate
      v-bind="$attrs"
      :type="type"
      :TreeValue="TreeValue"
      :rowOid="rowOid"
      :eventList="eventList"
      :templateOid="templateOid"
      v-if="dialogVisible"
      ref="FormTemplate"
      @getFormData="getFormData"
    ></FormTemplate>
    <div
      class="tab_box"
      v-if="
        type !== 'detail' &&
        dialogVisible &&
        (showCodeApply || showResembleQuery) &&
        type !== 'preview'
      "
    >
      <template :slot="item.prop + 'Label'" v-for="item in option.column">
        <span>{{ item.label }} </span>
        <el-tooltip
          v-if="item.keyAttr"
          class="item"
          effect="dark"
          content="该属性为关键属性"
          placement="top-start"
      <el-tabs v-model="activeName" type="border-card" @tab-click="handleClick">
        <el-tab-pane label="码值申请" name="codeApply" v-if="showCodeApply">
          <FormTemplate
            v-bind="$attrs"
            :type="type"
            :selfColumnType="selfColumnType"
            :selfColumnConfig="selfColumnConfig"
            ref="CodeApply"
            @getFormData="getCodeApplyFormData"
            @referConfigDataUpdate="referConfigDataUpdate"
          ></FormTemplate>
        </el-tab-pane>
        <el-tab-pane
          label="相似项查询"
          name="resembleQuery"
          v-if="showResembleQuery"
        >
          <i class="el-icon-star-on key_attr_icon"></i>
        </el-tooltip>
        <el-tooltip
          v-if="item.tip"
          class="item"
          effect="dark"
          :content="item.tip"
          placement="top-start"
        >
          <i class="el-icon-warning"></i>
        </el-tooltip>
      </template>
    </avue-form>
    <div class="avue-dialog__footer">
      <el-button @click="close()">取 消</el-button>
      <el-button @click="close()" type="primary">确 定</el-button>
          <ResembleQuery
            v-bind="$attrs"
            ref="resembleQueryRef"
            :hasResemble="this.hasResemble"
            :column="this.resembleTableColumn"
            :codeClassifyOid="codeClassifyOid"
            :form="this.form"
            :templateOid="templateOid"
          ></ResembleQuery>
        </el-tab-pane>
      </el-tabs>
    </div>
    <el-dialog title="测试参照" :visible.sync="visible2" append-to-body>
      <div style="height: 100px;">
        <p>部门数据 {depName: '我是部门名称', depId: '我是部门id'}</p>
    <template #footer>
      <div class="" v-if="type !== 'detail'">
        <el-button @click="close()" size="small">取 消</el-button>
        <el-button
          @click="submit()"
          type="primary"
          :loading="submitBtnLoading"
          size="small"
          >{{ submitText }}</el-button
        >
        <el-button
          @click="resembleQuerySubmit"
          type="primary"
          size="small"
          v-if="showResembleQuery"
          >相似像查询</el-button
        >
      </div>
      <div class="avue-dialog__footer">
        <el-button @click="visible2 = false">取 消</el-button>
        <el-button @click="czSubmit" type="primary">确 定</el-button>
      </div>
    </el-dialog>
    </template>
  </el-dialog>
</template>
<script>
import { getFormTemplate } from "../../api/common";
import { getDictionary } from "../../api/system/dict";
import { getCodeRule, getFormTemplate } from "@/api/formTemplate.js";
import FormTemplate from "./FormTemplate";
import ResembleQuery from "./ResembleQuery";
export default {
  name: "FormTemplate",
  name: "FormTemplateDialog",
  components: { ResembleQuery, FormTemplate },
  props: {
    visible: {
      type: Boolean,
      default: false,
    },
    disabledProp: {
      type: Array,
      default: () => ["id"],
    TreeValue:{
      type: String,
      default: "",
    },
    type: {
      type: String,
      default: "add",
    },
    title: {
      type: String,
      default: "编码申请",
    },
    width: {
      type: String,
      default: "80%",
    },
    rowOid: "",
    codeClassifyOid: {
      type: String,
      default: "",
    },
    templateOid: {
      type: String,
      default: "",
    },
    submitText: {
      type: String,
      default: "确 定",
    },
    setForm: {
      type: Object,
      default: () => ({}),
    },
  },
  data() {
    return {
      index: 0,
      form: {},
      eventList:[],
      //码值的第二种只读隐藏情况
      codeValueApplyStatus:'',
      loading: false,
      dialogOptions: {
        width: "60%",
      submitBtnLoading: false,
      hasResemble: false,
      resembleTableColumn: [],
      secVOList: [],
      form: {},
      codeApplyForm: {},
      activeName: "codeApply",
      showCodeApply: false,
      showResembleQuery: false,
      selfColumnType: {
        codefixedsec: "combox",//固定码段
        codeclassifysec: "refer",//分类码段
        codevariablesec: "text",//可变码段
        coderefersec: "refer",//引用码段
        codeattrsec: "text",
        codelevelsec: "text",
        codedatesec: "date"
      },
      option: {
        emptyBtn: false,
        submitBtn: false,
        labelWidth: "120",
        column: [],
      selfColumnConfig: {
        function: {
          required: this.isRequired,
          dicData: this.getOptionList,
          type: this.getType,
          referConfig: this.getReferConfig,
          readOnly: this.getDisabled,
        },
        exchange: {
          text: "name",
          field: "oid",
          prop: "oid",
          showField: "name",
          parentClassifySecOid: "parentClassifySecOid",
          label: "name",
          maxlength: "codeSecLength",
          data: "fixedValueVOList",
          dateFormate: "codeDateFormatStr"
        },
        directVoluation: {
          search: true,
          props: {
            label: "id",
            value: "id",
          },
        },
      },
      templateData: {},
      columnType: {
        text: "input",
        combox: "select",
        truefalse: "switch",
        number: "number",
        textarea: "textarea",
        datetime: "datetime",
        date: "date",
        file: "upload",
      },
      // 假数据
      testItems: [
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "id",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "传值禁用功能",
          tooltips: "",
          type: "combox",
          unique: false,
          verify: "",
        },
        {
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "state",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: true,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "接口禁用功能",
          tooltips: "",
          type: "combox",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "oldcode",
          hidden: false,
          keyAttr: false,
          prefix: "el-icon-search",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "文本后缀测试",
          text: "前后缀功能",
          tooltips: "",
          type: "text",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "materialname",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: true,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "正则校验功能",
          tooltips: "请输入数字",
          type: "text",
          unique: false,
          verify: "/[0-9]/",
        },
        {
          comboxKey: null,
          customClass: null,
          data: [
            {
              attributes: {},
              key: "model_type",
              value: "模型",
            },
            {
              attributes: {},
              key: "part_type",
              value: "零件",
            },
          ],
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "dataSelect",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "直接返回下拉",
          tooltips: "",
          type: "combox",
          unique: false,
          verify: "",
        },
        {
          comboxKey: "formTemplateTest",
          customClass: null,
          data: [],
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "dictSelect",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "字典返回下拉",
          tooltips: "",
          type: "combox",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "firstfl",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "数字输入框",
          tooltips: "",
          type: "number",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "yyyy-MM-dd HH:mm:ss",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "datetime",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "日期时间选择器",
          tooltips: "",
          type: "datetime",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "time",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "时间选择器",
          tooltips: "",
          type: "date",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "false",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "xiaoshouwl",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "开关",
          tooltips: "",
          type: "truefalse",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "我是默认值",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "tuhao",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "默认值功能",
          tooltips: "提示",
          type: "text",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "xinghaoguige",
          hidden: false,
          keyAttr: true,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "属性关键值",
          tooltips: "",
          type: "text",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "jiliangdw",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          tip: "我是提示功能",
          required: false,
          selectLibFlag: "",
          showField: "jiliangdwname",
          suffix: "",
          text: "提示功能",
          tooltips: "",
          type: "text",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: "this.form.sum = this.form.fun1 + this.form.fun2",
          extendAttrMap: null,
          extendAttrString: null,
          field: "fun1",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "参数1测试js",
          tooltips: "",
          type: "text",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: "this.form.sum = this.form.fun1 + this.form.fun2",
          extendAttrMap: null,
          extendAttrString: null,
          field: "fun2",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          required: false,
          selectLibFlag: "",
          showField: "hesuanfenleiname",
          suffix: "",
          text: "参数2测试js",
          tooltips: "",
          type: "text",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: "",
          extendAttrMap: null,
          extendAttrString: null,
          field: "sum",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: true,
          required: false,
          selectLibFlag: "",
          showField: "",
          suffix: "",
          text: "参数1参数2求和",
          tooltips: "",
          type: "text",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "textarea",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "文本域",
          tooltips: "",
          type: "textarea",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "beizhushuoming",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: false,
          referConfig: null,
          required: false,
          selectLibFlag: "",
          showField: null,
          suffix: "",
          text: "文件功能",
          tooltips: "",
          type: "file",
          unique: false,
          verify: "",
        },
        {
          comboxKey: null,
          customClass: null,
          data: null,
          dateFormate: "",
          defaultValue: "",
          displayExtension: null,
          extendAttrMap: null,
          extendAttrString: null,
          field: "cz",
          hidden: false,
          keyAttr: false,
          prefix: "",
          readOnly: true,
          referConfig: true,
          required: false,
          selectLibFlag: "",
          showField: "depId",
          suffix: "",
          text: "参照",
          tooltips: "",
          type: "text",
          unique: false,
          verify: "",
        },
      defaultKeys: [
        "oid",
        "id",
        "name",
        "description",
        "revisionoid",
        "nameoid",
        "btmname",
        "lastr",
        "firstr",
        "lastv",
        "firstv",
        "creator",
        "createtime",
        "lastModifier",
        "lastmodifytime",
        "revisionrule",
        "revisionseq",
        "revisionvalue",
        "versionrule",
        "versionseq",
        "versionvalue",
        "lcstatus",
        "ts",
        "owner",
        "checkinby",
        "checkintime",
        "checkoutby",
        "checkouttime",
        "copyfromversion",
        "secretgrade",
      ],
      visible2: false,
      codeRuleOid: "",
    };
  },
  created() {
  },
  created() {},
  computed: {
    dialogVisible: {
      get() {
@@ -595,180 +225,301 @@
    },
  },
  methods: {
    getFormTemplate() {
      this.loading = true;
      getFormTemplate({
        templateOid: "78B8C7C5-A042-0B96-FE6D-65421451782A",
        codeClassifyOid: "4524E801-6CC6-92E8-1AC3-2AB9604E8F96",
        page: 1,
        limit: 30,
      })
        .then((res) => {
          if (res.status === 200) {
            this.templateData = res.data;
            this.templateRender();
          }
          this.loading = false;
          console.log(res.data);
        })
        .catch((err) => {
          this.loading = false;
          console.log(err);
        });
    },
    templateRender() {
      // const items = this.templateData.formDefineVO.items;
      const items = this.testItems;
      let column = [];
      let dictKeys = [];
      items.forEach((item) => {
        // 隐藏表单元素
        if (item.hide) {
          return;
        }
        // 手机字典key统一异步请求获取
        if (!this.$utilFunc.isEmpty(item.comboxKey)) {
          dictKeys.push({ dictKey: item.comboxKey, field: item.field });
        }
        // 禁用部分属性
        if (this.disabledProp.includes(item.field)) {
          item.readOnly = true;
        }
        // 设置表单校验的规则,文本
        let message = "请选择";
        let trigger = "change";
        if (item.type === "text") {
          message = "请输入";
          trigger = "blur";
        } else if (item.type === "file") {
          message = "请上传";
        }
        let columnItem = {
          label: item.text,
          labelslot: true,
          prop: item.referConfig ? item.showField : item.field,
          type: this.columnType[item.type],
          dicData: this.getDataList(item.type, item.data),
          disabled: item.readOnly,
          prepend: this.preOrSufFixShow("text", item.prefix),
          append: this.preOrSufFixShow("text", item.suffix),
          prefixIcon: this.preOrSufFixShow("icon", item.prefix),
          suffixIcon: this.preOrSufFixShow("icon", item.suffix),
          valueFormat: item.dateFormate,
          format: item.dateFormate,
          keyAttr: item.keyAttr,
          value: item.defaultValue,
          tip: item.tip,
          comboxKey: item.comboxKey,
          change: ({ value, column }) => {
            this.changeFun(value, column, item.displayExtension);
          },
          click: this.clickFun(item.referConfig),
          // action:
          //   item.type === "file"
          //     ? "/api/ubcs-resource/oss/endpoint/put-file"
          //     : "",
          // propsHttp: {
          //   res: "data",
          //   url: "link",
          // },
          rules: [
            {
              required: item.required,
              message: `请${message}${item.text}`,
              trigger,
            },
            {
              // 如果没有正则则匹配任何字符
              pattern: item.verify ? item.verify : /[\s\S.]*/g,
              message: item.tooltips,
              trigger,
            },
          ],
          props: {
            label: "value",
            value: "key",
          },
        };
        column.push(columnItem);
        this.$set(this.option, "column", column);
      });
      this.index++;
      this.geDictData(dictKeys);
    },
    changeFun(value, column, jsCode) {
      if (typeof jsCode === "string" && jsCode.length > 0) {
        eval(jsCode);
    openDialog() {
      this.getFormTemplate();
      if (this.type === "add") {
        this.getCodeRule();
      }
    },
    clickFun(referConfig) {
      if (referConfig) {
        return () => {
          this.visible2 = true
        }
      }
    },
    czSubmit() {
      this.visible2 = false
      this.form = Object.assign(this.form, {
        depName: "我是部门名称",
        depId: "我是部门id",
      });
    },
    close() {
      this.dialogVisible = false;
    },
    // 前后缀
    preOrSufFixShow(type, val) {
      if (this.$utilFunc.isEmpty(val) && typeof val !== "string") return;
      const isIcon = val.slice(0, 8) === "el-icon-";
      if ((type === "text" && !isIcon) || (type === "icon" && isIcon)) {
        return val;
      }
    },
    // 获取swich和已拿到的下拉数据
    getDataList(type, dicData) {
      if (type === "truefalse") {
        return [
          {
            key: false,
            value: "否",
          },
          {
            key: true,
            value: "是",
          },
        ];
      } else if (type === "combox") {
        return dicData;
      }
      return [];
    },
    // 获取字典数据
    geDictData(dictKeys) {
      dictKeys.forEach((dictObj) => {
        getDictionary({ code: dictObj.dictKey }).then((res) => {
          if (res.data && res.data.code === 200) {
            this.option.column = this.option.column.map((item) => {
              if (item.field === dictObj.field) {
                let dictData = (res.data.data || []).map((itm) => {
                  itm.value = itm.dictValue;
                  itm.key = itm.dictKey;
                  return itm;
                });
                item.dicData = dictData;
    // 接口获取表单数据
    getFormTemplate() {
      getFormTemplate({
        templateOid: this.templateOid,
        codeClassifyOid: this.codeClassifyOid,
      })
        .then((res) => {
          if (res.status === 200) {
            this.hasResemble =
              res.data.resembleTableVO &&
              res.data.resembleTableVO.cols &&
              res.data.resembleTableVO.cols.length > 0;
            this.resembleTableColumn = res.data.resembleTableVO.cols || [];
            if (this.hasResemble) {
              this.activeName = "resembleQuery";
              this.showResembleQuery = true;
            } else {
              this.showResembleQuery = false;
            }
            this.$nextTick(() => {
              this.$refs.FormTemplate.templateRender(
                res.data.formDefineVO.items
              );
              this.eventList=res.data.templateVO.attributes
              // this.$refs.FormTemplate.$emit('eventList',  res.data.templateVO.attributes);
              if (Object.keys(this.setForm).length > 0) {
                this.$refs.FormTemplate.form = this.setForm;
              }
              return item;
            });
          }
        })
        .catch(() => {
          this.loading = false;
        });
    },
    // 获取码值申请数据
    getCodeRule() {
      let  that = this;
      getCodeRule({ codeClassifyOid: that.codeClassifyOid }).then((res) => {
        if (res.data && res.data.code === 200) {
          that.codeRuleOid = res.data.data.oid;
          const typeList = [
            //属性码段 只读
            "codeattrsec",
            //可变码段
            "codevariablesec",
            //固定码段
            "codefixedsec",
            //分类码段
            "codeclassifysec",
            //日期码段 只读
            "codedatesec",
            //引用码段
            "coderefersec",
            //层级码段 只读
            "codelevelsec",
            //流水码段 隐藏
          ];
          that.secVOList = (res.data.data.secVOList || []).filter((item) =>
            typeList.includes(item.secType)
          );
          if (that.secVOList.length > 0 && that.type === "add") {
            that.showCodeApply = true;
            that.activeName = "codeApply";
            that.$nextTick(() => {
              that.$refs.CodeApply.templateRender(that.secVOList,this.TreeValue);
            });
          } else {
            that.showCodeApply = false;
          }
        }
      });
    },
  },
  watch: {
    visible(newV) {
      if (newV) {
        this.getFormTemplate();
    getFormData(form) {
      this.form = form;
    },
    getCodeApplyFormData(codeApplyForm) {
      this.codeApplyForm = codeApplyForm;
    },
    // 参照组件数据变更
    referConfigDataUpdate(data) {
      const { field } = data;
      this.secVOList = this.secVOList.map((item) => {
        if (item.parentClassifySecOid === field) {
          this.$refs.CodeApply.form[item.oid] = undefined;
          this.$refs.CodeApply.form[item.name] = undefined;
          item.readOnly=false;
          item.referConfig.extraParams.parentClassifyValueOid=data.value;
        }
        return item;
      });
      this.$refs.CodeApply.templateRender(this.secVOList,this.TreeValue);
    },
    resembleQuerySubmit() {
      this.activeName = "resembleQuery";
      this.$refs.resembleQueryRef.resembleQuery(this.form);
    },
    handleClick() {
      if (this.activeName === "resembleQuery") {
        this.resembleQuerySubmit();
      }
    },
    async submit() {
      // 进行表单校验
      const formValidate = await this.$refs.FormTemplate.validate();
      if (!formValidate) return;
      let codeValidate = true;
      // 进行码值申请校验
      // if (this.showCodeApply) {
      //   codeValidate = await this.$refs.CodeApply.validate();
      //   if (!codeValidate) {
      //     this.activeName = "codeApply";
      //     return false;
      //   }
      // }
      let resembleQueryList = [];
      if (this.$refs.resembleQueryRef) {
        // 进行相似项查询
        resembleQueryList = await this.$refs.resembleQueryRef.resembleQuery(
          this.form
        );
      }
      if (resembleQueryList.length > 0) {
        await this.$confirm(
          `该物料已有${resembleQueryList.length}条相似数据,是否继续保存?`,
          "需要您确认",
          {
            confirmButtonText: "确定",
            cancelButtonText: "取消",
            type: "warning",
          }
        );
      }
      // 排除一些字段
      const noData = [
        "jiliangdwname",
        "materialtypeText",
        "morengongysname",
        "$caigouwl",
        "$xiaoshouwl",
        "$shifoupihaoguanli",
        "lcstatus_text",
        "hesuanfenleiname",
        "$kucunwl",
        "oldcode",
        "lastmodifier"
      ];
      let resForm = {};
      const { defaultValue, formValue } = this.getDefaultValueAndFormValues(
        this.form
      );
      noData.forEach((item) => {
        this.$delete(formValue, item);
      });
      const keys = Object.keys(formValue);
      keys.forEach((item, index) => {
        keys.forEach((itm, idx) => {
          if ((item === ('$' + itm)) && idx !== index) {
            this.$delete(formValue, keys[index]);
          }
        })
      });
      resForm.data = formValue;
      resForm = Object.assign({}, resForm, defaultValue);
      resForm.secDTOList = this.secVOList.map((item) => {
        return {
          secOid: item.oid,
          secValue: this.codeApplyForm[item.oid],
        };
      });
      resForm.codeClassifyOid = this.codeClassifyOid;
      resForm.codeRuleOid = this.codeRuleOid;
      resForm.templateOid = this.templateOid;
      this.$emit("submit", resForm);
    },
    getDefaultValueAndFormValues(form) {
      let defaultValue = {};
      let formValue = {};
      for (const key in form) {
        if (Object.hasOwnProperty.call(form, key)) {
          const element = form[key];
          if (this.defaultKeys.includes(key)) {
            defaultValue[key] = element;
          } else {
            formValue[key] = element;
          }
        }
      }
      return {
        defaultValue,
        formValue,
      };
    },
    getType(item) {
      return this.selfColumnType[item.secType];
    },
    getReferConfig(item) {
      let params = {};
      if (item.secType == "codeclassifysec") {
        //分类码段
        params = {
          isMuti: false,
          type: "grid",
          tableConfig: {
            limit: -1,
            cols: [
              {
                field: "id",
                title: "英文名称",
                sort: true,
                width: 150,
              },
              {
                field: "name",
                title: "中文名称",
                sort: true,
                width: 150,
              },
              {
                field: "description",
                title: "描述",
                width: 250,
              },
            ],
            queryColumns: [
              {
                field: "id",
                title: "英文名称",
              },
              {
                field: "name",
                title: "中文名称",
              },
            ],
          },
          url: "api/ubcs-code/ubcs-code/mdmEngineController/listCodeClassifyValueBySecOid",
          extraParams: {
            classifySecOid: item.oid,
            parentClassifyValueOid: item.parentClassifySecOid
              ? this.codeApplyForm[item.parentClassifySecOid]
              : "",
          },
        };
      } else if (item.secType == "coderefersec") {
        //引用码段
        params = JSON.parse(item.referValueInfo);
      }
      return params;
    },
    getDisabled(item) {
      if (item.secType === "codeclassifysec") {
        if (item.parentClassifySecOid) {
          if (!this.codeApplyForm[item.parentClassifySecOid]) {
            return true;
          } else {
            return false;
          }
        }
      }
    },
    isRequired(item) {
      return item.nullableFlag != "true";
    },
    //默认值
    getOptionList(item) {
      if (
        Array.isArray(item.fixedValueVOList) &&
        item.fixedValueVOList.length > 0
      ) {
        const configAttr = {
          key: "id",
          value: "id",
        };
        const optionList = item.fixedValueVOList.map((item) => {
          for (const key in configAttr) {
            if (Object.hasOwnProperty.call(configAttr, key)) {
              const element = configAttr[key];
              item[key] = item[element];
            }
          }
          return item;
        });
        return optionList;
      } else {
        return [];
      }
    },
  },