From 9d50e7641ecad235e8b98583d65d6f485adf712e Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期二, 06 六月 2023 17:03:04 +0800
Subject: [PATCH] Merge branch 'master' of http://dev.vci-tech.com:1065/r/ubcs

---
 Source/UBCS-WEB/src/views/modeling/LinkType.vue                                                                 |  160 ++-
 Source/UBCS-WEB/src/components/Tree/classifyTrees.vue                                                           |    3 
 Source/UBCS-WEB/src/components/Crud/Crud.vue                                                                    |  186 +++-
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java                       |    9 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeServiceImpl.java          |  102 +-
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/ILinkTypeAttributeService.java         |   31 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeAttributeWrapper.java          |    4 
 Source/UBCS-WEB/vue.config.js                                                                                   |    6 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeAttributeWrapper.java           |    2 
 Source/UBCS-WEB/src/views/integration/integrationIndex.vue                                                      |  140 +--
 Source/UBCS-WEB/src/views/integration/integrationTransfer.vue                                                   |  128 +++
 Source/UBCS-WEB/package.json                                                                                    |    1 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeAttributeServiceImpl.java |   87 ++
 Source/UBCS-WEB/src/views/modeling/Business.vue                                                                 |   46 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeAttributeVO.java            |  256 -----
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/LinkTypeController.java             |    8 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LinkTypeAttribute.java          |    2 
 Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlFieldMappingAttrBO.java          |    5 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmAttributeServiceImpl.java      |    2 
 Source/UBCS-WEB/src/views/modeling/LinkTypeAdd.vue                                                              |  388 +++++++++
 Source/UBCS-WEB/src/components/FormTemplate/CodeApply.vue                                                       |  427 +++++++++
 Source/UBCS-WEB/src/views/MasterData/items.vue                                                                  |  186 +++-
 Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/LinkTypeAttributeMapper.xml                         |    2 
 Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java               |   64 +
 Source/UBCS-WEB/src/components/FormTemplate/FormTempalte.vue                                                    |   45 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeVO.java                     |    5 
 Source/UBCS-WEB/src/components/FormTemplate/ResembleQuery.vue                                                   |   14 
 Source/UBCS-WEB/src/views/modeling/BusinessAdd.vue                                                              |   35 
 Source/UBCS-WEB/src/components/FormTemplate/index.vue                                                           |   57 
 Source/UBCS-WEB/src/api/omd/linkType.js                                                                         |    4 
 Source/UBCS-WEB/src/views/MasterData/FormTempalteTest.vue                                                       |    6 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeWrapper.java                   |   76 +
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/BtmTreeVO.java                      |    4 
 Source/UBCS-WEB/src/main.js                                                                                     |    2 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java           |   16 
 35 files changed, 1,809 insertions(+), 700 deletions(-)

diff --git a/Source/UBCS-WEB/package.json b/Source/UBCS-WEB/package.json
index 3133c95..4034a7f 100644
--- a/Source/UBCS-WEB/package.json
+++ b/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",
diff --git a/Source/UBCS-WEB/src/api/omd/linkType.js b/Source/UBCS-WEB/src/api/omd/linkType.js
index e69fc12..4212b92 100644
--- a/Source/UBCS-WEB/src/api/omd/linkType.js
+++ b/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',
diff --git a/Source/UBCS-WEB/src/components/Crud/Crud.vue b/Source/UBCS-WEB/src/components/Crud/Crud.vue
index aeccd29..b4b82c2 100644
--- a/Source/UBCS-WEB/src/components/Crud/Crud.vue
+++ b/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)
+    },
     // 鐩戝惉鍗曞厓鏍肩偣鍑讳簨浠跺苟瀛樺偍姝e湪缂栬緫鐨勮
     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>
diff --git a/Source/UBCS-WEB/src/components/FormTemplate/CodeApply.vue b/Source/UBCS-WEB/src/components/FormTemplate/CodeApply.vue
index 8b84cca..e6f1f5b 100644
--- a/Source/UBCS-WEB/src/components/FormTemplate/CodeApply.vue
+++ b/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>
 
diff --git a/Source/UBCS-WEB/src/components/FormTemplate/FormTempalte.vue b/Source/UBCS-WEB/src/components/FormTemplate/FormTempalte.vue
index ec78c2f..18b9d68 100644
--- a/Source/UBCS-WEB/src/components/FormTemplate/FormTempalte.vue
+++ b/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: {
     // 琛ㄥ崟鏁版嵁淇敼鍙嶉鍒扮埗缁勪欢
diff --git a/Source/UBCS-WEB/src/components/FormTemplate/ResembleQuery.vue b/Source/UBCS-WEB/src/components/FormTemplate/ResembleQuery.vue
index 3aaf6fe..b5c685d 100644
--- a/Source/UBCS-WEB/src/components/FormTemplate/ResembleQuery.vue
+++ b/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) {
diff --git a/Source/UBCS-WEB/src/components/FormTemplate/index.vue b/Source/UBCS-WEB/src/components/FormTemplate/index.vue
index d04ed50..f99d7b4 100644
--- a/Source/UBCS-WEB/src/components/FormTemplate/index.vue
+++ b/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,
+      });
     },
   },
 };
diff --git a/Source/UBCS-WEB/src/components/Tree/classifyTrees.vue b/Source/UBCS-WEB/src/components/Tree/classifyTrees.vue
index f3d1fd1..da70e18 100644
--- a/Source/UBCS-WEB/src/components/Tree/classifyTrees.vue
+++ b/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)
       })
diff --git a/Source/UBCS-WEB/src/main.js b/Source/UBCS-WEB/src/main.js
index 5ceed92..082a2cd 100644
--- a/Source/UBCS-WEB/src/main.js
+++ b/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 => {
diff --git a/Source/UBCS-WEB/src/views/MasterData/FormTempalteTest.vue b/Source/UBCS-WEB/src/views/MasterData/FormTempalteTest.vue
index 1122205..c63bafa 100644
--- a/Source/UBCS-WEB/src/views/MasterData/FormTempalteTest.vue
+++ b/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>
diff --git a/Source/UBCS-WEB/src/views/MasterData/items.vue b/Source/UBCS-WEB/src/views/MasterData/items.vue
index 94b1072..fb59b6c 100644
--- a/Source/UBCS-WEB/src/views/MasterData/items.vue
+++ b/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)
     }
   }
 }
diff --git a/Source/UBCS-WEB/src/views/integration/integrationIndex.vue b/Source/UBCS-WEB/src/views/integration/integrationIndex.vue
index c4ab675..b3ae9fc 100644
--- a/Source/UBCS-WEB/src/views/integration/integrationIndex.vue
+++ b/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;
diff --git a/Source/UBCS-WEB/src/views/integration/integrationTransfer.vue b/Source/UBCS-WEB/src/views/integration/integrationTransfer.vue
new file mode 100644
index 0000000..6b311ce
--- /dev/null
+++ b/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">*閫夋嫨鍒嗙被杩涜灞炴�ц繃婊�, 鎴栬�呰緭鍏ュ睘鎬х殑鍏ㄦ嫾鎴栬�呯畝鎷艰繘琛屾煡璇�! 濡�: 濮撳悕 (鍙緭鍏m鎴杧inming )</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>
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/views/modeling/Business.vue b/Source/UBCS-WEB/src/views/modeling/Business.vue
index 476fe62..7b12feb 100644
--- a/Source/UBCS-WEB/src/views/modeling/Business.vue
+++ b/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',
diff --git a/Source/UBCS-WEB/src/views/modeling/BusinessAdd.vue b/Source/UBCS-WEB/src/views/modeling/BusinessAdd.vue
index bb1501a..d61723b 100644
--- a/Source/UBCS-WEB/src/views/modeling/BusinessAdd.vue
+++ b/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();
        }
     }
 }
diff --git a/Source/UBCS-WEB/src/views/modeling/LinkType.vue b/Source/UBCS-WEB/src/views/modeling/LinkType.vue
index 18e6791..eec03bf 100644
--- a/Source/UBCS-WEB/src/views/modeling/LinkType.vue
+++ b/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;
+            })
+        },
 
     }
 }
diff --git a/Source/UBCS-WEB/src/views/modeling/LinkTypeAdd.vue b/Source/UBCS-WEB/src/views/modeling/LinkTypeAdd.vue
new file mode 100644
index 0000000..8c7753a
--- /dev/null
+++ b/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>
diff --git a/Source/UBCS-WEB/vue.config.js b/Source/UBCS-WEB/vue.config.js
index 7543090..a5813f9 100644
--- a/Source/UBCS-WEB/vue.config.js
+++ b/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,
diff --git a/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlFieldMappingAttrBO.java b/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlFieldMappingAttrBO.java
index 101f07f..3de4dc4 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-ddl-api/src/main/java/com/vci/ubcs/ddl/bo/DdlFieldMappingAttrBO.java
+++ b/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;
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LinkTypeAttribute.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LinkTypeAttribute.java
index 785b2f9..339579a 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/LinkTypeAttribute.java
+++ b/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{
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/BtmTreeVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/BtmTreeVO.java
index 7e45251..ec137bf 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/BtmTreeVO.java
+++ b/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;
 
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeAttributeVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeAttributeVO.java
index f922f9c..0918d7e 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeAttributeVO.java
+++ b/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 @@
      * 鏃堕棿鎴筹紝鏍煎紡鏄痽yyy-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 +
-                '}';
-    }
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeVO.java
index 423bac7..a47e1e1 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/LinkTypeVO.java
+++ b/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;
+
     /**
      * 鍖呭惈灞炴��
      */
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java
index b8b06b3..2b2d1ea 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/IDdlService.java
+++ b/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;
 
 	/**
-	 * 鑾峰彇鍒涘缓鐨剆ql璇彞涓睘鎬ч儴鍒�
+	 * 鑾峰彇鍒涘缓鐨剆ql璇彞涓睘鎬ч儴鍒� -- 涓氬姟绫诲瀷
 	 * @param attributeVOList 灞炴�х殑绔嬬
 	 * @return sql璇彞
 	 */
 	String getCreateSqlByAttributeForBtm(List<BtmTypeAttributeVO> attributeVOList);
 
 	/**
+	 * 鑾峰彇鍒涘缓鐨剆ql璇彞涓睘鎬ч儴鍒� -- 閾炬帴绫诲瀷
+	 * @param attributeVOList 灞炴�х殑绔嬬
+	 * @return sql璇彞
+	 */
+	String getCreateSqlByAttributeForLink(List<LinkTypeAttributeVO> attributeVOList);
+
+	/**
 	 * 鎵归噺灏嗕笟鍔$被鍨嬪垱寤烘暟鎹簱琛�
 	 * @param ids 涓氬姟绫诲瀷鐨勮嫳鏂囧悕绉�
 	 * @throws VciBaseException 鍙傛暟涓虹┖鎴栬�呭垱寤鸿〃鍑虹幇浜嗛敊璇殑鏃跺�欎細鎶涘嚭寮傚父
diff --git a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java
index 3a8e185..cc39322 100644
--- a/Source/UBCS/ubcs-service/ubcs-ddl/src/main/java/com/vci/ubcs/ddl/service/impl/DdlServiceImpl.java
+++ b/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());
+			});
+		}
+	}
+	/**
 	 * 鑾峰彇鍒涘缓鐨剆ql璇彞涓睘鎬ч儴鍒�
 	 *
 	 * @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(","));
+	}
+
+	/**
+	 * 鑾峰彇鍒涘缓鐨剆ql璇彞涓睘鎬ч儴鍒�
+	 *
+	 * @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())) {
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/LinkTypeController.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/LinkTypeController.java
index 6d8170b..14c81d6 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/LinkTypeController.java
+++ b/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);
 	}
 
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/ILinkTypeAttributeService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/ILinkTypeAttributeService.java
index fb44a66..5929edb 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/ILinkTypeAttributeService.java
+++ b/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);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmAttributeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmAttributeServiceImpl.java
index 6742b49..af80c13 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmAttributeServiceImpl.java
+++ b/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());
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
index 2e7f48f..3444498 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java
+++ b/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);
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeAttributeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeAttributeServiceImpl.java
index f71b4d3..0908a51 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeAttributeServiceImpl.java
+++ b/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));
+	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeServiceImpl.java
index e616cd2..571c89d 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/LinkTypeServiceImpl.java
+++ b/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);
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeAttributeWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeAttributeWrapper.java
index f9574b3..086aeb0 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/BtmTypeAttributeWrapper.java
+++ b/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;
 	}
 
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeAttributeWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeAttributeWrapper.java
index 9186157..4b4222b 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeAttributeWrapper.java
+++ b/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;
 	}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeWrapper.java
index 6086205..7406ba9 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/LinkTypeWrapper.java
+++ b/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);
+	}
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/LinkTypeAttributeMapper.xml b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/LinkTypeAttributeMapper.xml
index 87e6848..d68ea8d 100644
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/LinkTypeAttributeMapper.xml
+++ b/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>

--
Gitblit v1.9.3