ludc
2023-06-06 9d50e7641ecad235e8b98583d65d6f485adf712e
Merge branch 'master' of http://dev.vci-tech.com:1065/r/ubcs
已修改33个文件
已添加2个文件
2509 ■■■■ 文件已修改
Source/UBCS-WEB/package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/api/omd/linkType.js 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Crud/Crud.vue 186 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/FormTemplate/CodeApply.vue 427 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/FormTemplate/FormTempalte.vue 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/FormTemplate/ResembleQuery.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/FormTemplate/index.vue 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/components/Tree/classifyTrees.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/main.js 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/MasterData/FormTempalteTest.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/MasterData/items.vue 186 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/integration/integrationIndex.vue 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/integration/integrationTransfer.vue 128 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/modeling/Business.vue 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/modeling/BusinessAdd.vue 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/modeling/LinkType.vue 160 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/src/views/modeling/LinkTypeAdd.vue 388 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/vue.config.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlFieldMappingAttrBO.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LinkTypeAttribute.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/BtmTreeVO.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeAttributeVO.java 256 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeVO.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java 64 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/LinkTypeController.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/ILinkTypeAttributeService.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmAttributeServiceImpl.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeAttributeServiceImpl.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeServiceImpl.java 102 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeAttributeWrapper.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeAttributeWrapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeWrapper.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/LinkTypeAttributeMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS-WEB/package.json
@@ -17,6 +17,7 @@
    "classlist-polyfill": "^1.2.0",
    "crypto-js": "^4.0.0",
    "element-ui": "^2.15.6",
    "instead": "^1.0.3",
    "js-base64": "^2.5.1",
    "js-cookie": "^2.2.0",
    "js-md5": "^0.7.3",
Source/UBCS-WEB/src/api/omd/linkType.js
@@ -11,7 +11,7 @@
    return request({
        url: '/api/ubcs-omd/link-type/get-from-table',
        method: 'get',
        params: {
        params: {
            domain: domain
        }
    })
@@ -58,7 +58,7 @@
    })
}
export const btmPage = (current,size,params) => {
export const linkPage = (current,size,params) => {
    return request ({
        url: '/api/ubcs-omd/link-type/page',
        method: 'get',
Source/UBCS-WEB/src/components/Crud/Crud.vue
@@ -1,60 +1,137 @@
<template>
  <basic-container>
    <avue-crud ref="crud"
               v-loading="loading"
               :data="data"
               :option="option"
               :page="page"
               @sort-change="sortChange"
               @selection-change="selectionChange"
               @on-load="onLoad">
      <template slot="menu">
        <el-button type="text">文字按钮</el-button>
      </template>
      <template slot="menuLeft">
          <div>
            <el-table :data="tableData" style="width: 100%" @cell-click="handleCellClick" @cell-dblclick="dbclick">
              <div v-for="(item,index) in this.tableHeadData" :key="index">
                <el-table-column :label="item.label" :prop="item.prop">
<!--              ç¼–辑和展示逻辑 -->
                  <template slot-scope="{ row }">
                  <el-input v-if="editingRow === row && editShow== item.prop" v-model="row[item.prop]" @blur="saveRow"></el-input>
                  <span v-else>{{row[item.prop]}}</span>
                </template>
                </el-table-column>
              </div>
              <el-table-column fixed="right" label="操作" width="120">
                <template slot-scope="scope">
                  <el-button size="small" type="text" @click.native.prevent="enumDeleteRow(scope.$index, tableData)">
                    ç§»é™¤
                  </el-button>
                </template>
              </el-table-column>
            </el-table>
            <template>
              <div style="display: flex;justify-content: right;margin-top: 15px">
                <el-button type="primary"  size="small">保存</el-button>
                <el-button size="small" @click="enumVisible=false">取消</el-button>
              </div>
            </template>
<!--    <avue-crud ref="crud"-->
<!--               v-loading="loading"-->
<!--               :data="data"-->
<!--               :option="option"-->
<!--               :page="page"-->
<!--               @sort-change="sortChange"-->
<!--               @selection-change="selectionChange"-->
<!--               @on-load="onLoad">-->
<!--      <template slot="menu">-->
<!--        <el-button type="text">文字按钮</el-button>-->
<!--      </template>-->
<!--      <template slot="menuLeft">-->
<!--      </template>-->
<!--    </avue-crud>-->
    <div class="testbox">
      <div style="margin-top: 10px;display: flex;flex-wrap: wrap;width: 100%;">
        <el-button size="small" type="primary" plain @click="addvisible=true">增加
          <FormTemplateDialog
            :visible.sync="addvisible"
            :type="add"
            :templateOid="this.templateOid"
            :codeClassifyOid="this.codeClassifyOid"
            :codeRuleOid="this.codeRuleOid"
            :disabledProp="disabledProp"
            :rowOid="rowOid"
          >
          </FormTemplateDialog></el-button>
        <el-button size="small" type="primary" plain @click="editvisible=true">编辑
          <FormTemplateDialog
            :visible.sync="editvisible"
            :type="edit"
            :templateOid="this.templateOid"
            :codeClassifyOid="this.codeClassifyOid"
            :codeRuleOid="this.codeRuleOid"
            :disabledProp="disabledProp"
            :rowOid="rowOid"
          ></FormTemplateDialog></el-button>
        <el-button size="small" type="primary" plain>批量导入申请</el-button>
        <el-button size="small" type="primary" plain>历史数据导入</el-button>
        <el-button size="small" type="primary" plain>批量申请编码</el-button>
        <el-button size="small" type="primary" plain>批量发布</el-button>
        <el-button size="small" type="primary" plain>查看流程历史</el-button>
        <el-button size="small" type="primary" plain>删除</el-button>
        <el-button size="small" type="primary" plain>发布</el-button>
        <el-button size="small" type="primary" plain>数据更改</el-button>
        <el-button size="small" type="primary" plain>回收</el-button>
        <el-button size="small" type="primary" plain>导出
          <transfer filter-placeholder="请输入拼音全拼或者拼音缩写" ></transfer>
        </el-button>
        <el-button size="small" type="primary" plain @click="findvisible=true">查询
        <advancedQuery  :visible.sync="findvisible" :options="this.options"></advancedQuery>
        </el-button>
        <el-button size="small" type="primary" plain>相似项查询</el-button>
        <el-button size="small" type="primary" plain style="margin-left: 1px;margin-top:10px">刷新</el-button>
        <el-input placeholder="请输入关键字按回车查询" style="width: 180px;margin-left: 5px;margin-top:10px" size="small"></el-input>
      </div>
      <el-row style="height: 700px;width: 100%">
        <el-table :data="tableData" style="" @cell-click="handleCellClick" max-height="700"  @selection-change="handleSelectionChange"  @sort-change="sortChange">
          <el-table-column
            type="selection"
            fixed
            width="55">
          </el-table-column>
          <el-table-column
            type="index"
            fixed
            label="序号"
            width="55">
          </el-table-column>
          <div v-for="(item,index) in this.tableHeadData" :key="index">
            <el-table-column :label="item.label" :prop="item.prop" :sortable="item.sortable" :width="item.width">
              <!-- ç¼–辑和展示逻辑 -->
              <template slot-scope="{ row }">
                <el-input v-if="editingRow === row && editShow== item.prop" v-model="row[item.prop]" @blur="saveRow"></el-input>
                <span v-else>{{row[item.prop]}}</span>
                <el-switch
                  v-if="editShow === 'true'"
                  v-model="row[item.prop]"
                  active-color="#13ce66"
                  inactive-color="#ff4949">
                </el-switch>
              </template>
            </el-table-column>
          </div>
      </template>
    </avue-crud>
<!--          <el-table-column fixed="right" label="操作" width="120" >-->
<!--            <template slot-scope="scope" >-->
<!--              <el-button size="small" type="text" @click.native.prevent="enumDeleteRow(scope.$index, tableData)">-->
<!--                ç§»é™¤-->
<!--              </el-button>-->
<!--            </template>-->
<!--          </el-table-column>-->
        </el-table>
      </el-row>
    </div>
    <div class="block" style="display: flex;justify-content: flex-end">
      <el-pagination
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :current-page="currentPage4"
        :page-sizes="page.pageSizes"
        :page-size="page.pageSizes"
        layout="total, sizes, prev, pager, next, jumper"
        :total="page.total">
      </el-pagination>
    </div>
  </basic-container>
</template>
<script>
import {MasterTable, TableData} from "@/api/GetItem";
export default {
  name: "Crud.vue",
  data() {
    return {
      addvisible:false,
      editvisible:false,
      findvisible:false,
      templateOid: "78B8C7C5-A042-0B96-FE6D-65421451782A",
      codeClassifyOid: "4524E801-6CC6-92E8-1AC3-2AB9604E8F96",
      codeRuleOid: "B95872A6-9CEA-D490-8F1B-9D26548CAF96",
      rowOid: '6EF696C3-CD87-0E7C-1EA1-8DE3913A95C9',
      disabledProp: ["id"],
      editingRow:null,
      editShow: "",
      editAttr:"",
      loading: false,
      data: [],
      options:{},
      option: {
        //默认高度,
        align: 'center',
@@ -86,12 +163,7 @@
    }
  },
  computed:{
    editable(){
      this.tableData.forEach(item=>{
        this.items=item
      })
      return this.editShow === this.editingRow[this.items.prop];
    }
  },
  created() {
    this.CrudHeaderRend();
@@ -101,13 +173,15 @@
    this.doLayout()
  },
  methods: {
    handleSizeChange(val){
      console.log(val)
    },
    // ç›‘听单元格点击事件并存储正在编辑的行
    handleCellClick(row, column) {
      this.editingRow = row;
      this.editShow = column.property;
      console.log( this.editingRow['name'], this.editShow)
    },
    //枚举注入删除
    //删除
    enumDeleteRow(row) {
      console.log(row)
      this.tableData.splice(row, 1)
@@ -128,6 +202,7 @@
        functionId: 5,
        _: 1685067339479
      }).then(res => {
        this.options=res.data.tableDefineVO.seniorQueryColumns
        this.List = res.data.tableDefineVO.cols[0];
        this.List.forEach(item => {
          let columnItem = {
@@ -148,7 +223,7 @@
        templateOid: "A12826E4-2B66-6D56-DE30-92BB1D7F607F",
        codeClassifyOid: "D9CF223F-317D-71EB-BD11-433A94CAD9F3",
        page: this.page.currentPage,
        limit: this.page.pageSize,
        limit:9,
        _: 1685089123575
      }).then(res => {
        this.page.total = res.data.total;
@@ -181,7 +256,6 @@
    },
    //分页刷新
    async onLoad(val) {
      console.log(val)
      await TableData({
        templateOid: "A12826E4-2B66-6D56-DE30-92BB1D7F607F",
        codeClassifyOid: "D9CF223F-317D-71EB-BD11-433A94CAD9F3",
@@ -193,13 +267,21 @@
      })
    },
    //多选
    selectionChange(row) {
    handleSelectionChange(row) {
      console.log(row)
    }
  }
}
</script>
<style scoped>
<style lang="scss" scoped>
.testbox {
  .el-table--scrollable-x .el-table__body-wrapper {
    overflow: auto !important;
  }
  .el-table__fixed-right-patch {
    background-color: #f5f7fa !important;
  }
}
</style>
Source/UBCS-WEB/src/components/FormTemplate/CodeApply.vue
@@ -1,7 +1,6 @@
<template>
  <FormTempalte
    ref="FormTempalte"
    :visible="visible"
    :selfColumnType="selfColumnType"
    :selfColumnConfig="selfColumnConfig"
    :columnList="columnList"
@@ -10,14 +9,13 @@
<script>
import { getCodeRule } from "@/api/formTemplate.js";
import FormTempalte from "./FormTempalte.vue";
export default {
  name: "CodeApply",
  components: { FormTempalte },
  components: { FormTempalte: () => import('./FormTempalte.vue') },
  props: {
    visible: {
      type: Boolean,
      default: false
      default: false,
    },
    codeClassifyOid: {
      type: String,
@@ -59,7 +57,406 @@
          },
        },
      },
      columnList: [],
      columnList: [
        {
          btmname: "codebasicsec",
          checkInBy: "",
          checkInTime: null,
          checkOutBy: "",
          checkOutTime: null,
          codeDateFormatStr: "",
          codeFillFlag: "",
          codeFillLength: "",
          codeFillLimit: 0,
          codeFillSeparator: "",
          codeFillType: "",
          codeFillTypeText: "",
          codeGetValueType: "",
          codeGetValueTypeText: "",
          codeLevelType: "",
          codeLevelTypeText: "",
          codeLevelValue: 0,
          codeSecLength: "10",
          codeSecLengthType: "code_sec_length_variable",
          codeSecLengthTypeText: "",
          componentCodeFlag: "false",
          copyFromVersion: "",
          createTime: "2023-06-02 10:23:33.000",
          creator: "1",
          customCodeSerialClass: "",
          data: null,
          description: "",
          displayFlag: "false",
          filterSql: "",
          firstR: "1",
          firstV: "1",
          fixedValueVOList: [
            {
              btmname: "codefixedvalue",
              checkInBy: "",
              checkInTime: null,
              checkOutBy: "",
              checkOutTime: null,
              codefixedsecoid: "5591ED23-D218-8B84-9789-1E5EB21A49B9",
              codefixedsecoidName: null,
              copyFromVersion: "",
              createTime: "2023-06-02 10:47:45.000",
              creator: "1",
              data: null,
              description: "",
              firstR: "1",
              firstV: "1",
              id: "002",
              lastModifier: "1",
              lastModifyTime: "2023-06-02 10:47:45.000",
              lastR: "1",
              lastV: "1",
              lcStatus: "Exist",
              lcStatusText: "存在",
              lctid: "defaultLC",
              name: "",
              nameOid: "B8BB82F0-9B9E-3E7C-4324-62F13A64B369",
              oid: "375AE030-DCB2-B116-1C71-DA1AB971E249",
              ordernum: 0,
              owner: "1",
              revisionOid: "9BF1CABA-EB6D-0B80-0938-D4DC779D5AF0",
              revisionRule: "",
              revisionSeq: 1,
              revisionValue: "",
              secretGrade: null,
              secretGradeText: "",
              ts: "2023-06-02 10:47:45.635",
              versionRule: "0",
              versionSeq: 1,
              versionValue: "1",
            },
            {
              btmname: "codefixedvalue",
              checkInBy: "",
              checkInTime: null,
              checkOutBy: "",
              checkOutTime: null,
              codefixedsecoid: "5591ED23-D218-8B84-9789-1E5EB21A49B9",
              codefixedsecoidName: null,
              copyFromVersion: "",
              createTime: "2023-06-02 10:47:42.000",
              creator: "1",
              data: null,
              description: "",
              firstR: "1",
              firstV: "1",
              id: "001",
              lastModifier: "1",
              lastModifyTime: "2023-06-02 10:47:42.000",
              lastR: "1",
              lastV: "1",
              lcStatus: "Exist",
              lcStatusText: "存在",
              lctid: "defaultLC",
              name: "",
              nameOid: "804FA254-1158-C355-9CE2-7CA444955AFC",
              oid: "821F6250-C763-FB0E-92F5-A9C07F1B951C",
              ordernum: 0,
              owner: "1",
              revisionOid: "6CF50C9D-2606-948A-03B1-26158627CE33",
              revisionRule: "",
              revisionSeq: 1,
              revisionValue: "",
              secretGrade: null,
              secretGradeText: "",
              ts: "2023-06-02 10:47:42.527",
              versionRule: "0",
              versionSeq: 1,
              versionValue: "1",
            },
          ],
          getValueClass: "",
          id: "0001",
          lastModifier: "1",
          lastModifyTime: "2023-06-02 10:23:33.000",
          lastR: "1",
          lastV: "1",
          lcStatus: "Exist",
          lcStatusText: "存在",
          lctid: "defaultLC",
          matchClassifyValueFlag: "",
          name: "固定码段",
          nameOid: "C01CA64B-8358-D3A7-D38D-9DE7A5D748C8",
          nullableFlag: "false",
          oid: "5591ED23-D218-8B84-9789-1E5EB21A49B9",
          orderNum: 1,
          owner: "1",
          parentClassifySecOid: "",
          parentClassifySecText: "",
          pkCodeRule: "B95872A6-9CEA-D490-8F1B-9D26548CAF96",
          referAttributeId: "",
          referAttributeName: "",
          referBtmId: "",
          referBtmName: "",
          referCodeClassifyOid: "",
          referCodeClassifyOidName: "",
          referConfig: "",
          referValueInfo: "",
          revisionOid: "EE7A9BC0-FEF3-061B-A750-132121D86D83",
          revisionRule: "",
          revisionSeq: 1,
          revisionValue: "",
          secretGrade: null,
          secretGradeText: "",
          sectype: "codefixedsec",
          sectypeText: "固定码段",
          serialDependFlag: "false",
          serialDependOrder: 0,
          serialStart: "",
          serialStep: 0,
          ts: "2023-06-02 10:23:33.733",
          valueCutLength: 0,
          valueCutType: "code_cut_none",
          valueCutTypeText: "不截取",
          versionRule: "0",
          versionSeq: 1,
          versionValue: "1",
        },
        {
          btmname: "codebasicsec",
          checkInBy: "",
          checkInTime: null,
          checkOutBy: "",
          checkOutTime: null,
          codeDateFormatStr: "",
          codeFillFlag: "",
          codeFillLength: "",
          codeFillLimit: 0,
          codeFillSeparator: "0",
          codeFillType: "code_fill_right",
          codeFillTypeText: "",
          codeGetValueType: "",
          codeGetValueTypeText: "",
          codeLevelType: "",
          codeLevelTypeText: "",
          codeLevelValue: 0,
          codeSecLength: "10",
          codeSecLengthType: "",
          codeSecLengthTypeText: "",
          componentCodeFlag: "false",
          copyFromVersion: "",
          createTime: "2023-06-02 10:24:07.000",
          creator: "1",
          customCodeSerialClass: "",
          data: null,
          description: "可变码段",
          displayFlag: "false",
          filterSql: "",
          firstR: "1",
          firstV: "1",
          fixedValueVOList: null,
          getValueClass: "",
          id: "0002",
          lastModifier: "1",
          lastModifyTime: "2023-06-02 10:24:07.000",
          lastR: "1",
          lastV: "1",
          lcStatus: "Exist",
          lcStatusText: "存在",
          lctid: "defaultLC",
          matchClassifyValueFlag: "",
          name: "可变码段",
          nameOid: "02AED8DD-C40D-7E00-C88A-3DB65A3027A4",
          nullableFlag: "false",
          oid: "A4508759-4213-2F07-04ED-A8C224303F44",
          orderNum: 2,
          owner: "1",
          parentClassifySecOid: "",
          parentClassifySecText: "",
          pkCodeRule: "B95872A6-9CEA-D490-8F1B-9D26548CAF96",
          referAttributeId: "",
          referAttributeName: "",
          referBtmId: "",
          referBtmName: "",
          referCodeClassifyOid: "",
          referCodeClassifyOidName: "",
          referConfig: "",
          referValueInfo: "",
          revisionOid: "E4C77B6E-13AE-55EB-4147-64B4526BFEE4",
          revisionRule: "",
          revisionSeq: 1,
          revisionValue: "",
          secretGrade: null,
          secretGradeText: "",
          sectype: "codevariablesec",
          sectypeText: "可变码段",
          serialDependFlag: "false",
          serialDependOrder: 0,
          serialStart: "",
          serialStep: 0,
          ts: "2023-06-02 10:24:07.804",
          valueCutLength: 0,
          valueCutType: "",
          valueCutTypeText: "",
          versionRule: "0",
          versionSeq: 1,
          versionValue: "1",
        },
        {
          btmname: "codebasicsec",
          checkInBy: "",
          checkInTime: null,
          checkOutBy: "",
          checkOutTime: null,
          codeDateFormatStr: "",
          codeFillFlag: "",
          codeFillLength: "",
          codeFillLimit: 0,
          codeFillSeparator: "",
          codeFillType: "",
          codeFillTypeText: "",
          codeGetValueType: "",
          codeGetValueTypeText: "",
          codeLevelType: "",
          codeLevelTypeText: "",
          codeLevelValue: 0,
          codeSecLength: "10",
          codeSecLengthType: "code_sec_length_static",
          codeSecLengthTypeText: "",
          componentCodeFlag: "false",
          copyFromVersion: "",
          createTime: "2023-06-02 10:25:07.000",
          creator: "1",
          customCodeSerialClass: "",
          data: null,
          description: "分类码段子",
          displayFlag: "false",
          filterSql: "",
          firstR: "1",
          firstV: "1",
          fixedValueVOList: [
            {
              btmname: "codefixedvalue",
              checkInBy: "",
              checkInTime: null,
              checkOutBy: "",
              checkOutTime: null,
              codefixedsecoid: "8FD660BF-BA04-AB4F-8076-B5C43845621B",
              codefixedsecoidName: null,
              copyFromVersion: "",
              createTime: "2023-06-02 10:43:44.000",
              creator: "1",
              data: null,
              description: "",
              firstR: "1",
              firstV: "1",
              id: "000101",
              lastModifier: "1",
              lastModifyTime: "2023-06-02 10:43:44.000",
              lastR: "1",
              lastV: "1",
              lcStatus: "Exist",
              lcStatusText: "存在",
              lctid: "defaultLC",
              name: "",
              nameOid: "D135277F-E638-EB02-CEF1-AD99B889CA94",
              oid: "F7FEFFB7-0832-8CAF-2965-50757D01B878",
              ordernum: 0,
              owner: "1",
              revisionOid: "AF362124-06FD-F209-442F-8A13842CEB40",
              revisionRule: "",
              revisionSeq: 1,
              revisionValue: "",
              secretGrade: null,
              secretGradeText: "",
              ts: "2023-06-02 10:43:44.838",
              versionRule: "0",
              versionSeq: 1,
              versionValue: "1",
            },
            {
              btmname: "codefixedvalue",
              checkInBy: "",
              checkInTime: null,
              checkOutBy: "",
              checkOutTime: null,
              codefixedsecoid: "8FD660BF-BA04-AB4F-8076-B5C43845621B",
              codefixedsecoidName: null,
              copyFromVersion: "",
              createTime: "2023-06-02 10:43:49.000",
              creator: "1",
              data: null,
              description: "",
              firstR: "1",
              firstV: "1",
              id: "000102",
              lastModifier: "1",
              lastModifyTime: "2023-06-02 10:43:49.000",
              lastR: "1",
              lastV: "1",
              lcStatus: "Exist",
              lcStatusText: "存在",
              lctid: "defaultLC",
              name: "",
              nameOid: "4F0F0F48-6146-5E62-7E4C-C1ED5E7D788C",
              oid: "F11E47E7-1360-5914-BA03-B6844E37AFB4",
              ordernum: 0,
              owner: "1",
              revisionOid: "B4797510-7232-B6FF-077D-918F9B36D3C3",
              revisionRule: "",
              revisionSeq: 1,
              revisionValue: "",
              secretGrade: null,
              secretGradeText: "",
              ts: "2023-06-02 10:43:49.254",
              versionRule: "0",
              versionSeq: 1,
              versionValue: "1",
            },
          ],
          getValueClass: "",
          id: "00031",
          lastModifier: "1",
          lastModifyTime: "2023-06-02 10:25:07.000",
          lastR: "1",
          lastV: "1",
          lcStatus: "Exist",
          lcStatusText: "存在",
          lctid: "defaultLC",
          matchClassifyValueFlag: "",
          name: "分类码段子",
          nameOid: "69BEE3EC-F560-1C41-F56B-107F5B43C051",
          nullableFlag: "false",
          oid: "8FD660BF-BA04-AB4F-8076-B5C43845621B",
          orderNum: 4,
          owner: "1",
          parentClassifySecOid: "",
          parentClassifySecText: "",
          pkCodeRule: "B95872A6-9CEA-D490-8F1B-9D26548CAF96",
          referAttributeId: "",
          referAttributeName: "",
          referBtmId: "",
          referBtmName: "",
          referCodeClassifyOid: "",
          referCodeClassifyOidName: "",
          referConfig: "",
          referValueInfo: "",
          revisionOid: "EA98821E-60A0-1D18-4F70-96B0E0740B44",
          revisionRule: "",
          revisionSeq: 1,
          revisionValue: "",
          secretGrade: null,
          secretGradeText: "",
          sectype: "codefixedsec",
          sectypeText: "固定码段",
          serialDependFlag: "false",
          serialDependOrder: 0,
          serialStart: "",
          serialStep: 0,
          ts: "2023-06-02 10:25:07.764",
          valueCutLength: 0,
          valueCutType: "code_cut_none",
          valueCutTypeText: "不截取",
          versionRule: "0",
          versionSeq: 1,
          versionValue: "1",
        },
      ],
    };
  },
  created() {
@@ -73,13 +470,14 @@
    getCodeRule() {
      getCodeRule({ codeClassifyOid: this.codeClassifyOid }).then((res) => {
        if (res.data && res.data.code === 200) {
          this.defaultValue = res.data.data;
          this.columnList = res.data.data.secVOList || [];
          console.log(res.data.data.secVOList, 'res.data.data.secVOList');
          this.codeRuleOid = res.data.data.oid;
          // this.defaultValue = res.data.data;
          // this.columnList = res.data.data.secVOList || [];
          // this.codeRuleOid = res.data.data.oid;
          this.$nextTick(() => {
            this.$refs.FormTempalte.init(res.data.data.secVOList)
          })
            // æµ‹è¯•数据展示
            // this.$refs.FormTempalte.init(res.data.data.secVOList);
            this.$refs.FormTempalte.init(this.columnList);
          });
        }
      });
    },
@@ -114,11 +512,10 @@
      }
    },
    async validate() {
      return await this.$refs.FormTempalte.validate()
    }
      return await this.$refs.FormTempalte.validate();
    },
  },
  watch: {
  },
  watch: {},
};
</script>
Source/UBCS-WEB/src/components/FormTemplate/FormTempalte.vue
@@ -197,7 +197,7 @@
          tooltips: "请输入数字",
          type: "text",
          unique: false,
          verify: "/[0-9]/",
          verify: /^[0-9]+$/g,
        },
        {
          comboxKey: null,
@@ -513,7 +513,9 @@
      })
        .then((res) => {
          if (res.status === 200) {
            this.templateRender(res.data.formDefineVO.items);
            this.templateRender(this.testItems);
            // æµ‹è¯•数据展示
            // this.templateRender(res.data.formDefineVO.items);
            this.$emit("getFormTemplateEnd", res.data);
          }
        })
@@ -575,14 +577,12 @@
          format: formItem.dateFormate,
          keyAttr: formItem.keyAttr,
          value: formItem.defaultValue,
          // tip: formItem.tooltips,
          // tipPlacement: "right",
          placeholder: formItem.inputTip,
          comboxKey: formItem.comboxKey,
          display: !formItem.hidden,
          maxlength: formItem.maxlength,
          filterable: true,
          referConfig:formItem.referConfig,
          referConfig: formItem.referConfig,
          change: () => {
            this.changeFun(formItem.displayExtension, formItem.prop);
          },
@@ -618,7 +618,8 @@
      this.formIndex++;
      this.loading = false;
      this.geDictData(dictKeys);
      this.getFormDetail()
      // æµ‹è¯•数据展示
      // this.getFormDetail();
    },
    // ä½¿ç”¨ä¼ å…¥çš„表单数据配置
    resetFormConfig(formItem) {
@@ -709,26 +710,28 @@
      });
    },
    // è¡¨å•校验
     validate() {
    validate() {
      return new Promise((resolve) => {
        this.$refs.form.validate((valid, done, msg) => {
          console.error(msg, valid)
        if (valid) {
          resolve(true)
        } else {
          resolve(false);
        }
          console.error(msg, valid);
          if (valid) {
            done();
            resolve(true);
          } else {
            resolve(false);
          }
        });
      });
      })
    },
    // èŽ·å–è¡¨å•æ•°æ®
    // èŽ·å–è¡¨å•è¯¦æƒ…æ•°æ®
    getFormDetail() {
      if (this.type === 'add') return
      getFormDetail({templateOid: this.templateOid, oid: this.rowOid}).then(res => {
        console.log(res, 'res');
      })
    }
      if (this.type === "add") return;
      getFormDetail({ templateOid: this.templateOid, oid: this.rowOid }).then(
        (res) => {
          console.log(res, "res");
        }
      );
    },
  },
  watch: {
    // è¡¨å•数据修改反馈到父组件
Source/UBCS-WEB/src/components/FormTemplate/ResembleQuery.vue
@@ -37,6 +37,7 @@
      type="detail"
      :visible.sync="formTemplateVisible"
      :templateOid="this.resembleTemplateOid"
      :rowOid="rowOid"
      :codeClassifyOid="this.resembleCodeClassifyOid"
    ></FormTemplateDialog>
  </div>
@@ -44,11 +45,10 @@
<script>
import { findLike } from "@/api/formTemplate.js";
import FormTemplateDialog from "./index.vue";
export default {
  name: "ResembleQuery",
  components: { FormTemplateDialog },
  components: { FormTemplateDialog: () => import('./index.vue') },
  props: {
    column: {
      type: Array,
@@ -79,10 +79,13 @@
    return {
      formTemplateVisible: false,
      activeName: "findlike",
      tableData: [],
      tableData: [
        {id: '*****', materialclassifyText: '001', tuhao: 'tuhao', iod: '123123131312'}
      ],
      loading: false,
      resembleTemplateOid: "78B8C7C5-A042-0B96-FE6D-65421451782A",
      resembleCodeClassifyOid: "4524E801-6CC6-92E8-1AC3-2AB9604E8F96",
      rowOid: '',
      defaultValue: {},
      secVOList: [],
      defaultKeys: [
@@ -136,12 +139,15 @@
      params = Object.assign(params, defaultValue);
      findLike(params).then((res) => {
        this.loading = false;
        this.tableData = res.data.data || [];
        // this.tableData = res.data.data || [];
      });
    },
    openFormTemlpate(row) {
      this.$forceUpdate()
      console.log(row, 'row.oid');
      this.codetemplateoid = row.codetemplateoid;
      this.rowOid = row.oid
      this.formTemplateVisible = true;
    },
    getDefaultValueAndFormValues(form) {
Source/UBCS-WEB/src/components/FormTemplate/index.vue
@@ -13,14 +13,22 @@
      v-bind="$attrs"
      :visible="visible"
      :type="type"
      :rowOid="rowOid"
      v-if="dialogVisible"
      ref="FormTempalte"
      @getFormTemplateEnd="getFormTemplate"
      @getFormData="getFormData"
    ></FormTempalte>
    <div class="tab_box" v-if="type !== 'detail' && dialogVisible && (showCodeApply || showResembleQuery)">
      <el-tabs v-model="activeName" type="border-card">
    <div
      class="tab_box"
      v-if="
        type !== 'detail' &&
        dialogVisible &&
        (showCodeApply || showResembleQuery)
      "
    >
      <el-tabs v-model="activeName" type="border-card" @tab-click="handleClick">
        <el-tab-pane label="码值申请" name="codeApply" v-if="showCodeApply">
          <CodeApply
            ref="CodeApply"
@@ -48,7 +56,10 @@
      <el-button @click="submit()" type="primary" :loading="submitBtnLoading"
        >ç¡® å®š</el-button
      >
      <el-button @click="resembleQuerySubmit" type="primary" v-if="showResembleQuery"
      <el-button
        @click="resembleQuerySubmit"
        type="primary"
        v-if="showResembleQuery"
        >相似像查询</el-button
      >
    </div>
@@ -79,6 +90,7 @@
      type: String,
      default: "80%",
    },
    rowOid: ''
  },
  data() {
    return {
@@ -88,6 +100,7 @@
      resembleTableColumn: [],
      secVOList: [],
      form: {},
      activeName: "",
    };
  },
  created() {},
@@ -101,29 +114,25 @@
      },
    },
    showCodeApply() {
      if (this.type === "add") {
        if (this.hasResemble && this.secVOList.length === 0) {
          return false;
        }
      } else {
        return false;
      }
      // æµ‹è¯•数据展示
      // if (this.type === "add") {
      //   if (this.hasResemble && this.secVOList.length === 0) {
      //     return false;
      //   }
      // } else {
      //   return false;
      // }
      return true;
    },
    showResembleQuery() {
      return this.hasResemble;
    },
    activeName() {
      return (
        (this.showCodeApply && "codeApply") ||
        (this.showResembleQuery && "resembleQuery")
      );
    },
  },
  methods: {
    openDialog() {
      this.$nextTick(() => {
        this.$refs.FormTempalte.init();
        this.$refs.CodeApply.getCodeRule();
      });
    },
    close() {
@@ -138,6 +147,9 @@
        data.resembleTableVO.cols &&
        data.resembleTableVO.cols.length > 0;
      this.resembleTableColumn = data.resembleTableVO.cols || [];
      this.activeName =
        (this.showCodeApply && "codeApply") ||
        (this.showResembleQuery && "resembleQuery");
    },
    getFormData(form) {
      this.form = form;
@@ -145,12 +157,21 @@
    resembleQuerySubmit() {
      this.$refs.resembleQueryRef.resembleQuery(this.form);
    },
    handleClick() {
      if (this.activeName === 'resembleQuery') {
        this.resembleQuerySubmit()
      }
    },
    async submit() {
      const formValidate = await this.$refs.FormTempalte.validate();
      let codeValidate = true;
      if (this.showCodeApply) {
        const codeValidate = this.$refs.CodeApply.validate();
        console.log(formValidate, codeValidate);
        codeValidate = await this.$refs.CodeApply.validate();
      }
      this.$emit("submit", {
        form: this.form,
        flag: formValidate && codeValidate,
      });
    },
  },
};
Source/UBCS-WEB/src/components/Tree/classifyTrees.vue
@@ -412,8 +412,7 @@
          }
        })
        //调用修改属性名方法
        this.ModifyProperties(this.Treedata, 'text', 'label');
        this.ModifyProperties(this.CloneTreedata, 'text', 'label');
        this.ModifyProperties(this.CloneTreedata, 'name', 'label');
      }).catch(res => {
        this.$message.error(res)
      })
Source/UBCS-WEB/src/main.js
@@ -46,6 +46,7 @@
import TableCrud from "@/components/Crud/Crud"
import originalAdd from "@/views/modeling/originalAdd"
import FormTemplateDialog from "@/components/FormTemplate/index"
import linkTypeAdd from "@/views/modeling/LinkTypeAdd"
// å°†å·¥å…·å‡½æ•°æ·»åŠ åˆ°å…¨å±€
import utilFunc from './util/func'
@@ -93,6 +94,7 @@
Vue.component('referBtmTypeCrudDialog',referBtmTypeCrudDialog)
Vue.component('referSelectBtmAttrDialog',referSelectBtmAttrDialog)
Vue.component('FormTemplateDialog',FormTemplateDialog)
Vue.component('LinkTypeAdd',linkTypeAdd)
// åŠ è½½ç›¸å…³url地址
Object.keys(urls).forEach(key => {
Source/UBCS-WEB/src/views/MasterData/FormTempalteTest.vue
@@ -10,6 +10,7 @@
      :codeRuleOid="this.codeRuleOid"
      :disabledProp="disabledProp"
      :rowOid="rowOid"
      @submit="submit"
    ></FormTemplateDialog>
    <ResembleQueryDialog
      :visible.sync="visible1"
@@ -40,5 +41,10 @@
      rowOid: '6EF696C3-CD87-0E7C-1EA1-8DE3913A95C9'
    };
  },
  methods: {
    submit(data) {
      console.log(data);
    }
  }
};
</script>
Source/UBCS-WEB/src/views/MasterData/items.vue
@@ -2,7 +2,12 @@
    <el-container>
      <el-aside>
        <basic-container style="height: 85vh; max-height: 155vh; overflow-y: scroll;">
          <avue-tree  :option="option" :data="data"  v-model="form" style="height: 80.5vh;padding-top: 5px;padding-bottom: 30px"></avue-tree>
          <avue-tree ref="tree" v-model="CloneTreeAvueform" v-loading="loading" :data="CloneTreedata" :defaultExpandAll="false"
                     :option="Treeoption"
                     style="height: 80.5vh;padding-top: 5px;padding-bottom: 30px"
                     @node-click=" nodeClick"
                     @check-change="checkChange"
          ></avue-tree>
        </basic-container>
      </el-aside>
      <el-main>
@@ -12,61 +17,144 @@
</template>
<script>
import {getAtrrList, TreeCheckDel, TreeDel, TreeSave} from "@/api/template/templateAttr";
export default {
  name: "items.vue",
  data(){
    return{
      form:{},
      data:[
        {
          value:0,
          label:'一级部门',
          children:[
            {
              value:1,
              label:'一级部门1',
            },{
              value:2,
              label:'一级部门2',
            }
          ]
        },{
          value:3,
          label:'二级部门',
          children:[
            {
              value:4,
              label:'二级部门1',
            },{
              value:5,
              label:'二级部门2',
            }
          ]
      CloneTreeAvueform:{},
      loading:false,
      CloneTreedata:[],
      Treeoption: {
        addBtn: false,
        editBtn: false,
        delBtn: false,
        defaultExpandAll: false,
        menu: false,
        // //这个是多选
        // multiple: true,
      },
      nodeClickList: "",
    }
  },
  created() {
    this.getAttr()
  },
  methods:{
    getAttr() {
      getAtrrList().then(res => {
        this.Treedata = res.data;
        this.CloneTreedata = res.data;
        this.Treedata.forEach((item) => {
          for (let i = 0; i < this.Treedata.length; i++) {
            this.Treedata[i].value = i;
          }
        })
        //调用修改属性名方法
        this.ModifyProperties(this.CloneTreedata, 'name', 'label');
      }).catch(res => {
        this.$message.error(res)
      })
    },
    //定义一个修改数据属性名的方法
    ModifyProperties(obj, oldName, newName) {
      for (let key in obj) {
        if (key === oldName) {
          obj[newName] = obj[key];
          delete obj[key];
        }
      ],
      option:{
        title:'我是标题',
        filterText:"搜索关键字自定义",
        defaultExpandAll:true,
        addBtnText:'新增自定义文案',
        editBtnText:'修改自定义文案',
        delBtnText:'删除自定义文案',
        defaultExpandedKeys:[1],
        height:900,
        formOption:{
          labelWidth:100,
          column:[{
            label:'自定义项',
            prop:'label'
          }],
        },
        props:{
          labelText:'标题',
          label:'label',
          value:'value',
          children:'children'
        if (typeof obj[key] === 'object') {
          this.ModifyProperties(obj[key], oldName, newName);
        }
      }
    },
    //树节点添加按钮
    TreeAdd() {
      this.TreeAddFormVisible = true;
      // åˆ¤æ–­å½“前是否有点击子项
      if (this.nodeClickList !== "") {
        this.TreeFlag = true
      }
    },
    //树节点添加事件
    TreeAddHandler() {
      const data = this.TreeAddform
      this.$set(data, "parentCodeClassifyOid", this.nodeClickList.oid)
      TreeSave(data).then(() => {
        this.$message({
          type: 'success',
          message: '添加成功!'
        });
        this.getAttr();
        this.TreeAddFormVisible = false
        this.TreeAddform = ""
      }).catch(res => {
        this.$message({
          type: 'warning',
          message: res
        });
      })
    },
    //树节点删除按钮
    TreeDel() {
      this.$confirm('是否删除当前选择的分类,将会把子分类一并删除,如果存在编码数据将不能被删除,是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
        customClass: 'my-messagebox',
      }).then(() => {
        TreeCheckDel(this.nodeClickList).then(res => {
          if (res.data.data) {
            TreeDel(this.nodeClickList).then(() => {
              this.$message({
                type: 'success',
                message: '删除成功!'
              });
              this.getAttr();
            }).catch(res => {
              this.$message({
                type: 'warning',
                message: res
              });
            })
          } else {
            this.$confirm('当前数据包含有下级数据,要删除的话会和下级数据一起删除,你确认继续?', '提示', {
              confirmButtonText: '确定',
              cancelButtonText: '取消',
              type: 'warning',
              customClass: 'my-messageboxs',
            }).then(() => {
              TreeDel(this.nodeClickList).then(() => {
                this.$message({
                  type: 'success',
                  message: '删除成功!'
                });
                this.getAttr();
              }).catch(res => {
                this.$message({
                  type: 'warning',
                  message: res
                });
              })
            }).catch(() => {
              this.$message({
                type: 'info',
                message: '已取消删除'
              });
            });
          }
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        });
      });
    },
    nodeClick(data){
      this.nodeClickList = data
      console.log(data)
    }
  }
}
Source/UBCS-WEB/src/views/integration/integrationIndex.vue
@@ -30,8 +30,8 @@
                    <el-card>
                        <avue-crud :table-loading="loading" :data="mappingData" :option="optionMapping" ref="crudMapping"
                            @row-update="handleMapingUpdate" @row-click="handleMapingClick"
                            @row-dblclick="handleMapingRowClick" @selection-change="selectionChange"
                            @select="setCurrentRow" @select-all="handleSelectAll">
                            @row-dblclick="handleMapingRowClick" @selection-change="selectionChange" @select="setCurrentRow"
                            @select-all="handleSelectAll">
                            <template slot="menuLeft">
                                <el-button icon="el-icon-plus" size="small" type="primary" :disabled="disabledPush" @click="dialogPush = true">新 å¢ž
                                </el-button>
@@ -50,7 +50,7 @@
                </el-card>
            </el-main>
        </el-container>
        <el-dialog title="编码属性" :visible.sync="dialogPush" append-to-body="true" destroy-on-close width="30%"
        <!-- <el-dialog title="编码属性" :visible.sync="dialogPush" append-to-body="true" destroy-on-close width="30%"
            :before-close="handleClose">
            <el-form :model="form">
                <el-form-item label="查询条件" label-width="70px" size="small">
@@ -64,61 +64,21 @@
                <el-button @click="dialogPush = false">取 æ¶ˆ</el-button>
                <el-button type="primary" @click="handelTransferSave">保 å­˜</el-button>
            </span>
        </el-dialog>
        </el-dialog> -->
        <integration-transfer :visible.sync="dialogPush" :data="transferData" :props="transferProps"
            @save="handelTransferSave"></integration-transfer>
    </div>
</template>
<script>
import transfer from '@/components/transfer/index'
import integrationTransfer from './integrationTransfer.vue'
import pinyin from 'js-pinyin'
import { referCodeClassifyTree, referTree, gridAttrMapping, gridAttrRanges, batchAddSave, listCodeAttributeByClassId, syncClassifyModel } from '@/api/integration/integration.js'
export default {
    components: {
        transfer
        integrationTransfer
    },
    name:'Integration',
    name: 'Integration',
    data() {
        const mappingData = [
            { "oid": "38CF1759-FBF3-44E7-AC45-F6E9A9C3B322", "id": "", "name": "", "description": "", "revisionOid": "b9065e46-6d03-4d11-b1a6-6cffc54e6835", "nameOid": "e6e429f2-0539-4ada-8174-43b37625e7d9", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-799D8-6721-3D79-8EE3-75DAF0680B7E", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890764", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "createtime", "sourceAttrName": "创建时间", "viewModelName": "", "viewName": "销售视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 0 }, { "oid": "BB3FAA38-636E-410F-A995-F9BC38EBFF01", "id": "", "name": "", "description": "", "revisionOid": "c4500a61-0c5b-4d3e-b0ea-439203273255", "nameOid": "74d13371-e8b7-49c2-b184-f9b8339a4855", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-9368E-9BA8-38E8-73F3-7D0531A22009", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890764", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "lastmodifier", "sourceAttrName": "最后修改人", "viewModelName": "", "viewName": "销售视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 1 }, { "oid": "B730F997-9D98-46DA-B783-ABF256898B2C", "id": "", "name": "", "description": "", "revisionOid": "df82c828-5c88-4725-b362-88863d28c273", "nameOid": "132ed359-3464-41cb-89bf-e36b30fb7b5e", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-B5416-4928-CFB8-84F5-1955AA890762", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890762", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "lastmodifytime", "sourceAttrName": "最后修改时间", "viewModelName": "", "viewName": "基本视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 2 }, { "oid": "354864DA-D613-4013-AEE5-803F1A972F77", "id": "", "name": "", "description": "", "revisionOid": "2e819333-6af0-4cc5-bc35-27494f825d46", "nameOid": "21b1d215-20b2-47e1-9225-a6b5b8b825b5", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-0FED7-90B6-BAF8-B558-2A4693CAAD83", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890762", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "createcompany", "sourceAttrName": "创建公司", "viewModelName": "", "viewName": "基本视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 3 }, { "oid": "D8EDCA74-E0CB-452A-9E3C-7194061B9E8F", "id": "", "name": "", "description": "", "revisionOid": "d3474951-f35d-437b-818d-24dc1bd71e79", "nameOid": "b44b9c81-644f-47cb-babe-b19a9d532354", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-1469D-F1E9-6A31-21B9-E5FF7A03BBEA", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890762", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "kucunwl", "sourceAttrName": "库存物料", "viewModelName": "", "viewName": "基本视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 4 }, { "oid": "471DAA41-AD8B-4289-BDF0-023D6F9CB36C", "id": "", "name": "", "description": "", "revisionOid": "a54eb585-727c-41e3-b171-398a7458743b", "nameOid": "75bd7a1e-498c-4f7a-b70b-5741e4af0109", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-07512-3fff-4ff0-bf25-f13fcd2a4acf", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890762", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "id", "sourceAttrName": "编码", "viewModelName": "", "viewName": "基本视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 5 }, { "oid": "E53F6F6A-2F50-4C54-960B-B4FD428B375C", "id": "", "name": "", "description": "", "revisionOid": "0b01fc2f-a342-4177-bf6a-570aa8ac529c", "nameOid": "e2ee62eb-4508-41ec-8f5a-067e5ad81c16", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-1fe09-da6f-4412-b92f-f411d341e92d", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890762", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "lcstatus", "sourceAttrName": "状态", "viewModelName": "", "viewName": "基本视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 6 }, { "oid": "A929D6F9-88DB-43BE-BE9C-E079E980A69B", "id": "", "name": "", "description": "", "revisionOid": "76a72660-8f93-46d8-8d3c-3f88baf60108", "nameOid": "96b675b6-3a3a-415b-873c-fc8bc014c699", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-F8C09-A123-391B-E119-748B70028952", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890762", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "oldcode", "sourceAttrName": "历史编号", "viewModelName": "", "viewName": "基本视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 7 }, { "oid": "1CCC00C8-572A-40BC-AC6F-49A28D55FF4E", "id": "", "name": "", "description": "", "revisionOid": "6daea0b1-fe5c-460e-9541-c0ffffe894af", "nameOid": "98b38f61-a53a-425d-bb32-c9b8c05ce488", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-9ab10-a3bf-4b51-b8c5-337132018f1d", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890762", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "name", "sourceAttrName": "物料名称", "viewModelName": "", "viewName": "基本视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 8 }, { "oid": "8968D5C3-4AE6-4A7B-9DCA-90382170C200", "id": "", "name": "", "description": "", "revisionOid": "e409f2df-88e5-4ee4-838e-3562d3e57625", "nameOid": "144d88b5-acd6-4235-be14-f3d1907eef1a", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-F0DDF-C5DB-8616-D752-20360970AFB6", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890763", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "materialclassify", "sourceAttrName": "物料分类", "viewModelName": "", "viewName": "采购视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 9 }, { "oid": "55CBC959-7DF1-4B3B-83BC-1BD6484CA967", "id": "", "name": "", "description": "", "revisionOid": "eef610b7-5c56-4357-a6ff-677f99388300", "nameOid": "def770a7-3a5a-4c8f-85a4-36519de4b77e", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-329e5-b881-4128-aea4-f1b8f67eb5e7", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890763", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "firstfl", "sourceAttrName": "一级管理分类", "viewModelName": "", "viewName": "采购视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 10 }, { "oid": "BD0CA234-065B-43A1-AFEE-555368DF927D", "id": "", "name": "", "description": "", "revisionOid": "34b0de1a-634a-495f-8a2b-51fec7c4d502", "nameOid": "0d8563c8-7c4d-4adf-95ff-a583e8594a63", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-43fc3-a604-4fd8-a2c9-482712301285", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890763", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "secondfl", "sourceAttrName": "二级管理分类", "viewModelName": "", "viewName": "采购视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 11 }, { "oid": "C2F69279-BAD6-45B2-98A0-69F1E1DBD6E7", "id": "", "name": "", "description": "", "revisionOid": "4cb208a9-8e78-4d67-8498-c9a0f8430ad2", "nameOid": "2d14dfe4-272a-4884-9bb6-bb2461d37d5a", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-8e06b-b297-4738-ad6d-0b1b0064ae3e", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890763", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "thrifl", "sourceAttrName": "三级管理分类", "viewModelName": "", "viewName": "采购视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 12 }, { "oid": "75FDBBFD-A69F-4B09-925D-583C1AF96307", "id": "", "name": "", "description": "", "revisionOid": "5a64c3be-bf36-41ce-8feb-34eac91ff3d4", "nameOid": "06a63d3a-db67-4b97-970a-403f1db18021", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-618cd-475b-4235-8783-20fd3e19e397", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890763", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "xiaoshouwl", "sourceAttrName": "销售物料", "viewModelName": "", "viewName": "采购视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 13 }, { "oid": "6118CBF1-E0F1-4DE4-8801-4BB0E6C4F4EB", "id": "", "name": "", "description": "", "revisionOid": "b7216ddc-56bd-4f74-a247-b47c8fcbb661", "nameOid": "9772d9f8-93fa-4995-9802-79255bbbc6db", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-3de12-01e3-4a96-9323-ee025f57fe75", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890763", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "xinghaoguige", "sourceAttrName": "规格型号", "viewModelName": "", "viewName": "采购视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 14 }, { "oid": "614E51BE-C77F-4723-9E3D-E6C73C85E4DA", "id": "", "name": "", "description": "", "revisionOid": "97b1e20e-ed0e-42a8-bf29-a009df5b5b08", "nameOid": "05626bfd-48f6-4401-b1fb-0b8ce5d4628b", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-059FA-B513-114A-318C-9D7FB3E06736", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890763", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "jiliangdw", "sourceAttrName": "计量单位", "viewModelName": "", "viewName": "采购视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 15 }, { "oid": "D8FF1A88-D9E9-4585-A82F-B36B61EB89BF", "id": "", "name": "", "description": "", "revisionOid": "aaa415b8-3220-41b2-aeea-35dfe1d0f660", "nameOid": "6f167320-b672-45ba-985f-53bd2be5a7f6", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-4C611-FC2A-C4EB-D85E-74B008515EAB", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890763", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "chukufangshi", "sourceAttrName": "出库方式", "viewModelName": "", "viewName": "采购视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 16 }, { "oid": "EF4ABCFB-755A-4F16-858E-43CF52FE6629", "id": "", "name": "", "description": "", "revisionOid": "589992f1-b6a9-4380-bab5-59f70c76b010", "nameOid": "57515957-02ed-40df-a0ad-745a59f87a67", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-43953-2216-4171-b1a6-139244e63a95", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890763", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "description", "sourceAttrName": "备注说明", "viewModelName": "", "viewName": "采购视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 17 }, { "oid": "7EED66A2-9A94-4CDA-A475-964DA724F722", "id": "", "name": "", "description": "", "revisionOid": "70483c08-8c9a-4dc9-bd82-01f35bcebab1", "nameOid": "a568101c-6b70-4a3b-9022-7849c4167189", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-D6882-1BA9-BBA6-2344-B433A6FDCA39", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890763", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "hesuanfenlei", "sourceAttrName": "核算分类", "viewModelName": "", "viewName": "采购视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 18 }, { "oid": "2A6DA1F1-AD1C-46D2-BC81-1BB116F790BD", "id": "", "name": "", "description": "", "revisionOid": "1b50dd67-638a-467d-b315-608007e7e440", "nameOid": "5ff49028-0e07-4ab3-bcfd-0a1469435696", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-E34DA-ABF6-9813-8AB0-7651E4B2D54B", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890764", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "materialtype", "sourceAttrName": "物料类型", "viewModelName": "", "viewName": "销售视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 19 }, { "oid": "B6F71DAA-CAD0-498C-988D-6D14DDA55DED", "id": "", "name": "", "description": "", "revisionOid": "fb74ab8e-8f63-4542-925e-9d6c4ac9bc4c", "nameOid": "6e2ac133-2ac8-4739-b50b-6b4247f77881", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-38D7E-E51A-81B3-558D-FF1212DFC757", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890764", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "tuhao", "sourceAttrName": "图号", "viewModelName": "", "viewName": "销售视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 20 }, { "oid": "1EE65761-7C78-4D1B-95FD-6CFEEA7A941E", "id": "", "name": "", "description": "", "revisionOid": "02a2f43f-e752-49d1-9abd-a67bbc563f67", "nameOid": "70937fe4-ca24-4afa-9517-09140811e4f7", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-BF978-7354-CE66-415B-16ABD3ED036D", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890764", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "zhibaoqi", "sourceAttrName": "质保期", "viewModelName": "", "viewName": "销售视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 21 }, { "oid": "6D33C42D-3754-427E-8963-C4BB381A7B30", "id": "", "name": "", "description": "", "revisionOid": "5060a52a-d967-47c8-af78-c7aadb453bc4", "nameOid": "710d539e-a753-4d3b-83da-d51906879f4c", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-46119-D74B-4818-9A89-6235E2234395", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890764", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "revisionvalue", "sourceAttrName": "版本", "viewModelName": "", "viewName": "销售视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 22 }, { "oid": "4BE71AA3-F86B-4E7B-B1A8-60C77D6D0F9D", "id": "", "name": "", "description": "", "revisionOid": "79c57b17-8856-42da-8336-f7cc90c08ba0", "nameOid": "e8b61f38-9fd3-4344-9bec-45989173da90", "btmname": "japplyform", "lastR": "1", "firstR": "1", "lastV": "1", "firstV": "1", "creator": "0", "createTime": "2023-06-02 10:57:58", "lastModifier": "0", "lastModifyTime": "2023-06-02 10:57:58", "revisionRule": "", "revisionSeq": 1, "revisionValue": "", "versionRule": "0", "versionSeq": 1, "versionValue": "1", "lcStatus": "", "lcStatusText": "", "ts": "2023-06-02 10:57:58.648", "owner": "1", "copyFromVersion": "", "secretGrade": -1, "secretGradeText": "", "lctid": "", "data": {}, "defaultValue": "", "metaListId": "XJ-752FC-DC6E-361E-B960-607D7FF908E6", "sourceClassifyId": "XJ-FC9B6-FE27-241F-5FCA-ED4DC17CF95B", "sourceClassifyName": "产品", "targetAttrId": "", "targetClassifyId": "D2DC11DD-B28A-8874-B656-10A1E0569FF3", "viewModeId": "XJ-B5416-4928-CFB8-84F5-1955AA890764", "viewModeName": "", "targetAttrKey": "", "targetAttrName": "", "sourceAttrKey": "creator", "sourceAttrName": "创建人", "viewModelName": "", "viewName": "销售视图", "targetClassifyName": "螺栓", "dockingPreAttrRangeVoList": [], "$cellEdit": false, "$index": 23 }
        ]
        const rangeData = [
            {
                "oid": "2023022114232",
                "id": "",
                "name": "",
                "description": "",
                "revisionOid": "097DC30F-CC8F-595D-0530-7C86C176FC61",
                "nameOid": "D3FB491C-0571-3BB2-604E-563CC579CCAC",
                "btmname": "jrange",
                "lastR": "1",
                "firstR": "1",
                "lastV": "1",
                "firstV": "1",
                "creator": "1",
                "createTime": "2023-03-30 23:35:13",
                "lastModifier": "1",
                "lastModifyTime": "2023-03-30 23:35:13",
                "revisionRule": "",
                "revisionSeq": 1,
                "revisionValue": "",
                "versionRule": "0",
                "versionSeq": 1,
                "versionValue": "1",
                "lcStatus": "Exist",
                "lcStatusText": "",
                "ts": "2023-03-30 23:35:13.027",
                "owner": "1",
                "copyFromVersion": "",
                "secretGrade": -1,
                "secretGradeText": "",
                "lctid": "defaultLC",
                "data": {},
                "metaListId": "XJ-752FC-DC6E-361E-B960-607D7FF908E6",
                "numText": "材料",
                "numTextValue": "1001",
                "targetNumText": "材料",
                "targetNumTextValue": "7"
            }
        ]
        const options = {
            menu: false,
            delBtn: false,
@@ -132,30 +92,26 @@
            cellBtn: true,
            border: true,
            searchMenuSpan: 8,
            highlightCurrentRow:true,
            highlightCurrentRow: true,
        }
        return {
            // è¡¨å•值
            form: {
                // æ–°å¢žå±žæ€§æŸ¥è¯¢å€¼
                name: '',
                // é›†å›¢æ ‘显示值
                groupValue: ''
            },
            // æ£€æµ‹æ–°å¢žæŒ‰é’®çŠ¶æ€
            disabledPush:true,
            disabledPush: true,
            // è¡¨æ ¼åŠ è½½ä¸­
            loading: false,
            // ç©¿æ¢­æ¡†æ•°æ®
            transferData: [],
            // ç©¿æ¢­æ¡†åŒå‘绑定数据
            transferValue: [],
            // dialog弹窗开关
            dialogPush: false,
            // å±žæ€§æ˜ å°„表数据
            mappingData: mappingData,
            mappingData: [],
            // å±žæ€§æ˜ å°„取值表数据
            rangeData: rangeData,
            rangeData: [],
            // ä¸»æ•°æ®æ ‘搜索过滤
            filterText: '',
            // å±žæ€§æ˜ å°„取值表配置
@@ -210,8 +166,8 @@
                isLeaf: ''
            },
            transferProps: {
                key: 'value',
                label: 'label'
                key: 'oid',
                label: 'name'
            },
            // é›†å›¢åˆ†ç±»æ ‘值
@@ -223,6 +179,7 @@
            mappingForm: {},
            // å®šæ—¶å™¨
            times: null,
        }
    },
    watch: {
@@ -270,7 +227,8 @@
            this.rangeData = []
            const response = await gridAttrRanges({ meatId: oid })
            if (response.status === 200) {
                this.rangeData = response.data
                console.log(response.data)
                this.rangeData = response.data.data
            }
        },
        // æŽ¥å£èŽ·å–ä¸»æ•°æ®åˆ†ç±»å±žæ€§ä¿¡æ¯
@@ -280,16 +238,7 @@
            const response = await listCodeAttributeByClassId({ codeClassifyId: oid })
            if (response.status === 200) {
                const data = response.data.data
                let objs = data.map(item => {
                    let pinYin = pinyin.getFullChars(item.name)
                    let renPing = pinyin.getCamelChars(item.name)
                    const { name, oid } = item
                    const obj = { pinyins: pinYin, renPing: renPing, disabled: false, label: name, value: oid }
                    return obj
                })
                this.transferData = objs
                this.optionMapping.column[4].dicData = objs
                console.log(objs)
                this.transferData = data
            }
        },
        // æŽ¥å£èŽ·å–é›†å›¢åˆ†ç±»æ ‘
@@ -319,41 +268,36 @@
        // ä¿å­˜æŒ‰é’®
        async handleSave() {
            console.log(this.mappingData)
            // const response = await batchAddSave({ dockingPreAttrMappingVOList: this.tableData })
            // console.log(response)
            const response = await batchAddSave({ dockingPreAttrMappingVOList: this.mappingData })
            console.log(response)
            if (response.status === 200) {
                this.$message({
                    type: "success",
                    message: "保存成功!"
                });
            }
        },
        // åŒæ­¥æ•°æ®
        async handleSync() {
            const response = await syncClassifyModel({ dockingPreAttrMappingVOList: this.tableData })
        },
        // æ–°å¢žå¼¹çª—查询按钮
        handleQuery(event) {
            this.form.name = event
        },
        handelTransferSave() {
        handelTransferSave(event) {
            let that = this
            console.log(that.mappingForm)
            if (Object.keys(that.mappingForm).length==0) {
            console.log(event)
            const transferValue = event.value
            if (Object.keys(that.mappingForm).length == 0) {
                this.$message({
                    type: "error",
                    message: "请选择一条数据!"
                });
            } else {
                const findRow = that.mappingData.findIndex(item => item.metaListId === that.mappingForm.metaListId)
                const findtra = that.transferData.findIndex(item => item.value === that.transferValue[0].value)
                console.log(findRow)
                that.mappingData[findRow].targetAttrName = that.transferValue[0].label
                that.mappingData[findRow].targetAttrId = that.transferValue[0].value
                that.transferData[findtra].disabled = true
                that.transferValue = []
                that.form.name = ''
                that.dialogPush = false
                that.mappingData[findRow].targetAttrName = transferValue[0].name
                that.mappingData[findRow].targetAttrId = transferValue[0].oid
                this.dialogPush =false
            }
        },
        // ç©¿æ¢­æ¡†æŸ¥è¯¢æ•°æ®è¿‡æ»¤
        filterMethod(query, item) {
            return item.pinyins.indexOf(this.form.name) > -1;
        },
        // å·¦ä¾§æ ‘点击
        handelTreeCell(event) {
@@ -407,8 +351,11 @@
        handleUpdate(row, index, done, loading) {
            console.log(row)
            console.log(index)
            let data = []
            const findRow = this.mappingData.findIndex(item => item.metaListId === row.metaListId)
            this.mappingData[findRow].dockingPreAttrRangeVoList = [row]
            this.rangeData[index] = row
            console.log(this.rangeData)
            this.mappingData[findRow].dockingPreAttrRangeVoList = (this.rangeData)
            console.log('修改后', row)
            this.$message({
                showClose: true,
@@ -430,13 +377,15 @@
        },
        // é›†å›¢æ˜ å°„属性选择(单选)
        selectionChange(selection) {
            console.log(selection)
            console.log(this.mappingForm)
            if (selection.length > 1) {
                const nowVal = selection.shift();
                this.$refs.crudMapping.toggleRowSelection(nowVal, false);
            } else if (selection.length === 1) {
                // å¯¹å•选数据的操作写在这里
                this.disabledPush = false
                // this.getGridAttrRanges(row.metaListId)
                this.getGridAttrRanges(this.mappingForm.metaListId)
            }
        },
        setCurrentRow(selection, row) {
@@ -452,11 +401,6 @@
}
</script>
<style lang="scss" scoped>
.text_tip {
    padding: 10px 0;
    color: #F56C6C;
}
.setstyle {
    min-height: 200px;
    padding: 0 !important;
Source/UBCS-WEB/src/views/integration/integrationTransfer.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,128 @@
<template>
    <el-dialog :title="title" :visible.sync="dialogVisible" append-to-body="true" destroy-on-close width="30%"
        @close="handelClose">
        <el-form :model="form">
            <el-form-item label="查询条件" label-width="70px" size="small">
                <el-input v-model="inputVal" autocomplete="off" @change="handleQuery"></el-input>
            </el-form-item>
        </el-form>
        <p class="text_tip">*选择分类进行属性过滤, æˆ–者输入属性的全拼或者简拼进行查询! å¦‚: å§“名 (可输入xm或xinming )</p>
        <transfer v-model="transferValue" :data="newdata" :filter-method="filterMethod"
            :filter-placeholder="filterPlaceholder" :props="props"></transfer>
        <span slot="footer" class="dialog-footer">
            <el-button @click="visible = false">取 æ¶ˆ</el-button>
            <el-button type="primary" @click="handelTransferSave">保 å­˜</el-button>
        </span>
    </el-dialog>
</template>
<script>
import transfer from '@/components/transfer/index'
import pinyin from 'js-pinyin'
export default {
    components: {
        transfer
    },
    name: 'Integration',
    props: {
        // æ˜¯å¦æ‰“å¼€
        visible: {
            typeof: Boolean,
            default: false
        },
        title: {
            typeof: String,
            default: '编码属性'
        },
        // æ•°æ®æº
        data: {
            typeof: Array,
            default: () => []
        },
        // æ•°æ®é»˜è®¤å€¼å¾—props
        props: {
            typeof: Object,
            default: () => {
                return {
                    label: 'label',
                    key: 'key',
                    disabled: 'disabled'
                };
            }
        },
        // æŸ¥è¯¢æ–‡æœ¬æ¡†çš„placeholder
        filterPlaceholder: {
            typeof: String,
            default: '请输入拼音全拼或者拼音缩写'
        }
    },
    data() {
        return {
            inputVal: '',
            transferValue: this.value,
            dialogVisible: this.visible,
        }
    },
    watch: {
        visible(n) {
            this.dialogVisible = n;
        },
        dialogVisible(n) {
            this.$emit('update:visible', n)
        },
    },
    computed: {
        newdata() {
            pinyin.setOptions({ checkPolyphone: false, charCase: 1 });
            let name = this.props.label
            let key = this.props.key
            let objs = this.data.map(item => {
                let pinYin = pinyin.getFullChars(item[this.props.label])
                let renPing = pinyin.getCamelChars(item[this.props.label])
                const obj = { pinyins: pinYin, renPing: renPing, disabled: false, [name]: item[this.props.label], [key]: item[this.props.key] }
                return obj
            })
            console.log(objs)
            return objs
        }
    },
    methods: {
        // æ–°å¢žå¼¹çª—查询按钮
        handleQuery(event) {
            this.inputVal = event
        },
        // ç©¿æ¢­æ¡†æŸ¥è¯¢æ•°æ®è¿‡æ»¤ï¼ˆåŒæ¡ä»¶ï¼‰
        filterMethod(query, item) {
            return item.pinyins.indexOf(this.inputVal) > -1 || item.renPing.indexOf(this.inputVal) > -1
        },
        // å…³é—­æ¸…除所有数据
        handelClose() {
            this.transferValue = []
            this.inputVal = ''
            this.visible = false
        },
        // ç¡®å®šæŒ‰é’®ï¼Œè¿”回当前数据和修改后的数据
        handelTransferSave() {
            let that =this
            let datas= that.newdata
            const findtra = datas.findIndex(item => item.oid === that.transferValue[0].oid)
            datas[findtra].disabled = true
            const obj = {
                // å½“前选择的数据
                value: this.transferValue,
                // æ€»æ•°æ®
                data: datas
            }
            that.$emit('save', obj)
            that.transferValue = []
            that.inputVal = ''
        },
    }
}
</script>
<style lang="scss" scoped>
.text_tip {
    padding: 10px 0;
    color: #F56C6C;
}
</style>
Source/UBCS-WEB/src/views/modeling/Business.vue
@@ -27,30 +27,30 @@
          <basic-container>
            <p style="margin-top: 10px;font-weight: 570;font-size: 19px">基本信息</p>
            <el-descriptions class="margin-top" :column="3" :size="size" border>
              <el-descriptions-item>
              <el-descriptions-item :labelStyle="descriptionOption.labelStyle" :contentStyle="descriptionOption.contentStyle">
                <template slot="label">
                  <i class="el-icon-finished"></i>
                  <i :class="icons.key"></i>
                  è‹±æ–‡åç§°
                </template>
                {{ obj.id }}
              </el-descriptions-item>
              <el-descriptions-item>
              <el-descriptions-item :labelStyle="descriptionOption.labelStyle" :contentStyle="descriptionOption.contentStyle">
                <template slot="label">
                  <i class="el-icon-info"></i>
                  <i :class="icons.name"></i>
                  ä¸­æ–‡åç§°
                </template>
                {{ obj.name }}
              </el-descriptions-item>
              <el-descriptions-item>
                <template slot="label">
                  <i class="el-icon-date"></i>
                <template slot="label" :labelStyle="descriptionOption.labelStyle" :contentStyle="descriptionOption.contentStyle">
                  <i :class="icons.tableName"></i>
                  æ•°æ®åº“表名
                </template>
                {{ obj.tableName }}
              </el-descriptions-item>
              <el-descriptions-item>
              <el-descriptions-item :labelStyle="descriptionOption.labelStyle" :contentStyle="descriptionOption.contentStyle">
                <template slot="label">
                  <i class="el-icon-folder-opened"></i>
                  <i :class="icons.domain"></i>
                  æ‰€å±žé¢†åŸŸ
                </template>
                  <el-tag size="small">
@@ -71,23 +71,23 @@
            </template>
            {{ obj.sss }}
          </el-descriptions-item> -->
              <el-descriptions-item>
              <el-descriptions-item :labelStyle="descriptionOption.labelStyle" :contentStyle="descriptionOption.contentStyle">
                <template slot="label">
                  <i class="el-icon-s-check"></i>
                  <i :class="icons.revisionRule"></i>
                  ç‰ˆæœ¬è§„则
                </template>
                {{ obj.versionRule }}
              </el-descriptions-item>
              <el-descriptions-item>
              <el-descriptions-item :labelStyle="descriptionOption.labelStyle" :contentStyle="descriptionOption.contentStyle">
                <template slot="label">
                  <i class="el-icon-refresh-right"></i>
                  <i :class="icons.lifeCycle"></i>
                  ç”Ÿå‘½å‘¨æœŸ
                </template>
                {{ obj.lifeCycleId }}
              </el-descriptions-item>
              <el-descriptions-item>
              <el-descriptions-item :labelStyle="descriptionOption.labelStyle" :contentStyle="descriptionOption.contentStyle">
                <template slot="label">
                  <i class="el-icon-view"></i>
                  <i :class="icons.view"></i>
                  è§†å›¾
                </template>
               <el-tag size="small">
@@ -101,9 +101,9 @@
            </template>
            {{ obj.implClass }}
          </el-descriptions-item> -->
              <el-descriptions-item>
              <el-descriptions-item :labelStyle="descriptionOption.labelStyle" :contentStyle="descriptionOption.contentStyle">
                <template slot="label">
                  <i class="el-icon-chat-line-square"></i>
                  <i :class="icons.desc"></i>
                  æè¿°
                </template>
                {{ obj.description }}
@@ -114,8 +114,8 @@
          <basic-container>
            <p style="margin-top: 10px;font-weight: 570;font-size: 19px">属性列表</p>
            <avue-crud class="attributeCrud" v-model="obj" :data="obj.attributes" :option="loadOption">
              <template slot="attrDataType" slot-scope="{row}" >
                    <el-tag>{{row.attrDataType}}</el-tag>
              <template slot="attrDataTypeText" slot-scope="{row}" >
                    <el-tag>{{row.attrDataTypeText}}</el-tag>
                </template>
            </avue-crud>
          </basic-container>
@@ -167,7 +167,7 @@
        addBtn: false,
        props: {
          labelText: '',
          label: 'name',
          label: 'label',
          value: 'oid',
          children: 'childList',
        }
@@ -196,7 +196,7 @@
          },
          {
            label: "类型",
            prop: "attrDataType",
            prop: "attrDataTypeText",
            align: 'center',
            slot: true
          },
@@ -212,11 +212,15 @@
          }
        ]
      },
      descriptionOption: {
        labelStyle:'text-align:center;width:120px',
        contentStyle: 'width:240px;text-align:center;word-break;break-all;'
      },
      domain: null,
      domainOptions: [],
      icons:{
        key: 'el-icon-finished',
        name: 'el-icon-info',
        name: 'el-icon-tickets',
        tableName: 'el-icon-date',
        domain: 'el-icon-folder-opened',
        revisionRule: 'el-icon-s-check',
Source/UBCS-WEB/src/views/modeling/BusinessAdd.vue
@@ -7,9 +7,8 @@
    width="70%"
    style="height: 115vh;"
    >
        <el-form ref="form" :model="btmType" show-message="true" inline size="medium" label-suffix=":" class="btmTypeForm">
            <el-form-item label="英文名称" label-width="100px" required="true">
        <el-form ref="form" :model="btmType" show-message="true" inline size="medium" label-suffix=":" class="btmTypeForm" :rules="rules" @resetFields="resetForm" status-icon="true">
            <el-form-item label="英文名称" label-width="100px" required="true" prop="id">
                <el-input v-model="btmType.id" :prefix-icon="icons.key"></el-input>
            </el-form-item>
            <el-form-item label="中文名称" label-width="100px">
@@ -18,7 +17,7 @@
            <el-form-item label="数据库表名" label-width="100px">
                <el-input v-model="btmType.tableName" :prefix-icon="icons.tableName"></el-input>
            </el-form-item>
            <el-form-item label="所属领域" label-width="100px">
            <el-form-item label="所属领域" label-width="100px" prop="domain">
                <el-select v-model="btmType.domain" :prefix-icon="icons.domain">
                    <el-option v-for="item in domainOption"
                    :label="item.label" :value="item.value" :key="item.value"></el-option>
@@ -85,8 +84,8 @@
            @on-load="attrRefOnLoad"
            @search-change="attrRefSearch"
            @selection-change="selectionChange">
                <template slot="name" slot-scope="scope" >
                    <el-tag>{{scope}}</el-tag>
                <template slot="typeValue" slot-scope="scope" >
                    <el-tag>{{scope.row.typeValue}}</el-tag>
                </template>
            </avue-crud>
            <div slot="footer" class="dialog-footer">
@@ -207,19 +206,20 @@
                    column: [
                        {
                        label: '英文名称',
                        prop: 'key',
                        prop: 'id',
                        align: 'left',
                        search: true,
                        width: 230
                    }, {
                        label: '中文名称',
                        prop: 'label',
                        prop: 'name',
                        align: 'center',
                    },
                    {
                        label: "类型",
                        prop: "typeValue",
                        align: 'center'
                        align: 'center',
                        slot: true,
                    },
                    {
                        label: "默认值",
@@ -315,6 +315,16 @@
                    ]
                },
            },
            rules: {
                id: [
                    { required: true, message: '请输入业务类型编号', trigger: 'blur' },
                    { pattern: /^[A-Za-z]+$/, message: '业务类型编号只能为英文', trigger: 'blur' },
                    { min: 2, max: 15, message: '长度在2到15个字符', trigger: 'blur' }
                ],
                domain: [
                    { required: true, message: '请选择所属领域', trigger: 'blur' }
                ]
            },
        }
    },
    created() {
@@ -328,6 +338,7 @@
            this.btmType = {};
            this.attrRef.selectData = [];
            this.attrRef.queryNotIn = null;
            this.resetForm();
        },
        // å…³é—­å±žæ€§æ± æŸ¥è¯¢å¼¹çª—
        closeAttrDialog(){
@@ -370,7 +381,7 @@
                    name: item.name,
                    typeValue: item.typeValue,
                    typeKey: item.typeValue,
                    attrDataType : item.typeValue,
                    attrDataType : item.typeKey,
                    defaultValue: item.defaultValue,
                    description: item.description,
                    attributeLength: item.maxLength
@@ -465,6 +476,10 @@
            this.$delete(this.btmType,'revisionRuleId');
            this.$delete(this.btmType,'revisionRuleName');
            this.$delete(this.btmType,'inputRevisionFlag');
       },
       resetForm(){
        this.btmType = {};
        this.$refs.form.resetFields();
       }
    }
}
Source/UBCS-WEB/src/views/modeling/LinkType.vue
@@ -2,21 +2,17 @@
    <el-container>
        <!-- é¡¶ç«¯æŒ‰é’® -->
        <el-header class="businessHeader" style="height: 40px;">
            <el-button-group>
                <el-button type="primary" @click="linkTypeAdd" size="small">
                    <i class="el-icon-plus"></i>&nbsp;
                    æ–°å¢ž
                </el-button>
                <el-button type="primary" @click="linkTypeEdit" size="small">
                    <i class="el-icon-edit"></i>&nbsp;
                    ä¿®æ”¹
                </el-button>
                <el-button type="primary" @click="selectFromTable" size="small">
                    <i class="el-icon-thumb"></i>&nbsp;
                    ä»Žå·²æœ‰ä¸­èŽ·å–
                </el-button>
            </el-button-group>
        </el-header>
                <el-button-group>
                    <el-button type="primary" @click="linkTypeAdd" size="small">
                        <i class="el-icon-plus"></i>&nbsp;
                        æ–°å¢ž
                    </el-button>
                    <el-button type="primary" @click="linkTypeEdit" size="small">
                        <i class="el-icon-edit"></i>&nbsp;
                        ä¿®æ”¹
                    </el-button>
                </el-button-group>
            </el-header>
        <!-- ä¾§è¾¹æ æ ‘ -->
        <el-container>
            <el-aside width="240px">
@@ -38,34 +34,34 @@
                    <basic-container>
                        <p style="margin-top: 10px;font-weight: 570;font-size: 19px">基本信息</p>
                        <el-descriptions class="margin-top" :column="2" size="medium" border>
                            <el-descriptions-item labelStyle="text-align:center;width:120px"
                                contentStyle="width:240px;text-align:center;word-break;break-all;">
                            <el-descriptions-item :labelStyle="descriptionOption.labelStyle"
                                :contentStyle="descriptionOption.contentStyle">
                                <template slot="label">
                                    <i class="el-icon-finished"></i>
                                    <i :class="icons.id"></i>
                                    è‹±æ–‡åç§°
                                </template>
                                {{ obj.id }}
                            </el-descriptions-item>
                            <el-descriptions-item labelStyle="text-align:center;width:120px"
                                contentStyle="width:240px;text-align:center;word-break;break-all;">
                            <el-descriptions-item :labelStyle="descriptionOption.labelStyle"
                                :contentStyle="descriptionOption.contentStyle">
                                <template slot="label">
                                    <i class="el-icon-info"></i>
                                    <i :class="icons.name"></i>
                                    ä¸­æ–‡åç§°
                                </template>
                                {{ obj.name }}
                            </el-descriptions-item>
                            <el-descriptions-item labelStyle="text-align:center;width:120px"
                                contentStyle="width:240px;text-align:center;word-break;break-all;">
                            <el-descriptions-item :labelStyle="descriptionOption.labelStyle"
                                :contentStyle="descriptionOption.contentStyle">
                                <template slot="label">
                                    <i class="el-icon-date"></i>
                                    <i :class="icons.tableName"></i>
                                    æ•°æ®åº“表名
                                </template>
                                {{ obj.tableName }}
                            </el-descriptions-item>
                            <el-descriptions-item labelStyle="text-align:center;width:120px"
                                contentStyle="width:240px;text-align:center;word-break;break-all;">
                            <el-descriptions-item :labelStyle="descriptionOption.labelStyle"
                                :contentStyle="descriptionOption.contentStyle">
                                <template slot="label">
                                    <i class="el-icon-folder-opened"></i>
                                    <i :class="icons.domain"></i>
                                    æ‰€å±žé¢†åŸŸ
                                </template>
                                <el-tag size="small">
@@ -74,71 +70,75 @@
                            </el-descriptions-item>
                        </el-descriptions>
                        <el-descriptions class="margin-top" direction="vertical" :column="2" border>
                            <el-descriptions-item labelStyle="text-align:center;width:120px"
                                contentStyle="width:240px;text-align:center;word-break;break-all;">
                            <el-descriptions-item :labelStyle="descriptionOption.labelStyle"
                                :contentStyle="descriptionOption.contentStyle">
                                <template slot="label">
                                    <i class="el-icon-sort-down"></i>
                                    <i :class="icons.from"></i>
                                    From端类型
                                </template>
                                <span v-for="item in obj.fromBtmTypes" style="margin-left:2px;">
                                    <el-tag size="small" effect="plain" style="width:130px;margin-top: 2px;">
                                    <el-tag size="small" effect="plain" style="margin-top: 2px;">
                                        {{ item.id + '(' + item.name + ')' }}
                                    </el-tag>
                                </span>
                            </el-descriptions-item>
                            <el-descriptions-item labelStyle="text-align:center;width:120px"
                                contentStyle="width:240px;text-align:center;word-break;break-all;">
                            <el-descriptions-item :labelStyle="descriptionOption.labelStyle"
                                :contentStyle="descriptionOption.contentStyle">
                                <template slot="label">
                                    <i class="el-icon-sort-up"></i>
                                    <i :class="icons.to"></i>
                                    To段类型
                                </template>
                                <span v-for="item in obj.toBtmTypes" style="height:26px;width:140px;margin-left:2px">
                                    <el-tag size="small" effect="plain" style="width:130px;margin-top: 2px;">
                                <span v-for="item in obj.toBtmTypes" style="margin-left:2px">
                                    <el-tag size="small" effect="plain" style="margin-top: 2px;">
                                        {{ item.id + '(' + item.name + ')' }}
                                    </el-tag>
                                </span>
                            </el-descriptions-item>
                        </el-descriptions>
                        <el-descriptions class="margin-top" :column="2" size="medium" border>
                            <el-descriptions-item labelStyle="text-align:center;width:120px"
                                contentStyle="width:240px;text-align:center;word-break;break-all;">
                       <el-descriptions class="margin-top" :column="2" size="medium" border>
                        <!--
                            <el-descriptions-item :labelStyle="descriptionOption.labelStyle"
                                :contentStyle="descriptionOption.contentStyle">
                                <template slot="label">
                                    <i class="el-icon-info"></i>
                                    <i :class="icons.main"></i>
                                    ä¸»ç±»åž‹
                                </template>
                                {{ obj.fromBtmTypeName }}
                            </el-descriptions-item>
                            <el-descriptions-item labelStyle="text-align:center;width:120px"
                                contentStyle="width:240px;text-align:center;word-break;break-all;">
                            <el-descriptions-item :labelStyle="descriptionOption.labelStyle"
                                :contentStyle="descriptionOption.contentStyle">
                                <template slot="label">
                                    <i class="el-icon-info"></i>
                                    <i :class="icons.main"></i>
                                    ä¸»ç±»åž‹
                                </template>
                                {{ obj.toBtmTypeName }}
                            </el-descriptions-item>
                            -->
                            <el-descriptions-item span='2' labelStyle="text-align:center;width:120px">
                                <template slot="label">
                                    <i class="el-icon-chat-line-square"></i>
                                    <i :class="icons.desc"></i>
                                    æè¿°
                                </template>
                                {{ obj.description }}
                            </el-descriptions-item>
                        </el-descriptions>
                        </el-descriptions>
                    </basic-container>
                    <!-- å±žæ€§åˆ—表-->
                    <basic-container>
                        <p style="margin-top: 10px;font-weight: 570;font-size: 19px">属性列表</p>
                        <avue-crud class="attributeCrud" v-model="obj" :data="obj.attributes" :option="loadOption">
                            <template slot="attrDataType" slot-scope="{row}">
                                <el-tag>{{ row.attrDataType }}</el-tag>
                            <template slot="attrDataTypeText" slot-scope="{row}">
                                <el-tag>{{ row.attrDataTypeText }}</el-tag>
                            </template>
                        </avue-crud>
                    </basic-container>
                </el-main>
            </el-container>
        </el-container>
        <link-type-add ref="linkAdd" :linkType="addOption.linkType" :domainOption="domainOptions" :icons="icons"
            @refreshTable="initTreeOnLoad">
        </link-type-add>
    </el-container>
</template>
@@ -155,10 +155,26 @@
    name: "LinkType",
    data() {
        return {
            treeData: [
                { id: "1", name: "2", label: "label" },
                { id: "a", name: "b", label: "c" }
            ],
            addOption: {
                linkType: {},
            },
            domain: null,
            domainOptions: [],
            icons: {
                id: 'el-icon-finished',
                name: 'el-icon-tickets',
                tableName: 'el-icon-date',
                domain: 'el-icon-folder-opened',
                from: 'el-icon-sort-down',
                to: 'el-icon-sort-up',
                main: 'el-icon-warning-outline',
                desc: 'el-icon-chat-line-square'
            },
            treeData: [],
            descriptionOption: {
                labelStyle: 'text-align:center;width:120px',
                contentStyle: 'width:240px;text-align:center;word-break;break-all;'
            },
            loadOption: {
                border: true,
                height: 360,
@@ -180,7 +196,7 @@
                    },
                    {
                        label: '类型',
                        prop: 'attrDataType',
                        prop: 'attrDataTypeText',
                        align: 'center',
                        slot: true
                    },
@@ -196,27 +212,14 @@
                    }
                ]
            },
            obj: {
                id: 'linkType',
                name: '链接类型',
                tableName: 'PLLT_OMD_LINKTYPE',
                domain: 'ubcs-omd',
                domainText: '对象建模',
                fromBtmTypes: [
                    { id: 'btm', name: '业务类型' },
                    { id: 'btm2', name: '业务类型2' }
                ],
                toBtmTypes: [{ id: 'btm', name: '业务类型' }, { id: 'btm2', name: '业务类型2' }],
                fromBtmTypeName: '',
                toBtmTypeName: '',
            },
            obj: {},
            treeOption: {
                defaultExpandAll: true,
                title: '链接类型树',
                addBtn: false,
                props: {
                    labelText: '',
                    label: 'name',
                    label: 'label',
                    value: 'oid',
                    children: 'childList',
                }
@@ -225,31 +228,42 @@
    },
    created() {
        this.initTreeOnLoad();
        // this.initDomainOption();
        this.initDomainOption();
    },
    methods: {
        // æ ‘点击
        nodeClick(data) {
            console.log(data);
            getDetail(data.oid).then(res => {
                this.obj = res.data.data;
            })
        },
        // æ·»åŠ æŒ‰é’®ç‚¹å‡»äº‹ä»¶
        linkTypeAdd() {
            this.$refs.linkAdd.showSubmitDialog = true;
        },
        // ç¼–辑按钮点击事件
        linkTypeEdit() {
            this.addOption.linkType = this.obj;
            this.$refs.linkAdd.linkType = this.addOption.linkType;
            this.$refs.linkAdd.showSubmitDialog = true;
        },
        // ä»Žå·²æœ‰ä¸­èŽ·å–æŒ‰é’®ç‚¹å‡»äº‹ä»¶
        selectFromTable() {
        },
        // åŠ è½½æœåŠ¡æ ‘
        initTreeOnLoad() {
            initTree().then(res => {
                this.treeData = res.data.data;
            });
        }
        },
        // åŠ è½½æœåŠ¡ä¸‹æ‹‰æ¡†
        initDomainOption() {
            getDomain().then(res => {
                this.domainOptions = res.data.data;
            })
        },
    }
}
Source/UBCS-WEB/src/views/modeling/LinkTypeAdd.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,388 @@
<template>
    <el-dialog title="链接类型" :visible.sync="showSubmitDialog" append-to-body @close="closeSubmitDialog" width="70%"
        style="height: 115vh;">
        <el-form ref="form" :model="linkType" show-message="true" inline size="medium" label-suffix=":"
            class="linkTypeForm" :rules="rules" @resetFields="resetForm" status-icon="true">
            <el-form-item label="英文名称" label-width="100px" required="true" prop="id">
                <el-input v-model="linkType.id" :prefix-icon="icons.id" maxlength="15" show-word-limit type="text"></el-input>
            </el-form-item>
            <el-form-item label="中文名称" label-width="100px">
                <el-input v-model="linkType.name" :prefix-icon="icons.name"></el-input>
            </el-form-item>
            <el-form-item label="数据库表名" label-width="100px">
                <el-input v-model="linkType.tableName" :prefix-icon="icons.tableName"></el-input>
            </el-form-item>
            <el-form-item label="所属领域" label-width="100px" prop="domain">
                <el-select v-model="linkType.domain" :prefix-icon="icons.domain">
                    <el-option v-for="item in domainOption" :label="item.label" :value="item.value"
                        :key="item.value"></el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="From端类型" label-width="100px">
                <!-- from端业务类型选择 -->
                <el-select v-model="fromBtmValues" :value="fromBtmTypes" value-key="oid" placeholder="请选择From端类型" filterable multiple collapse-tags @change="fromSelectChange">
                    <el-option-group v-for="domain in domainList" :key="domain.id" :label="domain.name">
                        <el-option v-for="item in domain.childList" :key="item.oid" :label="item.id + item.name"
                            :value="item">
                        </el-option>
                    </el-option-group>
                </el-select>
            </el-form-item>
            <el-form-item label="To端类型" label-width="100px">
                <!-- to端业务类型选择 -->
                <el-select v-model="toBtmValues" :value="toBtmTypes" value-key="oid" placeholder="请选择To端类型" filterable multiple collapse-tags @change="toSelectChange">
                    <el-option-group v-for="domain in domainList" :key="domain.id" :label="domain.name">
                        <el-option v-for="item in domain.childList" :key="item.oid" :label="item.id + item.name"
                            :value="item">
                        </el-option>
                    </el-option-group>
                </el-select>
            </el-form-item>
            <el-form-item label="描述" label-width="100px" class="description">
                <el-input v-model="linkType.description" :prefix-icon="icons.desc" class="descClass" id="descId"></el-input>
            </el-form-item>
        </el-form>
        <avue-crud :option="option" :data="linkType.attributes" :page.sync="page" ref="attrTable"
            @cell-mouse-enter="cellEditClick" @cell-mouse-leave="cellEditSave">
            <template slot-scope="scope" slot="menuLeft">
                <el-button type="danger" icon="el-icon-plus" size="small" @click="rowAdd()">属性选择</el-button>
            </template>
        </avue-crud>
        <div slot="footer" class="dialog-footer">
            <el-button type="primary" @click="submitlinkType">确定</el-button>
            <el-button @click="cancleSubmitlinkType">取消</el-button>
        </div>
        <!-- å±žæ€§æ± çš„选择 -->
        <el-dialog title="属性池" :visible="attrRef.visible" append-to-body @close="closeAttrDialog" width="80%">
            <avue-crud class="attrRef" :option="attrRef.option" :data="attrRef.data" :page.sync="attrRef.page" ref="attrRef"
                @on-load="attrRefOnLoad" @search-change="attrRefSearch" @selection-change="selectionChange">
                <template slot="typeValue" slot-scope="scope">
                    <el-tag>{{ scope.row.typeValue }}</el-tag>
                </template>
            </avue-crud>
            <div slot="footer" class="dialog-footer">
                <el-button @click="confirmSelectAttr">确定</el-button>
                <el-button @click="cancleSelectAttr">取消</el-button>
            </div>
        </el-dialog>
    </el-dialog>
</template>
<script>
import { add, update } from '@/api/omd/linkType';
import { queryPage } from '@/api/omd/OmdAttribute';
import { getPage } from '@/api/omd/revisionRule';
import { initTree } from "@/api/omd/btmType"
export default {
    name: 'LinkTypeAdd',
    props: {
        linkType: {
            type: Object
        },
        domainOption: {
            type: Array
        },
        icons: {
            type: Array
        }
    },
    data() {
        return {
            form: {},
            showSubmitDialog: false,
            option: {
                height: "330px",
                selection: true,
                headerAlign: 'center',
                border: true,
                index: true,
                rowKey: 'id',
                tabs: true,
                menu: false,
                addBtn: false,
                highlightCurrentRow: true,
                column: [
                    {
                        label: '英文名称',
                        prop: 'id',
                        align: 'center'
                    }, {
                        label: '中文名称',
                        prop: 'name',
                        align: 'center',
                        cell: true
                    },
                    {
                        label: '类型',
                        prop: 'attrDataType',
                        align: 'center',
                        slot: true
                    },
                    {
                        label: '默认值',
                        prop: 'defaultValue',
                        align: 'center',
                        cell: true
                    },
                    {
                        label: '说明',
                        prop: 'description',
                        align: 'center',
                        cell: true
                    }
                ]
            },
            attrRef: {
                visible: false,
                page: {
                    currentPage: 1,
                    pageSize: 10,
                },
                key: null,
                option: {
                    height: 360,
                    addBtn: false,
                    refreshBtn: false,
                    columnBtn: false,
                    selection: true,
                    menu: false,
                    border: true,
                    reserveSelection: true,
                    searchMenuSpan: 8,
                    highlightCurrentRow: true,
                    column: [
                        {
                            label: '英文名称',
                            prop: 'id',
                            align: 'left',
                            search: true,
                            width: 230
                        }, {
                            label: '中文名称',
                            prop: 'name',
                            align: 'center',
                        },
                        {
                            label: '类型',
                            prop: 'typeValue',
                            align: 'center'
                        },
                        {
                            label: '默认值',
                            prop: 'defaultValue',
                            align: 'center'
                        },
                        {
                            label: '允许为空',
                            prop: 'nullable',
                            type: 'switch',
                            display: false,
                            hide: true,
                            labelWidth: 132,
                            dicData: [{
                                label: '否',
                                value: 1
                            }, {
                                label: '是',
                                value: 0
                            }]
                        },
                        {
                            label: '说明',
                            prop: 'description',
                            cell: true,
                            align: 'center'
                        }
                    ]
                },
                data: [],
                queryNotIn: null
            },
            fromBtmValues: [],
            toBtmValues: [],
            domainList: [],
            rules: {
                id: [
                    { required: true, message: '请输入链接类型编号', trigger: 'blur' },
                    { pattern: /^[A-Za-z]+$/, message: '链接类型编号只能为英文', trigger: 'blur' },
                    { min: 2, max: 15, message: '长度在2到15个字符', trigger: 'blur' }
                ],
                domain: [
                    { required: true, message: '请选择所属领域', trigger: 'blur' }
                ]
            },
        }
    },
    created() {
        this.initTreeOnLoad();
    },
    methods: {
        // å…³é—­ç»„件弹窗
        closeSubmitDialog() {
            this.showSubmitDialog = false;
            this.linkType.attributes = [];
            this.linkType = {};
            this.attrRef.selectData = [];
            this.attrRef.queryNotIn = null;
            this.resetForm();
        },
        // å…³é—­å±žæ€§æ± æŸ¥è¯¢å¼¹çª—
        closeAttrDialog() {
            this.attrRef.visible = false;
        },
        initTreeOnLoad() {
            initTree().then(res => {
                this.domainList = res.data.data;
            });
        },
        // æ·»åŠ 
        rowAdd() {
            this.attrRef.visible = true;
            this.attrRefOnLoad();
        },
        // å±žæ€§æ± åŠ è½½
        attrRefOnLoad() {
            queryPage(this.attrRef.key, this.attrRef.queryNotIn, this.attrRef.page.currentPage, this.attrRef.page.pageSize).then(res => {
                const data = res.data.data;
                this.attrRef.page.total = data.total;
                this.attrRef.data = data.records;
            });
            this.$nextTick(() => {
                this.$refs.attrRef.refreshTable();
            });
        },
        // å±žæ€§æ± æ£€ç´¢
        attrRefSearch(form, done) {
            this.attrRef.key = form.key
            this.attrRefOnLoad();
            done();
            this.attrRef.key = null;
        },
        // å±žæ€§æ± å‹¾é€‰äº‹ä»¶
        selectionChange(list) {
            this.attrRef.selectData = list;
        },
        // ç¡®è®¤å±žæ€§æ± å‹¾é€‰
        confirmSelectAttr() {
            if(!this.linkType.attributes){
                this.linkType.attributes = [];
            }
            this.attrRef.queryNotIn = "";
            console.log(this.attrRef.selectData);
            this.attrRef.selectData.forEach(item => {
                this.linkType.attributes.push({
                    id: item.id,
                    name: item.name,
                    typeValue: item.typeValue,
                    typeKey: item.typeValue,
                    attrDataType: item.typeKey,
                    defaultValue: item.defaultValue,
                    description: item.description,
                    attributeLength: item.maxLength
                });
                this.attrRef.queryNotIn += (item.id + ",")
            });
            this.closeAttrDialog();
        },
        // å–消属性池勾选
        cancleSelectAttr() {
            this.attrRef.selectData = [];
            this.closeAttrDialog();
        },
        // æ·»åŠ ä¸šåŠ¡ç±»åž‹
        submitlinkType() {
            add(this.linkType, true).then(res => {
                // æ·»åŠ å®Œæˆï¼Œå›žè°ƒçˆ¶ç»„ä»¶çš„åˆ·æ–°
                this.$message.success('保存成功');
                this.cancleSubmitlinkType();
                this.$emit('refreshTable');
            })
        },
        // å–消添加业务类型
        cancleSubmitlinkType() {
            this.linkType = {};
            this.linkType.attributes = [];
            this.showSubmitDialog = false;
        },
        // åˆ·æ–°å±žæ€§åˆ—表
        refreshAttrTable() {
            this.$nextTick(() => {
                this.$refs.attrTable.refreshTable();
            })
        },
        //
        viewChange() {
        },
        // åˆ—表编辑
        cellEditClick(cell) {
            cell.$cellEdit = true;
        },
        // åˆ—表编辑保存
        cellEditSave(row) {
            this.linkType.attributes[row.$index].name = row.name
            this.linkType.attributes[row.$index].defaultValue = row.defaultValue;
            this.linkType.attributes[row.$index].description = row.description;
            row.$cellEdit = false;
        },
        fromSelectChange(dataList){
            this.linkType.fromBtmTypes = [];
            var fromBtmName = "";
            var fromBtmType = "";
            dataList.forEach(data => {
                //this.linkType.fromBtmTypes.push(data);
                fromBtmName += (data.name + ',');
                fromBtmType += (data.id + ',');
            })
            this.linkType.fromBtmTypeName = fromBtmName;
            this.linkType.fromBtmType = fromBtmType;
        },
        toSelectChange(dataList){
            console.log(dataList);
            this.linkType.toBtmTypes = [];
            var toBtmName = "";
            var toBtmType = "";
            dataList.forEach(data => {
                //this.linkType.toBtmTypes.push(data);
                toBtmName += (data.name + ',');
                toBtmType += (data.id + ',');
            })
            this.linkType.toBtmTypeName = toBtmName;
            this.linkType.toBtmType = toBtmType;
            console.log(this.linkType);
        },
        resetForm(){
            this.linkType = {};
            this.$refs.form.resetFields();
        }
    }
}
</script>
<style>
/* å±žæ€§æ± å‚照列表 */
.attrRef>.el-card:nth-of-type(2)>.el-card__body>.avue-crud__menu {
    display: none !important;
}
.revisionRef>.el-card:nth-of-type(2)>.el-card__body>.avue-crud__menu {
    display: none !important;
}
.linkTypeForm>.el-form-item>.el-form-item__content>.el-input>.el-input__inner {
    width: 200px;
}
.descClass>.el-input__inner {
    width: 57vw
}
#descId {
    width: 57vw;
}
</style>
Source/UBCS-WEB/vue.config.js
@@ -26,11 +26,11 @@
    proxy: {
      '/api': {
        //本地服务接口地址
          target: 'http://localhost:37000',
        //  target: 'http://localhost:37000',
        // target: 'http://192.168.1.63:37000',
        //target: 'http://192.168.3.7:37000',
        //target: 'http://dev.vci-tech.com:37000',
        //target: 'http://192.168.1.51:37000/',
        target: 'http://dev.vci-tech.com:37000',
        // target: 'http://192.168.1.51:37000/',
        //远程演示服务地址,可用于直接启动项目
        // target: 'https://saber.bladex.vip/api',
        ws: true,
Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlFieldMappingAttrBO.java
@@ -18,7 +18,8 @@
    /**
     * ç±»åž‹
     */
    private final String dataType;
    @Setter
    private String dataType;
    /**
     * é•¿åº¦
@@ -44,6 +45,8 @@
    @Setter
    private String defaultValue;
    public DdlFieldMappingAttrBO() {
    }
    public DdlFieldMappingAttrBO(String dataType, Integer dataLength, Integer dataPrecision, Boolean nullable, String defaultValue) {
        this.dataType = dataType;
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LinkTypeAttribute.java
@@ -15,7 +15,7 @@
 * @date 2023/5/24
 */
@Data
@TableName("pl_omd_link_type_attr")
@TableName("pl_omd_link_type_attribute")
@ApiModel(value = "链接类型包含的属性", description = "链接类型包含的属性")
public class LinkTypeAttribute implements java.io.Serializable{
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/BtmTreeVO.java
@@ -19,9 +19,11 @@
     */
    private static final long serialVersionUID = -1243940048761060562L;
    private String id;
    private String name;
    private String id;
    private String label;
    private String oid;
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeAttributeVO.java
@@ -1,5 +1,7 @@
package com.vci.ubcs.omd.vo;
import lombok.Data;
import java.util.Date;
import java.util.Map;
@@ -8,6 +10,7 @@
 * @author LiHang
 * @date 2023/4/3
 */
@Data
public class LinkTypeAttributeVO implements java.io.Serializable{
    /**
@@ -24,6 +27,11 @@
     * æ‰€å±žä¸šåŠ¡ç±»åž‹
     */
    private String pkLinkType;
    /**
     * é“¾æŽ¥ç±»åž‹çš„编号
     */
    private String linkTypeId;
    /**
     * å±žæ€§çš„字段名称
@@ -49,6 +57,11 @@
     * æ•°æ®ç±»åž‹
     */
    private String attrDataType;
    /**
     * æ•°æ®ç±»åž‹æ˜¾ç¤ºå¯¹è±¡
     */
    private String attrDataTypeText;
    /**
     * æ˜¯å¦å¯ä»¥ä¸ºç©º
@@ -144,247 +157,4 @@
     * æ—¶é—´æˆ³ï¼Œæ ¼å¼æ˜¯yyyy-MM-dd HH:mm:ss.SSS
     */
    private Date ts;
    public String getBtmName() {
        return btmName;
    }
    public void setBtmName(String btmName) {
        this.btmName = btmName;
    }
    public String getOwner() {
        return owner;
    }
    public void setOwner(String owner) {
        this.owner = owner;
    }
    public void setOid(String oid) {
        this.oid = oid;
    }
    public void setPkLinkType(String pkLinkType) {
        this.pkLinkType = pkLinkType;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public void setAttrDataType(String attrDataType) {
        this.attrDataType = attrDataType;
    }
    public void setReferBtmTypeId(String referBtmTypeId) {
        this.referBtmTypeId = referBtmTypeId;
    }
    public void setReferBtmTypeName(String referBtmTypeName) {
        this.referBtmTypeName = referBtmTypeName;
    }
    public void setReferFlag(boolean referFlag) {
        this.referFlag = referFlag;
    }
    public void setEnumId(String enumId) {
        this.enumId = enumId;
    }
    public void setEnumName(String enumName) {
        this.enumName = enumName;
    }
    public void setEnumFlag(boolean enumFlag) {
        this.enumFlag = enumFlag;
    }
    public void setEnumItemMap(Map<String, String> enumItemMap) {
        this.enumItemMap = enumItemMap;
    }
    public void setCreator(String creator) {
        this.creator = creator;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public void setLastModifier(String lastModifier) {
        this.lastModifier = lastModifier;
    }
    public void setLastModifyTime(Date lastModifyTime) {
        this.lastModifyTime = lastModifyTime;
    }
    public void setTs(Date ts) {
        this.ts = ts;
    }
    public void setNullableFlag(boolean nullableFlag) {
        this.nullableFlag = nullableFlag;
    }
    public void setDefaultValue(String defaultValue) {
        this.defaultValue = defaultValue;
    }
    public void setPrecisionLength(Integer precisionLength) {
        this.precisionLength = precisionLength;
    }
    public String getOid() {
        return oid;
    }
    public String getPkLinkType() {
        return pkLinkType;
    }
    public String getDescription() {
        return description;
    }
    public String getAttrDataType() {
        return attrDataType;
    }
    public String getReferBtmTypeId() {
        return referBtmTypeId;
    }
    public String getReferBtmTypeName() {
        return referBtmTypeName;
    }
    public boolean isReferFlag() {
        return referFlag;
    }
    public String getEnumId() {
        return enumId;
    }
    public String getEnumName() {
        return enumName;
    }
    public boolean isEnumFlag() {
        return enumFlag;
    }
    public Map<String, String> getEnumItemMap() {
        return enumItemMap;
    }
    public String getCreator() {
        return creator;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public String getLastModifier() {
        return lastModifier;
    }
    public Date getLastModifyTime() {
        return lastModifyTime;
    }
    public Date getTs() {
        return ts;
    }
    public boolean isNullableFlag() {
        return nullableFlag;
    }
    public String getDefaultValue() {
        return defaultValue;
    }
    public Integer getPrecisionLength() {
        return precisionLength;
    }
    public String getRange() {
        return range;
    }
    public void setRange(String range) {
        this.range = range;
    }
    public Integer getAttributeLength() {
        return attributeLength;
    }
    public void setAttributeLength(Integer attributeLength) {
        this.attributeLength = attributeLength;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getScaleLength() {
        return scaleLength;
    }
    public void setScaleLength(Integer scaleLength) {
        this.scaleLength = scaleLength;
    }
    @Override
    public String toString() {
        return "OsLinkTypeAttributeVO{" +
                "oid='" + oid + '\'' +
                ", pkLinkType='" + pkLinkType + '\'' +
                ", id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", description='" + description + '\'' +
                ", attributeLength=" + attributeLength +
                ", attrDataType='" + attrDataType + '\'' +
                ", nullableFlag=" + nullableFlag +
                ", defaultValue='" + defaultValue + '\'' +
                ", precisionLength=" + precisionLength +
                ", scaleLength=" + scaleLength +
                ", range='" + range + '\'' +
                ", referBtmTypeId='" + referBtmTypeId + '\'' +
                ", referBtmTypeName='" + referBtmTypeName + '\'' +
                ", referFlag=" + referFlag +
                ", enumId='" + enumId + '\'' +
                ", enumName='" + enumName + '\'' +
                ", enumFlag=" + enumFlag +
                ", enumItemMap=" + enumItemMap +
                ", btmname='" + btmName + '\'' +
                ", owner='" + owner + '\'' +
                ", creator='" + creator + '\'' +
                ", createTime=" + createTime +
                ", lastModifier='" + lastModifier + '\'' +
                ", lastModifyTime=" + lastModifyTime +
                ", ts=" + ts +
                '}';
    }
}
Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeVO.java
@@ -124,6 +124,11 @@
     */
    private String domain;
    /**
     * é¢†åŸŸæ˜¾ç¤ºå€¼
     */
    private String domainText;
    /**
     * åŒ…含属性
     */
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java
@@ -36,13 +36,20 @@
    void createDbTablesByOidCollection(Collection<String> oidCollection) throws VciBaseException;
    /**
     * èŽ·å–åˆ›å»ºçš„sql语句中属性部分
     * èŽ·å–åˆ›å»ºçš„sql语句中属性部分 -- ä¸šåŠ¡ç±»åž‹
     * @param attributeVOList å±žæ€§çš„立碑
     * @return sql语句
     */
    String getCreateSqlByAttributeForBtm(List<BtmTypeAttributeVO> attributeVOList);
    /**
     * èŽ·å–åˆ›å»ºçš„sql语句中属性部分 -- é“¾æŽ¥ç±»åž‹
     * @param attributeVOList å±žæ€§çš„立碑
     * @return sql语句
     */
    String getCreateSqlByAttributeForLink(List<LinkTypeAttributeVO> attributeVOList);
    /**
     * æ‰¹é‡å°†ä¸šåŠ¡ç±»åž‹åˆ›å»ºæ•°æ®åº“è¡¨
     * @param ids ä¸šåŠ¡ç±»åž‹çš„è‹±æ–‡åç§°
     * @throws VciBaseException å‚数为空或者创建表出现了错误的时候会抛出异常
Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java
@@ -185,6 +185,26 @@
    }
    /**
     * åˆ›å»ºé“¾æŽ¥ç±»åž‹çš„表格
     *
     * @param linkTypeVO é“¾æŽ¥ç±»åž‹çš„æ˜¾ç¤ºå¯¹è±¡
     * @throws VciBaseException æ‰§è¡Œå‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚常
     */
    private void createDbTableForLink(LinkTypeVO linkTypeVO) throws VciBaseException {
        VciBaseUtil.alertNotNull(linkTypeVO, "要创建表格所属的业务类型", linkTypeVO.getTableName(), "业务类型的表格名称");
        String tableName = linkTypeVO.getTableName();
        if (!checkTableExistByTableName(tableName)) {
            String attributeSql = getCreateSqlByAttributeForLink(linkTypeVO.getAttributes());
            dllMapper.createTableBySql(tableName, attributeSql);
            if (StringUtils.isNotBlank(linkTypeVO.getName())) {
                dllMapper.commentTable(tableName, linkTypeVO.getName());
            }
            linkTypeVO.getAttributes().forEach(s -> {
                dllMapper.commentColumnTable(tableName, s.getId(), s.getName());
            });
        }
    }
    /**
     * èŽ·å–åˆ›å»ºçš„sql语句中属性部分
     *
     * @param attributeVOList å±žæ€§çš„立碑
@@ -196,7 +216,26 @@
        attributeVOList.forEach(a -> {
            sb.append(a.getId()).append(StringPool.SPACE);
            VciFieldTypeEnum fieldTypeEnum = VciFieldTypeEnum.forValue(a.getAttrDataType());
            sb.append(dllMapper.getColumnTypeSql(fieldTypeEnum, a));
            sb.append(dllMapper.getColumnTypeSql(fieldTypeEnum, a)).append(",");
        });
        return sb.substring(0, sb.lastIndexOf(","));
    }
    /**
     * èŽ·å–åˆ›å»ºçš„sql语句中属性部分
     *
     * @param attributeVOList å±žæ€§çš„立碑
     * @return sql语句
     */
    @Override
    public String getCreateSqlByAttributeForLink(List<LinkTypeAttributeVO> attributeVOList) {
        StringBuilder sb = new StringBuilder();
        attributeVOList.forEach(a -> {
            BtmTypeAttributeVO attributeVO = Optional.ofNullable(BeanUtil.copy(a, BtmTypeAttributeVO.class)).orElseGet(BtmTypeAttributeVO::new);
            attributeVO.setPkBtmType(a.getPkLinkType());
            sb.append(a.getId()).append(StringPool.SPACE);
            VciFieldTypeEnum fieldTypeEnum = VciFieldTypeEnum.forValue(a.getAttrDataType());
            sb.append(dllMapper.getColumnTypeSql(fieldTypeEnum, attributeVO)).append(",");
        });
        return sb.substring(0, sb.lastIndexOf(","));
    }
@@ -210,19 +249,10 @@
    @Override
    public void createDbTablesById(String ids) throws VciBaseException {
        VciBaseUtil.alertNotNull(ids, "业务类型/链接类型的英文集合");
        List<BtmTypeVO> btmTypeVOList = BtmTypeCache.selectByIdCollection(VciBaseUtil.str2List(ids));
//        List<OsLinkTypeVO> linkTypeVOList = linkTypeService.listLinkTypeByIdCollection(VciBaseUtil.str2List(ids));
        if (!CollectionUtils.isEmpty(btmTypeVOList)) {
            //说明是业务类型
            btmTypeVOList.forEach(this::createDbTableForBtm);
        }
        /*//试试链接类型
        if(!CollectionUtils.isEmpty(linkTypeVOList)){
            //的确是链接类型
            linkTypeVOList.stream().forEach( s -> {
                createDbTableForLink(s);
            });
        }*/
        // ä¸šåŠ¡ç±»åž‹
        Func.toStrList(",",ids).stream().filter(idBtmMap::containsKey).map(idBtmMap::get).forEach(this::createDbTableForBtm);
        // é“¾æŽ¥ç±»åž‹
        Func.toStrList(",",ids).stream().filter(idLinkMap::containsKey).map(idLinkMap::get).forEach(this::createDbTableForLink);
    }
    /**
@@ -540,6 +570,7 @@
                    modifyAttributeInfo.setBeforeModifyAttributes(String.join(",", beforeList));
                }
            }
            modifyAttributeInfoDOList.add(modifyAttributeInfo);
        });
        return modifyAttributeInfoDOList;
    }
@@ -641,6 +672,7 @@
                    }
                }
                modifyAttributeInfoDOList.add(modifyAttributeInfo);
        });
        return modifyAttributeInfoDOList;
    }
@@ -719,8 +751,8 @@
    @Override
    public void reflexDifferent(List<ModifyAttributeInfo> differentAttributeList, List<BtmTypeVO> btmTypeVOList, List<LinkTypeVO> linkTypeVOList) throws VciBaseException {
        VciBaseUtil.alertNotNull(differentAttributeList, "要清理的数据库的信息为空");
        Map<String, BtmTypeVO> idBtmTypeMap = btmTypeVOList.stream().collect(Collectors.toMap(BtmTypeVO::getId, t -> t, (o1, o2) -> o1));
        Map<String, LinkTypeVO> idLinkTypeMap = linkTypeVOList.stream().collect(Collectors.toMap(LinkTypeVO::getId, t -> t, (o1, o2) -> o1));
        Map<String, BtmTypeVO> idBtmTypeMap = Optional.ofNullable(btmTypeVOList).orElseGet(ArrayList::new).stream().collect(Collectors.toMap(BtmTypeVO::getId, t -> t, (o1, o2) -> o1));
        Map<String, LinkTypeVO> idLinkTypeMap = Optional.ofNullable(linkTypeVOList).orElseGet(ArrayList::new).stream().collect(Collectors.toMap(LinkTypeVO::getId, t -> t, (o1, o2) -> o1));
        differentAttributeList.forEach(s -> {
//            BtmTypeVO btmType = idBtmTypeMap.get(id);
            if (ModifyTableTaskEnum.CREATE.getValue().equalsIgnoreCase(s.getTaskName())) {
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/LinkTypeController.java
@@ -3,11 +3,9 @@
import com.alibaba.cloud.commons.lang.StringUtils;
import com.alibaba.nacos.api.exception.NacosException;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.vci.ubcs.omd.constant.OmdCacheConstant;
import com.vci.ubcs.omd.dto.LinkTypeDTO;
import com.vci.ubcs.omd.entity.LinkType;
import com.vci.ubcs.omd.repeater.DomainRepeater;
import com.vci.ubcs.omd.service.ILinkTypeService;
@@ -25,13 +23,11 @@
import org.springblade.core.tool.api.R;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.Func;
import org.springblade.core.tool.utils.StringPool;
import org.springframework.web.bind.annotation.*;
import springfox.documentation.annotations.ApiIgnore;
import javax.validation.Valid;
import java.util.*;
import java.util.stream.Collectors;
/**
 * Description:链接类型控制器
@@ -79,7 +75,7 @@
    @ApiOperationSupport(order = 2)
    @ApiOperation(value = "查询列表", notes = "传入查询")
    public R<List<LinkTypeVO>> list(@ApiIgnore @RequestParam Map<String, Object> condition) {
        return R.data(LinkTypeWrapper.build().listEntityVO(linkTypeService.list(Condition.getQueryWrapper(condition, LinkType.class).lambda().orderByAsc(LinkType::getId))));
        return R.data(LinkTypeWrapper.build().listEntityVO(linkTypeService.list(Condition.getQueryWrapper(condition, LinkType.class).lambda().orderByAsc(LinkType::getId)), null));
    }
    /**
@@ -100,7 +96,7 @@
        IPage<LinkTypeVO> pageVO = new Page<>();
        IPage<LinkType> page = linkTypeService.page(Condition.getPage(query), Condition.getQueryWrapper(condition, LinkType.class).lambda().orderByAsc(LinkType::getId));
        BeanUtil.copy(page, pageVO);
        pageVO.setRecords(LinkTypeWrapper.build().listEntityVO(page.getRecords()));
        pageVO.setRecords(LinkTypeWrapper.build().listEntityVO(page.getRecords(), null));
        return R.data(pageVO);
    }
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/ILinkTypeAttributeService.java
@@ -1,10 +1,13 @@
package com.vci.ubcs.omd.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vci.ubcs.omd.entity.LinkType;
import com.vci.ubcs.omd.entity.LinkTypeAttribute;
import com.vci.ubcs.omd.vo.LinkTypeAttributeVO;
import com.vci.ubcs.omd.vo.LinkTypeVO;
import java.util.List;
import java.util.Map;
/**
 * Description: é“¾æŽ¥ç±»åž‹åŒ…含属性的服务接口
@@ -32,4 +35,32 @@
     * @return æŸ¥è¯¢ç»“æžœ
     */
    LinkTypeAttribute selectByPrimaryKey(String oid);
    /**
     * æ ¹æ®é“¾æŽ¥ç±»åž‹èŽ·å–é»˜è®¤å­—æ®µ
     * @param linkTypeVO é“¾æŽ¥ç±»åž‹
     * @return æ‰§è¡Œç»“æžœ
     */
    List<LinkTypeAttributeVO> getDefaultAttributes(LinkTypeVO linkTypeVO);
    /**
     * æ ¹æ®é“¾æŽ¥ç±»åž‹èŽ·å–æ‰€æœ‰çš„å­—æ®µ
     * @param linkTypeVO é“¾æŽ¥ç±»åž‹
     * @return æ‰§è¡Œç»“æžœ
     */
    List<LinkTypeAttributeVO> getAllAttributes(LinkTypeVO linkTypeVO);
    /**
     * èŽ·å–éžé»˜è®¤å­—æ®µçš„é“¾æŽ¥ç±»åž‹å±žæ€§
     * @param linkTypeVO é“¾æŽ¥ç±»åž‹
     * @return
     */
    List<LinkTypeAttributeVO> getAttributesNoDefault(LinkTypeVO linkTypeVO);
    /**
     * æ‰¹é‡èŽ·å–éžé»˜è®¤å­—æ®µçš„é“¾æŽ¥ç±»åž‹å±žæ€§
     * @param linkTypeDOList é“¾æŽ¥ç±»åž‹
     * @return æ‰§è¡Œç»“æžœ
     */
    Map<String, List<LinkTypeAttributeVO>> batchGetAttributesNoDefault(List<LinkType> linkTypeDOList);
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmAttributeServiceImpl.java
@@ -212,6 +212,8 @@
                vo.setId(id);
                vo.setName(name);
                vo.setPkBtmType(btmType.getOid());
                vo.setAttrDataType(VciFieldTypeEnum.VTString.name());
                vo.setAttributeLength(150);
                if (Arrays.asList("lastr","firstr","lastv","firstv","revisionseq","versionseq","revisionvalue","versionvalue").contains(id)){
                    vo.setAttributeLength(5);
                    vo.setAttrDataType(VciFieldTypeEnum.VTInteger.name());
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
@@ -360,6 +360,7 @@
            if (!existFieldMap.containsKey(k)){
                BtmTypeLinkAttributesDTO attr = new BtmTypeLinkAttributesDTO();
                attr.setId(k);
                attr.setName(v);
                attr.setAttrDataType(VciFieldTypeEnum.VTString.name());
                attr.setAttributeLength(50);
                attr.setNullableFlag(false);
@@ -507,10 +508,13 @@
            afterAttributes = updateAttributeForBtm(btmTypeByOid.getOid(),beforeAttributes, attributes);
        }
        BtmTypeVO btmTypeVO = BtmTypeWrapper.build().entityVO(btmTypeDO);
        //在创建表的时候还需要把默认的字段带上。
        List<BtmTypeAttributeVO> defaultAttribute = btmTypeAttributeService.getDefaultAttribute(btmTypeVO);
        afterAttributes.addAll(defaultAttribute);
        btmTypeVO.setAttributes(afterAttributes);
        try {
            if (autoCreateTable) {
                checkTableSame(btmTypeVO);
//                checkTableSame(btmTypeVO);
                R result = DomainRepeater.submitBtmType(btmTypeDTO.getDomain(), btmTypeVO);
                if (result.isSuccess()){
                    List<ModifyAttributeInfo> infoList = new ArrayList<>();
@@ -598,7 +602,7 @@
                            new Object[]{btmTypeDTO.getRevisionRuleId(), btmTypeDTO.getRevisionRuleName()});
                    }
                }
            btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.REVISION_MANAGE_FIELD_MAP));
//            btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.REVISION_MANAGE_FIELD_MAP));
        }
        if (btmTypeDTO.isLifeCycleFlag()){
            // éœ€è¦æŽ§åˆ¶ç”Ÿå‘½å‘¨æœŸ
@@ -616,11 +620,11 @@
//                            new Object[]{btmTypeDTO.getSubLifeCycleId(), btmTypeDTO.getSubLifeCycleName()});
//                    }
//                }
            btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.LIFECYCLE_MANAGE_FIELD_MAP));
//            btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.LIFECYCLE_MANAGE_FIELD_MAP));
        }
        if (btmTypeDTO.isSecretFlag()){
            // éœ€è¦æŽ§åˆ¶å¯†çº§
            btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.SECRET_MANAGE_FIELD_MAP));
//            btmTypeDTO.setAttributes(addAttributeByFieldMap(btmTypeDTO.getAttributes(),BtmTypeFieldConstant.SECRET_MANAGE_FIELD_MAP));
        }
    }
    @Override
@@ -650,12 +654,14 @@
                    String label = domain.get(k);
                    BtmTreeVO parent = new BtmTreeVO();
                    parent.setName(label);
                    parent.setLabel(label);
                    parent.setId(k);
                    parent.setChildList(v.stream().map(s -> {
                        BtmTreeVO child = new BtmTreeVO();
                        child.setOid(s.getOid());
                        child.setName(s.getId() + " " + (s.getName() == null ? "" : s.getName()));
                        child.setName(s.getName());
                        child.setId(s.getId());
                        child.setLabel(s.getId() +  (s.getName() == null ? "" : "(" + s.getName() + ")"));
                        return child;
                    }).collect(Collectors.toList()));
                    treeList.add(parent);
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeAttributeServiceImpl.java
@@ -1,18 +1,27 @@
package com.vci.ubcs.omd.service.impl;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.omd.constant.BtmTypeFieldConstant;
import com.vci.ubcs.omd.entity.LinkType;
import com.vci.ubcs.omd.entity.LinkTypeAttribute;
import com.vci.ubcs.omd.mapper.LinkTypeAttributeMapper;
import com.vci.ubcs.omd.service.IAttributeService;
import com.vci.ubcs.omd.service.ILinkTypeAttributeService;
import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
import com.vci.ubcs.omd.vo.LinkTypeAttributeVO;
import com.vci.ubcs.omd.vo.LinkTypeVO;
import com.vci.ubcs.omd.wrapper.LinkTypeAttributeWrapper;
import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
 * Description: é“¾æŽ¥ç±»åž‹åŒ…含属性的服务
@@ -56,4 +65,80 @@
        VciBaseUtil.alertNotNull(oid);
        return baseMapper.selectOne(Wrappers.<LinkTypeAttribute>query().lambda().eq(LinkTypeAttribute::getOid,oid));
    }
    /**
     * æ ¹æ®é“¾æŽ¥ç±»åž‹èŽ·å–é»˜è®¤å­—æ®µ
     *
     * @param linkTypeVO é“¾æŽ¥ç±»åž‹
     * @return æ‰§è¡Œç»“æžœ
     */
    @Override
    public List<LinkTypeAttributeVO> getDefaultAttributes(LinkTypeVO linkTypeVO) {
        Objects.requireNonNull(linkTypeVO,"链接类型不能为空");
        List<LinkTypeAttributeVO> list = new ArrayList<>();
        // ä¸šåŠ¡ç±»åž‹çš„åŸºæœ¬å­—æ®µ
        BtmTypeFieldConstant.LINK_TYPE_FIELD_MAP.forEach((id, name) -> {
            LinkTypeAttributeVO vo = new LinkTypeAttributeVO();
            vo.setId(id);
            vo.setName(name);
            vo.setPkLinkType(linkTypeVO.getOid());
            if (StringUtils.equals(id,"oid")){
                vo.setNullableFlag(false);
            }else {
                vo.setNullableFlag(true);
            }
            if (Arrays.asList("createtime","lastmodifytime","owner").contains(id)){
                vo.setAttrDataType(VciFieldTypeEnum.VTDateTime.name());
                vo.setAttributeLength(6);
            }else {
                vo.setAttrDataType(VciFieldTypeEnum.VTString.name());
                vo.setAttributeLength(150);
            }
            list.add(vo);
        });
        return list;
    }
    /**
     * æ ¹æ®é“¾æŽ¥ç±»åž‹èŽ·å–æ‰€æœ‰çš„å­—æ®µ
     *
     * @param linkTypeVO é“¾æŽ¥ç±»åž‹
     * @return æ‰§è¡Œç»“æžœ
     */
    @Override
    public List<LinkTypeAttributeVO> getAllAttributes(LinkTypeVO linkTypeVO) {
        Objects.requireNonNull(linkTypeVO,"链接类型不能为空");
        List<LinkTypeAttributeVO> attributes = getAttributesNoDefault(linkTypeVO);
        attributes.addAll(getDefaultAttributes(linkTypeVO));
        return attributes;
    }
    /**
     * èŽ·å–éžé»˜è®¤å­—æ®µçš„é“¾æŽ¥ç±»åž‹å±žæ€§
     *
     * @param linkTypeVO é“¾æŽ¥ç±»åž‹
     * @return
     */
    @Override
    public List<LinkTypeAttributeVO> getAttributesNoDefault(LinkTypeVO linkTypeVO) {
        Objects.requireNonNull(linkTypeVO,"链接类型不能为空");
        return LinkTypeAttributeWrapper.build().listEntityVO(baseMapper.selectList(Wrappers.<LinkTypeAttribute>query().lambda().eq(LinkTypeAttribute::getPkLinkType, linkTypeVO.getOid())));
    }
    /**
     * æ‰¹é‡èŽ·å–éžé»˜è®¤å­—æ®µçš„é“¾æŽ¥ç±»åž‹å±žæ€§
     *
     * @param linkTypeDOList é“¾æŽ¥ç±»åž‹
     * @return æ‰§è¡Œç»“æžœ
     */
    @Override
    public Map<String, List<LinkTypeAttributeVO>> batchGetAttributesNoDefault(List<LinkType> linkTypeDOList) {
        VciBaseUtil.alertNotNull(linkTypeDOList,"链接类型集合");
        Set<String> oidSet = linkTypeDOList.stream().map(LinkType::getOid).collect(Collectors.toSet());
        if (CollectionUtils.isEmpty(oidSet)){
            return new HashMap<>();
        }
        List<LinkTypeAttribute> attributes = baseMapper.selectList(Wrappers.<LinkTypeAttribute>query().lambda().in(LinkTypeAttribute::getPkLinkType, oidSet));
        return LinkTypeAttributeWrapper.build().listEntityVO(Optional.ofNullable(attributes).orElseGet(ArrayList::new)).stream().collect(Collectors.groupingBy(LinkTypeAttributeVO::getPkLinkType));
    }
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeServiceImpl.java
@@ -4,15 +4,8 @@
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.nacos.api.exception.NacosException;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.conditions.update.UpdateChainWrapper;
import com.baomidou.mybatisplus.extension.kotlin.KtQueryChainWrapper;
import com.baomidou.mybatisplus.extension.kotlin.KtUpdateChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.omd.constant.BtmTypeConstant;
import com.vci.ubcs.omd.dto.BtmAndLinkTypeDdlDTO;
@@ -27,7 +20,6 @@
import com.vci.ubcs.omd.repeater.DomainRepeater;
import com.vci.ubcs.omd.service.*;
import com.vci.ubcs.omd.vo.*;
import com.vci.ubcs.omd.wrapper.BtmTypeWrapper;
import com.vci.ubcs.omd.wrapper.LinkTypeAttributeWrapper;
import com.vci.ubcs.omd.wrapper.LinkTypeWrapper;
import com.vci.ubcs.starter.exception.VciBaseException;
@@ -49,12 +41,11 @@
import org.springframework.stereotype.Service;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import org.springframework.util.CollectionUtils;
import java.io.Serializable;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
@@ -169,7 +160,8 @@
        if(!CollectionUtils.isEmpty(pkLinkTypeCollection)){
            List<LinkType> linkTypeDOList = listLinkTypeDOByOidCollection(pkLinkTypeCollection);
            if(!CollectionUtils.isEmpty(linkTypeDOList)) {
                return LinkTypeWrapper.build().listEntityVO(linkTypeDOList);
                Map<String,List<LinkTypeAttributeVO>> pkLinkTypeAndAttributeMap = linkTypeAttributeService.batchGetAttributesNoDefault(linkTypeDOList);
                return LinkTypeWrapper.build().listEntityVO(linkTypeDOList,pkLinkTypeAndAttributeMap);
            }
        }
        return null;
@@ -194,6 +186,7 @@
                    linkTypeDOList.addAll(linkTypeDOS);
                }
            });
            return linkTypeDOList;
        }
        return null;
    }
@@ -241,7 +234,8 @@
        if(!CollectionUtils.isEmpty(linkTypeIdCollection)){
            List<LinkType> linkTypeDOList = listLinkTypeDOByIdCollection(linkTypeIdCollection);
            if(!CollectionUtils.isEmpty(linkTypeDOList)) {
                return LinkTypeWrapper.build().listEntityVO(linkTypeDOList);
                Map<String,List<LinkTypeAttributeVO>> pkLinkTypeAndAttributeMap = linkTypeAttributeService.batchGetAttributesNoDefault(linkTypeDOList);
                return LinkTypeWrapper.build().listEntityVO(linkTypeDOList, pkLinkTypeAndAttributeMap);
            }
        }
        return null;
@@ -352,6 +346,7 @@
     * @throws VciBaseException æ·»åŠ å‡ºé”™çš„æ—¶å€™ä¼šæŠ›å‡ºå¼‚å¸¸
     */
    @Override
    @Transactional
    public LinkTypeVO addSave(LinkTypeVO linkTypeVO, boolean autoCreateTable) throws VciBaseException {
        TransactionStatus transaction = null;
        if(autoCreateTable) {
@@ -398,20 +393,29 @@
            }
            LinkType linkTypeDO = new LinkType();
            BeanUtil.copy(linkTypeVO, linkTypeDO);
            if (StringUtils.isBlank(linkTypeDO.getTableName())){
                linkTypeDO.setTableName(getTableName(linkTypeDO.getId(),linkTypeDO.getDomain()));
            }
            String creator = AuthUtil.getUserAccount();
            Date now = new Date();
            linkTypeDO.setCreator(creator);
            linkTypeDO.setCreateTime(now);
            linkTypeDO.setOwner(creator);
            linkTypeDO.setBtmName(BtmTypeConstant.LINK_TYPE);
            linkTypeDO.setTs(now);
            LinkTypeWrapper.build().setBeforeInsert(linkTypeDO,creator,now);
            //处理属性
            addAttributeForLink(linkTypeVO.getAttributes(),linkTypeDO.getOid(),creator,now);
            List<LinkTypeAttributeVO> attributeVOList = addAttributeForLink(linkTypeVO.getAttributes(), linkTypeDO.getOid(), creator, now);
            baseMapper.insert(linkTypeDO);
            if(autoCreateTable) {
                dataSourceTransactionManager.commit(transaction);
                LinkTypeVO typeVO = LinkTypeWrapper.build().entityVO(linkTypeDO);
                typeVO.setAttributes(attributeVOList);
                List<LinkTypeAttributeVO> attributes = typeVO.getAttributes();
                attributes.addAll(linkTypeAttributeService.getDefaultAttributes(typeVO));
                typeVO.setAttributes(attributes);
                R r = DomainRepeater.submitLinkType(typeVO.getDomain(), typeVO);
                if (!r.isSuccess()){
                    dataSourceTransactionManager.rollback(transaction);
                }else {
                    dataSourceTransactionManager.commit(transaction);
                }
            }
        }catch (VciBaseException e){
            if(autoCreateTable) {
@@ -424,9 +428,9 @@
            }
            throw e;
        }
        if(autoCreateTable) {
        /*if(autoCreateTable) {
            checkTableSame(linkTypeVO);
        }
        }*/
        return linkTypeVO;
    }
@@ -437,11 +441,11 @@
     * @param creator åˆ›å»ºäºº
     * @param now å½“前时间
     */
    private void addAttributeForLink(List<LinkTypeAttributeVO> attributesVOList,String pkLinkType,String creator,Date now){
    private List<LinkTypeAttributeVO> addAttributeForLink(List<LinkTypeAttributeVO> attributesVOList,String pkLinkType,String creator,Date now){
        List<LinkTypeAttribute> linkTypeAttributeDOList = new ArrayList<>();
        if(!CollectionUtils.isEmpty(attributesVOList)) {
            List<String> attributeIdList = new ArrayList<>();
            attributesVOList.stream().forEachOrdered(s -> {
            attributesVOList.forEach(s -> {
                linkTypeAttributeService.checkAttribute(s);
                linkTypeAttributeDOList.add(LinkTypeAttributeWrapper.build().copyVO2DO(s, pkLinkType, creator, now));
                attributeIdList.add(s.getId().toLowerCase().trim());
@@ -449,7 +453,9 @@
            //检查属性是否都存在
            attributeService.checkAttributeExists(attributeIdList);
            linkTypeAttributeService.saveOrUpdateBatch(linkTypeAttributeDOList,10000);
            return LinkTypeAttributeWrapper.build().listEntityVO(linkTypeAttributeDOList);
        }
        return null;
    }
    /**
@@ -478,8 +484,8 @@
        }
        if (!CollectionUtils.isEmpty(modifyAttributeInfoDOList)) {
            modifyAttributeService.saveOrUpdateBatch(modifyAttributeInfoDOList);
            modifyAttributeService.finishModify(modifyAttributeInfoDOList);
        }
        modifyAttributeService.finishModify(modifyAttributeInfoDOList);
    }
    /**
@@ -542,15 +548,10 @@
            if(StringUtils.isNotBlank(unExistBtmTypeId)){
                throw new VciBaseException("链接类型使用的业务类型{0}不存在,请查证",new Object[]{unExistBtmTypeId});
            }
            String creator = AuthUtil.getUserAccount();
            Date now = new Date();
            linkTypeDO.setLastModifier(creator);
            linkTypeDO.setLastModifyTime(now);
            linkTypeDO.setTs(now);
            linkTypeDO = LinkTypeWrapper.build().setBeforeUpdate(linkTypeDO,creator,now);
            //处理属性
            LinkTypeWrapper.build().copyLinkTypeVO2DO(linkTypeVO,linkTypeDO,creator,new Date());
            //先查询这个链接类型包含多少属性
@@ -564,22 +565,23 @@
            }
            saveOrUpdate(linkTypeDO);
            if(autoCreateTable) {
                List<LinkTypeAttributeVO> defaultAttributes = linkTypeAttributeService.getDefaultAttributes(linkTypeVO);
                List<LinkTypeAttributeVO> attributes = linkTypeVO.getAttributes();
                attributes.addAll(defaultAttributes);
                linkTypeVO.setAttributes(attributes);
                BtmAndLinkTypeDdlDTO ddlDTO = new BtmAndLinkTypeDdlDTO();
                DomainRepeater.checkDifferent(ddlDTO,linkTypeVO.getDomain());
                dataSourceTransactionManager.commit(transaction);
            }
        }catch (VciBaseException e){
        } catch (Throwable e){
            if(autoCreateTable) {
                dataSourceTransactionManager.rollback(transaction);
            }
            throw e;
        }catch (Throwable e) {
            if(autoCreateTable) {
                dataSourceTransactionManager.rollback(transaction);
            }
            throw e;
            throw new VciBaseException(e.getMessage());
        }
        if(autoCreateTable) {
        /*if(autoCreateTable) {
            checkTableSame(linkTypeVO);
        }
        }*/
        return linkTypeVO;
    }
@@ -807,19 +809,19 @@
            attributeVO.setLastModifier(creator);
            attributeVO.setLastModifyTime(now);
            attributeVO.setTs(now);
            //查询链接类型是否存在
            linkTypeAttributeService.saveOrUpdate(attributeDO);
            if (autoEdit2Table) {
                BtmAndLinkTypeDdlDTO ddlDTO = new BtmAndLinkTypeDdlDTO();
//                ddlDTO.setLinkTypeList();
//                DomainRepeater.checkDifferent(,domain);
                LinkTypeVO linkTypeVO = LinkTypeWrapper.build().entityVO(linkTypeDO);
                ddlDTO.setLinkTypeList(Collections.singletonList(linkTypeVO));
                DomainRepeater.checkDifferent(ddlDTO,domain);
                dataSourceTransactionManager.commit(transaction);
            }
//        }catch (NacosException e){
//            if(autoEdit2Table) {
//                dataSourceTransactionManager.rollback(transaction);
//            }
//            throw new RuntimeException(e);
        }catch (NacosException e){
            if(autoEdit2Table) {
                dataSourceTransactionManager.rollback(transaction);
            }
            throw new RuntimeException(e);
        }catch (Throwable e){
            if(autoEdit2Table) {
                dataSourceTransactionManager.rollback(transaction);
@@ -873,7 +875,7 @@
    public List<BtmTreeVO> treeDomain() {
        try {
            Map<String, String> domain = Optional.ofNullable(DomainRepeater.getDomain()).orElseGet(ArrayList::new).stream().collect(Collectors.toMap(DomainVO::getValue, DomainVO::getLabel));
            List<LinkTypeVO> vos = LinkTypeWrapper.build().listEntityVO(baseMapper.selectAll());
            List<LinkTypeVO> vos = LinkTypeWrapper.build().listEntityVO(baseMapper.selectAll(), null);
            Map<String, List<LinkTypeVO>> domainMap = vos.stream().collect(Collectors.groupingBy(LinkTypeVO::getDomain));
            List<BtmTreeVO> treeList = new ArrayList<>();
            domainMap.forEach((k,v)-> {
@@ -882,11 +884,13 @@
                    BtmTreeVO parent = new BtmTreeVO();
                    parent.setName(label);
                    parent.setId(k);
                    parent.setLabel(label);
                    parent.setChildList(v.stream().map(s -> {
                        BtmTreeVO child = new BtmTreeVO();
                        child.setOid(s.getOid());
                        child.setName(s.getId() + " " + (s.getName() == null ? "" : s.getName()));
                        child.setLabel(s.getId() + (s.getName() == null ? "" : "(" + s.getName() + ")"));
                        child.setId(s.getId());
                        child.setName(s.getName());
                        return child;
                    }).collect(Collectors.toList()));
                    treeList.add(parent);
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeAttributeWrapper.java
@@ -1,5 +1,6 @@
package com.vci.ubcs.omd.wrapper;
import com.vci.ubcs.omd.cache.EnumCache;
import com.vci.ubcs.omd.constant.BtmTypeConstant;
import com.vci.ubcs.omd.dto.BtmTypeLinkAttributesDTO;
import com.vci.ubcs.omd.entity.BtmTypeAttribute;
@@ -34,6 +35,7 @@
    public BtmTypeAttributeVO entityVO(BtmTypeAttribute entity) {
        BtmTypeAttributeVO vo = Objects.requireNonNull(BeanUtil.copy(entity, BtmTypeAttributeVO.class));
        // åœ¨è¿™é‡Œè®¾ç½®æžšä¸¾æ˜¾ç¤ºå€¼
        vo.setAttrDataTypeText(EnumCache.getValue("attributeType",vo.getAttrDataType()));
        return vo;
    }
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeAttributeWrapper.java
@@ -1,6 +1,7 @@
package com.vci.ubcs.omd.wrapper;
import com.alibaba.cloud.commons.lang.StringUtils;
import com.vci.ubcs.omd.cache.EnumCache;
import com.vci.ubcs.omd.constant.BtmTypeConstant;
import com.vci.ubcs.omd.entity.LinkTypeAttribute;
import com.vci.ubcs.omd.vo.LinkTypeAttributeVO;
@@ -29,6 +30,7 @@
    @Override
    public LinkTypeAttributeVO entityVO(LinkTypeAttribute entity) {
        LinkTypeAttributeVO vo = BeanUtil.copy(entity, LinkTypeAttributeVO.class);
        vo.setAttrDataTypeText(EnumCache.getValue("attributeType",vo.getAttrDataType()));
        return vo;
    }
@@ -49,6 +51,8 @@
        attributeDO.setCreateTime(now);
        attributeDO.setTs(now);
        attributeDO.setOwner(creator);
        attributeDO.setLastModifier(creator);
        attributeDO.setLastModifyTime(now);
        attributeDO.setBtmName(BtmTypeConstant.LINK_TYPE_ATTRIBUTE);
        return attributeDO;
    }
Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeWrapper.java
@@ -1,15 +1,19 @@
package com.vci.ubcs.omd.wrapper;
import com.vci.ubcs.omd.cache.BtmTypeCache;
import com.vci.ubcs.omd.constant.BtmTypeConstant;
import com.vci.ubcs.omd.entity.LinkType;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.omd.vo.LinkTypeAttributeVO;
import com.vci.ubcs.omd.vo.LinkTypeVO;
import com.vci.ubcs.starter.web.enumpck.NewAppConstantEnum;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import org.springblade.core.mp.support.BaseEntityWrapper;
import org.springblade.core.tool.utils.BeanUtil;
import org.springblade.core.tool.utils.Func;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -26,13 +30,39 @@
    @Override
    public LinkTypeVO entityVO(LinkType entity) {
        LinkTypeVO vo = BeanUtil.copy(entity, LinkTypeVO.class);
        LinkTypeVO vo = Optional.ofNullable(BeanUtil.copy(entity, LinkTypeVO.class)).orElseGet(LinkTypeVO::new);
        List<String> fromIdList = Func.toStrList(",", vo.getFromBtmType());
        List<String> toIdList = Func.toStrList(",", vo.getToBtmType());
        Set<String> btmIdSet = new HashSet<>();
        btmIdSet.addAll(fromIdList);
        btmIdSet.addAll(toIdList);
        List<BtmTypeVO> btmTypeVOList = BtmTypeCache.selectByIdCollection(new ArrayList<>(btmIdSet));
        List<BtmTypeVO> fromBtm = new ArrayList<>();
        List<BtmTypeVO> toBtm = new ArrayList<>();
        Optional.ofNullable(btmTypeVOList).orElseGet(ArrayList::new).forEach(btm -> {
            if (vo.getFromBtmType().contains(btm.getId())){
                fromBtm.add(btm);
            }
            if (vo.getToBtmType().contains(btm.getId())){
                toBtm.add(btm);
            }
        });
        vo.setFromBtmTypes(fromBtm);
        vo.setToBtmTypes(toBtm);
        // æžšä¸¾å¤„理
        vo.setDomainText(NewAppConstantEnum.getTextByName(vo.getDomain()));
        return vo;
    }
    public List<LinkTypeVO> listEntityVO(List<LinkType> entityList){
        return Optional.ofNullable(entityList).orElseGet(ArrayList::new).stream().map(this::entityVO).collect(Collectors.toList());
    public List<LinkTypeVO> listEntityVO(List<LinkType> entityList, Map<String, List<LinkTypeAttributeVO>> pkLinkTypeAndAttributeMap){
        List<LinkTypeVO> voList = Optional.ofNullable(entityList).orElseGet(ArrayList::new).stream().map(this::entityVO).collect(Collectors.toList());
        if (!CollectionUtils.isEmpty(voList) && pkLinkTypeAndAttributeMap != null){
            voList.forEach(vo -> {
                List<LinkTypeAttributeVO> attributes = pkLinkTypeAndAttributeMap.getOrDefault(vo.getOid(), new ArrayList<>());
                vo.setAttributes(attributes);
            });
        }
        return voList;
    }
    public void copyLinkTypeVO2DO(LinkTypeVO linkTypeVO, LinkType linkTypeDO, String creator, Date now) {
@@ -51,4 +81,36 @@
        linkTypeDO.setLastModifyTime(now);
        linkTypeDO.setBtmName(BtmTypeConstant.LINK_TYPE);
    }
    /**
     * ç¼–辑保存前设置默认字段值
     *
     * @param linkTypeDO é“¾æŽ¥ç±»åž‹
     * @param modifier ä¿®æ”¹äºº
     * @param modifyTime ä¿®æ”¹æ—¶é—´
     * @return
     */
    public LinkType setBeforeUpdate(LinkType linkTypeDO, String modifier, Date modifyTime) {
        linkTypeDO.setLastModifier(modifier);
        linkTypeDO.setTs(modifyTime);
        linkTypeDO.setLastModifyTime(modifyTime);
        return linkTypeDO;
    }
    /**
     * æ’入前设置默认字段
     * @param linkTypeDO é“¾æŽ¥ç±»åž‹
     * @param creator åˆ›å»ºäºº
     * @param createTime åˆ›å»ºæ—¶é—´
     */
    public void setBeforeInsert(LinkType linkTypeDO, String creator, Date createTime) {
        linkTypeDO.setOid(VciBaseUtil.getPk());
        linkTypeDO.setCreator(creator);
        linkTypeDO.setCreateTime(createTime);
        linkTypeDO.setOwner(creator);
        linkTypeDO.setBtmName(BtmTypeConstant.LINK_TYPE);
        linkTypeDO.setTs(createTime);
        linkTypeDO.setLastModifyTime(createTime);
        linkTypeDO.setLastModifier(creator);
    }
}
Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/LinkTypeAttributeMapper.xml
@@ -33,6 +33,6 @@
    </sql>
    <sql id="tableName">
        pl_omd_link_type_attr
        pl_omd_link_type_attribute
    </sql>
</mapper>