From b46cf401da847d7cca6269c6b2ffb04f6f72691a Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期日, 14 五月 2023 03:57:37 +0800
Subject: [PATCH] 新增应用码段下的参照配置界面,以及代码整合

---
 Source/UBCS-WEB/src/views/system/tenant.vue                                                                               |    9 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateAttrDTO.java           |  797 ---
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/EnumitemWrapper.java                             |   62 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IEnumItemService.java                            |   26 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/EnumController.java                           |  163 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java  |    5 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeTemplatePhaseVO.java          |   30 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseAttrService.java                     |    6 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/node/ForestNodeManagerOid.java         |   36 
 Source/UBCS-WEB/src/views/work/send.vue                                                                                   |    8 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportTemplateVO.java         |   37 
 Source/UBCS/ubcs-service-api/ubcs-util-api/pom.xml                                                                        |    5 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/EnumMapper.xml                                                |   52 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/Map2MPLLambdaUtil.java                 |   74 
 Source/UBCS-WEB/src/views/system/post.vue                                                                                 |    9 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/node/INodeOid.java                     |   16 
 Source/UBCS-WEB/src/const/code/codebutton.js                                                                              |    1 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseAttrMapper.xml                                      |   20 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/EnumItemClient.java                                |   55 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/EnumItemMapper.xml                                            |   26 
 Source/UBCS-WEB/src/const/code/codebasic.js                                                                               |    7 
 Source/UBCS-WEB/src/views/authority/datascope.vue                                                                         |   18 
 Source/UBCS-WEB/public/src/views/wel/index.vue                                                                            |    4 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/pom.xml                                                                         |    8 
 Source/UBCS-WEB/src/views/report/reportlist.vue                                                                           |   37 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IEnumItemClient.java                       |   51 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/BtmAttributeClient.java                            |   38 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/EnumCache.java                             |  132 
 Source/UBCS-WEB/src/main.js                                                                                               |    4 
 Source/UBCS-WEB/src/views/work/done.vue                                                                                   |    8 
 Source/UBCS-WEB/src/views/code/codebutton.vue                                                                             |    8 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeCodeAllCodeDTO.java                    |    2 
 Source/UBCS-WEB/src/api/code/codebutton.js                                                                                |   14 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeFixedValueService.java                    |    2 
 Source/UBCS-WEB/src/views/wel/index.vue                                                                                   |    4 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmAttributeFallback.java                 |   22 
 Source/UBCS-WEB/src/views/flow/model.vue                                                                                  |   33 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/PatternUtil.java                       |   50 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IEnumService.java                                |   65 
 Source/UBCS-WEB/.settings/src/views/modeling/original.vue                                                                 |    2 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/EnumWrapper.java                                 |   50 
 Source/UBCS-WEB/src/views/modeling/Business.vue                                                                           |  622 +-
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java               |  414 --
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/MPJLambdaWrapperSqlKeyword.java        |   90 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTemplatePhaseDTO.java                  |   52 
 Source/UBCS-WEB/src/const/omd/enum.js                                                                                     |  119 
 Source/UBCS-WEB/src/views/work/todo.vue                                                                                   |   30 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmAttributeClient.java                   |   29 
 Source/UBCS-WEB/src/views/code/code.vue                                                                                   |  338 +
 Source/UBCS-WEB/src/views/system/menu.vue                                                                                 |   10 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/DefaultAttrAssimtUtil.java             |    5 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateAttrVO.java   |  867 ----
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/EnumItemController.java                       |  149 
 Source/UBCS-WEB/src/views/authority/apiscope.vue                                                                          |   16 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/EnumServiceImpl.java                        |  101 
 Source/UBCS-WEB/src/views/modeling/original.vue                                                                           |    2 
 Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java                                  |    2 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java |  147 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/MybatisParameterUtil.java              |   82 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeClstemplateVO.java                      |   30 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseAttrServiceImpl.java             |   12 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempphaseServiceImpl.java             |   19 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/BtmTypeServiceImpl.java                     |    2 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java         |   51 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateButtonDTO.java         |  117 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/EnumItemMapper.java                               |   20 
 Source/UBCS-WEB/src/views/work/start.vue                                                                                  |   32 
 Source/UBCS-WEB/vue.config.js                                                                                             |    3 
 Source/UBCS-WEB/src/components/code-dialog-page/referConfigDialog.vue                                                     |  618 +++
 Source/UBCS-WEB/src/views/system/client.vue                                                                               |    9 
 Source/UBCS-WEB/src/views/flow/manager.vue                                                                                |    9 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/EnumItem.java                             |   99 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstemplateServiceImpl.java           |    4 
 Source/UBCS-WEB/.settings/src/views/omd/dict.vue                                                                          |    2 
 Source/UBCS-WEB/src/api/omd/enum.js                                                                                       |  131 
 Source/UBCS-WEB/src/const/code/codeSynonym.js                                                                             |    1 
 Source/UBCS-WEB/src/const/code/selectattroption.js                                                                        |    2 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/enums/EnumEnum.java                              |   95 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/node/ForestNodeMergerOid.java          |   26 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodePhaseattrClient.java                         |    5 
 Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeBasicSecMapper.xml                                       |    1 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/EnumMapper.java                                   |   22 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/VciSystemVarConstants.java     |   70 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyValueDTO.java                  |   82 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyProcessTempServiceImpl.java   |    6 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IEnumFallback.java                         |   60 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyValueService.java                 |    4 
 Source/UBCS-WEB/src/views/flow/follow.vue                                                                                 |   55 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java                   |    9 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/EnumClient.java                                    |   91 
 Source/UBCS-WEB/src/mock/menu.js                                                                                          |   36 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/EnumItemVO.java                               |   11 
 Source/UBCS-WEB/src/components/code-dialog-page/formulaEditor.vue                                                         |  150 
 Source/UBCS-WEB/package-lock.json                                                                                         |   19 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java                  |   22 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IEnumClient.java                           |   97 
 Source/UBCS-WEB/src/views/work/claim.vue                                                                                  |   30 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IEnumItemFallback.java                     |   28 
 Source/UBCS-WEB/.settings/src/views/code/code.vue                                                                         | 3655 ++++++++++++------
 Source/UBCS-WEB/.settings/src/main.js                                                                                     |   25 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodePhaseAttrWrapper.java                      |   12 
 Source/UBCS-WEB/src/views/system/user.vue                                                                                 |   49 
 Source/UBCS-WEB/public/index.html                                                                                         |    4 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseAttrController.java                |   26 
 Source/UBCS-WEB/src/views/authority/role.vue                                                                              |    3 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/EnumVO.java                                   |   76 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java              |   13 
 Source/UBCS-WEB/src/page/login/userlogin.vue                                                                              |    2 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/Md5.java                           |   82 
 Source/UBCS-WEB/src/views/system/dept.vue                                                                                 |   45 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempbuttonServiceImpl.java            |    3 
 Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/EnumItemServiceImpl.java                    |   58 
 Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/Enum.java                                 |   90 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseAttrMapper.java                        |    7 
 Source/UBCS-WEB/public/src/mock/menu.js                                                                                   |   36 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java            |   39 
 Source/UBCS-WEB/src/const/code/mdmrule.js                                                                                 |    7 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotDataVO.java             |   15 
 /dev/null                                                                                                                 |  204 -
 Source/UBCS-WEB/src/views/omd/enum.vue                                                                                    |   67 
 Source/UBCS-WEB/src/views/system/topmenu.vue                                                                              |    9 
 121 files changed, 6,841 insertions(+), 4,837 deletions(-)

diff --git a/Source/UBCS-WEB/.settings/src/main.js b/Source/UBCS-WEB/.settings/src/main.js
index 5daa98c..d1f9558 100644
--- a/Source/UBCS-WEB/.settings/src/main.js
+++ b/Source/UBCS-WEB/.settings/src/main.js
@@ -25,7 +25,18 @@
 import crudCommon from '@/mixins/crud';
 // 涓氬姟缁勪欢
 import tenantPackage from './views/system/tenantpackage';
-
+import enupackage from "@/views/modeling/enupackage";
+import Versionpackage from "@/views/modeling/Versionpackage";
+import Businpackage from "@/views/modeling/Businpackage";
+import Relationpackage from "@/views/modeling/Relationpackage"
+import Torelationpackage from "@/views/modeling/Torelationpackage"
+import originalRange from "@/views/modeling/originalRange"
+import originalLink from "@/views/modeling/originalLink"
+import classifyTrees from "@/components/Tree/classifyTrees"
+import classifyTreeform from "@/components/Tree/classifyTreeform"
+import TemplatePro from "@/components/Tree/TemplatePro"
+import formulaEditor from "@/components/code-dialog-page/formulaEditor"
+import businessAdd from "@/views/modeling/BusinessAdd"
 // 娉ㄥ唽鍏ㄥ眬crud椹卞姩
 window.$crudCommon = crudCommon;
 // 鍔犺浇Vue鎷撳睍
@@ -47,6 +58,18 @@
 Vue.component('avueUeditor', avueUeditor);
 Vue.component('flowDesign', flowDesign);
 Vue.component('tenantPackage', tenantPackage);
+Vue.component('enupackage',enupackage)
+Vue.component('Versionpackage',Versionpackage)
+Vue.component('Businpackage',Businpackage)
+Vue.component('Relationpackage',Relationpackage)
+Vue.component('Torelationpackage',Torelationpackage)
+Vue.component('originalRange',originalRange)
+Vue.component('originalLink',originalLink)
+Vue.component('classifyTrees',classifyTrees)
+Vue.component('classifyTreeform',classifyTreeform)
+Vue.component('TemplatePro',TemplatePro)
+Vue.component('formulaEditor',formulaEditor)
+Vue.component('businessAdd',businessAdd)
 // 鍔犺浇鐩稿叧url鍦板潃
 Object.keys(urls).forEach(key => {
   Vue.prototype[key] = urls[key];
diff --git a/Source/UBCS-WEB/.settings/src/views/code/addbasiccode.vue b/Source/UBCS-WEB/.settings/src/views/code/addbasiccode.vue
deleted file mode 100644
index 2a75dd8..0000000
--- a/Source/UBCS-WEB/.settings/src/views/code/addbasiccode.vue
+++ /dev/null
@@ -1,508 +0,0 @@
-<template>
-
-  <div class="total">
-    <span class="left">
-      <el-form :model="form">
-
-          <el-form-item label="鐮佹缂栧彿:" :label-width="leftFormLabelWidth">
-            <el-input v-model="form.id" ></el-input>
-          </el-form-item>
-
-          <el-form-item label="鐮佹鍚嶇О:" :label-width="leftFormLabelWidth">
-            <el-input v-model="form.name"></el-input>
-          </el-form-item>
-
-          <el-form-item label="鐮佹绫诲瀷" :label-width="leftFormLabelWidth" prop="codefixedsec">
-            <el-select v-model="form.sectype" placeholder="璇烽�夋嫨" @change="changeSectypeFormItems">
-              <el-option
-                v-for="item in sectypeList"
-                :key="item.dictValue"
-                :label="item.dictValue"
-                :value="item.dictKey">
-              </el-option>
-            </el-select>
-          </el-form-item>
-
-          <el-form-item label="鎻忚堪:" :label-width="leftFormLabelWidth">
-            <el-input type="textarea" v-model="form.description"></el-input>
-          </el-form-item>
-
-          <el-form-item label="鏄惁娴佹按渚濊禆:" :label-width="leftFormLabelWidth"  prop="serialDependFlag">
-            <el-switch v-model="form.serialDependFlag"></el-switch>
-            <el-input-number v-show="form.serialDependFlag" v-model="form.serialDependOrder" controls-position="right"></el-input-number>
-          </el-form-item>
-
-          <el-form-item label="鏄惁涓虹┖:" :label-width="leftFormLabelWidth">
-            <el-switch v-model="form.nullableFlag"></el-switch>
-          </el-form-item>
-
-      </el-form>
-    </span>
-    <el-divider direction="vertical"></el-divider>
-    <span class="right">
-
-      <!-- 鍥哄畾鐮佹 -->
-      <el-form v-show="form.sectype==='codefixedsec' ? true:false">
-        <el-form-item label="鐮佹闀垮害绫诲瀷:" :label-width="rightFormLabelWidth">
-            <el-select v-model="form.codeSecLengthType" placeholder="璇烽�夋嫨">
-              <el-option
-              v-for="item in codeSecLengthType"
-              :key="item.dictValue"
-              :label="item.dictValue"
-              :value="item.dictKey">
-            </el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="鐮佹鐨勯暱搴�:" :label-width="rightFormLabelWidth">
-            <el-input v-model="form.codeSecLength"></el-input>
-          </el-form-item>
-      </el-form>
-
-      <!-- 灞炴�х爜娈� -->
-      <el-form v-show="form.sectype==='codeattrsec' ? true:false">
-        <el-form-item label="灞炴��:" :label-width="rightFormLabelWidth">
-          <el-input
-            placeholder="璇烽�夋嫨"
-            suffix-icon="el-icon-search"
-            readonly="true"
-            v-model="form.referAttributeName"
-            @focus="openAttrSelectOrGetValue('attr')">
-            <span slot="suffix">
-              <i class="el-icon-circle-close" @click="clearAttrDataByIcon('attr')" style="margin-right: 5px;cursor: pointer;"></i>
-            </span>
-          </el-input>
-        </el-form-item>
-        <el-form-item label="灞炴�ф墍鍦ㄥ垎绫�:" :label-width="rightFormLabelWidth">
-          <el-input 
-          v-model="form.referCodeClassifyOidName"
-          disabled>
-        </el-input>
-        </el-form-item>
-        <el-form-item label="鍙栧�艰鍒�:" :label-width="rightFormLabelWidth">
-          <el-input
-            placeholder="璇烽�夋嫨"
-            suffix-icon="el-icon-search"
-            readonly="true"
-            v-model="form.getValueClass"
-            @focus="openAttrSelectOrGetValue('value')">
-            <span slot="suffix">
-              <i class="el-icon-circle-close" @click="clearAttrDataByIcon('value')" style="margin-right: 5px;cursor: pointer;"></i>
-            </span>
-          </el-input>
-        </el-form-item>
-      </el-form>
-
-      <!-- 娴佹按鐮佹 -->
-      <el-form v-show="form.sectype==='codeserialsec' ? true:false">
-        <el-form-item label="鐮佹鐨勯暱搴�:" :label-width="rightFormLabelWidth">
-          <el-input v-model="form.codeSecLength"></el-input>
-        </el-form-item>
-        <el-form-item label="娴佹按鍙风殑璧峰鍊�:" :label-width="rightFormLabelWidth">
-          <el-input v-model="form.serialStart"></el-input>
-        </el-form-item>
-        <el-form-item label="娴佹按鐨勬闀�:" :label-width="rightFormLabelWidth">
-          <el-input v-model="form.serialStep"></el-input>
-        </el-form-item>
-        <el-form-item label="缂栫爜琛ヤ綅鏂瑰紡:" :label-width="rightFormLabelWidth">
-          <el-select v-model="form.codeFillType" placeholder="璇烽�夋嫨">
-            <el-option label="宸﹁ˉ浣�" value="codeattrsec"
-                v-for="item in codeFillType"
-                :key="item.dictValue"
-                :label="item.dictValue"
-                :value="item.dictKey">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="琛ヤ綅鏃剁殑瀛楃:" :label-width="rightFormLabelWidth">
-          <el-select v-model="form.codeFillSeparatorSelect" filterable placeholder="璇烽�夋嫨">
-            <el-option
-                v-for="item in codeFillSeparator"
-                :key="item.dictValue"
-                :label="item.dictValue"
-                :value="item.dictKey">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="濉厖闀垮害:" :label-width="rightFormLabelWidth">
-          <el-input v-model="form.codeFillLength"></el-input>
-        </el-form-item>
-        <el-form-item label="娴佹按涓婇檺:" :label-width="rightFormLabelWidth">
-          <el-input v-model="form.codeFillLimit"></el-input>
-        </el-form-item>
-        <el-form-item label="娴佹按鏄惁琛ョ爜:" :label-width="rightFormLabelWidth">
-          <el-switch v-model="form.codeFillFlag"></el-switch>
-        </el-form-item>
-        <el-form-item label="鑷畾涔夌殑娴佹按绠楁硶:" :label-width="rightFormLabelWidth">
-          <el-input v-model="form.customCodeSerialClass"></el-input>
-        </el-form-item>
-      </el-form>
-
-      <!-- 灞傜骇鐮佹 -->
-      <el-form v-show="form.sectype==='codelevelsec' ? true:false">
-        <el-form-item label="灞傜骇绫诲瀷:" :label-width="rightFormLabelWidth">
-          <el-select v-model="form.codeLevelType" placeholder="璇烽�夋嫨">
-            <el-option
-                v-for="item in codeLevelType"
-                :key="item.dictValue"
-                :label="item.dictValue"
-                :value="item.dictKey">
-              </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="灞傜骇鐨勫��:" :label-width="rightFormLabelWidth">
-          <el-input v-model="form.codeLevelValue"></el-input>
-        </el-form-item>
-        <el-form-item label="瀛楃鎴彇绫诲瀷:" :label-width="rightFormLabelWidth">
-          <el-select v-model="form.valueCutType" placeholder="璇烽�夋嫨">
-            <el-option
-              v-for="item in codeCutType"
-              :key="item.dictValue"
-              :label="item.dictValue"
-              :value="item.dictKey">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鍙栧�肩被鍨�:" :label-width="rightFormLabelWidth">
-          <el-select v-model="form.codeGetValueType" placeholder="璇烽�夋嫨">
-            <el-option
-              v-for="item in codeGetValueType"
-              :key="item.dictValue"
-              :label="item.dictValue"
-              :value="item.dictKey">
-            </el-option>
-          </el-select>
-        </el-form-item>
-      </el-form>
-
-      <!-- 寮曠敤鐮佹 -->
-      <el-form v-show="form.sectype==='coderefersec' ? true:false">
-        <el-form-item label="鍙傜収寮曠敤鐨勪笟鍔$被鍨�:" :label-width="rightFormLabelWidth">
-          <el-input v-model="form.referBtmId"></el-input>
-        </el-form-item>
-        <el-form-item label="鍙傜収閰嶇疆:" :label-width="rightFormLabelWidth">
-          <el-input v-model="form.referConfig"></el-input>
-        </el-form-item>
-      </el-form>
-
-      <!-- 鏃ユ湡鐮佹 -->
-      <el-form v-show="form.sectype==='codedatesec' ? true:false">
-        <el-form-item label="鏃ユ湡鏍煎紡:" :label-width="rightFormLabelWidth">
-          <el-input v-model="form.codeDateFormatStr"></el-input>
-        </el-form-item>
-      </el-form>
-
-      <!-- 鍒嗙被鐮佹 -->
-      <el-form v-show="form.sectype==='codeclassifysec' ? true:false">
-        <el-form-item label="鐮佹闀垮害绫诲瀷:" :label-width="rightFormLabelWidth">
-          <el-select v-model="form.codeSecLengthType" placeholder="璇烽�夋嫨">
-            <el-option
-                v-for="item in codeSecLengthType"
-                :key="item.dictValue"
-                :label="item.dictValue"
-                :value="item.dictKey">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="鐮佹鐨勯暱搴�:" :label-width="rightFormLabelWidth">
-          <el-input v-model="form.codeSecLength"></el-input>
-        </el-form-item>
-        <el-form-item label="鏄惁鑷姩鍒嗛厤鍒嗙被鍊�:" :label-width="rightFormLabelWidth">
-          <el-switch v-model="form.matchClassifyValueFlag"></el-switch>
-        </el-form-item>
-        <el-form-item label="鐖跺垎绫荤爜娈�:" :label-width="rightFormLabelWidth">
-          <el-input v-model="form.parentClassifySecOid"></el-input>
-        </el-form-item>
-      </el-form>
-
-      <!-- 鍙彉鐮佹 -->
-      <el-form v-show="form.sectype==='codevariablesec' ? true:false">
-        <el-form-item label="鐮佹鐨勯暱搴�:" :label-width="rightFormLabelWidth">
-          <el-input v-model="form.codeSecLength"></el-input>
-        </el-form-item>
-        <el-form-item label="缂栫爜琛ヤ綅鏂瑰紡:" :label-width="rightFormLabelWidth">
-          <el-select v-model="form.codeFillType" placeholder="璇烽�夋嫨">
-            <el-option
-                v-for="item in codeFillType"
-                :key="item.dictValue"
-                :label="item.dictValue"
-                :value="item.dictKey">
-            </el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="琛ヤ綅鏃剁殑瀛楃:" :label-width="rightFormLabelWidth">
-          <el-select v-model="form.codeFillSeparatorSelect" placeholder="璇烽�夋嫨">
-            <el-option
-                v-for="item in codeFillSeparator"
-                :key="item.dictValue"
-                :label="item.dictValue"
-                :value="item.dictKey">
-            </el-option>
-          </el-select>
-        </el-form-item>
-      </el-form>
-
-    </span>
-
-  </div>
-
-</template>
-
-<script>
-import { addSave } from "@/api/code/codebasic";
-import { getDictionary } from "@/api/omd/dict";
-export default {
-  name: "addBasicCode",
-  data() {
-    return {
-      form: {
-        id: '', //缂栧彿
-        name: '', //鍚嶇О
-        sectype: 'codefixedsec', //鐮佹绫诲瀷
-        description: '', //鎻忚堪
-        serialDependFlag: false, //鏄惁娴佹按渚濊禆
-        serialDependOrder: '', //娴佹按渚濊禆椤哄簭
-        nullableFlag: false, //鏄惁涓虹┖
-        displayFlag: false, //
-        componentCodeFlag: false, //鏄惁鍙備笌缂栫爜
-        pkCodeRule: '', //鎵�灞炵紪鐮佽鍒�
-      },
-      sectypeList:[],    //鐮佹绫诲瀷
-      codeSecLengthType:[],  //鐮佹闀垮害绫诲瀷
-      codeFillType:[],   //缂栫爜琛ヤ綅鏂瑰紡
-      codeFillSeparator:[], //琛ヤ綅鏃剁殑瀛楃锛屽彲杈撳彲閫夊唴瀹�
-      codeLevelType:[],     //灞傜骇绫诲瀷
-      codeCutType:[],       //瀛楃鎴彇绫诲瀷
-      codeGetValueType:[],  //鍙栧�肩被鍨�
-
-      //琛ㄥ崟鍏冪礌鏍囩瀹藉害
-      leftFormLabelWidth: '110px',
-      rightFormLabelWidth: '150px',
-
-    };
-  },
-  computed: {
-
-
-  },
-  methods: {
-
-    //鍏紡鍐呭鍥炶皟鍒板瓙缁勪欢杩涜鍥炴樉
-    saveFormulaContent(data){
-      console.log(data);
-      this.form.getValueClass = data;
-    },
-
-    // 涓哄睘鎬ч�夊彇鍊间箣鍚庣殑鍥炴樉
-    selectedListClassifyLinkAttr(data){
-      //console.log(data);
-      this.form = Object.assign({}, this.form, {
-        referAttributeId:data.referAttributeId,
-        referAttributeName:data.referAttributeName,
-        referCodeClassifyOid: data.referCodeClassifyOid,
-        referCodeClassifyOidName: data.referCodeClassifyOidName,
-      })
-    },
-
-    // 鎵撳紑涓哄睘鎬ч�夊彇鍊兼垨鑰呭彇鍊艰鍒欑獥鍙�
-    openAttrSelectOrGetValue(condition){
-      if(condition === 'attr'){
-        //console.log('attr');
-        //璋冪敤鐖剁粍浠剁殑鏂规硶
-        this.$emit('openAttrSelectOrGetValue')
-      }else if(condition === 'value'){
-        //console.log('value');
-        this.$emit('openformulaEdit')
-      }
-    },
-
-    // 鐐瑰嚮杈撳叆妗嗙殑脳鍙凤紝娓呯┖杈撳叆妗嗕腑鐨勫唴瀹�
-    clearAttrDataByIcon(condition){
-      if(condition === 'attr'){
-        this.form.referAttributeName = '';
-        this.form.referAttributeId = '';
-        this.form.referCodeClassifyOid = '';
-        this.form.referCodeClassifyOidName = '';
-      }else if(condition === 'value'){
-        this.form.getValueClass = '';
-      }
-    },
-
-    addSave(pkCodeRule) {
-      this.form.pkCodeRule = pkCodeRule;
-      console.log(this.form);
-      addSave(this.form).then(() => {
-          this.$message({
-            type: "success",
-            message: "鎿嶄綔鎴愬姛!"
-          });
-        }, error => {
-          window.console.log(error);
-      });
-    },
-
-    loadCodeSecType(){
-      getDictionary({code: "codeBasicSecType"}).then(res=>{
-        this.sectypeList = res.data.data;
-      })
-      this.loadCodeSecLength();
-      //console.log(this.sectypeList);
-    },
-
-    loadCodeSecLength(){
-      getDictionary({code: "codeSecLength"}).then(res=>{
-        this.codeSecLengthType = res.data.data;
-      })
-    },
-
-    loadCodeFillType(){
-      getDictionary({code: "codeFillType"}).then(res=>{
-        this.codeFillType = res.data.data;
-      })
-    },
-
-    loadCodeFillSeparator(){
-      getDictionary({code: "codeFillSeparator"}).then(res=>{
-        this.codeFillSeparator = res.data.data;
-      })
-    },
-
-    loadCodeLevelType(){
-      getDictionary({code: "codeLevelType"}).then(res=>{
-        this.codeLevelType = res.data.data;
-      })
-    },
-
-    loadCodeCutType(){
-      getDictionary({code: "codeCutType"}).then(res=>{
-        this.codeCutType = res.data.data;
-      })
-    },
-
-    loadCodeGetValueType(){
-      getDictionary({code: "codeGetValueType"}).then(res=>{
-        this.codeGetValueType = res.data.data;
-        console.log(this.codeGetValueType);
-      })
-    },
-
-    // 鐮佹绫诲瀷鏀瑰彉鏃讹紝澧炲姞瀵瑰簲鐨刦orm琛ㄥ崟涓殑灞炴��
-    changeSectypeFormItems(){
-      if(this.form.sectype==='codefixedsec'){
-        //鍥哄畾鐮佹
-        this.form = Object.assign({}, this.form,{
-          codeSecLength: '',
-          codeSecLengthType: 'code_sec_length_variable'
-        });
-        this.loadCodeSecLength();
-      }else if(this.form.sectype==='codeattrsec'){
-        //灞炴�х爜娈�
-        this.form = Object.assign({}, this.form, {
-          referCodeClassifyOid: '',     //灞炴�d
-          referCodeClassifyOidName: '', //灞炴�ф墍鍦ㄥ垎绫�
-          referAttributeId: '',    //灞炴�х紪鍙�
-          referAttributeName:'',   //灞炴��
-          getValueClass:''         //鍙栧�艰鍒�
-      });
-      }else if(this.form.sectype==='codeserialsec'){
-        //娴佹按鐮佹
-        this.form = Object.assign({}, this.form,{
-          codeSecLength: '', //鐮佹鐨勯暱搴�
-          serialStart: '1',  //娴佹按鍙疯捣濮嬪��
-          serialStep: '1',   //娴佹按鐨勬闀�
-          codeFillType: 'code_fill_right', //缂栫爜琛ヤ綅鏂瑰紡
-          codeFillSeparatorSelect: '0',    //琛ヤ綅鏃剁殑瀛楃锛岄�変腑鐨勪笅鎷夋鐨勪笅鏍�
-          codeFillSeparator: '0',          //琛ヤ綅鏃剁殑瀛楃
-          codeFillLength: '',              //濉厖闀垮害
-          codeFillLimit: '',               //娴佹按涓婇檺
-          codeFillFlag: 'false',           //娴佹按鏄惁琛ョ爜
-          customCodeSerialClass: '',       //鑷畾涔夋祦姘寸畻娉�
-        });
-        this.loadCodeFillType();
-        this.loadCodeFillSeparator();
-      }else if(this.form.sectype==='codelevelsec'){
-        //灞傜骇鐮佹
-        this.form = Object.assign({}, this.form,{
-          codeLevelType: 'code_level_min',     //灞傜骇绫诲瀷  鏋氫妇鏌ヨ
-          codeLevelValue: '',    //灞傜骇鐨勫��
-          valueCutType: 'code_cut_none',      //瀛楃鎴彇绫诲瀷 鏋氫妇鏌ヨ
-          valueCutLength: '',    //
-          codeGetValueType: 'code_get_value_all_up',  //鍙栧�肩被鍨� 鏋氫妇鏌ヨ
-        });
-        this.loadCodeLevelType();
-        this.loadCodeCutType();
-        this.loadCodeGetValueType();
-      }else if(this.form.sectype==='coderefersec'){
-        //寮曠敤鐮佹
-        this.form = Object.assign({}, this.form,{
-          referBtmId: '',   //鍙傜収寮曠敤鐨勪笟鍔$被鍨嬶紝鐨刬d
-          referBtmName: '', //鍙傜収寮曠敤鐨勪笟鍔$被鍨�
-          referConfig: ''   //鍙傜収閰嶇疆
-        });
-      }else if(this.form.sectype==='codedatesec'){
-        //鏃ユ湡鐮佹
-        this.form = Object.assign({}, this.form,{
-          codeDateFormatStr: '',   //鏃ユ湡鏍煎紡
-        });
-      }else if(this.form.sectype==='codeclassifysec'){
-        //鍒嗙被鐮佹
-        this.form = Object.assign({}, this.form,{
-          codeSecLengthType: 'code_sec_length_variable',    //鐮佹闀垮害绫诲瀷
-          codeSecLength: '',  //鐮佹鐨勯暱搴�
-          matchClassifyValueFlag: 'false',  //鏄惁鑷姩鍖归厤鍊�
-          parentClassifySecOid: '',    //鐖跺垎绫荤爜娈甸�変腑鐨刬d
-          parentClassifySecText: '',  //鐖跺垎绫荤爜娈�
-        });
-        this.loadCodeSecLength();
-      }else if(this.form.sectype==='codevariablesec'){
-        //鍙彉鐮佹
-        this.form = Object.assign({}, this.form,{
-          codeSecLength: '',            //鐮佹鐨勯暱搴�
-          codeFillType: 'code_fill_right',             //缂栫爜閮ㄤ綅鏂瑰紡锛屾灇涓炬煡璇�
-          codeFillSeparatorSelect: '0',  //閫変腑鐨勮ˉ浣嶆椂鐨勫瓧绗︾殑涓嬫爣
-          codeFillSeparator: '',        //琛ヤ綅鏃剁殑瀛楃锛屽彲杈撳彲閫夋煡璇�
-        });
-        this.loadCodeFillType();
-        this.loadCodeFillSeparator();
-      }
-      //console.log(this.form);
-    }
-
-  }
-};
-</script>
-
-<style>
-  .total{
-    height: 420px;
-    width: 100%;
-
-  }
-
-  .total .el-input__inner,.total .el-textarea__inner {
-    width: 220px;
-  }
-
-  .el-divider--vertical {
-      width: 2px;
-      height: 31.5em;
-      margin: 0 5px;
-  }
-
- .left {
-    float: left;
-    width: 49%;
-    /* border-right: 2px rgb(0, 0, 0); */
- }
- .right {
-    float: right;
-    width: 49%;
-    /* border-left: 2px rgb(0, 0, 0); */
- }
- .right > .el-form > .el-form-item{
-    margin-bottom: 8px;
- }
-
- .el-input-number > .el-input > .el-input__inner{
-    width: 180px;
- }
-</style>
\ No newline at end of file
diff --git a/Source/UBCS-WEB/.settings/src/views/code/clonecode.vue b/Source/UBCS-WEB/.settings/src/views/code/clonecode.vue
deleted file mode 100644
index 9160e00..0000000
--- a/Source/UBCS-WEB/.settings/src/views/code/clonecode.vue
+++ /dev/null
@@ -1,99 +0,0 @@
-<template>
-    <avue-crud :option="option"
-               :table-loading="loading"
-               :data="data"
-               :permission="permissionList"
-               @refresh-change="refreshChange"
-               @on-load="onLoad">
-    </avue-crud>
-    
-</template>
-
-<script>
- import {clone} from "@/api/code/mdmrule";
-export default {
-  name: "cloneCode",
-  data() {
-    return {
-      loading: true,
-      selectionList: [],
-      option: {
-        height: 'auto',
-        calcHeight: 30,
-        tip: false,
-        searchShow: false,
-        searchMenuSpan: 6,
-        border: true,
-        index: true,
-        disablePage:false,
-        viewBtn: false,
-        selection: false,
-        dialogClickModal: false,
-        dialogWidth: 400,
-        column: [
-          {
-            label: "鐮佹缂栧彿",
-            prop: "packageName",
-            span: 24
-          },
-          {
-            label: "鐮佹鍚嶇О",
-            prop: "menuId",
-            span: 24,
-          },
-          {
-            label: "鐮佹鎻忚堪",
-            prop: "menuId",
-            span: 24,
-          },
-          {
-            label: "鐮佹绫诲瀷",
-            prop: "menuId",
-            span: 24,
-          }
-        ]
-      },
-      data: []
-    };
-  },
-  computed: {
-    permissionList() {
-      return {
-        addBtn: false,
-        viewBtn: false,
-        delBtn: false,
-        editBtn: false
-      };
-    },
-    
-  },
-  methods: {
-    initData() {
-          
-    },
-    refreshChange() {
-      this.onLoad();
-    },
-    onLoad() {
-      this.loading = true;
-      let oid = localStorage.getItem("cloneOid");
-      console.log(oid);
-    },
-    save(){
-      clone().then(() => {
-        this.loading = true;
-        this.$message({
-          type: "success",
-          message: "鎿嶄綔鎴愬姛!"
-        });
-      }, error => {
-        window.console.log(error);
-      });
-    },
-      
-  }
-};
-</script>
-
-<style>
-</style>
\ No newline at end of file
diff --git a/Source/UBCS-WEB/.settings/src/views/code/code.vue b/Source/UBCS-WEB/.settings/src/views/code/code.vue
index ba79473..329756c 100644
--- a/Source/UBCS-WEB/.settings/src/views/code/code.vue
+++ b/Source/UBCS-WEB/.settings/src/views/code/code.vue
@@ -2,55 +2,56 @@
   <basic-container style="height: 350px;">
 
     <!-- 缂栫爜瑙勫垯淇℃伅灞曠ず鍖哄煙 -->
-    <basic-container>
-      <p style="margin-top: -12px; margin-bottom: 4px; font-weight: 570; font-size: 19px; color: #0e2d5f;">缂栫爜瑙勫垯</p>
-      <avue-crud :option="optionRule"
-                :table-loading="loading"
-                :data="data"
-                :page.sync="page"
-                :permission="permissionList"
-                v-model="form"
-                ref="crud"
-                :before-open="beforeOpen"
-                @cell-click="loadBasic"
-                @row-update="rowUpdate"
-                @row-save="rowSave"
-                @search-change="searchChange"
-                @search-reset="searchReset"
-                @selection-change="selectionChange"
-                @current-change="currentChange"
-                @size-change="sizeChange"
-                @refresh-change="refreshChange"
-                @on-load="onLoad">
+    <basic-container class="code-rule-container">
+      <p style="margin-top: -5px; margin-bottom: 4px; font-weight: 570; font-size: 19px; color: #0e2d5f;">缂栫爜瑙勫垯</p>
+      <avue-crud class="code-rule-crud"
+        :option="optionRule"
+        :table-loading="loading"
+        :data="data"
+        :page.sync="page"
+        :permission="permissionList"
+        v-model="ruleForm"
+        ref="crud"
+        :before-open="beforeOpen"
+        @row-click="codeRuleRowClick"
+        @row-update="rowUpdate"
+        @row-save="rowSave"
+        @search-change="searchChange"
+        @search-reset="searchReset"
+        @selection-change="selectionChange"
+        @current-change="currentChange"
+        @size-change="sizeChange"
+        @refresh-change="refreshChange"
+        @on-load="onLoad">
         <!-- 琛ㄦ牸鍐呮搷浣滄寜閽� -->
         <template slot="menu" slot-scope="scope">
           <el-button type="text"
-                    size="small"
-                    icon="el-icon-edit"
-                    v-show="scope.row.lcStatus=='Editing' ? true:false"
-                    plain
-                    @click="openEdit(scope.row)">缂� 杈�
+              size="small"
+              icon="el-icon-edit"
+              v-show="scope.row.lcStatus=='Editing' ? true:false"
+              plain
+              @click="openEdit(scope.row)">缂� 杈�
           </el-button>
           <el-button type="text"
-                    size="small"
-                    icon="el-icon-position"
-                    v-show="scope.row.lcStatus=='Editing' ? true:false"
-                    plain
-                    @click="enableOrDeactivatse(scope.row.oid,'release')">鍙� 甯�
+            size="small"
+            icon="el-icon-position"
+            v-show="scope.row.lcStatus=='Editing' ? true:false"
+            plain
+            @click="enableOrDeactivatse(scope.row.oid,'release')">鍙� 甯�
           </el-button>
           <el-button type="text"
-                    size="small"
-                    v-show="scope.row.lcStatus=='Released' ? true:false"
-                    icon="el-icon-video-pause"
-                    plain
-                    @click="enableOrDeactivatse(scope.row.oid,'disable')">鍋� 鐢�
+            size="small"
+            v-show="scope.row.lcStatus=='Released' ? true:false"
+            icon="el-icon-video-pause"
+            plain
+            @click="enableOrDeactivatse(scope.row.oid,'disable')">鍋� 鐢�
           </el-button>
           <el-button type="text"
-                    size="small"
-                    v-show="scope.row.lcStatus=='Disabled' ? true:false"
-                    icon="el-icon-video-play"
-                    plain
-                    @click="enableOrDeactivatse(scope.row.oid,'enable')">鍚� 鐢�
+            size="small"
+            v-show="scope.row.lcStatus=='Disabled' ? true:false"
+            icon="el-icon-video-play"
+            plain
+            @click="enableOrDeactivatse(scope.row.oid,'enable')">鍚� 鐢�
           </el-button>
         </template>
         <!-- 琛ㄦ牸宸︿笂鏂规寜閽尯鍩� -->
@@ -64,13 +65,13 @@
           <el-button size="small"
                     icon="icon-kelong"
                     plain
-                    @click="cloneCodeSetting">鍏� 闅�
+                    @click="openCodeRuleDialog">鍏� 闅�
           </el-button>
           <el-button size="small"
                     icon="icon-lianjiekelong"
                     style="font-size: 12px;"
                     plain
-                    @click="handleDelete">浠庡叾浠栬鍒欎腑鍏嬮殕鐮佹
+                    @click="openOtherCodeRuleDialog">浠庡叾浠栬鍒欎腑鍏嬮殕鐮佹
           </el-button>
           <el-button size="small"
                     icon="el-icon-s-help"
@@ -80,17 +81,18 @@
           <el-button size="small"
                     icon="icon-qingkong"
                     plain
-                    @click="handleDelete">娓呯┖鐮佸��
+                    @click="clearAllCodeSec">娓呯┖鐮佸��
           </el-button>
         </template>
       </avue-crud>
     </basic-container>
 
-    <!-- 瀵硅瘽妗� -->
+    <!-- 缂栫爜瑙勫垯鐩稿叧瀵硅瘽妗� -->
     <el-dialog title="缂栫爜瑙勫垯浣跨敤鑼冨洿"
-        append-to-body
-        :visible.sync="codeRangeSettingBox"
-        width="800px">
+      append-to-body
+      :visible.sync="codeRangeSettingBox"
+      width="800px"
+        style="height: 116vh; margin-top: -10vh;">
       <avue-crud
         :option="dialogeOption" 
         :table-loading="dialogLoading"
@@ -98,1213 +100,2432 @@
         @refresh-change="refreshUseRangeChange">
       </avue-crud>
     </el-dialog>
-    <!-- 鍏嬮殕瀵硅瘽妗� -->
+    <!-- 缂栫爜瑙勫垯,鍏嬮殕瀵硅瘽妗� -->
     <el-dialog title="鍏嬮殕缂栫爜瑙勫垯"
-        append-to-body
-        :visible.sync="cloneSettingBox"
-        width="800px">
-      <clone-code></clone-code>
+      append-to-body
+      :visible.sync="cloneSettingBox"
+      width="800px"
+      style="height: 120vh; margin-top: -14vh; overflow: hidden;">
+      <div style="overflow-y: auto; height: 78vh">
+        <el-row>
+          <el-form ref="form" :model="form" label-width="80px" :inline="true">
+            <el-form-item label="缂栧彿" required>
+              <el-input v-model="cloneCodeRuleForm.id"></el-input>
+            </el-form-item>
+            <el-form-item label="鍚嶇О" required>
+              <el-input v-model="cloneCodeRuleForm.name"></el-input>
+            </el-form-item>
+            <el-form-item  label="鎻忚堪" class="clone-input-textarea">
+              <el-input :autosize="{ minRows: 3, maxRows: 5}" type="textarea" v-model="cloneCodeRuleForm.description"></el-input>
+            </el-form-item>
+          </el-form>
+        </el-row>
+        <el-row>
+          <p style="margin: -3vh 0px 16px 50%; font-weight: 500; font-size: 16px; color: #000;">鐮佹绠$悊</p>
+          <avue-crud
+            class="clone-avue-crud"
+            :option="cloneOption"
+            :table-loading="cloneTableLoading"
+            :data="cloneData"
+            @on-load="cloneDataOnLoad">
+            <template slot="menu" slot-scope="scope">
+              <el-button
+                type="text"
+                size="small"
+                icon="el-icon-arrow-up"
+                v-show="scope.row.orderNum > 1"
+                plain
+                @click="upOrderNum(scope.row)">涓婄Щ
+              </el-button>
+              <el-button
+                type="text"
+                size="small"
+                icon="el-icon-arrow-down"
+                plain
+                @click="downOrderNum(scope.row)">涓嬬Щ
+              </el-button>
+            </template>
+          </avue-crud>
+        </el-row>
+      </div>
+      <div slot="footer" class="dialog-footer" style="height: 50px; margin-top: -4vh;">
+        <el-button @click="cloneSettingBox = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="saveCloneCodeRule">淇� 瀛�</el-button>
+      </div>
+    </el-dialog>
+    <!-- 缂栫爜瑙勫垯,浠庡叾浠栬鍒欏厠闅嗗璇濇 -->
+    <el-dialog title="鍏嬮殕缂栫爜瑙勫垯鐨勫熀纭�淇℃伅"
+      append-to-body
+      :visible.sync="cloneOtherCodeRuleSettingBox"
+      width="800px"
+      style="height: 150vh; margin-top: -14vh;"
+      destroy-on-close>
+      <div>
+        <el-row>
+          <p style="margin-top: -12px; margin-bottom: 4px; font-weight: 570; font-size: 19px; color: #0e2d5f;">缂栫爜瑙勫垯</p>
+          <avue-crud
+            class="other-clone-coderule-crud"
+            :option="cloneCodeRuleOption"
+            @row-click="codeOtherCloneRuleRowClick"
+            :table-loading="loading"
+            :data="data"
+            :page.sync="page"
+            ref="crudCloneCodeRuleOther"
+            @size-change="sizeChange"
+            @selection-change="selectionOtherCloneCodeRuleChange"
+            @on-load="onLoad">
+          </avue-crud>
+        </el-row>
+        <el-row>
+          <p style="margin-top: -12px; margin-bottom: 4px; font-weight: 570; font-size: 19px; color: #0e2d5f;">鐮佹淇℃伅</p>
+          <avue-crud
+            class="other-clone-codebasic-crud"
+            :option="cloneBasicOption"
+            ref="crudCloneCodeBasicOther"
+            :table-loading="loadingBasic"
+            :data="basicData"
+            @selection-change="selectionOtherCloneCodeBasicChange">
+          </avue-crud>
+        </el-row>
+      </div>
+      <div slot="footer" class="dialog-footer" style="height: 50px; margin-top: -4vh;">
+        <el-button @click="cloneOtherCodeRuleSettingBox = false">鍙� 娑�</el-button>
+        <el-button type="primary" @click="saveOtherCodeBasic">淇� 瀛�</el-button>
+      </div>
     </el-dialog>
 
     <!-- 鍩虹鐮佹灞曠ず鍖哄煙 -->
-    <basic-container>
-        <p style="margin-top: -12px; margin-bottom: 4px; font-weight: 570; font-size: 19px; color: #0e2d5f;">鐮佹绠$悊</p>
-        <avue-crud :option="optionBasic"
+    <basic-container class="code-basicsec-container">
+      <p style="margin-top: -5px; margin-bottom: 4px; font-weight: 570; font-size: 19px; color: #0e2d5f;">鐮佹绠$悊</p>
+      <avue-crud  class="code-basic-crud"
+        :option="optionBasic"
+        ref="crudBasic"
         :table-loading="loadingBasic"
         :data="basicData"
         :permission="permissionList"
         @selection-change="selectionBasicChange"
         @refresh-change="refreshChangeBasicSec">
 
-        <!-- 鍩虹鐮佹琛ㄦ牸鍐呮搷浣滄寜閽� -->
-        <template slot="menu" slot-scope="scope">
+      <!-- 鍩虹鐮佹琛ㄦ牸鍐呮搷浣滄寜閽� -->
+      <template slot="menu" slot-scope="scope">
+        <el-button
+          type="text"
+          size="small"
+          icon="el-icon-view"
+          v-show="currentRuleLcStatus != 'Editing'"
+          plain
+          @click="openBasicDialog('view',scope.row)">鏌ョ湅
+        </el-button>
+        <el-button
+          type="text"
+          size="small"
+          icon="el-icon-edit"
+          v-show="currentRuleLcStatus === 'Editing'"
+          plain
+          @click="openBasicDialog('edit',scope.row)">缂栬緫
+        </el-button>
+        <el-button
+          type="text"
+          size="small"
+          icon="el-icon-setting"
+          v-show="scope.row.secType === 'codeclassifysec' || scope.row.secType == 'codefixedsec'"
+          plain
+          @click="openBasicSecCodeValueMgr(scope.row)">鐮佸�肩鐞�
+        </el-button>
+        <el-button
+          type="text"
+          size="small"
+          icon="el-icon-arrow-up"
+          v-show="scope.row.orderNum > 1"
+          plain
+          @click="upOrderNum(scope.row)">涓婄Щ
+        </el-button>
+        <el-button
+          type="text"
+          size="small"
+          icon="el-icon-arrow-down"
+          plain
+          @click="downOrderNum(scope.row)">涓嬬Щ
+        </el-button>
+      </template>
 
-          <el-button type="text"
-                    size="small"
-                    icon="icon-shangyi"
-                    v-show="scope.row.lcStatus != 'Editing' ? true:false"
-                    plain
-                    @click="openEdit(scope.row)">鏌� 鐪�
-          </el-button>
+      <!-- 鍩虹鐮佹琛ㄦ牸宸︿笂鏂规寜閽尯鍩� -->
+      <template slot="menuLeft" slot-scope="scope">
+        <el-button type="primary"
+                  size="small"
+                  icon="el-icon-plus"
+                  @click="addBasicCodeSec">鏂� 澧�
+        </el-button>
+        <el-button type="danger"
+                  size="small"
+                  icon="el-icon-delete"
+                  plain
+                  @click="deleteBasicCode(scope.row)">鍒� 闄�
+        </el-button>
+      </template>
 
-          <el-button type="text"
-                    size="small"
-                    icon="icon-shangyi"
-                    v-show="scope.row.lcStatus == 'Editing' ? true:false"
-                    plain
-                    @click="openEdit(scope.row)">缂� 杈�
-          </el-button>
-
-          <el-button type="text"
-                    size="small"
-                    icon="icon-shangyi"
-                    v-show="scope.row.secType == 'codeclassifysec' || scope.row.secType == 'codefixedsec' ? true:false"
-                    plain
-                    @click="openEdit(scope.row)">鐮佸�肩鐞�
-          </el-button>
-
-          <el-button type="text"
-                    size="small"
-                    icon="icon-shangyi"
-                    v-show="scope.row.orderNum > 1 ? true:false"
-                    plain
-                    @click="upOrderNum(scope.row)">涓� 绉�
-          </el-button>
-          
-          <el-button type="text"
-                    size="small"
-                    icon="icon-xiayi"
-                    plain
-                    @click="downOrderNum(scope.row)">涓� 绉�
-          </el-button>
-          
-        </template>
-
-        <!-- 鍩虹鐮佹琛ㄦ牸宸︿笂鏂规寜閽尯鍩� -->
-        <template slot="menuLeft" slot-scope="scope">
-          <el-button type="primary"
-                    size="small"
-                    icon="el-icon-plus"
-                    @click="addBasicCodeSec">鏂� 澧�
-          </el-button>
-          <el-button type="danger"
-                    size="small"
-                    icon="el-icon-delete"
-                    plain
-                    @click="deleteBasicCode(scope.row)">鍒� 闄�
-          </el-button>
-        </template>
-
-    </avue-crud>
+      </avue-crud>
     </basic-container>
 
-     <!-- 鍩虹缂栫爜瑙勫垯瀵硅瘽妗� -->
-     <el-dialog title="娣诲姞鐮佹淇℃伅"
-        :visible.sync="addBasicCodeSettingBox"
-        width="780px"
-        append-to-body
-        style="margin-top: -8vh;"
-        destroy-on-close>
-
-        <!-- 灞炴�х爜娈碉紝灞炴�ч�夋嫨寮圭獥 -->
-        <el-dialog title="涓篬灞炴�閫夊彇鍊�"
-          append-to-body
-          :visible.sync="isShowSelectAttrOption"
-          width="78%"
-          style="height: 100%; margin-top: -8vh; overflow: hidden">
-          <div style="overflow-y: auto; height: 60vh">
-            <el-row>
-              <!-- 宸︿晶涓婚搴撳垎绫绘爲 -->
-              <el-col :span="5">
-                <div class="box">
-                  <el-scrollbar style="height: auto; border-bottom-right-radius:8px ">
-                    <basic-container>
-                      <div class="abox">
-                        <avue-tree :data="attrClassifyTreeData" :option="treeOption" @node-click="nodeClick"/>
-                      </div>
-                    </basic-container>
-                  </el-scrollbar>
-                </div>
-              </el-col>
-
-              <!-- 鍙充晶琛ㄦ牸鏄剧ず鍖哄煙 -->
-              <el-col span="19">
+    <!-- 鐮佹鐮佸�肩鐞嗗璇濇 -->
+    <el-dialog title="鐮佹鐮佸�肩鐞�"
+      :visible.sync="isShowBasicSecCodeValueMgr"
+      :width="isShowFixedForm ? '68vw':'50vw'"
+      append-to-body
+      style="height: 116vh; margin-top: -10vh;"
+      @close="clearFixedOrClassifyForm('close')"
+      destroy-on-close>
+      <!-- 鍒嗙被鐮佹鐮佸�肩鐞� -->
+      <el-row v-show="!isShowFixedForm">
+        <el-col :span="11">
+          <basic-container>
+            <div class="box classify_value_box" style="height:65vh; margin-bottom:-40px">
+              <el-scrollbar style="border-bottom-right-radius:8px ">
                 <basic-container>
-                  <div class="bbox">
-                  <avue-crud ref="crud"
-                      v-model="form"
-                      :data="selectattrData"
-                      :option="attrOption"
-                      :permission="permissionList"
-                      :table-loading="selectAttrOptionLoading"
-                      @search-change="selectAttrOptionSearchChange"
-                      @search-reset="searchAttrReset"
-                      @selection-change="selectionChangeAttr">
-                  </avue-crud>
+                  <div class="abox" style="height:54vh">
+                    <avue-tree
+                      :data="classifyValueTreeData" 
+                      :option="classisyValueTreeOption" 
+                      @node-click="classisyValueTreeOnodeClick"
+                      style="overflow-y: auto; height: 54vh"/>
                   </div>
                 </basic-container>
-              </el-col>
+              </el-scrollbar>
+            </div>
+            <div style="margin-top:20px; display: flex; align-items:center; justify-content:center;">
+              <el-button size="mini" type="primary" icon="el-icon-arrow-up" class="button" @click="codeClassifyValueOpetion('up')">涓婄Щ</el-button>
+              <el-button size="mini" type="primary" icon="el-icon-arrow-down" class="button" @click="codeClassifyValueOpetion('down')">涓嬬Щ</el-button>
+            </div>
+          </basic-container>
+        </el-col>
+        <el-col :span="13">
+          <basic-container>
+            <div class="box" style="height:65vh; margin-bottom:-40px">
+              <el-form>
+                <el-form-item label="鐮佸��:" :label-width="50" required>
+                  <el-input style="width: 18vw" v-model="codeClassifyForm.id"></el-input>
+                </el-form-item >
+                <el-form-item label="鍚嶇О:" :label-width="50" required>
+                  <el-input style="width: 18vw" v-model="codeClassifyForm.name"></el-input>
+                </el-form-item>
+              </el-form>
+            </div>
+            <div style="margin-top:20px; display: flex; align-items:center; justify-content:center;">
+              <el-button size="mini" type="primary" icon="el-icon-circle-plus" class="button" @click="addCodeSecValue('codeclassifyvaluesec')">娣诲姞</el-button>
+              <el-button :disabled="selectedFixedOrCodeclassifyValue==''"  size="mini" type="success" plain icon="el-icon-edit-outline" class="button"  @click="editCodeSecValue('codeclassifyvaluesec')">淇敼</el-button>
+              <el-button :disabled="selectedFixedOrCodeclassifyValue==''"  size="mini" type="danger" icon="el-icon-close" class="button" @click="delCodeSecValue('codeclassifyvaluesec')">鍒犻櫎</el-button>
+              <el-button size="mini" type="warning" plain icon="el-icon-close" class="button" @click = "clearFixedOrClassifyForm('codeclassifyvaluesec')">鍙栨秷</el-button>
+            </div>
+          </basic-container>
+        </el-col>
+      </el-row>
+      <!-- 鍥哄畾鐮佹鐮佸�肩鐞� -->
+      <el-row v-show="isShowFixedForm">
+        <el-col :span="15">
+          <basic-container>
+            <div class="box fixedbox" style="height:65vh; margin-bottom:-40px">
+              <avue-crud
+                class="fixed-avue-crud"
+                ref="crudFixedValue"
+                :data="fixedValueData"
+                :option="fixedValueOption"
+                :table-loading="fixedValueOptionLoading"
+                @row-click="selectedCodeValueRow">
+                <!-- 琛ㄦ牸鍐呮寜閽厤缃� -->
+                <template slot="menu" slot-scope="scope">
+                  <el-button size="mini" type="text" icon="el-icon-arrow-up" @click="codeFixedValueOpetion('up',scope.row)">涓婄Щ</el-button>
+                  <el-button size="mini" type="text" icon="el-icon-arrow-down" @click="codeFixedValueOpetion('down',scope.row)">涓嬬Щ</el-button>
+                  <el-button size="mini" type="text" icon="el-icon-minus" @click="codeFixedValueOpetion('remove',scope.row)">绉婚櫎</el-button>
+                </template>
+              </avue-crud>
+            </div>
+            <div style="margin-top:20px;">
+              <el-button size="mini" type="primary" icon="el-icon-success" class="button" @click="saveCodeFixedOrClassifyValueOption('fixedValue')">淇濆瓨</el-button>
+            </div>
+          </basic-container>
+        </el-col>
+        <el-col :span="9">
+          <basic-container>
+            <div class="box" style="height: 65vh; margin-bottom:-40px; overflow:hidden;" >
+              <div style="overflow-y:auto;height: 60vh;">
+                <el-form>
+                  <el-form-item label="鐮佸��:" label-width="54px" required>
+                    <el-input style="width: 19.5vw" v-model="codeFixdForm.id"></el-input>
+                  </el-form-item >
+                  <el-form-item label="鎻忚堪:">
+                    <el-input type="textarea" style="width: 20vw;" v-model="codeFixdForm.description"></el-input>
+                  </el-form-item>
+                </el-form>
+              </div>
+            </div>
+            <div style="margin-top:20px; display: flex; align-items:center; justify-content:center;">
+              <el-button :disabled="selectedFixedOrCodeclassifyValue!=''" size="mini" type="primary" icon="el-icon-circle-plus" class="button" @click="addCodeSecValue('codefixedsec')">娣诲姞</el-button>
+              <el-button :disabled="selectedFixedOrCodeclassifyValue==''" size="mini" type="success" plain plain icon="el-icon-edit-outline" class="button" @click="editCodeSecValue('codefixedsec')">淇敼</el-button>
+              <el-button :disabled="selectedFixedOrCodeclassifyValue==''" size="mini" type="danger" icon="el-icon-close" class="button" @click="delCodeSecValue('codefixedsec')">鍒犻櫎</el-button>
+              <el-button size="mini" type="warning" plain icon="el-icon-close" class="button" @click = "clearFixedOrClassifyForm('codefixedsec')">鍙栨秷</el-button>
+            </div>
+          </basic-container>
+        </el-col>
+      </el-row>
+    </el-dialog>
 
-            </el-row>
-          </div>
+    <!-- 鍩虹鐮佹鏂板鐩稿叧瀵硅瘽妗� -->
+    <el-dialog :title="basicSecDialogTitle"
+      :visible.sync="addBasicCodeSettingBox"
+      width="60vw"
+      append-to-body
+      style="height: 115vh; margin-top: -13vh; overflow: hidden"
+      destroy-on-close
+      @close="clearBasicAddForm">
 
-          <div slot="footer" class="dialog-footer">
-            <el-button @click="isShowSelectAttrOption = false">鍙� 娑�</el-button>
-            <el-button type="primary" @click="savelistClassifyLinkAttr">纭� 瀹�</el-button>
-          </div>
-          
-        </el-dialog>
+      <!--  绗竴灞傚璇濇,娣诲姞鐮佹淇℃伅瀵硅瘽妗嗕腑鐨勫唴瀹� -->
+      <div class="total" style="overflow-y: auto; height: 70vh">
+        <el-form :model="form">
+          <span class="left">
+            <el-form-item label="鐮佹缂栧彿:" :label-width="leftFormLabelWidth" required>
+              <el-input v-model="form.id" :readonly="basicSecOnlyRead" ref="id"></el-input>
+            </el-form-item>
 
-         <!-- 灞炴�х爜娈碉紝鍏紡缂栬緫妗嗗脊绐� -->
-        <el-dialog title="鍏紡缂栬緫妗�"
-          append-to-body
-          :visible.sync="isShowformulaEdit"
-          @close="closeFormulaEdit"
-          width="78%"
-          style="height: 150vh; margin-top: -13vh; overflow: hidden">
+            <el-form-item label="鐮佹鍚嶇О:" :label-width="leftFormLabelWidth" required>
+              <el-input ref="name"  v-model="form.name" :readonly="basicSecOnlyRead"></el-input>
+            </el-form-item>
+            
+            <el-form-item label="鐮佹绫诲瀷" :label-width="leftFormLabelWidth" required>
+              <el-select v-model="form.secType" placeholder="璇烽�夋嫨" @change="changeSectypeFormItems(null)" :disabled="basicSecOnlyRead">
+                <el-option
+                  v-for="item in sectypeList"
+                  :key="item.dictValue"
+                  :label="item.dictValue"
+                  :value="item.dictKey">
+                </el-option>
+              </el-select>
+            </el-form-item>
 
-          <div style="overflow-y: auto; height: 80vh">
-            <el-row>
-              <!-- 宸︿晶鍏紡鍐呭 -->
-              <el-col :span="14" style="overflow: hidden">
-                <el-card class="box-card" style="height: 33vh; overflow-y: auto; overflow-x: auto;">
-                    <div slot="header" class="clearfix">
-                      <span style="font-size: medium;">鍏紡鍐呭</span>
-                      <el-button type="primary" size="mini" style="float: right;" @click="saveFormulaContent">纭畾</el-button>
-                      <el-button type="warning" size="mini" style="margin-right: 10px; float: right;" @click="resetformulaContent">娓呯┖鍐呭</el-button>
+            <el-form-item label="鎻忚堪:" :label-width="leftFormLabelWidth">
+              <el-input type="textarea" v-model="form.description" :readonly="basicSecOnlyRead"></el-input>
+            </el-form-item>
+
+            <el-form-item label="鏄惁娴佹按渚濊禆:" :label-width="leftFormLabelWidth">
+              <el-switch v-model="form.serialDependFlag" :disabled="basicSecOnlyRead"></el-switch>
+              <el-input-number v-show="form.serialDependFlag" v-model="form.serialDependOrder" controls-position="right" :readonly="basicSecOnlyRead"></el-input-number>
+            </el-form-item>
+
+            <el-form-item label="鏄惁涓虹┖:" :label-width="leftFormLabelWidth">
+              <el-switch v-model="form.nullableFlag"  :disabled="basicSecOnlyRead"></el-switch>
+            </el-form-item>
+          </span>
+          <el-divider direction="vertical"></el-divider>
+          <span class="right">
+            <!-- 鍥哄畾鐮佹 -->
+            <div v-show="form.secType==='codefixedsec' ? true:false">
+              <el-form-item label="鐮佹闀垮害绫诲瀷:" :label-width="rightFormLabelWidth" required>
+                <el-select v-model="form.codeSecLengthType" placeholder="璇烽�夋嫨" :disabled="basicSecOnlyRead">
+                  <el-option
+                  v-for="item in codeSecLengthType"
+                  :key="item.dictValue"
+                  :label="item.dictValue"
+                  :value="item.dictKey">
+                </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="鐮佹鐨勯暱搴�:" :label-width="rightFormLabelWidth" required>
+                <el-input v-model.number="form.codeSecLength" ref="codeSecLength" :readonly="basicSecOnlyRead"></el-input>
+              </el-form-item>
+            </div>
+            <!-- 灞炴�х爜娈� -->
+            <div v-show="form.secType==='codeattrsec' ? true:false">
+              <el-form-item label="灞炴��:" :label-width="rightFormLabelWidth" required>
+                <el-input
+                  placeholder="璇烽�夋嫨"
+                  prefix-icon="el-icon-search"
+                  readonly="true"
+                  ref="referAttributeId"
+                  v-model="form.referAttributeName"
+                  @focus="openAttrSelectOrGetValue('attr')"
+                  :disabled="basicSecOnlyRead">
+                  <i slot="suffix" class="el-icon-circle-close" @click="clearAttrDataByIcon('attr')" style="cursor: pointer;"></i>
+                </el-input>
+              </el-form-item>
+              <el-form-item label="灞炴�ф墍鍦ㄥ垎绫�:" :label-width="rightFormLabelWidth">
+                <el-input 
+                  v-model="form.referCodeClassifyOidName"
+                  disabled>
+              </el-input>
+              </el-form-item>
+              <el-form-item label="鍙栧�艰鍒�:" :label-width="rightFormLabelWidth">
+                <el-input
+                  placeholder="璇烽�夋嫨"
+                  prefix-icon="el-icon-search"
+                  readonly="true"
+                  v-model="form.getValueClass"
+                  :disabled="basicSecOnlyRead"
+                  @focus="openAttrSelectOrGetValue('value')">
+                  <i slot="suffix" class="el-icon-circle-close" @click="clearAttrDataByIcon('value')" style="margin-right: 5px;cursor: pointer;"></i>
+                </el-input>
+              </el-form-item>
+            </div>
+            <!-- 娴佹按鐮佹 -->
+            <div v-show="form.secType==='codeserialsec' ? true:false">
+              <el-form-item label="鐮佹鐨勯暱搴�:" :label-width="rightFormLabelWidth" required>
+                <el-input v-model.number="form.codeSecLength" ref="seriaCodeSecLength" :readonly="basicSecOnlyRead"></el-input>
+              </el-form-item>
+              <el-form-item label="娴佹按鍙风殑璧峰鍊�:" :label-width="rightFormLabelWidth">
+                <el-input v-model.number="form.serialStart" ref="serialStart"  :readonly="basicSecOnlyRead"></el-input>
+              </el-form-item>
+              <el-form-item label="娴佹按鐨勬闀�:" :label-width="rightFormLabelWidth">
+                <el-input v-model.number="form.serialStep" ref="serialStep"  :readonly="basicSecOnlyRead"></el-input>
+              </el-form-item>
+              <el-form-item label="缂栫爜琛ヤ綅鏂瑰紡:" :label-width="rightFormLabelWidth" required>
+                <el-select v-model="form.codeFillType" placeholder="璇烽�夋嫨" :disabled="basicSecOnlyRead">
+                  <el-option label="宸﹁ˉ浣�" value="codeattrsec"
+                    v-for="item in codeFillType"
+                    :key="item.dictValue"
+                    :label="item.dictValue"
+                    :value="item.dictKey">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="琛ヤ綅鏃剁殑瀛楃:" :label-width="rightFormLabelWidth">
+                <el-select v-model="form.codeFillSeparatorSelect" @blur="inputSelectBlur" filterable placeholder="璇烽�夋嫨" :disabled="basicSecOnlyRead">
+                  <el-option
+                    v-for="item in codeFillSeparator"
+                    :key="item.dictValue"
+                    :label="item.dictValue"
+                    :value="item.dictKey">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="濉厖闀垮害:" :label-width="rightFormLabelWidth" required>
+                <el-input v-model.number="form.codeFillLength"  ref="codeFillLength" :readonly="basicSecOnlyRead"></el-input>
+              </el-form-item>
+              <el-form-item label="娴佹按涓婇檺:" :label-width="rightFormLabelWidth" required>
+                <el-input v-model.number="form.codeFillLimit" ref="codeFillLimit" :readonly="basicSecOnlyRead"></el-input>
+              </el-form-item>
+              <el-form-item label="娴佹按鏄惁琛ョ爜:" :label-width="rightFormLabelWidth" required>
+                <el-switch v-model="form.codeFillFlag" :disabled="basicSecOnlyRead"></el-switch>
+              </el-form-item>
+              <el-form-item label="鑷畾涔夌殑娴佹按绠楁硶:" :label-width="rightFormLabelWidth">
+                <el-input v-model="form.customCodeSerialClass" :readonly="basicSecOnlyRead"></el-input>
+              </el-form-item>
+            </div>
+            <!-- 灞傜骇鐮佹 -->
+            <div v-show="form.secType==='codelevelsec' ? true:false">
+              <el-form-item label="灞傜骇绫诲瀷:" :label-width="rightFormLabelWidth" required>
+                <el-select v-model="form.codeLevelType" placeholder="璇烽�夋嫨" :disabled="basicSecOnlyRead">
+                  <el-option
+                    v-for="item in codeLevelType"
+                    :key="item.dictValue"
+                    :label="item.dictValue"
+                    :value="item.dictKey">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="灞傜骇鐨勫��:" :label-width="rightFormLabelWidth">
+                <el-input v-model.number="form.codeLevelValue" ref="codeLevelValue"  :readonly="basicSecOnlyRead"></el-input>
+              </el-form-item>
+              <el-form-item label="瀛楃鎴彇绫诲瀷:" :label-width="rightFormLabelWidth" required>
+                <el-select v-model="form.valueCutType" placeholder="璇烽�夋嫨" :disabled="basicSecOnlyRead">
+                  <el-option
+                    v-for="item in codeCutType"
+                    :key="item.dictValue"
+                    :label="item.dictValue"
+                    :value="item.dictKey">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="鍙栧�肩被鍨�:" :label-width="rightFormLabelWidth">
+                <el-select v-model="form.codeGetValueType" placeholder="璇烽�夋嫨" :disabled="basicSecOnlyRead">
+                  <el-option
+                    v-for="item in codeGetValueType"
+                    :key="item.dictValue"
+                    :label="item.dictValue"
+                    :value="item.dictKey">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+            <!-- 寮曠敤鐮佹 -->
+            <div v-show="form.secType==='coderefersec' ? true:false">
+              <el-form-item label="鍙傜収寮曠敤鐨勪笟鍔$被鍨�:" label-width="152px" required>
+                <el-input
+                  ref="referBtmId" 
+                  placeholder="璇烽�夋嫨"
+                  prefix-icon="el-icon-search"
+                  readonly="true"
+                  v-model="form.referBtmId"
+                  @focus="openAttrSelectOrGetValue('referBtmId')"
+                  :disabled="basicSecOnlyRead">
+                  <i slot="suffix" class="el-icon-circle-close" @click="clearAttrDataByIcon('referBtmId')" style="margin-right: 5px;cursor: pointer;"></i>
+                </el-input>
+              </el-form-item>
+              <el-form-item label="鍙傜収閰嶇疆:" label-width="152px" required>
+                <el-input
+                  ref="referConfig" 
+                  placeholder="璇烽�夋嫨"
+                  prefix-icon="el-icon-search"
+                  readonly="true"
+                  v-model="form.referConfig"
+                  @focus="openAttrSelectOrGetValue('referConfig')"
+                  :disabled="basicSecOnlyRead">
+                  <i slot="suffix" class="el-icon-circle-close" @click="clearAttrDataByIcon('referConfig')" style="margin-right: 5px;cursor: pointer;"></i>
+                </el-input>
+              </el-form-item>
+            </div>
+            <!-- 鏃ユ湡鐮佹 -->
+            <div v-show="form.secType==='codedatesec' ? true:false">
+              <el-form-item label="鏃ユ湡鏍煎紡:" :label-width="rightFormLabelWidth" required>
+                <el-input ref="codeDateFormatStr" v-model="form.codeDateFormatStr" :readonly="basicSecOnlyRead"></el-input>
+              </el-form-item>
+            </div>
+            <!-- 鍒嗙被鐮佹 -->
+            <div v-show="form.secType==='codeclassifysec' ? true:false">
+              <el-form-item label="鐮佹闀垮害绫诲瀷:" :label-width="rightFormLabelWidth" required>
+                <el-select v-model="form.codeSecLengthType" placeholder="璇烽�夋嫨" :disabled="basicSecOnlyRead">
+                  <el-option
+                    v-for="item in codeSecLengthType"
+                    :key="item.dictValue"
+                    :label="item.dictValue"
+                    :value="item.dictKey">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="鐮佹鐨勯暱搴�:" :label-width="rightFormLabelWidth" required>
+                <el-input v-model.number="form.codeSecLength" ref="classCodeSecLength" :readonly="basicSecOnlyRead"></el-input>
+              </el-form-item>
+              <el-form-item label="鏄惁鑷姩鍒嗛厤鍒嗙被鍊�:" :label-width="rightFormLabelWidth">
+                <el-switch v-model="form.matchClassifyValueFlag" :disabled="basicSecOnlyRead"></el-switch>
+              </el-form-item>
+              <el-form-item label="鐖跺垎绫荤爜娈�:" :label-width="rightFormLabelWidth">
+                <el-input
+                  placeholder="璇烽�夋嫨"
+                  prefix-icon="el-icon-search"
+                  readonly="true"
+                  v-model="form.parentClassifySecOid"
+                  @focus="openAttrSelectOrGetValue('parentClassifySecOid')"
+                  :disabled="basicSecOnlyRead">
+                  <i slot="suffix" class="el-icon-circle-close" @click="clearAttrDataByIcon('parentClassifySecOid')" style="margin-right: 5px;cursor: pointer;"></i>
+                </el-input>
+              </el-form-item>
+            </div>
+            <!-- 鍙彉鐮佹 -->
+            <div v-show="form.secType==='codevariablesec' ? true:false">
+              <el-form-item label="鐮佹鐨勯暱搴�:" :label-width="rightFormLabelWidth" required>
+                <el-input v-model.number="form.codeSecLength" ref="varCodeSecLength" :readonly="basicSecOnlyRead"></el-input>
+              </el-form-item>
+              <el-form-item label="缂栫爜琛ヤ綅鏂瑰紡:" :label-width="rightFormLabelWidth" required>
+                <el-select v-model="form.codeFillType" placeholder="璇烽�夋嫨" :disabled="basicSecOnlyRead">
+                  <el-option
+                      v-for="item in codeFillType"
+                      :key="item.dictValue"
+                      :label="item.dictValue"
+                      :value="item.dictKey">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+              <el-form-item label="琛ヤ綅鏃剁殑瀛楃:" :label-width="rightFormLabelWidth">
+                <el-select v-model="form.codeFillSeparatorSelect" filterable @blur="inputSelectBlur" placeholder="璇烽�夋嫨" :disabled="basicSecOnlyRead">
+                  <el-option
+                    v-for="item in codeFillSeparator"
+                    :key="item.dictValue"
+                    :label="item.dictValue"
+                    :value="item.dictKey">
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+          </span>
+        </el-form>
+      </div>
+      <!-- 绗竴灞傚璇濇鐨勬寜閽拰锛岀嚎鏉� -->
+      <el-divider direction="horizontal"></el-divider>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="addBasicCodeSettingBox = false" v-show="showbtn">鍙� 娑�</el-button>
+        <el-button type="primary" @click="saveOrEditBasicCode" v-show="showbtn">淇� 瀛�</el-button>
+      </div>
+
+      <!--  绗簩灞傚璇濇,灞炴�х爜娈碉紝灞炴�ч�夋嫨寮圭獥 -->
+      <el-dialog title="涓恒�愬睘鎬с�戦�夊彇鍊�"
+        append-to-body
+        :visible.sync="isShowSelectAttrOption"
+        width="78%"
+        style="height: 100%; margin-top: -8vh; overflow: hidden">
+        <div style="overflow-y: auto; height: 60vh">
+          <el-row>
+            <!-- 宸︿晶涓婚搴撳垎绫绘爲 -->
+            <el-col :span="5">
+              <div class="box">
+                <el-scrollbar style="height: auto; border-bottom-right-radius:8px ">
+                  <basic-container>
+                    <div class="abox">
+                      <avue-tree :data="attrClassifyTreeData" :option="treeOption" @node-click="nodeClick"/>
                     </div>
-                    <div class="text item">
-                      <el-input type="textarea" :rows="5" style="width: 560px;" v-model="formulaContent"></el-input>
-                    </div>
+                  </basic-container>
+                </el-scrollbar>
+              </div>
+            </el-col>
 
-                </el-card>
-              </el-col>
+            <!-- 鍙充晶琛ㄦ牸鏄剧ず鍖哄煙 -->
+            <el-col span="19">
+              <basic-container>
+                <div class="bbox">
+                <avue-crud
+                  :data="selectattrData"
+                  :option="attrOption"
+                  :table-loading="selectAttrOptionLoading"
+                  @search-change="selectAttrOptionSearchChange"
+                  @search-reset="searchAttrReset"
+                  @selection-change="selectionChangeAttr">
+                </avue-crud>
+                </div>
+              </basic-container>
+            </el-col>
 
-              <!-- 鍙充晶杩愮畻绗� -->
-              <el-col :span="10">
-                <el-card class="box-card" style="height: 33vh;">
-                  <div slot="header" class="clearfix">
-                    <span style="font-size: medium;">杩愮畻绗�</span>
-                  </div>
-                  <div class="text item">
-                    <div class="formula-editor">
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'7'})">7</button>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'8'})">8</button>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'9'})">9</button>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'/'})">/</button><br/>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'4'})">4</button>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'5'})">5</button>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'6'})">6</button>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'*'})">*</button><br/>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'1'})">1</button>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'2'})">2</button>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'3'})">3</button>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'>'})">-</button><br/>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'0'})">0</button>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'00'})">00</button>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'.'})">.</button>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'+'})">+</button><br/>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'->'})">-></button>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'=='})">==</button>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'('})">(</button>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':')'})">)</button><br/>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'<'})">&lt;</button>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'>'})">&gt;</button>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'<='})">&lt;=</button>
-                        <button class="formula-editor-btn-sm" @click="dbClickAddContent({'formula':'>='})">&gt;=</button>
-                    </div>
-                  </div>
-                </el-card>
-              </el-col>
-            </el-row>
-
-            <el-row>
-
-              <!-- 宸︿晶鍏紡閫夋嫨鍖哄煙 -->
-              <el-col :span="14" style="overflow: hidden">
-                <el-card class="box-card" style="height: 40vh; overflow-y: auto; overflow-x: auto;">
-                  <div slot="header" class="clearfix">
-                    <span style="font-size: medium;">鍏紡閫夋嫨</span>
-                  </div>
-                  <div class="text item">
-                    <el-tabs v-model="activeName">
-
-                      <el-tab-pane label="甯哥敤" name="first">
-                        <el-table
-                          :data="commonFormulaTableData"
-                          :show-header="false"
-                          @row-dblclick="dbClickAddContent"
-                          style="width: 100%">
-                          <el-table-column
-                            prop="formula"
-                            width="300">
-                          </el-table-column>
-                          <el-table-column
-                            prop="desc"
-                            width="300">
-                          </el-table-column>
-                        </el-table>
-                      </el-tab-pane>
-
-                      <el-tab-pane label="璐㈠姟" name="second">
-                        <el-table
-                          :data="financialFormulaTableData"
-                          @row-dblclick="dbClickAddContent"
-                          :show-header="false"
-                          style="width: 100%">
-                          <el-table-column
-                            prop="formula"
-                            width="300">
-                          </el-table-column>
-                          <el-table-column
-                            prop="desc"
-                            width="300">
-                          </el-table-column>
-                        </el-table>
-                      </el-tab-pane>
-
-                      <el-tab-pane label="鏃ユ湡" name="third">
-                        <el-table
-                          :data="dateFormulaTableData"
-                          :show-header="false"
-                          @row-dblclick="dbClickAddContent"
-                          style="width: 100%">
-                          <el-table-column
-                            prop="formula"
-                            width="300">
-                          </el-table-column>
-                          <el-table-column
-                            prop="desc"
-                            width="300">
-                          </el-table-column>
-                        </el-table>
-                      </el-tab-pane>
-
-                      <el-tab-pane label="鏁板" name="fourth">
-                        <el-table
-                          :data="mathFormulaTableData"
-                          :show-header="false"
-                          @row-dblclick="dbClickAddContent"
-                          style="width: 100%">
-                          <el-table-column
-                            prop="formula"
-                            width="300">
-                          </el-table-column>
-                          <el-table-column
-                            prop="desc"
-                            width="300">
-                          </el-table-column>
-                        </el-table>
-                      </el-tab-pane>
-
-                      <el-tab-pane label="鍏朵粬" name="five">
-                        <el-table
-                          :data="otherFormulaTableData"
-                          @row-dblclick="dbClickAddContent"
-                          :show-header="false"
-                          style="width: 100%">
-                          <el-table-column
-                            prop="formula"
-                            width="300">
-                          </el-table-column>
-                          <el-table-column
-                            prop="desc"
-                            width="300">
-                          </el-table-column>
-                        </el-table>
-                      </el-tab-pane>
-
-                    </el-tabs>
-                    
-                  </div>
-                </el-card>
-              </el-col>
-
-              <!-- 鍙充晶鍙橀噺閫夋嫨鍖哄煙 -->
-              <el-col :span="10" style="overflow: hidden">
-                <el-card class="box-card" style="height: 40vh; overflow-y: auto; overflow-x: auto;">
-                  <div slot="header" class="clearfix">
-                    <span style="font-size: medium;">鍙橀噺</span>
-                  </div>
-                  <div class="text item">
-                    <el-tabs v-model="activeNameAttr">
-                      <el-tab-pane label="鏈満鏅彉閲�" name="first">
-                        <el-table
-                          :data="thisSceneTableData"
-                          @row-dblclick="dbClickAddContent"
-                          :show-header="false"
-                          style="width: 100%">
-                          <el-table-column
-                            prop="formula"
-                            width="40">
-                          </el-table-column>
-                          <el-table-column
-                            prop="desc"
-                            width="100">
-                          </el-table-column>
-                        </el-table>
-                      </el-tab-pane>
-                      <el-tab-pane label="绯荤粺鍙橀噺" name="second">
-                        <el-table
-                          :data="systemVariableTableData"
-                          @row-dblclick="dbClickAddContent"
-                          :show-header="false"
-                          style="width: 100%">
-                          <el-table-column
-                            prop="formula"
-                            width="150">
-                          </el-table-column>
-                          <el-table-column
-                            prop="desc"
-                            width="150">
-                          </el-table-column>
-                        </el-table>
-                      </el-tab-pane>
-                    </el-tabs>
-                  </div>
-                </el-card>
-              </el-col>
-            </el-row>
-          </div>
-          
-        </el-dialog>
-
-        <!-- 娣诲姞鐮佹淇℃伅鐨勮嚜瀹氫箟缁勪欢 -->
-        <add-basic-code ref='addBasicChild' @openAttrSelectOrGetValue="openAttrSelectOrGetValue" @openformulaEdit="openformulaEdit"></add-basic-code>
-
-        <!-- 绗竴灞傚璇濇鐨勬寜閽拰锛岀嚎鏉� -->
-        <el-divider direction="horizontal"></el-divider>
-        <div slot="footer" class="dialog-footer">
-          <el-button @click="addBasicCodeSettingBox = false">鍙� 娑�</el-button>
-          <el-button type="primary" @click="saveBasicCode">淇� 瀛�</el-button>
+          </el-row>
         </div>
-      
+
+        <div slot="footer" class="dialog-footer">
+          <el-button @click="isShowSelectAttrOption = false">鍙� 娑�</el-button>
+          <el-button type="primary" @click="selectedListClassifyLinkAttr">纭� 瀹�</el-button>
+        </div>
+        
       </el-dialog>
+
+      <!-- 绗簩灞傚璇濇,灞炴�х爜娈碉紝鍏紡缂栬緫妗嗗脊绐楃粍浠� -->
+      <formula-editor ref="formulaEditor" 
+        @updateFormulaContent="updateFormulaContent" 
+        :thisSceneTableData="thisSceneTableData"
+        :systemVariableTableData="systemVariableTableData">
+      </formula-editor>
+
+      <!-- 绗簩灞傚璇濇,涓恒�愮埗鍒嗙被鐮佹銆戦�夊彇鍊煎脊绐� -->
+      <el-dialog title="涓恒�愮埗鍒嗙被鐮佹銆戦�夊彇鍊�"
+        append-to-body
+        :visible.sync="isShowParentClassifyOption"
+        width="65%"
+        style="height: 150vh; margin-top: -13vh;"
+        destroy-on-close>
+
+        <avue-crud
+          :page.sync="parentClassifyDataPage"
+          ref="crudParentClassify"
+          :option="parentClassifyParentOption" 
+          :table-loading="classifyDialogLoading"
+          :data="parentClassifyData"
+          @refresh-change="refreshParentClassifyDataChange"
+          @search-change="parentClassifySearchChange"
+          @search-reset="parentClassifySearchReset"
+          @selection-change="parentClassifySelectionChange"
+          @current-change="parentClassifyCurrentChange"
+          @size-change="parentClassifySizeChange"
+          @on-load="parentClassifyOnLoad">
+        </avue-crud>
+
+        <div slot="footer" class="dialog-footer">
+          <el-button @click="isShowParentClassifyOption = false">鍙� 娑�</el-button>
+          <el-button type="primary" @click="saveSelectedParentClassify">淇� 瀛�</el-button>
+        </div>
+      </el-dialog>
+
+      <!-- 绗簩灞傚璇濇,涓恒�愬弬鐓у紩鐢ㄧ殑涓氬姟绫诲瀷銆戦�夊彇鍊煎脊绐� -->
+      <el-dialog title="涓恒�愬弬鐓у紩鐢ㄧ殑涓氬姟绫诲瀷銆戦�夊彇鍊�"
+        append-to-body
+        :visible.sync="isShowSelectReferBtmOption"
+        width="65%"
+        style="height: 150vh; margin-top: -13vh;"
+        destroy-on-close>
+
+        <avue-crud
+          :page.sync="referBtmDataPage"
+          ref="crudReferBtm"
+          :option="referBtmOption" 
+          :table-loading="referBtmDialogLoading"
+          :data="referBtmData"
+          @refresh-change="referBtmDataChange"
+          @search-change="referBtmSearchChange"
+          @search-reset="referBtmSearchReset"
+          @selection-change="referBtmSelectionChange"
+          @current-change="referBtmCurrentChange"
+          @size-change="referBtmSizeChange"
+          @on-load="referBtmOnLoad">
+        </avue-crud>
+
+        <div slot="footer" class="dialog-footer">
+          <el-button @click="isShowSelectReferBtmOption = false">鍙� 娑�</el-button>
+          <el-button type="primary" @click="saveSelectedreferBtm">淇� 瀛�</el-button>
+        </div>
+      </el-dialog>
+
+    </el-dialog>
 
   </basic-container>
  
 </template>
 
 <script>
-  import { gridCodeRule, getDetail, add, update, remove, listUseRange, updateStatus } from "@/api/code/mdmrule";
-  import { gridCodeBasicSec, downOrderNum, upOrderNum, deleteData, editSave, getObjectByOid, listDataByOids, refDataGrid} from "@/api/code/codebasic";
+  import { gridCodeRule, getDetail, add, update, remove, listUseRange, updateStatus,clone,clearAllCode } from "@/api/code/mdmrule";
+  import { 
+    gridCodeBasicSec, 
+    downOrderNum, 
+    upOrderNum, 
+    deleteData, 
+    editSave, 
+    cloneCodeBasic,
+    addSave,
+    refDataGridClassifySec,
+  } from "@/api/code/codebasic";
   import { treeTopCodeClassify, listClassifyLinkAttr } from "@/api/code/codeclassify";
+  import { gridCodeFixedValue,addSaveCodeFixedValue,deleteCodeFixedValue,editCodeFixedValue,saveOrder } from "@/api/code/codeFixedValue";
+  import { treeCodeClassifyValue,addSaveCodeClassifyValue,editCodeClassifyValue,deleteCodeClassifyValue,saveCodeClassifyValueOrder } from "@/api/code/codeClassifyValue";
+  import { getDictionary } from "@/api/omd/enum";
   import optionBasic from "@/const/code/codebasic";
+  import cloneOption from "@/const/code/cloneOption";
+  import cloneBasicOption from "@/const/code/cloneBasicDialogOption";
+  import cloneCodeRuleOption from "@/const/code/cloneCodeRuleDialogOption.js";
   import optionRule from "@/const/code/mdmrule";
-  import attrOption from "@/const/code/selectattroption";
-  import treeOption from "@/const/code/classifytreeoption";
+  import attrOption from "@/const/code/selectAttrOptionDialog";
+  import treeOption from "@/const/code/classifyTreeOptionDialog";
+  import classisyValueTreeOption from "@/const/code/classisyValueTreeDialog";
+  import parentClassifyParentOption from "@/const/code/parentClassifyParentOptionDialog";
+  import referBtmOption from "@/const/code/referBtmDialog";
+  import fixedValueOption from "@/const/code/fixedValueMgrDialog";
   import {mapGetters} from "vuex";
 
-export default {
-    data() {
-      return {
-        form: {},
-        query: {},
-        loading: true,
-        currentCodeRuleOid: '',
-        page: {
-          pageSize: 10,
-          currentPage: 1,
-          total: 0
-        },
-        selectionList: [],
-        /*缂栫爜瑙勫垯琛ㄦ牸閰嶇疆*/
-        optionRule: optionRule,
-
-        data: [],
-
-        /*鍏嬮殕鎸夐挳瀵硅瘽妗嗘帶鍒�*/
-        cloneSettingBox: false,
-        optionBasic: optionBasic,
-
-        /*鍩虹鐮佹鐩稿叧鏁版嵁*/
-        basicData:[],
-        loadingBasic: true,
-        selectionBasicList: [],
-        addBasicCodeSettingBox: false,
-        /* 涓哄睘鎬ч�夊彇鍊肩獥鍙f樉绀烘墦寮�鎺у埗鍙橀噺 */
-        isShowSelectAttrOption: false,
-        /* 涓哄睘鎬ч�夊�煎乏渚ф爲鏁版嵁 */
-        attrClassifyTreeData: [],
-        treeOption: treeOption,
-        currentSelectTreeData: '', //褰撳墠閫変腑鐨勬爲鑺傜偣
-        /* 涓哄睘鎬ч�夊�煎彸渚ц〃鏍肩浉鍏虫暟鎹� */
-        attrOption: attrOption,
-        selectattrData: [],
-        selectAttrOptionLoading: false,
-        selectionChangeAttrList: [],
-        /*鍏紡缂栬緫妗嗗璇濇*/
-        isShowformulaEdit: false, //鍏紡缂栬緫妗嗗璇濇鏄剧ず鎺у埗
-        formulaContent: '', //鍏紡缂栬緫妗嗗唴瀹�
-        activeName: 'first', //褰撳墠娲诲姩鐨則ab
-        activeNameAttr: 'first', //鍙橀噺涓殑褰撳墠娲诲姩tab
-
-        
-        //甯哥敤鍏紡
-        commonFormulaTableData: [{
-          "formula": 'if(compare,trueResult,falseResult)',
-          "desc": '濡傛灉compare鐨勮〃杈惧紡涓簍rue锛屽垯鎵цtrueResult鐨勮〃杈惧紡锛屽惁鍒欐墽琛宖laseResult.渚嬪if(3>2,2*(3+2),3/(2-4)),鍊肩瓑浜�10',
-        },
-        {
-          "formula": 'sum(douber1,douber2)',
-          "desc": '涓や釜鏍煎紡涓篸ouber鐨勫弬鏁版眰鍜�',
-        },
-        {
-          "formula": 'sub(douber1,douber2)',
-          "desc": '鏍煎紡涓篸ouber鐨勫弬鏁癲ouber1鍑忓幓鏍煎紡涓篸ouber鐨勫弬鏁癲ouber2',
-        },
-        {
-          "formula": 'mul(douber1,douber2)',
-          "desc": '涓や釜鏍煎紡涓篸ouber鐨勫弬鏁扮浉涔�',
-        },
-        {
-          "formula": 'div(douber1,douber2)',
-          "desc": '鏍煎紡涓篸ouber鐨勫弬鏁癲ouber1闄や互鏍煎紡涓篸ouber鐨勫弬鏁癲ouber2.褰揹ouber2绛変簬0鐨勬椂鍊欙紝杩斿洖0;濡傛灉闄や笉灏界殑鏃跺�欎繚鐣�10浣嶅皬鏁�',
-        },
-        {
-          "formula": 'mod(int,int)',
-          "desc": '姹備綑鏁�',
-        },
-        {
-          "formula": 'toInt(string)',
-          "desc": '杞崲涓篿nt鏍煎紡',
-        },
-        {
-          "formula": 'doubleRound(string,count)',
-          "desc": '澶勭悊douber鐨勫皬鏁颁綅鏁帮紝count琛ㄧず灏忔暟浣嶆暟',
-        },
-        {
-          "formula": 'zeroIfNull(value)',
-          "desc": '濡傛灉鍙傛暟鐨勫�间负null鎴栬��"",灏嗚繑鍥�0',
-        },
-        {
-          "formula": 'endsWith(string,str1)',
-          "desc": '瀛楃涓瞫tring鏄笉鏄互str1缁撳熬',
-        },
-        {
-          "formula": 'startsWith(string,str1)',
-          "desc": '瀛楃涓瞫tring鏄惁浠tr1寮�澶�',
-        },
-        {
-          "formula": 'charAt(string,index)',
-          "desc": '鑾峰彇瀛楃涓瞫tring涓index浣嶇疆鐨勫瓧绗︼紝濡傛灉闀垮害灏忎簬index锛屽垯杩斿洖',
-        },
-        {
-          "formula": 'equalsIgnoreCase(str1,str2)',
-          "desc": '瀛楃涓瞫tr1鍜屽瓧绗︿覆str2鏄惁鐩哥瓑',
-        },
-        {
-          "formula": 'indexOf(str1,str2)',
-          "desc": '瀛楃涓瞫tr2鍦ㄥ瓧绗︿覆str1涓娆″嚭鐜扮殑浣嶇疆',
-        },
-        {
-          "formula": 'isEmpty(str1)',
-          "desc": '鍙傛暟str1鏄惁涓虹┖锛屽叾涓璶ull杩欎釜瀛楃涓蹭篃琛ㄧず涓虹┖',
-        },
-        {
-          "formula": 'lastIndexOf(str1,str2)',
-          "desc": '瀛楃涓瞫tr2鍦ㄥ瓧绗︿覆str1涓渶鍚庡嚭鐜扮殑浣嶇疆',
-        },
-        {
-          "formula": 'leftStr(str1,index)',
-          "desc": '鑾峰彇index浣嶇疆宸︿晶鐨勬墍鏈夊瓧绗�',
-        },
-        {
-          "formula": 'rightStr(str1,str2)',
-          "desc": '鑾峰彇index浣嶇疆鍙充晶鐨勬墍鏈夊瓧绗�',
-        },
-        {
-          "formula": 'length(str1)',
-          "desc": '鍙傛暟str1鐨勯暱搴�',
-        },
-        {
-          "formula": 'mid(str1,start,end)',
-          "desc": '鑾峰彇str1鐨勪粠start鍒癳nd鐩存帴鐨勫瓧绗︿覆锛屽嚭鐜板紓甯告椂杩斿洖',
-        },
-        {
-          "formula": 'tolowercase(str1)',
-          "desc": '灏嗗瓧绗︿覆str1杞负灏忓啓',
-        },
-        {
-          "formula": 'touppercase(str1)',
-          "desc": '灏嗗瓧绗︿覆str1杞负澶у啓',
-        },
-        {
-          "formula": 'trimzero(str1)',
-          "desc": '鍘婚櫎瀛楃涓瞫tr1涓殑0',
-        },
-        {
-          "formula": 'MD5(str1)',
-          "desc": '灏嗗瓧绗︿覆杩涜MD5鍔犲瘑',
-        },
-       ],
-       //璐㈠姟鍏紡
-        financialFormulaTableData: [{
-            "formula": 'toChinese(value)',
-            "desc": '灏嗛樋鎷変集鏁板瓧杞负涓烘眽瀛楀ぇ鍐欐柟寮�'
-          },
-          {
-            "formula": 'getChineseCurrency(value)',
-            "desc": '灏嗛樋鎷変集鏁板瓧杞负涓烘眽瀛楅噾棰濆ぇ鍐欐柟寮忥紝涓巘ochiness鐨勫尯鍒槸杩欎釜浼氭樉绀哄厓銆佽銆佸垎'
-          },
-          {
-            "formula": 'setThmark(value)',
-            "desc": '涓哄弬鏁皏alue璁剧疆鍗冨垎浣�'
-          }
-        ],
-        //鏃ユ湡鍏紡
-        dateFormulaTableData: [{
-            "formula": 'compareDate(d1,d2)',
-            "desc": '瀵规瘮鍙傛暟d1,d2鐨勫ぇ灏忋�俤1,d2涓簓yyy-MM-dd鏍煎紡鐨勬棩鏈熷瓧绗︿覆'
-          },
-          {
-            "formula": 'nowDate()',
-            "desc": '鑾峰彇褰撳墠鏃ユ湡'
-          },
-          {
-            "formula": 'chinaDate(d1)',
-            "desc": '灏嗘椂闂磋浆鎹负鍐滃巻锛宒1鏄痽yyy-MM-dd鏍煎紡鐨勬棩鏈熷瓧绗︿覆'
-          },
-          {
-            "formula": 'dateAdd(d1,count)',
-            "desc": '鍦╠1鐨勫熀纭�涓婃坊鍔燾ount澶�,d1涓簓yyy-MM-dd HH:mm:ss鏍煎紡鐨勬椂闂村瓧绗︿覆'
-          },
-          {
-            "formula": 'dateBalanceYear(sourceDate,targetDate,false)',
-            "desc": '璁$畻鐩稿樊鐨勫勾浠斤紝姣斿璁$畻骞撮緞锛宼argetDate涓�""琛ㄧず褰撳墠鏃堕棿锛岀涓変釜鍙傛暟涓簍rue琛ㄧず鏈夊浣欑殑鏈堜唤鎴栬�呭ぉ鏁版椂锛屽氨鍔�1;'
-          },
-          {
-            "formula": 'dateBalanceDay(sourceDate,targetDate)',
-            "desc": '璁$畻鐩稿樊鐨勫ぉ鏁帮紝targetDate涓�""琛ㄧず褰撳墠鏃堕棿'
-          },
-          {
-            "formula": 'dateformat(d1,format)<',
-            "desc": '灏嗗綋鍓嶇殑鏃ユ湡锛堟椂闂达級瀛楃涓茶浆涓烘寚瀹氱殑瀛楃涓诧紝濡傛灉format鐨勫唴瀹规湁绌烘牸锛岃浣跨敤&浠f浛'
-          },
-          {
-            "formula": 'nowDatetime()',
-            "desc": '鑾峰彇褰撳墠鏃ユ湡鍜屾椂闂淬�傛牸寮忎负yyyy-MM-dd HH:mm:ss'
-          },
-          {
-            "formula": 'dayOf(d1)',
-            "desc": '鑾峰彇鏍煎紡涓簓yyy-MM-dd鐨勬棩鏈熺殑澶╂暟'
-          },
-          {
-            "formula": 'nowMon()',
-            "desc": '鑾峰彇褰撳墠鐨勬湀浠斤紝鏍煎紡涓篗M'
-          },
-          {
-            "formula": 'monOf(d1)',
-            "desc": '鑾峰彇鏃ユ湡d1鐨勬湀浠芥暟'
-          },
-          {
-            "formula": 'nowTime()',
-            "desc": '鑾峰彇褰撳墠鏃堕棿锛屾牸寮忎负HH:mm:ss'
-          },
-          {
-            "formula": 'nowYear()',
-            "desc": '鑾峰彇骞翠唤锛屾牸寮忎负yyyy'
-          },
-          {
-            "formula": 'yearOf()',
-            "desc": '鑾峰彇鏃堕棿d1鐨勫勾浠�'
-          }
-        ],
-        //鏁板鍏紡
-        mathFormulaTableData: [{
-            "formula": 'abs(value)',
-            "desc": '姹傚弬鏁皏alue鐨勭粷瀵瑰�硷紝value蹇呴』涓烘暟瀛楁牸寮�'
-          },
-          {
-            "formula": 'acos(value)',
-            "desc": '姹傚弬鏁皏alue鐨勫弽浣欏鸡锛寁alue蹇呴』涓烘暟瀛楁牸寮�'
-          },
-          {
-            "formula": 'asin(value)',
-            "desc": '姹傚弬鏁皏alue鐨勫弽姝e鸡锛寁alue蹇呴』涓烘暟瀛楁牸寮�'
-          },
-          {
-            "formula": 'atan(value)',
-            "desc": '姹傚弬鏁皏alue鐨勫弽姝e垏锛寁alue蹇呴』涓烘暟瀛楁牸寮�'
-          },
-          {
-            "formula": 'cbrt(value)',
-            "desc": '姹傚弬鏁皏alue鐨勭珛鏂规牴锛寁alue蹇呴』涓烘暟瀛楁牸寮�'
-          },
-          {
-            "formula": 'ceil(value)',
-            "desc": '杩斿洖涓嶅ぇ浜庡弬鏁皏alue鐨勬渶灏忔暣鏁帮紝渚嬪ceil(1.7)灏辩瓑浜�2锛寁alue蹇呴』涓烘暟瀛楁牸寮�'
-          },
-          {
-            "formula": 'cos(value)',
-            "desc": '姹傚弬鏁皏alue鐨勪綑寮﹀�硷紝value蹇呴』涓烘暟瀛楁牸寮�'
-          },
-          {
-            "formula": 'cosh(value)',
-            "desc": '姹傚弬鏁皏alue鐨勫弻鏇蹭綑寮﹀�硷紝value蹇呴』涓烘暟瀛楁牸寮�'
-          },
-          {
-            "formula": 'exp(n)',
-            "desc": '娆ф媺鏁� e 鐨刵娆″箓锛宯蹇呴』涓烘暟瀛楁牸寮�'
-          },
-          {
-            "formula": 'floor(n)',
-            "desc": '娆ф媺鏁� e 鐨刵娆″箓鍑�1锛宯蹇呴』涓烘暟瀛楁牸寮�'
-          },
-          {
-            "formula": 'log(value)',
-            "desc": '杩斿洖涓嶅皬浜庡弬鏁皏alue鐨勬渶澶ф暣鏁帮紝渚嬪floor(1.7)绛変簬1锛宯蹇呴』涓烘暟瀛楁牸寮�'
-          },
-          {
-            "formula": 'log10(value)',
-            "desc": '鑷劧瀵规暟,value蹇呴』涓烘暟瀛楁牸寮�'
-          },
-          {
-            "formula": 'log1p(value)',
-            "desc": '璁$畻搴曟暟涓� 10 鐨勫鏁�,value蹇呴』涓烘暟瀛楁牸寮�'
-          },
-          {
-            "formula": 'random()',
-            "desc": '杩斿洖鍙傛暟涓� 1 涔嬪拰鐨勮嚜鐒跺鏁帮紝value蹇呴』涓烘暟瀛楁牸寮�'
-          },
-          {
-            "formula": 'rint(value)',
-            "desc": '杩斿洖涓�涓吉闅忔満鏁帮紝璇ュ�煎ぇ浜庣瓑浜� 0.0 涓斿皬浜� 1.0'
-          },
-          {
-            "formula": 'round(value)',
-            "desc": '杩斿洖鍏跺�兼渶鎺ヨ繎鍙傛暟骞朵笖鏄暣鏁扮殑 double 鍊笺�傚鏋滀袱涓暣鏁扮殑 double 鍊奸兘鍚屾牱鎺ヨ繎锛岄偅涔堢粨鏋滃彇鍋舵暟銆傜壒娈婃儏鍐垫槸锛氬鏋滃弬鏁板�兼槸鏁存暟锛岄偅涔堢粨鏋滃氨鏄鍙傛暟銆傚鏋滃弬鏁版槸 NaN 鎴栨棤绌峰ぇ鎴栨闆舵垨璐熼浂锛岄偅涔堢粨鏋滀笌鍙傛暟鐩稿悓'
-          },
-          {
-            "formula": 'signum(value)',
-            "desc": '绗﹀彿鍑芥暟锛涘鏋滃弬鏁颁负 0锛屽垯杩斿洖 0锛涘鏋滃弬鏁板ぇ浜� 0锛� 鍒欒繑鍥� 1.0锛涘鏋滃弬鏁板皬浜� 0锛屽垯杩斿洖 -1.0'
-          },
-          {
-            "formula": 'sin(value)',
-            "desc": '姹傚弬鏁皏alue鐨勬寮﹀�硷紝value蹇呴』涓烘暟瀛楁牸寮�'
-          },
-          {
-            "formula": 'sinh(value)',
-            "desc": '姹傚弬鏁皏alue鐨勫弻鏇叉寮﹀�硷紝value蹇呴』涓烘暟瀛楁牸寮�'
-          },
-          {
-            "formula": 'tan(value)',
-            "desc": '姹傚弬鏁皏alue鐨勬鍒囧�硷紝value蹇呴』涓烘暟瀛楁牸寮�'
-          },
-          {
-            "formula": 'tanh(value)',
-            "desc": '姹傚弬鏁皏alue鐨勫弻鏇叉鍒囧�硷紝value蹇呴』涓烘暟瀛楁牸寮�'
-          },
-          {
-            "formula": 'max(v1,v2)',
-            "desc": '姹備袱涓暟涓殑杈冨ぇ鐨勫�硷紝v1,v2閮藉繀椤讳负鏁板瓧鏍煎紡锛屼緥濡俶ax(3.2,3)灏辩瓑浜�3.2'
-          },
-          {
-            "formula": 'min(v1,v2)',
-            "desc": '姹備袱涓暟涓殑杈冨皬鐨勫�硷紝v1,v2閮藉繀椤讳负鏁板瓧鏍煎紡锛屼緥濡俶ax(3.2,3)灏辩瓑浜�3'
-          },
-          {
-            "formula": 'sqrt(value)',
-            "desc": '姹傚钩鏂规牴'
-          },
-        ],
-        //鍏朵粬鍏紡
-        otherFormulaTableData: [{
-            "formula": 'getcolvalue(servername,tablename,fieldname,pkField,pkValue)',
-            "desc": '鏌ヨservername涓璽ablename鏁版嵁搴撹〃涓璮ieldname瀛楁鐨勫�硷紝pkfield琛ㄧず涓婚敭鐨勫瓧娈靛悕绉帮紝pkValue琛ㄧず涓婚敭鐨勫�硷紝serverName鐜板湪榛樿涓簂ocalServer'
-          },
-        ],
-        
-        //鏈満鏅彉閲�
-        thisSceneTableData: [{
-            "formula": '${}',
-            "desc": ' '
-          },
-        ],
-        //绯荤粺鍙橀噺
-        systemVariableTableData: [{
-            "formula": '#CURRENTUSER.OID#',
-            "desc": '褰撳墠鐢ㄦ埛鐨勪富閿�'
-          },
-          {
-            "formula": '#CURRENTUSER.ID#',
-            "desc": '褰撳墠鐢ㄦ埛鐨勮处鎴�'
-          },
-          {
-            "formula": '#CURRENTTIME#',
-            "desc": '褰撳墠鏃堕棿'
-          },
-          {
-            "formula": '#CURRENTDATE#',
-            "desc": '褰撳墠鏃ユ湡'
-          },
-          {
-            "formula": '#CURRENTDATETIME#',
-            "desc": '褰撳墠鏃ユ湡鏃堕棿'
-          },
-          {
-            "formula": '#CURRENTUSER_NAME#',
-            "desc": '褰撳墠鐢ㄦ埛鐨勫鍚�'
-          },
-          {
-            "formula": '#CURRENTUSER.SECRETGRADE#',
-            "desc": '褰撳墠鐢ㄦ埛瀵嗙骇'
-          },
-          {
-            "formula": '#CURRENTUSER.IPSECRET#',
-            "desc": '褰撳墠鐢ㄦ埛鐨処P瀵嗙骇'
-          },
-          {
-            "formula": '#CURRENTUSER.BUSINESSUNIT#',
-            "desc": '褰撳墠鐢ㄦ埛鎵�灞炰笟鍔″崟鍏�'
-          },
-          {
-            "formula": '#CURRENTUSER.BUSINESSUNITNAME#',
-            "desc": '褰撳墠鐢ㄦ埛鎵�灞炰笟鍔″崟鍏冨悕绉�'
-          },
-          {
-            "formula": '#CURRENTUSER.GROUPOID#',
-            "desc": '褰撳墠鐢ㄦ埛鐨勯儴闂ㄤ富閿�'
-          },
-          {
-            "formula": '#CURRENTUSER.GROUPNAME#',
-            "desc": '褰撳墠鐢ㄦ埛鎵�灞為儴闂ㄥ悕绉�'
-          },
-          {
-            "formula": '#CURRENTUSER.EMAIL#',
-            "desc": '褰撳墠鐢ㄦ埛閭欢鍦板潃'
-          },
-          {
-            "formula": '#CURRENTUSER.ROLENAME#',
-            "desc": '褰撳墠鐢ㄦ埛鎵�灞炶鑹插悕绉�'
-          }
-        ],
-
-        /*浣跨敤鑼冨洿瀵硅瘽妗嗘樉绀烘帶鍒�*/
-        codeRangeSettingBox: false,
-        useRangeData: [],
-        dialogLoading: true,
-        /*浣跨敤鑼冨洿瀵硅瘽妗嗛厤缃�*/
-        dialogeOption: {
-        height: 'auto',
-        calcHeight: 30,
-        tip: false,
-        searchShow: false,
-        searchMenuSpan: 6,
-        border: true,
-        index: true,
-        disablePage:false,
-        viewBtn: false,
-        addBtn: false,
-        menu: false,
-        selection: false,
-        dialogClickModal: false,
-        align: 'center',
-        dialogWidth: 400,
-        column: [
-          {
-            label: "鍒嗙被缂栧彿",
-            prop: "id",
-            span: 24
-          },
-          {
-            label: "鍒嗙被鍚嶇О",
-            prop: "name",
-            span: 24,
-          }
-        ]
-      },
-      };
-    },
-    computed: {
-      ...mapGetters(["permission"]),
-      permissionList() {
+  export default {
+      data() {
         return {
-          addBtn: this.vaildData(this.permission.codeRule_add, true),
-          viewBtn: this.vaildData(this.permission.codeRule_view, false),
-          delBtn: this.vaildData(this.permission.plCodeRule_delete, false),
-          editBtn: this.vaildData(this.permission.codeRule_edit, true)
+          ruleForm: {},
+          query: {},
+          loading: true,
+          currentCodeRuleOid: '',
+          page: {
+            pageSize: 10,
+            currentPage: 1,
+            total: 0
+          },
+          selectionList: [],
+          /*缂栫爜瑙勫垯琛ㄦ牸閰嶇疆*/
+          optionRule: optionRule,
+          data: [],
+          currentRuleLcStatus: '',
+          /*鍏嬮殕瀵硅瘽妗嗘帶鍒跺彉閲�*/
+          cloneSettingBox: false,
+          cloneTableLoading: false,
+          cloneOption: cloneOption,
+          cloneData: [],
+          cloneCodeRuleForm: {
+            id: '',
+            name: '',
+            description: '',
+          },
+          /*浠庡叾浠栬鍒欏厠闅嗙爜娈�*/
+          cloneOtherCodeRuleSettingBox: false,
+          cloneBasicOption: cloneBasicOption,
+          cloneCodeRuleOption: cloneCodeRuleOption,
+          selectionOtherCloneCodeBasicList: [], // 褰撳墠閫変腑鐨勫熀纭�鐮佹
+
+          /*浣跨敤鑼冨洿瀵硅瘽妗嗘樉绀烘帶鍒�*/
+          codeRangeSettingBox: false,
+          useRangeData: [],
+          dialogLoading: true,
+          /*浣跨敤鑼冨洿瀵硅瘽妗嗛厤缃�*/
+          dialogeOption: {
+            height: 'auto',
+            calcHeight: 30,
+            tip: false,
+            searchShow: false,
+            searchMenuSpan: 6,
+            border: true,
+            index: true,
+            disablePage:false,
+            viewBtn: false,
+            addBtn: false,
+            menu: false,
+            selection: false,
+            dialogClickModal: false,
+            align: 'center',
+            dialogWidth: 400,
+            column: [
+              {
+                label: "鍒嗙被缂栧彿",
+                prop: "id",
+                span: 24
+              },
+              {
+                label: "鍒嗙被鍚嶇О",
+                prop: "name",
+                span: 24,
+              }
+            ]
+          },
+
+          /*鍩虹鐮佹鐩稿叧鏁版嵁*/
+          optionBasic: optionBasic,
+          basicData:[],
+          loadingBasic: true,
+          selectionBasicList: [],
+          addBasicCodeSettingBox: false,
+          showbtn: false, //鍩虹鐮佹鏂板鏄惁鏄剧ず鍩虹鐮佹
+          basicSecDialogTitle: '', //鍩虹鐮佹绗竴灞傚璇濇鏍囬
+          basicSecOnlyRead: false, //鏂板鍩虹鐮佹琛ㄥ崟鏄惁鍙
+
+
+          /** 鐮佸�肩鐞嗙浉鍏虫暟鎹� */
+          isShowBasicSecCodeValueMgr: false, //鐮佹鐮佸�肩鐞嗗璇濇
+          codefixedsecOrCodeclassifysecOid: '', //瀛樻斁鍩虹鐮佹鐐瑰嚮鐮佸�肩鐞嗘椂鐨勫綋鍓嶈id锛岀敤浜庝繚瀛樼爜鍊兼椂浣跨敤
+          selectedFixedOrCodeclassifyValue: '', //褰撳墠閫変腑鐨勭爜鍊兼暟鎹�
+          //鍥哄畾鐮佹鐮佸�艰〃鍗�
+          codeFixdForm: {
+            codeFixedSecOid: "",
+            description: "",
+            id: "",
+          }, 
+          isShowFixedForm: true, //true鏄剧ず鍥哄畾鐮佹鐮佸�肩鐞嗙晫闈紝false鏄剧ず鍒嗙被鐮佹鐮佸�肩鐞嗙晫闈�
+          fixedValueData: [], //鍥哄畾鐮佹鐮佸�艰〃鏍兼暟鎹�
+          fixedValueOption: fixedValueOption, //琛ㄦ牸閰嶇疆
+          fixedValueOptionLoading: false,  //鍔犺浇琛ㄦ牸鐨勫姩鎬佹晥鏋�
+          fixedValueSelectList: [],  //鍥哄畾鐮佹鐮佸�煎綋鍓嶉�変腑鐨勮
+
+          //鍒嗙被鐮佹鐮佸�艰〃鍗�
+          codeClassifyForm: {
+            codeClassifySecOid: "",
+            id: "",
+            name: "",
+            oid: "",
+          },
+          classisyValueTreeOption: classisyValueTreeOption, //鍒嗙被鐮佹鏍戠浉鍏抽厤缃」
+          classifyValueTreeData: [],
+          currentSelectTreeData: '', //褰撳墠閫変腑鐨勫垎绫荤爜鍊兼爲鑺傜偣
+
+          /* 涓哄睘鎬ч�夊彇鍊肩獥鍙f樉绀烘墦寮�鎺у埗鍙橀噺 */
+          isShowSelectAttrOption: false,
+          /* 涓哄睘鎬ч�夊�煎乏渚ф爲鏁版嵁 */
+          attrClassifyTreeData: [],
+          treeOption: treeOption,
+          currentSelectTreeData: '', //褰撳墠閫変腑鐨勬爲鑺傜偣
+          /* 涓哄睘鎬ч�夊�煎彸渚ц〃鏍肩浉鍏虫暟鎹� */
+          attrOption: attrOption,
+          selectattrData: [],
+          selectAttrOptionLoading: false,
+          selectionChangeAttrList: [],
+          // 灞炴�х爜娈碉紝鍏紡缂栬緫妗嗙粍浠剁殑鏈満鏅樉绀哄彉閲忋�佷笌绯荤粺鍙橀噺
+          thisSceneTableData: [
+            {
+                formula: "${}",
+                desc: "",
+            }
+          ],
+          systemVariableTableData: [
+            {
+                formula: "#CURRENTUSER.OID#",
+                desc: "褰撳墠鐢ㄦ埛鐨勪富閿�",
+            },
+            {
+                formula: "#CURRENTUSER.ID#",
+                desc: "褰撳墠鐢ㄦ埛鐨勮处鎴�",
+            },
+            {
+                formula: "#CURRENTTIME#",
+                desc: "褰撳墠鏃堕棿",
+            },
+            {
+                formula: "#CURRENTDATE#",
+                desc: "褰撳墠鏃ユ湡",
+            },
+            {
+                formula: "#CURRENTDATETIME#",
+                desc: "褰撳墠鏃ユ湡鏃堕棿",
+            },
+            {
+                formula: "#CURRENTUSER_NAME#",
+                desc: "褰撳墠鐢ㄦ埛鐨勫鍚�",
+            },
+            {
+                formula: "#CURRENTUSER.SECRETGRADE#",
+                desc: "褰撳墠鐢ㄦ埛瀵嗙骇",
+            },
+            {
+                formula: "#CURRENTUSER.IPSECRET#",
+                desc: "褰撳墠鐢ㄦ埛鐨処P瀵嗙骇",
+            },
+            {
+                formula: "#CURRENTUSER.BUSINESSUNIT#",
+                desc: "褰撳墠鐢ㄦ埛鎵�灞炰笟鍔″崟鍏�",
+            },
+            {
+                formula: "#CURRENTUSER.BUSINESSUNITNAME#",
+                desc: "褰撳墠鐢ㄦ埛鎵�灞炰笟鍔″崟鍏冨悕绉�",
+            },
+            {
+                formula: "#CURRENTUSER.GROUPOID#",
+                desc: "褰撳墠鐢ㄦ埛鐨勯儴闂ㄤ富閿�",
+            },
+            {
+                formula: "#CURRENTUSER.GROUPNAME#",
+                desc: "褰撳墠鐢ㄦ埛鎵�灞為儴闂ㄥ悕绉�",
+            },
+            {
+                formula: "#CURRENTUSER.EMAIL#",
+                desc: "褰撳墠鐢ㄦ埛閭欢鍦板潃",
+            },
+            {
+                formula: "#CURRENTUSER.ROLENAME#",
+                desc: "褰撳墠鐢ㄦ埛鎵�灞炶鑹插悕绉�",
+            },
+          ],
+
+          /* 鐖跺垎绫荤爜娈靛璇濇 */
+          isShowParentClassifyOption: false, //鐖跺垎绫荤爜娈靛璇濇鏄剧ず鎺у埗
+          classifyDialogLoading: true, //琛ㄦ牸鏁版嵁鍔犺浇鎻愮ず
+          parentClassifyParentOption: parentClassifyParentOption,  //琛ㄦ牸閰嶇疆
+          parentClassifyData: [], //琛ㄦ牸鏁版嵁
+          //鍒嗛〉鍙傛暟閰嶇疆
+          parentClassifyDataPage: {
+            pageSize: 10,
+            currentPage: 1,
+            total: 0
+          },
+          parentClassifyQuery: {}, //鏌ヨ鏉′欢
+          parentClassifySelectionList: [], //褰撳墠閫変腑琛�
+
+          
+          /** 鍙傜収寮曠敤鐨勪笟鍔$被鍨嬪璇濇鐩稿叧鏁版嵁 */
+          isShowSelectReferBtmOption: false,   //瀵硅瘽妗嗘樉绀烘帶鍒�
+          referBtmDialogLoading: true,   //琛ㄦ牸鏁版嵁鍔犺浇鎻愮ず
+          referBtmDataPage: {
+            pageSize: 10,
+            currentPage: 1,
+            total: 0
+          },
+          referBtmOption: referBtmOption, //琛ㄦ牸閰嶇疆
+          referBtmData: [], //琛ㄦ牸鏁版嵁
+          referBtmQuery: {}, //鏌ヨ鏉′欢
+          referBtmSelectionList: [], //褰撳墠閫変腑琛�
+
+          /** 鍩虹鐮佹鏂板琛ㄥ崟 */
+          form: {
+            id: '', //缂栧彿
+            name: '', //鍚嶇О
+            secType: 'codefixedsec', //鐮佹绫诲瀷
+            description: '', //鎻忚堪
+            serialDependFlag: false, //鏄惁娴佹按渚濊禆
+            serialDependOrder: '', //娴佹按渚濊禆椤哄簭
+            nullableFlag: false, //鏄惁涓虹┖
+            displayFlag: false, //
+            componentCodeFlag: false, //鏄惁鍙備笌缂栫爜
+            pkCodeRule: '', //鎵�灞炵紪鐮佽鍒�
+          },
+          // formRules: {
+          //   id: [
+          //     { required: true, message: '璇疯緭鍏ョ爜娈电紪鍙�', trigger: 'blur' },
+          //   ],
+          //   name: [
+          //     { required: true, message: '璇疯緭鍏ョ爜娈靛悕绉�', trigger: 'blur' },
+          //   ],
+          //   secType: [
+          //     { required: true, message: '璇烽�変腑鐮佹绫诲瀷', trigger: 'change' },
+          //   ],
+          //   codeSecLengthType: [
+          //     { required: true, message: '璇烽�夋嫨鐮佹闀垮害绫诲瀷', trigger: 'change' },
+          //   ],
+          //   codeSecLength: [
+          //     { required: true, message: '璇疯緭鍏ョ爜娈电殑闀垮害', trigger: ['blur', 'change']},
+          //     { type: 'number', message: '鐮佹鐨勯暱搴﹀繀椤讳负鏁板瓧鍊�',trigger: ['blur', 'change']}
+          //   ],
+          //   referAttributeName: [
+          //     { required: true, message: '璇烽�夋嫨灞炴��', trigger: 'change' },
+          //   ],
+          //   serialStart: [
+          //     { type: 'number', message: '娴佹按鍙风殑璧峰鍊煎繀椤讳负鏁板瓧鍊�',trigger: ['blur', 'change']}
+          //   ],
+          //   serialStep: [
+          //     { type: 'number', message: '娴佹按鐨勬闀垮繀椤讳负鏁板瓧鍊�',trigger: ['blur', 'change']}
+          //   ],
+          //   codeFillType: [
+          //     { required: true, message: '璇烽�夋嫨缂栫爜琛ヤ綅鏂瑰紡', trigger: ['blur', 'change']},
+          //   ],
+          //   // 璁剧疆琛ヤ綅鏃剁殑瀛楃锛岄渶瑕佽嚜瀹氫箟鏉ュ仛鍒ゆ柇
+          //   codeFillSeparatorSelect: [
+          //     { validator: validateCodeFill, trigger: ['blur', 'change'] },
+          //   ],
+          //   codeFillLength: [
+          //     { required: true, message: '璇疯緭鍏ュ~鍏呴暱搴�', trigger: ['blur', 'change'] },
+          //     { type: 'number', message: '濉厖闀垮害蹇呴』涓烘暟瀛楀��',trigger: ['blur', 'change']}
+          //   ],
+          //   codeFillLimit: [
+          //     { required: true, message: '璇疯緭鍏ユ祦姘翠笂闄�', trigger: ['blur', 'change'] },
+          //     { type: 'number', message: '娴佹按涓婇檺蹇呴』涓烘暟瀛楀��',trigger: ['blur', 'change']}
+          //   ],
+          //   codeLevelType: [
+          //     { required: true, message: '璇烽�夋嫨灞傜骇绫诲瀷', trigger: 'change' },
+          //   ],
+          //   codeLevelValue: [
+          //     { required: false, type: 'number', message: '灞傜骇鐨勫�煎繀椤讳负鏁板瓧鍊�', trigger: 'change'}
+          //   ],
+          //   valueCutType: [
+          //     { required: true, message: '璇烽�夋嫨瀛楃鎴彇绫诲瀷', trigger: 'change' },
+          //   ],
+          //   referBtmId: [
+          //     { required: true, message: '璇烽�夋嫨鍙傜収搴旂敤鐨勪笟鍔$被鍨�', trigger: 'change' },
+          //   ],
+          //   referConfig: [
+          //     { required: true, message: '璇烽�夋嫨鍙傜収閰嶇疆', trigger: 'change' },
+          //   ],
+          //   codeDateFormatStr: [
+          //     { required: true, message: '璇疯緭鍏ユ棩鏈熸牸寮�', trigger: ['blur', 'change'] },
+          //   ],
+
+          // },
+          //鏋氫妇鍜屽彲杈撳彲閫夋煡璇�
+          sectypeList:[],    //鐮佹绫诲瀷
+          codeSecLengthType:[],  //鐮佹闀垮害绫诲瀷
+          codeFillType:[],   //缂栫爜琛ヤ綅鏂瑰紡
+          codeFillSeparator:[], //琛ヤ綅鏃剁殑瀛楃锛屽彲杈撳彲閫夊唴瀹�
+          codeLevelType:[],     //灞傜骇绫诲瀷
+          codeCutType:[],       //瀛楃鎴彇绫诲瀷
+          codeGetValueType:[],  //鍙栧�肩被鍨�
+
+          //琛ㄥ崟鍏冪礌鏍囩瀹藉害
+          leftFormLabelWidth: '110px',
+          rightFormLabelWidth: '150px',
+
         };
       },
-    },
-    methods: {
-      
-      // 鎵撳紑鍏紡缂栬緫妗嗭紝绗簩灞傚祵濂楀璇濇
-      openformulaEdit(){
-        this.isShowformulaEdit = true;
+      computed: {
+        ...mapGetters(["permission"]),
+        permissionList() {
+          return {
+            addBtn: this.vaildData(this.permission.codeRule_add, true),
+            viewBtn: this.vaildData(this.permission.codeRule_view, false),
+            delBtn: this.vaildData(this.permission.plCodeRule_delete, false),
+            editBtn: this.vaildData(this.permission.codeRule_edit, true)
+          };
+        },
       },
+      methods: {
 
-      //鍙屽嚮娣诲姞鍏紡鍐呭
-      dbClickAddContent(row){
-        //console.log(row.formula);
-        this.formulaContent = this.formulaContent + row.formula;
-      },
-
-      //娓呯┖鍏紡鍐呭
-      resetformulaContent(){
-        this.formulaContent = '';
-      },
-
-      //鍏抽棴鏃舵竻绌轰笂娆″叕寮忓唴瀹�
-      closeFormulaEdit(){
-        this.resetformulaContent();
-      },
-
-      //缂栬緫瀹屾垚鍏紡鍐呭鍥炶皟鍒板瓙缁勪欢杩涜鍥炴樉
-      saveFormulaContent(){
-        console.log(this.formulaContent);
-        if(this.formulaContent.trim == null){
-          this.$message.warning("鍏紡鍐呭涓嶈兘涓虹┖锛�");
-          return;
-        }
-        this.$refs.addBasicChild.saveFormulaContent(this.formulaContent);
-        this.isShowformulaEdit = false;  
-      },
-
-      // 鎵撳紑灞炴�ч�夊彇鍊硷紝绗簩灞傚祵濂楀璇濇
-      openAttrSelectOrGetValue(){
-        //console.log(111);
-        this.isShowSelectAttrOption = true;
-      },
-      
-      // 鑾峰彇褰撳墠琚�変腑鏍戣妭鐐圭殑oid
-      nodeClick(data) {
-        this.currentSelectTreeData = data;
-        this.loadlistClassifyLinkAttr()
-      },
-
-      // 鍔犺浇鍒嗙被杩炴帴灞炴�ц〃鏍兼暟鎹�
-      loadlistClassifyLinkAttr(){
-        this.selectAttrOptionLoading = true;
-        listClassifyLinkAttr({"page": 1,"limit": -1,'conditionMap[codeClassifyOid]':this.currentSelectTreeData.oid}).then(res=>{
-         //console.log(res.data.data);
-         //閫犲亣鏁版嵁
-         let dataInfo =[ 
-          {"id":"address","name":"浼氳瀹ゅ湴鍧�","oid":"058D840D-1010-A7DE-7C52-B39C03CE89C1","attrLength":"150","description":"","attributeDataTypeText":"瀛楃涓�"},
-          {"id":"businesslicensetype","name":"钀ヤ笟鎵х収绫诲瀷","oid":"BDAC6D3E-1827-35A0-F3CA-0E58A43F6A07","attrLength":"255","description":"钀ヤ笟鎵х収绫诲瀷","attributeDataTypeText":"瀛楃涓�"},
-          {"id":"certificatenumber","name":"淇濆瘑璇佺紪鍙�","oid":"E2BC8332-A721-3713-26C3-C9F6340C2C1D","attrLength":"255","description":"淇濆瘑璇佺紪鍙�","attributeDataTypeText":"瀛楃涓�"},
-        ]
-        this.selectattrData = dataInfo;
-        this.selectAttrOptionLoading = false;
-        })
-      },
-
-      // 鐐瑰嚮鎼滅储鍚庤Е鍙戣浜嬩欢
-      selectAttrOptionSearchChange(params, done) {
-        this.query = params;
-        console.log(params);  //杩欏効闇�瑕佹敼
-        this.loadlistClassifyLinkAttr({"page":1,"limit":-1 ,'conditionMap[codeClassifyOid]':this.currentSelectTreeData.oid});
-        done();
-      },
-
-      // 灞炴�у彇鍊煎綋鍓嶉�変腑琛屽彂鐢熷彉鍖栨椂瑙﹀彂
-      selectionChangeAttr(list){
-        this.selectionChangeAttrList = list;
-      },
-
-      //閲嶇疆浣嶅睘鎬ч�夊彇鍊艰〃鏍肩殑鎼滅储妗嗕箣鍚庣殑鍥炶皟
-      searchAttrReset() {
-        this.loadlistClassifyLinkAttr()
-      },
-
-      // 灞炴�у彇鍊奸�夊彇鎴愬姛淇濆瓨涔嬪悗瑙﹀彂
-      savelistClassifyLinkAttr(){
-        if(this.selectionChangeAttrList.length != 1){
-          this.$message.warning("鍙兘閫夋嫨涓�鏉℃暟鎹�!");
-          return false;
-        }
-        let data = {
-          "referAttributeId":this.selectionChangeAttrList[0].id,
-          "referAttributeName":this.selectionChangeAttrList[0].name,
-          "referCodeClassifyOid": this.currentSelectTreeData.key,
-          "referCodeClassifyOidName": this.currentSelectTreeData.title,
-        }
-        //console.log(data);
-        //璋冪敤瀛愮粍浠跺苟浼犻�掑綋鍓嶉�変腑鐨勫弬鏁板�硷紝瀹炵幇鍥炴樉
-        this.$refs.addBasicChild.selectedListClassifyLinkAttr(data);
-        this.isShowSelectAttrOption = false;
-      },
-
-      // 缂栫爜瑙勫垯褰撳墠閫変腑琛屽彉鍖栫殑鏃跺�欒Е鍙�
-      selectionChange(list) {
-        this.selectionList = list;
-        if(this.selectionList.length > 0){
-          this.currentCodeRuleOid = this.selectionList [list.length-1];
-          this.loadBasic(this.selectionList[list.length-1]);
-        }
-      },
-
-      // 鎵撳紑鏂板绐楀彛
-      addBasicCodeSec(){
-        if(!this.tipsMessage(this.selectionList)){
-          return;
-        }
-        if(this.selectionList[0].lcStatus != 'Editing'){
-          this.$message.warning('缂栫爜瑙勫垯鐘舵�佷笉鏄�"缂栬緫涓�"锛屼笉鍏佽缂栬緫鐮佹!');
-          return;
-        }
-        this.addBasicCodeSettingBox = true;
-        this.$nextTick(() => {
-          this.$refs.addBasicChild.loadCodeSecType();
-        })
-      },
-      // 鏂板鍩虹鐮佹
-      saveBasicCode(){
-        if(this.selectionList[0].oid == null){
-          this.$message.warning('缂哄け蹇呰鍙傛暟锛岃閲嶆柊閫夋嫨缂栫爜瑙勫垯鍚庨噸璇�!');
-          return;
-        }
-        this.$refs.addBasicChild.addSave(this.selectionList[0].oid);
-        // 鍏抽棴绐楀彛
-        this.addBasicCodeSettingBox = false
-        // 鐐瑰嚮鏂板鍩虹鐮佹涔嬪悗鍏抽棴绐楀彛涔嬪悗瑙﹀彂閲嶆柊鍔犺浇
-        this.loadBasic(this.selectionList[0]);
-      },
-      // 鍒ゆ柇鏁版嵁鏄惁閫夋嫨浠ュ強鍙兘閫夋嫨鍗曟潯鏁版嵁
-      tipsMessage(list){
-        if(list.length != 1){
-          this.$message.warning("璇烽�夋嫨涓�鏉$紪鐮佽鍒欐暟鎹�!");
-          return false;
-        }
-        return true;
-      },
-      // 鍩虹鐮佹鍒犻櫎
-      deleteBasicCode(){
-        if(!this.tipsMessage(this.selectionBasicList)){
-          return;
-        }
-        let oid = this.selectionBasicList[0].oid;
-        this.$confirm("鏄惁鍒犻櫎杩欐潯鏁版嵁锛熷鏋滆寮曠敤灏嗕笉鑳借鍒犻櫎锛�", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        })
-        .then(() => {
-          let ts = this.selectionBasicList[0].ts;
-          return deleteData({"oid": oid,"ts": ts});
-        })
-        .then(() => {
-          this.loadBasic({"oid":this.currentCodeRuleOid == null ? this.selectionList[0].oid:this.currentCodeRuleOid});
-          this.$message({
-            type: "success",
-            message: "鎿嶄綔鎴愬姛!"
-          });
-          //this.$refs.crud.toggleSelection();
-        });
-      },
-      // 鐐瑰嚮瑙﹀彂鍔犺浇鍩虹鐮佹淇℃伅
-      loadBasic(row){
-        this.loadingBasic = true;
-        //console.log(row.oid);
-        this.currentCodeRuleOid = row.oid;
-        gridCodeBasicSec(1, -1, {"pkCodeRule":row.oid}).then(res => {
-          const data = res.data.data;
-          this.basicData = data.records;
-          //console.log(this.basicData);
-          this.loadingBasic = false;
-        });
-      },
-      // 鍩虹鐮佹閫変腑鏃惰Е鍙�
-      selectionBasicChange(list) {
-        this.selectionBasicList = list;
-        //console.log(this.selectionBasicList);
-      },
-      // 涓婄Щ涓嬬Щ鍩虹鐮佹
-      upOrderNum(row){
-        //console.log(row.oid);
-        if(!this.tipsMessage(this.selectionList)){
-          return;
-        }
-        let codeRuleOid = this.selectionList[0].oid;
-        if (this.selectionList[0].lcStatus != 'Editing') {
-          this.$message.warning("鍙湁缂栫爜瑙勫垯鐨勭姸鎬佹槸 [缂栬緫涓璢 鐨勬椂鍊欙紝鎵嶈兘璋冩暣鐮佹椤哄簭!");
-          return; 
-        }
-        if(row.oid==null || row.oid==''){
-          this.$message.warning("鏈幏鍙栧埌蹇呭~鍙傛暟!");
-          return;        
-        }
-        upOrderNum(row.oid).then(() => {
-          this.loadBasic({"oid":codeRuleOid});
-          this.$message({
-            type: "success",
-            message: "鎿嶄綔鎴愬姛!"
-          });
-        })
-      },
-      downOrderNum(row){
-        //console.log(row.oid);
-        if(!this.tipsMessage(this.selectionList)){
-          return;
-        }
-        let codeRuleOid = this.selectionList[0].oid;
-        //console.log(this.selectionList);
-        if (this.selectionList[0].lcStatus != 'Editing') {
-          this.$message.warning("鍙湁缂栫爜瑙勫垯鐨勭姸鎬佹槸 [缂栬緫涓璢 鐨勬椂鍊欙紝鎵嶈兘璋冩暣鐮佹椤哄簭!");
-          return; 
-        }
-        if(row.oid==null || row.oid==''){
-          this.$message.warning("鏈幏鍙栧埌蹇呭~鍙傛暟!");
-          return;        
-        }
-        downOrderNum(row.oid).then(() => {
-          this.loadBasic({"oid":codeRuleOid});
-          this.$message({
-            type: "success",
-            message: "鎿嶄綔鎴愬姛!"
-          });
-        })
-      },
-      //鍩虹鐮佹鏌ヨ
-      refreshChangeBasicSec(){
-        this.loadBasic({"oid":this.currentCodeRuleOid == null ? this.selectionList[0].oid:this.currentCodeRuleOid});
-      },
-      // 鏌ヨ浣跨敤鑼冨洿
-      handleRange(){
-        if(!this.tipsMessage(this.selectionList)){
-          return;
-        }
-        this.codeRangeSettingBox = true;
-        this.getRangeCodeList()
-      },
-      getRangeCodeList(){        
-        this.dialogLoading = true;
-        if(this.selectionList[0].oid==null){
-          this.$message.error("鏈幏鍙栧埌鍙傛暟!");
-        }
-
-        listUseRange(this.selectionList[0].oid).then(res => {
-          this.useRangeData = res.data.data;
-          //console.log(this.useRangeData);
-          this.dialogLoading = false;
-        });
-      },
-      refreshUseRangeChange(){
-        this.getRangeCodeList();
-      },
-      // 鍚敤涓庡仠鐢�
-      enableOrDeactivatse(oId,update){
-        updateStatus({"oid":oId,"ts":new Date().getTime,"update":update}).then(() => {
-          this.onLoad(this.page);
-          this.$message({
-            type: "success",
-            message: "鎿嶄綔鎴愬姛!"
-          });
-        }, error => {
-          window.console.log(error);
-        });
-      },
-      // 鍏嬮殕
-      cloneCodeSetting() {
-        if (this.selectionList.length === 0) {
-          this.$message.warning("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�!");
-          return;
-        }
-        if (this.selectionList.length > 1) {
-          this.$message.warning("姣忔鍙兘閫夋嫨涓�鏉℃暟鎹�!");
-          return;
-        }
-        localStorage.setItem("cloneOid",this.selectionList[0].oid)
-        this.cloneSettingBox = true;
-      },
-      // 娣诲姞
-      rowSave(row, done, loading) {
-        add(row).then(() => {
-          this.onLoad(this.page);
-          this.$message({
-            type: "success",
-            message: "鎿嶄綔鎴愬姛!"
-          });
+        /* 鍏紡缂栬緫妗嗗唴瀹规敼鍙�,瀛愮粍浠剁紪杈戝畬鍏紡涔嬪悗鍐呭鍥炴樉鏃惰皟鐢� */
+        updateFormulaContent(content){
+          this.form.getValueClass = content;
+        },
+        
+        /** 閫変腑鍙傜収寮曠敤鐨勪笟鍔$被鍨嬶紝绗簩灞傚祵濂楀璇濇锛屽強鍏剁浉鍏虫柟娉�  */
+        saveSelectedreferBtm(){
+          if(this.referBtmSelectionList.length != 1){
+            this.$message.warning("鍙兘閫夋嫨涓�鏉℃暟鎹�!");
+            return false;
+          }
+          //璋冪敤瀛愮粍浠跺苟浼犻�掑綋鍓嶉�変腑鐨勫弬鏁板�硷紝瀹炵幇鍥炴樉
+          this.form.referBtmId = this.referBtmSelectionList[0].id;
+          this.form.referBtmName = this.referBtmSelectionList[0].name;
+          //娓呯┖褰撳墠閫変腑鐨勮
+          this.referBtmSelectionClear();
+          this.isShowSelectReferBtmOption = false;
+        },
+        referBtmSearchReset() {
+          this.referBtmQuery = {};
+          this.referBtmOnLoad(this.referBtmDataPage);
+        },
+        referBtmSearchChange(params, done) {
+          this.referBtmQuery = params;
+          this.referBtmDataPage.currentPage = 1;
+          this.referBtmOnLoad(this.page, params);
           done();
-        }, error => {
-          loading();
-          window.console.log(error);
-        });
-      },
-      openEdit(row){
-        this.$refs.crud.rowEdit(row,row.$index);
-      },
-      // 淇敼
-      rowUpdate(row, index, done, loading) {
-        row.ts = new Date().getTime;
-        update(row).then(() => {
-          this.onLoad(this.page);
-          this.$message({
-            type: "success",
-            message: "鎿嶄綔鎴愬姛!"
+        },
+        referBtmSelectionChange(list) {
+          //console.log(list);
+          this.referBtmSelectionList = list;
+        },
+        referBtmSelectionClear() {
+          this.referBtmSelectionList = [];
+          this.$refs.crudReferBtm.toggleSelection();
+        },
+        referBtmCurrentChange(currentPage){
+          this.referBtmDataPage.currentPage = currentPage;
+        },
+        referBtmSizeChange(pageSize){
+          this.referBtmDataPage.pageSize = pageSize;
+        },
+        refreshReferBtmDataChange() {
+          this.referBtmOnLoad(this.referBtmDataPage, this.referBtmQuery);
+        },
+        //鍔犺浇涓弬鐓у紩鐢ㄧ殑涓氬姟绫诲瀷鐨勬暟鎹�
+        referBtmOnLoad(page, params = {}) {
+          this.referBtmDialogLoading = true;
+          let oid = this.selectionList.length==0 ?  this.form.pkCodeRule:this.selectionList[0].oid;
+          Object.assign(params,{pkCodeRule:oid})
+          //鎺ュ彛杩樻湭鎻愪緵锛屽緟鏇存敼
+          refDataGridClassifySec(page.currentPage, page.pageSize, Object.assign(params, this.parentClassifyQuery)).then(res => {
+            //console.log(res.data);
+            const data = res.data.data;
+            this.referBtmDataPage.total = data.total;
+            this.referBtmData = data.records;
+            this.referBtmDialogLoading = false;
+            this.referBtmSelectionClear();
           });
+        },
+
+
+        /** 鐖跺垎绫婚�夋嫨瀵硅瘽妗嗭紝绗簩灞傚祵濂楀璇濇锛屽強鍏剁浉鍏虫柟娉� */ 
+        // 淇濆瓨褰撳墠鐖跺垎绫荤爜娈电殑閫変腑琛岋紝骞惰繘琛屽洖鏄�
+        saveSelectedParentClassify(){
+          //console.log(this.parentClassifySelectionList.length);
+          if(this.parentClassifySelectionList.length != 1){
+            this.$message.warning("鍙兘閫夋嫨涓�鏉℃暟鎹�!");
+            return false;
+          }
+          //璋冪敤瀛愮粍浠跺苟浼犻�掑綋鍓嶉�変腑鐨勫弬鏁板�硷紝瀹炵幇鍥炴樉
+          this.form.parentClassifySecOid = this.parentClassifySelectionList[0].oid;
+          this.form.parentClassifySecText = this.parentClassifySelectionList[0].name;
+          //娓呯┖褰撳墠閫変腑鐨勮
+          this.parentClassifySelectionClear();
+          this.isShowParentClassifyOption = false;
+        },
+        parentClassifySearchReset() {
+          this.parentClassifyQuery = {};
+          this.parentClassifyOnLoad(this.parentClassifyDataPage);
+        },
+        parentClassifySearchChange(params, done) {
+          this.parentClassifyQuery = params;
+          this.parentClassifyDataPage.currentPage = 1;
+          this.parentClassifyOnLoad(this.page, params);
           done();
-        }, error => {
-          loading();
-          console.log(error);
-        });
-      },
-      // 鍒犻櫎
-      handleDelete() {
-        if(!this.tipsMessage(this.selectionList)){
-          return;
-        }
-        this.$confirm("纭畾灏嗛�夋嫨鏁版嵁鍒犻櫎?", {
-          confirmButtonText: "纭畾",
-          cancelButtonText: "鍙栨秷",
-          type: "warning"
-        })
-          .then(() => {
-            // 鍙敮鎸佹瘡娆″崟鏉¤褰曞垹闄�
-            let oid = this.selectionList[0].oid;
-            let ts = this.selectionList[0].ts;
-            return remove({oid: oid,ts: ts});
+        },
+        parentClassifySelectionChange(list) {
+          //console.log(this.parentClassifyCurrentChange);
+          this.parentClassifySelectionList = list;
+        },
+        parentClassifySelectionClear() {
+          this.parentClassifySelectionList = [];
+          this.$refs.crudParentClassify.toggleSelection();
+        },
+        parentClassifyCurrentChange(currentPage){
+          this.parentClassifyDataPage.currentPage = currentPage;
+        },
+        parentClassifySizeChange(pageSize){
+          this.parentClassifyDataPage.pageSize = pageSize;
+        },
+        refreshParentClassifyDataChange() {
+          this.parentClassifyOnLoad(this.parentClassifyDataPage, this.parentClassifyQuery);
+        },
+        parentClassifyOnLoad(page, params = {}) {
+          this.classifyDialogLoading = true;
+          let oid = this.selectionList.length==0 ? this.form.pkCodeRule:this.selectionList[0].oid;
+          Object.assign(params,{pkCodeRule:oid})
+          refDataGridClassifySec(page.currentPage, page.pageSize, Object.assign(params, this.parentClassifyQuery)).then(res => {
+            //console.log(res.data);
+            const data = res.data.data;
+            this.parentClassifyDataPage.total = data.total;
+            this.parentClassifyData = data.records;
+            this.classifyDialogLoading = false;
+            this.parentClassifySelectionClear();
+          });
+        },
+        
+
+        /** 鎵撳紑灞炴�ч�夊彇鍊硷紝绗簩灞傚祵濂楀璇濇锛屽強鍏剁浉鍏虫柟娉� */ 
+        // 鑾峰彇褰撳墠琚�変腑鏍戣妭鐐圭殑oid
+        nodeClick(data) {
+          this.currentSelectTreeData = data;
+          this.loadlistClassifyLinkAttr()
+        },
+        // 鍔犺浇鍒嗙被杩炴帴灞炴�ц〃鏍兼暟鎹�
+        loadlistClassifyLinkAttr(){
+          this.selectAttrOptionLoading = true;
+          listClassifyLinkAttr({"page": 1,"limit": -1,'conditionMap[codeClassifyOid]':this.currentSelectTreeData.oid}).then(res=>{
+          //console.log(res.data.data);
+          //閫犲亣鏁版嵁
+          let dataInfo =[ 
+            {"id":"address","name":"浼氳瀹ゅ湴鍧�","oid":"058D840D-1010-A7DE-7C52-B39C03CE89C1","attrLength":"150","description":"","attributeDataTypeText":"瀛楃涓�"},
+            {"id":"businesslicensetype","name":"钀ヤ笟鎵х収绫诲瀷","oid":"BDAC6D3E-1827-35A0-F3CA-0E58A43F6A07","attrLength":"255","description":"钀ヤ笟鎵х収绫诲瀷","attributeDataTypeText":"瀛楃涓�"},
+            {"id":"certificatenumber","name":"淇濆瘑璇佺紪鍙�","oid":"E2BC8332-A721-3713-26C3-C9F6340C2C1D","attrLength":"255","description":"淇濆瘑璇佺紪鍙�","attributeDataTypeText":"瀛楃涓�"},
+          ]
+          this.selectattrData = dataInfo;
+          this.selectAttrOptionLoading = false;
+          })
+        },
+        // 鐐瑰嚮鎼滅储鍚庤Е鍙戣浜嬩欢
+        selectAttrOptionSearchChange(params, done) {
+          this.query = params;
+          console.log(params);  //杩欏効闇�瑕佹敼
+          this.loadlistClassifyLinkAttr({"page":1,"limit":-1 ,'conditionMap[codeClassifyOid]':this.currentSelectTreeData.oid});
+          done();
+        },
+        // 灞炴�у彇鍊煎綋鍓嶉�変腑琛屽彂鐢熷彉鍖栨椂瑙﹀彂
+        selectionChangeAttr(list){
+          this.selectionChangeAttrList = list;
+        },
+        // 閲嶇疆浣嶅睘鎬ч�夊彇鍊艰〃鏍肩殑鎼滅储妗嗕箣鍚庣殑鍥炶皟
+        searchAttrReset() {
+          this.loadlistClassifyLinkAttr()
+        },
+        // 涓哄睘鎬ч�夊彇鍊间箣鍚庣殑鍥炴樉
+        selectedListClassifyLinkAttr(){
+          if(this.selectionChangeAttrList.length != 1){
+            this.$message.warning("鍙兘閫夋嫨涓�鏉℃暟鎹�!");
+            return false;
+          }
+          //璋冪敤瀛愮粍浠跺苟浼犻�掑綋鍓嶉�変腑鐨勫弬鏁板�硷紝瀹炵幇鍥炴樉
+          this.form = Object.assign({}, this.form, {
+            referAttributeId:this.selectionChangeAttrList[0].id,
+            referAttributeName:this.selectionChangeAttrList[0].name,
+            referCodeClassifyOid: this.currentSelectTreeData.key,
+            referCodeClassifyOidName: this.currentSelectTreeData.title,
+          })
+          this.isShowSelectAttrOption = false;
+        },
+        
+
+        /** 鍩虹鐮佹琛ㄤ腑鐨勭爜鍊肩鐞嗙殑鐩稿叧鏂规硶 */
+        // 鐮佸�肩鐞嗗脊绐楁帶鍒�
+        openBasicSecCodeValueMgr(row){
+          //褰撳墠涓哄浐瀹氱爜娈电爜鍊肩鐞嗙爜鍊肩鐞�
+          if(row.secType === "codefixedsec"){
+            this.isShowFixedForm = true;
+            this.loadFixedValueTableData(row);
+          }else{
+            //鍒嗙被鐮佹
+            this.isShowFixedForm = false;
+            this.loadClassifyValueData(row);
+          }
+          this.codefixedsecOrCodeclassifysecOid = row.oid;
+          this.isShowBasicSecCodeValueMgr = true;
+        },
+        //鍔犺浇鍥哄畾鐮佹鐮佸�艰〃鏁版嵁
+        loadFixedValueTableData(row){
+          this.fixedValueOptionLoading = true;
+          gridCodeFixedValue(1, -1, {"codeFixedSecOid":row.oid}).then(res=>{
+            this.fixedValueData = res.data.data.records;
+            //console.log(this.fixedValueData);
+            this.fixedValueOptionLoading = false;
+          })
+        },
+        //鍗曞嚮鍥哄畾鐮佹鐨勭爜鍊艰〃涓鏃惰Е鍙戠殑浜嬩欢
+        selectedCodeValueRow(row){
+          //console.log(row);
+          this.selectedFixedOrCodeclassifyValue = row;
+          this.codeFixdForm.id = row.id;
+          this.codeFixdForm.description = row.description;
+          this.codeFixdForm.codeFixedSecOid = row.codefixedsecoid;
+        },
+        //鏂板鐮佸��
+        addCodeSecValue(condition){
+          if(condition === "codefixedsec"){
+            if(this.codeFixdForm.id.trim() == ''){
+              this.$message.warning("鐮佸�间笉鑳戒负绌猴紒");
+              return;
+            }
+            if(this.codeFixdForm.id.trim().length >= 12 ){
+              this.$message.warning("鐮佸�奸暱搴︿笉鑳藉ぇ浜�12锛�");
+              return;
+            }
+            this.codeFixdForm.codeFixedSecOid = this.codefixedsecOrCodeclassifysecOid;
+            addSaveCodeFixedValue(this.codeFixdForm).then(() => {
+              this.loadFixedValueTableData({"oid":this.codefixedsecOrCodeclassifysecOid});
+              this.clearFixedOrClassifyForm('codefixedsec');
+              this.$message({
+                type: "success",
+                message: "鎿嶄綔鎴愬姛!"
+              });
+            }, error => {
+              window.console.log(error);
+            });
+          }else {
+            this.codeClassifyForm.codeClassifySecOid = this.codefixedsecOrCodeclassifysecOid;
+            console.log(this.codeClassifyForm);
+            addSaveCodeClassifyValue(this.codeClassifyForm).then(() => {
+              this.loadClassifyValueData({"oid":this.codefixedsecOrCodeclassifysecOid});
+              this.clearFixedOrClassifyForm('codeclassifyvaluesec');
+              this.$message({
+                type: "success",
+                message: "鎿嶄綔鎴愬姛!"
+              });
+            }, error => {
+              this.$confirm(error, {
+                confirmButtonText: "纭畾",
+                type: "error",
+              })
+            });
+          }
+        },
+        //娓呯┖鐮佸�艰〃鍗�
+        clearFixedOrClassifyForm(condition){
+          //鐐瑰嚮鍙栨秷鏃舵竻绌鸿〃鍗曚笌褰撳墠閫変腑鐨勭爜鍊硷紝骞剁鐢ㄦ寜閽�
+          this.selectedFixedOrCodeclassifyValue = '';
+          //console.log(condition);
+          if(condition === "close"){
+            this.codeFixdForm = this.$options.data().codeFixdForm;
+            this.codeClassifyForm = this.$options.data().codeClassifyForm;
+          }
+          if(condition === "codefixedsec"){
+            this.codeFixdForm.description = '';
+            this.codeFixdForm.codeFixedSecOid = '';
+          }else {
+            this.codeClassifyForm = this.$options.data().codeClassifyForm;
+          }
+        },
+        //淇敼鐮佸��
+        editCodeSecValue(condition){
+          if(condition=='codefixedsec'){
+            //浠ュ墠鏄洿鎺ユ妸褰撳墠閫変腑琛岀殑鎵�鏈夋暟鎹兘杩涜鎻愪氦锛屼絾鍏跺疄鍙渶瑕佷紶杈撲竴浜涙瘮瑕佸弬鏁板嵆鍙紝杩欏効鍋氫簡淇敼锛岄渶瑕佺┛鍏朵粬鍙傛暟鐨勮鑷娣诲姞
+            let editData = {
+            "oid": this.selectedFixedOrCodeclassifyValue.oid,
+            "ts": new Date().getTime(),
+            "description": this.codeFixdForm.description,
+            "id": this.codeFixdForm.id,
+            "codeFixedSecOid":  this.selectedFixedOrCodeclassifyValue.codefixedsecoid
+            }
+            editCodeFixedValue(editData).then(() => {
+                this.loadFixedValueTableData({"oid":this.codefixedsecOrCodeclassifysecOid})
+                this.$message({
+                  type: "success",
+                  message: "鎿嶄綔鎴愬姛!"
+                });
+              }, error => {
+                window.console.log(error);
+            });
+          }else {
+            this.codeClassifyForm.oid = this.selectedFixedOrCodeclassifyValue.attributes.oid;
+            editCodeClassifyValue(this.codeClassifyForm).then(() => {
+                this.loadClassifyValueData({"oid":this.codefixedsecOrCodeclassifysecOid})
+                this.$message({
+                  type: "success",
+                  message: "鎿嶄綔鎴愬姛!"
+                });
+              }, error => {
+                window.console.log(error);
+            });
+          }
+            
+        },
+        //鍒犻櫎鐮佸��
+        delCodeSecValue(condition){ 
+          //鍥哄畾鐮佹鐮佸�煎垹闄�
+          if(condition == 'codefixedsec'){
+            //console.log(this.selectedFixedOrCodeclassifyValue.oid);
+            this.$confirm("鏄惁鍒犻櫎杩欐潯鏁版嵁锛熷鏋滆寮曠敤灏嗕笉鑳借鍒犻櫎锛�", {
+            confirmButtonText: "纭畾",
+            cancelButtonText: "鍙栨秷",
+            type: "warning"
+            })
+            .then(() => {
+              let ts = new Date(this.selectedFixedOrCodeclassifyValue.ts).getTime();
+              return deleteCodeFixedValue({"oid": this.selectedFixedOrCodeclassifyValue.oid,"ts": ts});
+            })
+            .then(() => {
+              this.selectedFixedOrCodeclassifyValue = '';
+              this.loadFixedValueTableData({"oid":this.codefixedsecOrCodeclassifysecOid})
+              this.clearFixedOrClassifyForm('codefixedsec');
+              this.$message({
+                type: "success",
+                message: "鎿嶄綔鎴愬姛!"
+              });
+            });
+          }else{
+            //鍒嗙被鐮佹鐮佸�煎垹闄�
+            this.$confirm("鏄惁鍒犻櫎杩欐潯鏁版嵁锛熷鏋滆寮曠敤灏嗕笉鑳借鍒犻櫎锛�", {
+              confirmButtonText: "纭畾",
+              cancelButtonText: "鍙栨秷",
+              type: "warning"
+            })
+            .then(() => {
+              let ts = new Date(this.selectedFixedOrCodeclassifyValue.ts).getTime();
+              return deleteCodeClassifyValue({"oid": this.selectedFixedOrCodeclassifyValue.oid,"ts": ts});
+            })
+            .then(() => {
+              this.selectedFixedOrCodeclassifyValue = '';
+              this.loadClassifyValueData({"oid":this.codefixedsecOrCodeclassifysecOid})
+              this.clearFixedOrClassifyForm('codeclassifyvalue');
+              this.$message({
+                type: "success",
+                message: "鎿嶄綔鎴愬姛!"
+              });
+            });
+          }            
+          
+        },
+        //瀵瑰浐瀹氱爜鍊艰〃杩涜锛氫笂绉汇�佷笅绉汇�佺Щ闄ゆ搷浣�
+        codeFixedValueOpetion(condition,row){
+          //console.log(this.fixedValueData[row.$index].orderNum);
+          const index = row.$index;
+          if(condition == 'up'){
+            //瀵筼rdeNum鎺掑簭瀛楁杩涜璋冩暣
+            this.fixedValueData[index].orderNum = this.fixedValueData[index].orderNum-1
+            this.fixedValueData[index-1].orderNum = this.fixedValueData[index].orderNum+1
+            //褰撲笅鏍囧噺鍘�1灏忎簬0鎴栬�卭rderNum瀛楁鍑忓幓1灏忎簬0鐨勬椂鍊欎笉鎵ц涓婄Щ鎿嶄綔
+            if(index-1<0 || this.fixedValueData[row.$index].orderNum-1<0){
+              return;
+            }
+            //璋冩暣鏁扮粍鍊奸『搴�
+            let tempOption = this.fixedValueData[index-1];
+            this.$set(this.fixedValueData, index - 1, this.fixedValueData[index])
+            this.$set(this.fixedValueData, index , tempOption)
+
+            //console.log(this.fixedValueData);
+          }else if(condition == 'down'){
+            //瀵筼rdeNum鎺掑簭瀛楁杩涜璋冩暣
+            this.fixedValueData[index].orderNum = this.fixedValueData[index].orderNum+1
+            this.fixedValueData[index+1].orderNum = this.fixedValueData[index].orderNum-1
+            //璋冩暣鏁扮粍鍊奸『搴�
+            let tempOption = this.fixedValueData[index+1];
+            this.$set(this.fixedValueData, index + 1, this.fixedValueData[index]);
+            this.$set(this.fixedValueData, index, tempOption)
+          }else {
+            for(let i=index+1; i<this.fixedValueData.length-1; i++){
+              //console.log(this.fixedValueData[i].orderNum);
+              this.fixedValueData[i].orderNum = this.fixedValueData[i].orderNum-1;
+              //console.log(this.fixedValueData[i].orderNum);
+            }
+            this.$delete(this.fixedValueData, index);
+          }
+          //console.log(this.fixedValueData);
+        },
+        //瀵瑰垎绫荤爜鍊艰〃杩涜锛氫笂绉汇�佷笅绉汇�佺Щ闄ゆ搷浣�
+        codeClassifyValueOpetion(condition){
+          //姝ゅ娑夊強鍒版繁娴呮嫹璐濋棶棰橈紝浣嗘槸鎵ц涓婁笅绉讳繚瀛樻搷浣滀箣鍚庝細閲嶆柊鍔犺浇treedata锛屾墍浠ュ奖鍝嶄笉澶�
+          let currentTreeList = this.getCodeClassifyValueTreeData();
+          let saveData = [];
+          console.log(currentTreeList.treeList);
+          if(condition == 'up'){
+            if(currentTreeList.index-1>=0){
+              // 璋冩暣椤哄簭
+              saveData[0] = currentTreeList.treeList[currentTreeList.index].attributes;
+              saveData[1] = currentTreeList.treeList[currentTreeList.index-1].attributes;
+              saveData[0].orderNum = parseInt(saveData[0].orderNum)-1;
+              saveData[1].orderNum = parseInt(saveData[1].orderNum)+1;
+              this.saveCodeFixedOrClassifyValueOption('classifyValue',saveData);
+            }
+          }else{
+            if(currentTreeList.index+1<currentTreeList.treeList.length){
+              // 璋冩暣椤哄簭
+              saveData[0] = currentTreeList.treeList[currentTreeList.index].attributes;
+              saveData[1] = currentTreeList.treeList[currentTreeList.index+1].attributes;
+              saveData[0].orderNum = parseInt(saveData[0].orderNum)+1;
+              saveData[1].orderNum = parseInt(saveData[1].orderNum)-1;
+              this.saveCodeFixedOrClassifyValueOption('classifyValue',saveData);
+            } 
+          }
+          console.log(saveData);
+          console.log(this.classifyValueTreeData);
+        },
+        //閫変腑琚皟鏁撮『搴忕殑涓や釜鏍戠殑鑺傜偣
+        getCodeClassifyValueTreeData(){
+          const currentNodeTreeData = this.selectedFixedOrCodeclassifyValue;
+          /**鑰冭檻鍑犵鎯呭喌锛岀涓�绉嶅綋鍓嶄笂绉粅涓嬬Щ鎿嶄綔宸茬粡鏄竟鐣岋紝
+            涓嶉渶瑕佽鍋氬鐞嗭紝绗簩绉嶅綋鍓嶄负鏍戞牴鑺傜偣锛岀涓夌褰撳墠涓哄彾瀛愯妭鐐�
+          */
+          //璇存槑鏄牴鑺傜偣锛岀洿鎺ユ壘鍐嶅垽鏂槸鍚︽槸杈圭晫鍊�
+          if(currentNodeTreeData.parentId.trim() == ''){
+            return this.findTreeIndex(this.classifyValueTreeData,currentNodeTreeData.oid,true);   
+          }else{
+            //璇存槑涓嶆槸鏍硅妭鐐�,鍏堟壘鍒扮埗鑺傜偣鍐嶆壘鍒板瓙鑺傜偣,鍒ゆ柇鏄惁鏄竟鐣屽��
+            return this.findTreeIndex(this.classifyValueTreeData,currentNodeTreeData.parentId,false); 
+          }
+        },
+        /**
+         * 鎵惧墠涓�涓拰鍚庝竴涓厓绱�
+         * @treeList 鏌ユ壘鐨勬暟缁�
+         * @conditionOid 鐢ㄦ潵鏌ユ壘鍒ゆ柇鐨勬潯浠�
+         * @isTreeRoot 鏄惁鐖惰妭鐐�
+         * @rreturn 杩斿洖鐩搁偦鐨勮妭鐐�
+         */
+        findTreeIndex(treeList,conditionOid,isTreeRoot){
+          for(let index=0;index<treeList.length;index++){
+            if(treeList[index].oid==conditionOid){
+              if(isTreeRoot){
+                let resData = {
+                  "index":index,
+                  "treeList":treeList,
+                }
+                return resData;
+              }else{
+                return this.findTreeIndex(this.classifyValueTreeData[index].children,this.selectedFixedOrCodeclassifyValue.oid,true);
+              }
+            }
+          }
+        },
+        //涓婄Щ涓嬬Щ绛夋搷浣滅殑淇濆瓨
+        saveCodeFixedOrClassifyValueOption(condition,editOrderNumdata){
+          //淇濆瓨瀵瑰浐瀹氱爜娈电爜鍊肩殑涓婄Щ涓嬬Щ绉诲嚭绛夋搷浣�
+          if(condition == "fixedValue"){
+            let data = {
+            "codeFixedSecOid": this.codefixedsecOrCodeclassifysecOid,
+            "dtoList": JSON.stringify(this.fixedValueData),
+            }
+            saveOrder(data).then(() => {
+              //鎵ц瀹屼繚瀛樹箣鍚庡皢褰撳墠閫変腑鐨勫璞℃竻绌�
+              this.selectedFixedOrCodeclassifyValue = '';
+              this.$message({
+                type: "success",
+                message: "淇濆瓨鎴愬姛!"
+              });
+              }, error => {
+                window.console.log(error);
+            });
+          }else {
+            //淇濆瓨瀵瑰垎绫荤爜鍊肩爜娈电爜鍊肩殑涓婄Щ涓嬬Щ绉诲嚭绛夋搷浣�
+            saveCodeClassifyValueOrder({
+              "codeClassifySecOid": this.codefixedsecOrCodeclassifysecOid,
+              "dtoList": JSON.stringify(editOrderNumdata),
+            }).then(() => {
+              this.$message({
+                type: "success",
+                message: "淇濆瓨鎴愬姛!"
+              });
+              }, error => {
+                window.console.log(error);
+            });
+            this.loadClassifyValueData({"oid":this.codefixedsecOrCodeclassifysecOid});
+          }
+          
+        },
+        //鍒嗙被鐮佸�兼爲data鍔犺浇
+        loadClassifyValueData(row){
+          //console.log(row);
+          let condtionData = {
+            "queryAllLevel": true,
+            "loadType": "all",
+            "multipleSelect": false,
+            "isMuti": false,
+            "isQueryAllColumn": true,
+            'conditionMap[codeclassifysecoid]':row.oid,
+          };
+          treeCodeClassifyValue(condtionData).then( res=> {
+            this.classifyValueTreeData = res.data;
+            //console.log(res.data);
+          });
+        },
+        //鍒嗙被鐮佸�兼爲鍗曞嚮鏃惰Е鍙戠殑浜嬩欢
+        classisyValueTreeOnodeClick(node){
+          //console.log(node);
+          this.selectedFixedOrCodeclassifyValue = node;
+          this.codeClassifyForm.codeClassifySecOid = node.attributes.codeClassifySecOid;
+          this.codeClassifyForm.id = node.attributes.id;
+          this.codeClassifyForm.name = node.attributes.name;
+          this.codeClassifyForm.parentClassifyValueOid = node.attributes.oid;
+          //console.log(this.codeClassifyForm);
+        },
+
+
+        /** 鍩虹鐮佹鐩稿叧鏂规硶 */
+        //闃叉鎵撳紑杩囩紪杈戠獥鍙d箣鍚庤〃鍗曚腑瀛樺湪鍊硷紝鎵�浠ラ渶瑕佹竻绌�,骞跺垵濮嬪寲form琛ㄥ崟灞炴��
+        clearBasicAddForm(){
+          this.form = this.$options.data().form;;
+          // this.changeSectypeFormItems(null);
+        },
+        // 鎵撳紑鏂板绐楀彛
+        addBasicCodeSec(){
+          if(!this.tipsMessage(this.selectionList)){
+            return;
+          }
+          if(this.selectionList[0].lcStatus != 'Editing'){
+            this.$message.warning('缂栫爜瑙勫垯鐘舵�佷笉鏄�"缂栬緫涓�"锛屼笉鍏佽缂栬緫鐮佹!');
+            return;
+          }
+          this.openBasicDialog('add',null);
+          this.loadCodeSecType();
+        },
+        //鎵撳紑鏂板鎴栫紪杈戝熀纭�鐮佹瀵硅瘽妗�
+        openBasicDialog(condition,row){
+          //console.log(row);
+          if(condition == 'add') {
+            this.basicSecDialogTitle = '娣诲姞鐮佹淇℃伅';
+            this.showbtn = true;
+            this.basicSecOnlyRead = false;
+          }else if(condition == 'edit'){
+            if(this.selectionList.length!=1){
+              this.$message.warning('璇烽�夋嫨涓�鏉$紪鐮佽鍒欐暟鎹�!');
+              return;
+            }
+            this.basicSecDialogTitle = '淇敼鐮佹淇℃伅';
+            this.showbtn = true;
+            this.basicSecOnlyRead = false;
+            //涓篺orm缁戝畾鍊�
+          }else{
+            this.basicSecDialogTitle = '鏌ョ湅鐮佹淇℃伅';
+            this.showbtn = false;
+            this.basicSecOnlyRead = true;
+          }
+          //console.log(this.form);
+          this.changeSectypeFormItems(condition == 'add' ? null:row);
+          this.addBasicCodeSettingBox = true;
+        },
+        // 鏂板鍩虹鐮佹
+        saveOrEditBasicCode(){
+          if(this.selectionList[0].oid == null ||  this.selectionList[0].oid == ''){
+            this.$message.warning('缂哄け蹇呰鍙傛暟锛岃閲嶆柊閫夋嫨缂栫爜瑙勫垯鍚庡啀璇�!');
+            return;
+          }        
+          this.form.pkCodeRule = this.selectionList[0].oid;
+          if(this.form.oid == '' || this.form.oid == null){
+            if(this.checkForm()){
+              addSave(this.form).then(() => {
+              this.$message({
+                type: "success",
+                message: "鎿嶄綔鎴愬姛!"
+              });
+              }, error => {
+                window.console.log(error);
+              });
+              // 鍏抽棴瀵硅瘽妗�
+              this.addBasicCodeSettingBox = false
+            }
+            
+          }else{
+            editSave(this.form).then(() => {
+               // 鍏抽棴瀵硅瘽妗�
+              this.addBasicCodeSettingBox = false
+              this.$message({
+                type: "success",
+                message: "鎿嶄綔鎴愬姛!"
+              });
+              }, error => {
+                window.console.log(error);
+            });
+          }
+          // 鐐瑰嚮鏂板鍩虹鐮佹,鍏抽棴绐楀彛涔嬪悗瑙﹀彂閲嶆柊鍔犺浇
+          this.loadBasic(this.selectionList[0]);
+        },
+        // 鍥犱负elementui鐨勮〃鍗曟牎楠岃缃笉涓婃墍浠ラ噰鐢ㄥ垽鏂殑鏂瑰紡鏉ュ仛琛ㄥ崟妫�楠屾柟寮�
+        checkForm(){
+          let form = this.form;
+          //console.log(form);
+          const regNumber = /^[0-9]+\.{0,1}[0-9]*$/; //鏁板瓧鎴栧皬鏁版鍒欐牎楠�
+          const tipsMsg = "蹇呭~椤逛笉鑳戒负绌�";
+          if(form.id == ''){
+            this.$message.warning("(鐮佹缂栧彿)"+tipsMsg);
+            this.$refs.id.$el.querySelector('input').focus();
+            return false;
+          }
+          if(form.name == ''){
+            this.$message.warning("(鐮佹鍚嶇О)"+tipsMsg);
+            this.$refs.name.$el.querySelector('input').focus();
+            return false;
+          }
+          if(form.secType == ''){
+            this.$message.warning("(鐮佹绫诲瀷)"+tipsMsg);
+            this.$refs.secType.$el.querySelector('select').focus();
+            return false;
+          }
+          if(form.secType==='codefixedsec'){
+            //鍥哄畾鐮佹
+            if(form.codeSecLengthType == ''){
+              this.$message.warning("(鐮佹闀垮害绫诲瀷)"+tipsMsg);
+              this.$refs.codeSecLengthType.$el.querySelector('select').focus();
+              return false;
+            }
+            if(form.codeSecLength == ''){
+              this.$message.warning("(鐮佹闀垮害)"+tipsMsg);
+              this.$refs.codeSecLength.$el.querySelector('input').focus();
+              return false;
+            }
+            if(!regNumber.test(form.codeSecLength)){
+              this.$message.warning("鐮佹鐨勯暱搴﹀繀椤讳负鏁板瓧鍊�");
+              this.$refs.codeSecLength.$el.querySelector('input').focus();
+              return false;
+            }
+          }else if(this.form.secType==='codeattrsec'){
+            //灞炴�х爜娈�
+            if(form.referAttributeId == ''){
+              this.$message.warning('(灞炴��)'+tipsMsg);
+              this.$refs.referAttributeId.$el.querySelector('input').focus();
+              return false;
+            }
+          }else if(this.form.secType==='codeserialsec'){
+            console.log(form.codeFillType);
+            //娴佹按鐮佹
+            if(form.codeSecLength == ''){
+              this.$message.warning('(鐮佹鐨勯暱搴�)'+tipsMsg);
+              this.$refs.seriaCodeSecLength.$el.querySelector('input').focus();
+              return false;
+            }
+            if(!regNumber.test(form.codeSecLength)){
+              this.$message.warning('鐮佹鐨勯暱搴﹀繀椤讳负鏁板瓧鍊�');
+              this.$refs.seriaCodeSecLength.$el.querySelector('input').focus();
+              return false;
+            }
+            if(!regNumber.test(form.serialStart)){
+              this.$message.warning('娴佹按鍙风殑璧峰鍊煎繀椤讳负鏁板瓧鍊�');
+              this.$refs.serialStart.$el.querySelector('input').focus();
+              return false;
+            }
+            if(!regNumber.test(form.serialStep)){
+              this.$message.warning('娴佹按鐨勬闀垮繀椤讳负鏁板瓧鍊�');
+              this.$refs.serialStep.$el.querySelector('input').focus();
+              return false;
+            }
+            if(form.codeFillType == ''){
+              this.$message.warning('(缂栫爜琛ヤ綅鏂瑰紡)'+tipsMsg);
+              return false;
+            }
+            if(form.codeFillType != '涓嶈ˉ浣�' && form.codeFillSeparatorSelect == ''){
+              this.$message.warning('褰撹ˉ浣嶆柟寮忎负宸﹁ˉ浣嶆垨鑰呭彸琛ヤ綅鐨勬椂鍊欙紝琛ヤ綅瀛楃涓嶈兘涓虹┖');
+              return false;
+            }
+            if(form.codeFillLength == ''){
+              this.$message.warning('濉厖闀垮害涓嶈兘涓虹┖');
+              this.$refs.codeFillLength.$el.querySelector('input').focus();
+              return false;
+            }
+            if(!regNumber.test(form.codeFillLength)){
+              this.$message.warning('濉厖闀垮害蹇呴』涓烘暟瀛楀��');
+              this.$refs.codeFillLength.$el.querySelector('input').focus();
+              return false;
+            }
+            if(form.codeFillLimit == ''){
+              this.$message.warning('(娴佹按涓婇檺)'+tipsMsg);
+              this.$refs.codeFillLimit.$el.querySelector('input').focus();
+              return false;
+            }
+            if(!regNumber.test(form.codeFillLimit)){
+              this.$message.warning('娴佹按涓婇檺蹇呴』涓烘暟瀛楀��');
+              this.$refs.codeFillLimit.$el.querySelector('input').focus();
+              return false;
+            }
+            if(form.codeFillFlag == ''){
+              this.$message.warning('(娴佹按鏄惁琛ョ爜)'+tipsMsg);
+              this.$refs.switch.$el.querySelector('input').focus();
+              return false;
+            }
+          }else if(this.form.secType==='codelevelsec'){
+            //灞傜骇鐮佹
+            if(form.codeLevelType == ''){
+              this.$message.warning('(灞傜骇绫诲瀷)'+tipsMsg);
+              return false;
+            }
+            if(!regNumber.test(form.codeLevelValue)){
+              this.$message.warning('灞傜骇鐨勫��)鍙兘濉啓鏁板瓧');
+              this.$refs.codeLevelValue.$el.querySelector('input').focus();
+              return false;
+            }
+            if(form.valueCutType == ''){
+              this.$message.warning('(瀛楃鎴彇绫诲瀷)'+tipsMsg);
+              this.$refs.valueCutType.$el.querySelector('select').focus();
+              return false;
+            }
+          }else if(this.form.secType==='coderefersec'){
+            //寮曠敤鐮佹
+            if(form.referBtmId == ''){
+              this.$message.warning('(鍙傜収寮曠敤鐨勪笟鍔$被鍨�)'+tipsMsg);
+              this.$refs.referBtmId.$el.querySelector('input').focus();
+              return false;
+            }
+            if(form.referConfig == ''){
+              this.$message.warning('(鍙傜収閰嶇疆)'+tipsMsg);
+              this.$refs.referConfig.$el.querySelector('input').focus();
+              return false;
+            }
+          }else if(this.form.secType==='codedatesec'){
+            //鏃ユ湡鐮佹
+            if(form.codeDateFormatStr == ''){
+              this.$message.warning('(鏃ユ湡鏍煎紡)'+tipsMsg);
+              this.$refs.codeDateFormatStr.$el.querySelector('input').focus();
+              return false;
+            }
+          }else if(this.form.secType==='codeclassifysec'){
+            //鍒嗙被鐮佹
+            if(form.codeSecLengthType == ''){
+              this.$message.warning('(鐮佹闀垮害绫诲瀷)'+tipsMsg);
+              return false;
+            }
+            if(form.codeSecLength == ''){
+              this.$message.warning('(鐮佹闀垮害)'+tipsMsg);
+              this.$refs.classCodeSecLength.$el.querySelector('input').focus();
+              return false;
+            }
+            if(!regNumber.test(form.codeSecLength)){
+              this.$message.warning('鐮佹鐨勯暱搴﹀繀椤讳负鏁板瓧鍊�');
+              this.$refs.classCodeSecLength.$el.querySelector('input').focus();
+              return false;
+            }
+          }else if(this.form.secType==='codevariablesec'){
+            //鍙彉鐮佹
+            if(form.codeSecLength == ''){
+              this.$message.warning('(鐮佹闀垮害)'+tipsMsg);
+              this.$refs.varCodeSecLength.$el.querySelector('input').focus();
+              return false;
+            }
+            if(!regNumber.test(form.codeSecLength)){
+              this.$message.warning('鐮佹鐨勯暱搴﹀繀椤讳负鏁板瓧鍊�');
+              this.$refs.classCodeSecLength.$el.querySelector('input').focus();
+              return false;
+            }
+            if(form.codeFillType == ''){
+              this.$message.warning('(缂栫爜琛ヤ綅鏂瑰紡)'+tipsMsg);
+              return false;
+            }
+            if(form.codeFillType != '涓嶈ˉ浣�' && form.codeFillSeparatorSelect == ''){
+              this.$message.warning('褰撹ˉ浣嶆柟寮忎负宸﹁ˉ浣嶆垨鑰呭彸琛ヤ綅鐨勬椂鍊欙紝琛ヤ綅瀛楃涓嶈兘涓虹┖');
+              return false;
+            }
+          }
+          return true;
+        },
+        // 鍒ゆ柇鏁版嵁鏄惁閫夋嫨浠ュ強鍙兘閫夋嫨鍗曟潯鏁版嵁
+        tipsMessage(list){
+          if(list.length != 1){
+            this.$message.warning("璇烽�夋嫨涓�鏉$紪鐮佽鍒欐暟鎹�!");
+            return false;
+          }
+          return true;
+        },
+        // 鍩虹鐮佹鍒犻櫎
+        deleteBasicCode(){
+          if(!this.tipsMessage(this.selectionBasicList)){
+            return;
+          }
+          let oid = this.selectionBasicList[0].oid;
+          this.$confirm("鏄惁鍒犻櫎杩欐潯鏁版嵁锛熷鏋滆寮曠敤灏嗕笉鑳借鍒犻櫎锛�", {
+            confirmButtonText: "纭畾",
+            cancelButtonText: "鍙栨秷",
+            type: "warning"
           })
           .then(() => {
+            let ts = new Date(this.selectionBasicList[0].ts).getTime();
+            return deleteData({"oid": oid,"ts": ts});
+          })
+          .then(() => {
+            this.loadBasic({"oid":this.currentCodeRuleOid == null || this.currentCodeRuleOid == '' ? this.selectionList[0].oid:this.currentCodeRuleOid});
+            this.$message({
+              type: "success",
+              message: "鎿嶄綔鎴愬姛!"
+            });
+            this.$refs.crudBasic.toggleSelection();
+          });
+        },
+        // 鐐瑰嚮瑙﹀彂鍔犺浇鍩虹鐮佹淇℃伅
+        loadBasic(row){
+          if(this.cloneSettingBox){
+            this.cloneTableLoading = true;
+          }else{
+            this.loadingBasic = true;
+          }
+          // console.log(row.oid);
+          //瀛樺偍褰撳墠鍏宠仈鐨勭紪鐮佽鍒欑浉鍏充俊鎭�
+          this.currentCodeRuleOid = row.oid;
+          this.currentRuleLcStatus = row.lcStatus;
+          gridCodeBasicSec(1, -1, {"pkCodeRule":row.oid}).then(res => {
+            const data = res.data.data;
+            // console.log(data);
+            if(this.cloneSettingBox){
+              this.cloneData = data.records;
+              // console.log(tihs.cloneData);
+              this.cloneTableLoading = false;
+            }else {
+              this.basicData = data.records;
+              // console.log(this.basicData);
+              this.loadingBasic = false;
+            }
+          });
+        },
+        // 鍩虹鐮佹閫変腑鏃惰Е鍙�
+        selectionBasicChange(list) {
+          this.selectionBasicList = list;
+          //console.log(this.selectionBasicList);
+        },
+        // 涓婄Щ涓嬬Щ鍩虹鐮佹
+        upOrderNum(row){
+          //console.log(row.oid);
+          if(!this.tipsMessage(this.selectionList)){
+            return;
+          }
+          let codeRuleOid = this.selectionList[0].oid;
+          if (this.selectionList[0].lcStatus != 'Editing') {
+            this.$message.warning("鍙湁缂栫爜瑙勫垯鐨勭姸鎬佹槸 [缂栬緫涓璢 鐨勬椂鍊欙紝鎵嶈兘璋冩暣鐮佹椤哄簭!");
+            return; 
+          }
+          if(row.oid==null || row.oid==''){
+            this.$message.warning("鏈幏鍙栧埌蹇呭~鍙傛暟!");
+            return;        
+          }
+          upOrderNum(row.oid).then(() => {
+            this.loadBasic({"oid":codeRuleOid});
+            this.$message({
+              type: "success",
+              message: "鎿嶄綔鎴愬姛!"
+            });
+          })
+        },
+        downOrderNum(row){
+          //console.log(row.oid);
+          if(!this.tipsMessage(this.selectionList)){
+            return;
+          }
+          let codeRuleOid = this.selectionList[0].oid;
+          //console.log(this.selectionList);
+          if (this.selectionList[0].lcStatus != 'Editing') {
+            this.$message.warning("鍙湁缂栫爜瑙勫垯鐨勭姸鎬佹槸 [缂栬緫涓璢 鐨勬椂鍊欙紝鎵嶈兘璋冩暣鐮佹椤哄簭!");
+            return; 
+          }
+          if(row.oid==null || row.oid==''){
+            this.$message.warning("鏈幏鍙栧埌蹇呭~鍙傛暟!");
+            return;        
+          }
+          downOrderNum(row.oid).then(() => {
+            this.loadBasic({"oid":codeRuleOid});
+            this.$message({
+              type: "success",
+              message: "鎿嶄綔鎴愬姛!"
+            });
+          })
+        },
+        //鍩虹鐮佹鏌ヨ
+        refreshChangeBasicSec(){
+          this.loadBasic({"oid":this.currentCodeRuleOid == null || this.currentCodeRuleOid == '' ? this.selectionList[0].oid:this.currentCodeRuleOid});
+        },
+
+  
+        /** 缂栫爜瑙勫垯鐩稿叧鏂规硶 */
+        // 鏌ヨ浣跨敤鑼冨洿
+        handleRange(){
+          if(!this.tipsMessage(this.selectionList)){
+            return;
+          }
+          this.codeRangeSettingBox = true;
+          this.getRangeCodeList()
+        },
+        //鍔犺浇浣跨敤鑼冨洿鍒楄〃
+        getRangeCodeList(){        
+          this.dialogLoading = true;
+          if(this.selectionList[0].oid==null){
+            this.$message.error("鏈幏鍙栧埌鍙傛暟!");
+          }
+
+          listUseRange(this.selectionList[0].oid).then(res => {
+            this.useRangeData = res.data.data;
+            //console.log(this.useRangeData);
+            this.dialogLoading = false;
+          });
+        },
+        //鍒锋柊浣跨敤鑼冨洿鍒楄〃
+        refreshUseRangeChange(){
+          this.getRangeCodeList();
+        },
+        //鍗曞嚮缂栫爜瑙勫垯瀹炵幇琛岄�夋嫨
+        codeRuleRowClick (row) {
+          this.$refs.crud.toggleSelection();
+          this.selectionList = row;
+          this.$refs.crud.setCurrentRow(row);
+          this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
+          this.loadBasic(row);
+        },
+        // 鍚敤涓庡仠鐢�
+        enableOrDeactivatse(oId,update){
+          updateStatus({"oid":oId,"ts":new Date().getTime,"update":update}).then(() => {
             this.onLoad(this.page);
             this.$message({
               type: "success",
               message: "鎿嶄綔鎴愬姛!"
             });
-            this.$refs.crud.toggleSelection();
+          }, error => {
+            window.console.log(error);
           });
-      },
-      // 鎵撳紑淇敼
-      beforeOpen(done, type) {
-        if (["edit", "view"].includes(type)) {
-          getDetail(this.form.oid).then(res => {
-            this.form = res.data.data;
+        },
+        // 鎵撳紑缂栫爜瑙勫垯鍏嬮殕瀵硅瘽妗�
+        openCodeRuleDialog() {
+          if (!this.tipsMessage(this.selectionList)) {
+            return;
+          }
+          this.cloneSettingBox = true;
+          this.cloneCodeRuleForm.id = this.selectionList[0].id;
+          this.cloneCodeRuleForm.name = this.selectionList[0].name;
+          this.cloneCodeRuleForm.description = this.selectionList[0].description;
+          this.loadBasic({"oid": this.selectionList[0].oid});
+        },
+        // 鍏嬮殕缂栫爜瑙勫垯淇濆瓨鍔熻兘
+        saveCloneCodeRule(){
+          let form = this.cloneCodeRuleForm;
+          if(form.id.trim()==''){
+            this.$message.warning("缂栧彿涓嶈兘涓虹┖!");
+            return;
+          }
+          if(form.name.trim()==''){
+            this.$message.warning("鐮佸�间笉鑳戒负绌�!");
+            return;
+          }
+          this.selectionList[0].oid = '';
+          this.selectionList[0].id = form.id;
+          this.selectionList[0].name = form.name;
+          this.selectionList[0].description = form.description;
+          this.selectionList[0].createTime = new Date().getTime();
+          this.selectionList[0].ts = new Date(this.selectionList[0].ts).getTime();
+          this.selectionList[0].lcStatus = 'Editing';
+          let data = Object.assign({}, this.selectionList[0],{elements:this.cloneData});
+          clone(data).then(() => {
+            this.cloneSettingBox = false;
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "鎿嶄綔鎴愬姛!"
+            });
+          }, error => {
+            window.console.log(error);
           });
-        }
-        done();
-      },
-      searchReset() {
-        this.query = {};
-        this.onLoad(this.page);
-      },
-      searchChange(params, done) {
-        this.query = params;
-        this.page.currentPage = 1;
-        this.onLoad(this.page, params);
-        done();
-      },
-      selectionChange(list) {
-        this.selectionList = list;
-        if(this.selectionList.length > 0){
-          this.currentCodeRuleOid = this.selectionList [list.length-1];
-          this.loadBasic(this.selectionList[list.length-1]);
-        }
-      },
-      selectionClear() {
-        this.selectionList = [];
-        this.$refs.crud.toggleSelection();
-      },
-      currentChange(currentPage){
-        this.page.currentPage = currentPage;
-      },
-      sizeChange(pageSize){
-        this.page.pageSize = pageSize;
-      },
-      refreshChange() {
-        this.onLoad(this.page, this.query);
-      },
-      onLoad(page, params = {}) {
-        this.loading = true;
-        gridCodeRule(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          //console.log(data); 
+        },
+        // 鎵撳紑浠庡叾浠栫紪鐮佽鍒欎腑鍏嬮殕鐮佹瀵硅瘽妗�
+        openOtherCodeRuleDialog(){
+          if (!this.tipsMessage(this.selectionList)) {
+            return;
+          }
+          if(this.selectionList[0].lcStatus != 'Editing'){
+            this.$message.warning("缂栫爜瑙勫垯宸茶寮曠敤锛屼笉鍏佽缂栬緫鎴栧垹闄�!");
+            return; 
+          }
+          this.cloneOtherCodeRuleSettingBox = true;
+        },
+        //鍗曞嚮缂栫爜瑙勫垯瀹炵幇琛岄�夋嫨
+        codeOtherCloneRuleRowClick (row) {
+          this.loadBasic(row);
+        },
+        // 缂栫爜瑙勫垯褰撳墠閫変腑琛屽彉鍖栫殑鏃跺�欒Е鍙�
+        selectionOtherCloneCodeRuleChange(list) {
+          //console.log(list);
+          this.selectionOtherCloneCodeRuleList = list;
+          if(this.selectionOtherCloneCodeRuleList.length > 0){
+            this.loadBasic(this.selectionOtherCloneCodeRuleList[list.length-1]);
+          }
+        },
+        selectionOtherCloneCodeBasicChange(list){
+          this.selectionOtherCloneCodeBasicList = list; 
+        },
+         // 浠庡叾浠栫紪鐮佽鍒欎腑鍏嬮殕鐮佹淇℃伅
+        saveOtherCodeBasic(){
+          let oid = this.selectionList[0].oid;
+          let fromDialogPkCodebasic = this.selectionOtherCloneCodeBasicList;
+          if(fromDialogPkCodebasic.length < 0){
+            this.$message.warning("璇烽�夋嫨鐮佹鏁版嵁!");
+            return;
+          }
+          let res = fromDialogPkCodebasic.filter((item) => {
+            return item.pkCodeRule == oid;
+          });
+          if(res != ''){
+            this.$message.warning("闇�瑕佸厠闅嗙殑缂栫爜瑙勫垯涓庤鍏嬮殕鐨勭紪鐮佽鍒欑浉鍚�!");
+            return;
+          }
           //console.log(res);
-          const data = res.data.data;
-          this.page.total = data.total;
-          this.data = data.records;
-          this.loading = false;
-          this.loadBasic(data.records[0])
-          this.selectionClear();
-        });
+          let oidArr = '';
+          fromDialogPkCodebasic.forEach((item) =>{
+            oidArr = oidArr+","+item.oid;
+          })
+          let data = {
+            "pkCodeRule": oid,
+            "oidArr": oidArr,
+          }
+          //console.log(data);
+          cloneCodeBasic(data).then(() => {
+            this.cloneOtherCodeRuleSettingBox = false;
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "鎿嶄綔鎴愬姛!"
+            });
+          }, error => {
+            window.console.log(error);
+          });
+        },
+        // 娓呯┖鐮佸��
+        clearAllCodeSec(){
+          if(this.selectionList.length == 0){
+            this.$message.warning("娌℃湁閫夋嫨鏁版嵁!");
+            return;
+          }
+          if(this.selectionList.length != 1){
+            this.$message.warning("姣忔鍙兘閫夋嫨涓�鏉℃暟鎹�!");
+            return;
+          }
+          let currentData = this.selectionList[0];
+          this.$confirm("纭畾瑕佹竻绌虹爜鍊硷紵濡傛灉娓呯┖灏嗕笉鑳借鎭㈠锛岃璋ㄦ厧锛�", {
+            confirmButtonText: "纭畾",
+            cancelButtonText: "鍙栨秷",
+            type: "warning"
+            })
+            .then(() => {
+              let ts = new Date(currentData.ts).getTime();
+              return clearAllCode({"oid": currentData.oid,"ts": ts});
+            })
+            .then(() => {
+              this. this.onLoad(this.page);
+              this.$message({
+                type: "success",
+                message: "鎿嶄綔鎴愬姛!"
+              });
+            });
+        },
+
+        // 娣诲姞
+        rowSave(row, done, loading) {
+          add(row).then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "鎿嶄綔鎴愬姛!"
+            });
+            done();
+          }, error => {
+            loading();
+            window.console.log(error);
+          });
+        },
+        openEdit(row){
+          this.$refs.crud.rowEdit(row,row.$index);
+        },
+        // 淇敼
+        rowUpdate(row, index, done, loading) {
+          row.ts = new Date().getTime;
+          update(row).then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "鎿嶄綔鎴愬姛!"
+            });
+            done();
+          }, error => {
+            loading();
+            console.log(error);
+          });
+        },
+        // 鍒犻櫎
+        handleDelete() {
+          if(!this.tipsMessage(this.selectionList)){
+            return;
+          }
+          this.$confirm("纭畾灏嗛�夋嫨鏁版嵁鍒犻櫎?", {
+            confirmButtonText: "纭畾",
+            cancelButtonText: "鍙栨秷",
+            type: "warning"
+          })
+            .then(() => {
+              // 鍙敮鎸佹瘡娆″崟鏉¤褰曞垹闄�
+              let oid = this.selectionList[0].oid;
+              let ts = new Date(this.selectionList[0].ts).getTime();
+              return remove({oid: oid,ts: ts});
+            })
+            .then(() => {
+              this.onLoad(this.page);
+              this.$message({
+                type: "success",
+                message: "鎿嶄綔鎴愬姛!"
+              });
+              this.$refs.crud.toggleSelection();
+            });
+        },
+        // 鎵撳紑淇敼
+        beforeOpen(done, type) {
+          if (["edit", "view"].includes(type)) {
+            getDetail(this.ruleForm.oid).then(res => {
+              this.ruleForm = res.data.data;
+            });
+          }
+          done();
+        },
+        searchReset() {
+          this.query = {};
+          this.onLoad(this.page);
+        },
+        searchChange(params, done) {
+          this.query = params;
+          this.page.currentPage = 1;
+          this.onLoad(this.page, params);
+          done();
+        }, 
+        // 缂栫爜瑙勫垯褰撳墠閫変腑琛屽彉鍖栫殑鏃跺�欒Е鍙�
+        selectionChange(list) {
+          this.selectionList = list;
+          //console.log("selectionChange====="+list);
+          this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
+          if(this.selectionList.length > 0){
+            this.currentCodeRuleOid = this.selectionList[list.length-1].oid;
+            this.currentRuleLcStatus = this.selectionList[list.length-1].lcStatus;
+            //console.log(this.currentRuleLcStatus);
+            this.loadBasic(this.selectionList[list.length-1]);
+          }
+        },
+        selectionClear() {
+          this.selectionList = [];
+          this.$refs.crud.toggleSelection();
+        },
+        currentChange(currentPage){
+          this.page.currentPage = currentPage;
+        },
+        sizeChange(pageSize){
+          this.page.pageSize = pageSize;
+        },
+        refreshChange() {
+          this.onLoad(this.page, this.query);
+        },
+        onLoad(page, params = {}) {
+          this.loading = true;
+          gridCodeRule(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+            //console.log(res.data);
+            const data = res.data.data;
+            this.page.total = data.total;
+            this.data = data.records;
+            this.loading = false;
+            this.loadBasic(this.data[0])
+            this.$nextTick(() => {
+              //this.$refs.crud.toggleRowSelection(this.data[0]);
+              this.$refs.crud.setCurrentRow(this.data[0]);
+            })
+            this.selectionList = data.records[0];
+            //this.selectionClear();
+          });
+        },
+
+
+        /** 绗竴灞傚璇濇鐩稿叧鏂规硶 */
+        // 鎵撳紑浜屽眰寮圭獥鏂规硶
+        openAttrSelectOrGetValue(condition){
+          if(condition === 'attr'){
+            this.isShowSelectAttrOption = true;
+          }else if(condition === 'value'){
+            //鎵撳紑鍏紡缂栬緫妗嗭紝绗簩灞傚祵濂楀璇濇
+            this.$refs.formulaEditor.isShowformulaEdit = true;
+          }else if(condition === 'parentClassifySecOid'){
+            this.isShowParentClassifyOption = true;
+          }else if(condition === 'referBtmId'){
+            this.isShowSelectReferBtmOption = true;
+          }else if(condition === 'referConfig'){
+            //this.$emit('openSelectreferConfig')
+          }
+        },
+
+        // 鐐瑰嚮杈撳叆妗嗙殑脳鍙凤紝娓呯┖杈撳叆妗嗕腑鐨勫唴瀹�
+        clearAttrDataByIcon(condition){
+          if(condition === 'attr'){
+            this.form.referAttributeName = '';
+            this.form.referAttributeId = '';
+            this.form.referCodeClassifyOid = '';
+            this.form.referCodeClassifyOidName = '';
+          }else if(condition === 'value'){
+            this.form.getValueClass = '';
+          }else if(condition === 'parentClassifySecOid'){
+            this.form.parentClassifySecOid = '';
+          }else if(condition === 'referBtmId'){
+            this.form.referBtmId = '';
+          }else if(condition === 'referConfig'){
+            this.form.referBtmId = '';
+          }
+        },
+        // 琛ヤ綅鏃剁殑瀛楃锛屽疄鐜板彲杈撳彲閫�
+        inputSelectBlur(e){
+          if (e.target.value) {  
+            this.form.codeFillSeparatorSelect = e.target.value;
+          }
+        },
+        // 鐮佹绫诲瀷鏀瑰彉鏃讹紝澧炲姞瀵瑰簲鐨刦orm琛ㄥ崟涓殑灞炴��
+        changeSectypeFormItems(row){     
+          //console.log(row);   
+          if(this.sectypeList.length==0){
+            this.loadCodeSecType();
+          }
+          if(row != null){
+            this.form = {
+              oid: row.oid,
+              id: row.id, //缂栧彿,
+              name: row.name,//鍚嶇О
+              secType: row.secType,//鐮佹绫诲瀷
+              description: row.description,//鎻忚堪
+              serialDependFlag: row.serialDependFlag=='true' ?  true:false,//鏄惁娴佹按渚濊禆
+              serialDependOrder: row.serialDependOrder,//娴佹按渚濊禆椤哄簭
+              nullableFlag: row.nullableFlag=='true' ?  true:false,//鏄惁涓虹┖
+              displayFlag: row.displayFlag=='true' ?  true:false,
+              componentCodeFlag: row.componentCodeFlag=='true' ?  true:false,//鏄惁鍙備笌缂栫爜
+              pkCodeRule: row.pkCodeRule, //鎵�灞炵紪鐮佽鍒�
+            }
+          }else {
+            this.form = {
+              id: this.form.id, //缂栧彿
+              name: this.form.name, //鍚嶇О
+              secType: this.form.secType, //鐮佹绫诲瀷
+              description: this.form.description, //鎻忚堪
+              serialDependFlag:  this.form.serialDependFlag, //鏄惁娴佹按渚濊禆
+              serialDependOrder: this.form.serialDependOrder, //娴佹按渚濊禆椤哄簭
+              nullableFlag:  this.form.nullableFlag, //鏄惁涓虹┖
+              displayFlag:  this.form.displayFlag, //
+              componentCodeFlag:  this.form.componentCodeFlag, //鏄惁鍙備笌缂栫爜
+              pkCodeRule: this.form.pkCodeRule, //鎵�灞炵紪鐮佽鍒�
+            };
+            //console.log(this.form);
+          }
+          if(this.form.secType==='codefixedsec'){
+            //鍥哄畾鐮佹
+            this.form = Object.assign({}, this.form,{
+              codeSecLength: row!=null&&row.codeSecLength != '' ? row.codeSecLength:'',
+              codeSecLengthType: row!=null&&row.codeSecLengthType != '' ? row.codeSecLengthType:'code_sec_length_variable'
+            });
+            this.loadCodeSecLength();
+          }else if(this.form.secType==='codeattrsec'){
+            //灞炴�х爜娈�
+            this.form = Object.assign({}, this.form, {
+              referCodeClassifyOid: row!=null&&row.referCodeClassifyOid != '' ? row.referCodeClassifyOid:'',     //灞炴�d
+              referCodeClassifyOidName: row!=null&&row.referCodeClassifyOidName != '' ? row.referCodeClassifyOidName:'', //灞炴�ф墍鍦ㄥ垎绫�
+              referAttributeId: row!=null&&row.referAttributeId != '' ? row.referAttributeId:'',    //灞炴�х紪鍙�
+              referAttributeName: row!=null&&row.referAttributeName != '' ? row.referAttributeName:'',   //灞炴��
+              getValueClass: row!=null&&row.getValueClass != '' ? row.getValueClass:''         //鍙栧�艰鍒�
+            });
+          }else if(this.form.secType==='codeserialsec'){
+            //娴佹按鐮佹
+            this.form = Object.assign({}, this.form,{
+              codeSecLength: row!=null&&row.codeSecLength != '' ? row.codeSecLength:'', //鐮佹鐨勯暱搴�
+              serialStart: row!=null&&row.serialStart != '' ? row.serialStart:1,  //娴佹按鍙疯捣濮嬪��
+              serialStep: row!=null&&row.serialStep != '' ? row.serialStep:1,   //娴佹按鐨勬闀�
+              codeFillType: row!=null&&row.codeFillType != '' ? row.codeFillType:'code_fill_right', //缂栫爜琛ヤ綅鏂瑰紡
+              codeFillSeparatorSelect: row!=null&&row.codeFillSeparatorSelect != '' ? row.codeFillSeparatorSelect:0,    //琛ヤ綅鏃剁殑瀛楃锛岄�変腑鐨勪笅鎷夋鐨勪笅鏍�
+              codeFillSeparator: row!=null&&row.codeFillSeparator != '' ? row.codeFillSeparator:0,          //琛ヤ綅鏃剁殑瀛楃
+              codeFillLength: row!=null&&row.codeFillLength != '' ? row.codeFillLength:'',              //濉厖闀垮害
+              codeFillLimit: row!=null&&row.codeFillLimit != '' ? row.codeFillLimit:'',               //娴佹按涓婇檺
+              codeFillFlag: row!=null&&row.codeFillFlag != '' ? row.codeFillFlag=='true' ?  true:false :false,      //娴佹按鏄惁琛ョ爜
+              customCodeSerialClass: row!=null&&row.customCodeSerialClass != '' ? row.customCodeSerialClass:'',     //鑷畾涔夋祦姘寸畻娉�
+            });
+            this.loadCodeFillType();
+            this.loadCodeFillSeparator();
+          }else if(this.form.secType==='codelevelsec'){
+            //灞傜骇鐮佹
+            this.form = Object.assign({}, this.form,{
+              codeLevelType: row!=null&&row.codeLevelType != '' ? row.codeLevelType:'code_level_min',     //灞傜骇绫诲瀷  鏋氫妇鏌ヨ
+              codeLevelValue: row!=null&&row.codeLevelValue != '' ? row.codeLevelValue:'',    //灞傜骇鐨勫��
+              valueCutType: row!=null&&row.valueCutType != '' ? row.valueCutType:'code_cut_none',      //瀛楃鎴彇绫诲瀷 鏋氫妇鏌ヨ
+              valueCutLength: row!=null&&row.valueCutLength != '' ? row.valueCutLength:'',    //
+              codeGetValueType: row!=null&&row.codeGetValueType != '' ? row.codeGetValueType:'code_get_value_all_up',  //鍙栧�肩被鍨� 鏋氫妇鏌ヨ
+            });
+            this.loadCodeLevelType();
+            this.loadCodeCutType();
+            this.loadCodeGetValueType();
+          }else if(this.form.secType==='coderefersec'){
+            //寮曠敤鐮佹
+            this.form = Object.assign({}, this.form,{
+              referBtmId: row!=null&&row.referBtmId != '' ? row.referBtmId:'',   //鍙傜収寮曠敤鐨勪笟鍔$被鍨嬶紝鐨刬d
+              referBtmName: row!=null&&row.referBtmName != '' ? row.referBtmName:'', //鍙傜収寮曠敤鐨勪笟鍔$被鍨�
+              referConfig: row!=null&&row.referConfig != '' ? row.referConfig:'',  //鍙傜収閰嶇疆
+            });
+          }else if(this.form.secType==='codedatesec'){
+            //鏃ユ湡鐮佹
+            this.form = Object.assign({}, this.form,{
+              codeDateFormatStr:  row!=null&&row.codeDateFormatStr != '' ? row.codeDateFormatStr:'',   //鏃ユ湡鏍煎紡
+            });
+          }else if(this.form.secType==='codeclassifysec'){
+            //console.log(this.form);
+            //鍒嗙被鐮佹
+            this.form = Object.assign({}, this.form,{
+              codeSecLengthType: row!=null&&row.codeSecLengthType != '' ? row.codeSecLengthType:'code_sec_length_variable',    //鐮佹闀垮害绫诲瀷
+              codeSecLength: row!=null&&row.codeSecLength != '' ? row.codeSecLength:'',  //鐮佹鐨勯暱搴�
+              matchClassifyValueFlag: row!=null&&row.matchClassifyValueFlag != '' ? row.matchClassifyValueFlag=='true' ?  true:false :false,  //鏄惁鑷姩鍖归厤鍊�
+              parentClassifySecOid: row!=null&&row.parentClassifySecOid != '' ? row.parentClassifySecOid:'',    //鐖跺垎绫荤爜娈甸�変腑鐨刬d
+              parentClassifySecText: row!=null&&row.parentClassifySecText != '' ? row.parentClassifySecText:'',  //鐖跺垎绫荤爜娈�
+            });
+            this.loadCodeSecLength();
+          }else if(this.form.secType==='codevariablesec'){
+            //鍙彉鐮佹
+            this.form = Object.assign({}, this.form,{
+              codeSecLength: row!=null&&row.codeSecLength != '' ? row.codeSecLength:'',             //鐮佹鐨勯暱搴�
+              codeFillType: row!=null&&row.codeFillType != '' ? row.codeFillType:'code_fill_right', //缂栫爜閮ㄤ綅鏂瑰紡锛屾灇涓炬煡璇�
+              codeFillSeparatorSelect: row!=null&&row.codeFillSeparatorSelect != '' ? row.codeFillSeparatorSelect:0,  //閫変腑鐨勮ˉ浣嶆椂鐨勫瓧绗︾殑涓嬫爣
+              codeFillSeparator: row!=null&&row.codeFillSeparator != '' ? row.codeFillSeparator:'', //琛ヤ綅鏃剁殑瀛楃锛屽彲杈撳彲閫夋煡璇�
+            });
+            this.loadCodeFillType();
+            this.loadCodeFillSeparator();
+          }
+          // console.log(this.form);
+        },
+        //鏋氫妇鍜屽彲杈撳彲閫夊唴瀹规煡璇�
+        loadCodeSecType(){
+          getDictionary({code: "codeBasicSecType"}).then(res=>{
+            this.sectypeList = res.data.data;
+          })
+          this.loadCodeSecLength();
+          //console.log(this.sectypeList);
+        },
+        loadCodeSecLength(){
+          getDictionary({code: "codeSecLength"}).then(res=>{
+            this.codeSecLengthType = res.data.data;
+          })
+        },
+        loadCodeFillType(){
+          getDictionary({code: "codeFillType"}).then(res=>{
+            this.codeFillType = res.data.data;
+          })
+        },
+        loadCodeFillSeparator(){
+          getDictionary({code: "codeFillSeparator"}).then(res=>{
+            this.codeFillSeparator = res.data.data;
+          })
+        },
+        loadCodeLevelType(){
+          getDictionary({code: "codeLevelType"}).then(res=>{
+            this.codeLevelType = res.data.data;
+          })
+        },
+        loadCodeCutType(){
+          getDictionary({code: "codeCutType"}).then(res=>{
+            this.codeCutType = res.data.data;
+          })
+        },
+        loadCodeGetValueType(){
+          getDictionary({code: "codeGetValueType"}).then(res=>{
+            this.codeGetValueType = res.data.data;
+            //console.log(this.codeGetValueType);
+          })
+        },
+        
       }
-    }
-};
+  };
+
 </script>
 
-<style>
+<style scope>
+
+  .code-rule-crud > .avue-crud__search ,.code-basic-crud > .avue-crud__search {
+    margin-bottom: -15px;
+  }
+
+  .code-rule-crud > .avue-crud__pagination {
+    padding: 14px 0 2px 20px;
+  }
+  
+
+  .clone-input-textarea > .el-form-item__content {
+    width: 495px;
+  }
+
+  .clone-avue-crud > .el-card > .el-card__body > .avue-crud__menu {
+    display: none!important;
+  }
+
+  .fixed-avue-crud > .el-card> .el-card__body > .avue-crud__menu {
+    display: none!important;
+  }
+
+  .other-clone-codebasic-crud > .el-card> .el-card__body > .avue-crud__menu {
+    display: none!important;
+  }
+
+  .other-clone-coderule-crud > .el-card> .el-card__body > .avue-crud__menu {
+    display: none!important;
+  }
+  
+  .el-table--small .el-table__cell {
+    padding: 3px 0;
+  }
+
+  .classify_value_box > .el-scrollbar {
+    height: 95%;
+  }
+
+  .basic-container > .el-card  > .el-card__body {
+    margin: -10px 0;
+  }
+  .code-basicsec-container{
+    padding: 1px 6px;
+  }
+
   .el-divider--horizontal {
-      margin-top: 19px !important;
-      margin-bottom: -20px !important;
-      height: 2px;
-      margin: 0;
+    margin-top: 19px !important;
+    margin-bottom: -20px !important;
+    height: 2px;
+    margin: 0;
+    position: fixed;
+    width: 57.5vw;
   }
 
   .el-card__body > .abox {
@@ -1319,8 +2540,48 @@
     width:60px;
   }
 
-  .formula-editor{
-    
+  .el-input-number {
+    width: 120px;
   }
 
+  .el-input-number >.el-input > .el-input__inner {
+    width:120px;
+  } 
+  
+  .el-col>.el-card > .el-card__header {
+    background: rgb(213 231 239);
+    border-radius: inherit;
+  }
+
+  /** 鏂板鐮佹 */
+  .total{
+    height: 500px;
+    width: 100%;
+  }
+
+  .total .el-input__inner,.total .el-textarea__inner {
+    width: 220px;
+  }
+
+  .el-divider--vertical {
+    width: 2px;
+    height: 72vh;
+    margin: 0 5px;
+    position: fixed;
+  }
+
+ .left {
+    float: left;
+    width: 49%;
+ }
+ .right {
+    float: right;
+    margin-right: 2.5vw;
+    /* width: 40%; */
+ }
+ .right > .el-form > .el-form-item{
+    margin-bottom: 8px;
+ }
+
+
 </style>
\ No newline at end of file
diff --git a/Source/UBCS-WEB/.settings/src/views/modeling/original.vue b/Source/UBCS-WEB/.settings/src/views/modeling/original.vue
index 8597d3e..910206a 100644
--- a/Source/UBCS-WEB/.settings/src/views/modeling/original.vue
+++ b/Source/UBCS-WEB/.settings/src/views/modeling/original.vue
@@ -94,7 +94,7 @@
   update, getPage
 } from "@/api/omd/OmdAttribute";
 
-import { getDictionary } from "@/api/omd/dict";
+import { getDictionary } from "@/api/omd/enum";
 
 export default {
   name: "original",
diff --git a/Source/UBCS-WEB/.settings/src/views/omd/dict.vue b/Source/UBCS-WEB/.settings/src/views/omd/dict.vue
index b17df8b..15593fb 100644
--- a/Source/UBCS-WEB/.settings/src/views/omd/dict.vue
+++ b/Source/UBCS-WEB/.settings/src/views/omd/dict.vue
@@ -111,7 +111,7 @@
     add,
     getDict,
     getDictTree
-  } from "@/api/omd/dict";
+  } from "@/api/omd/enum";
   import {optionParent, optionChild} from "@/const/omd/dict";
   import {mapGetters} from "vuex";
 
diff --git "a/Source/UBCS-WEB/UBCS-WEB - \345\277\253\346\215\267\346\226\271\345\274\217.lnk" "b/Source/UBCS-WEB/UBCS-WEB - \345\277\253\346\215\267\346\226\271\345\274\217.lnk"
deleted file mode 100644
index 36c8c44..0000000
--- "a/Source/UBCS-WEB/UBCS-WEB - \345\277\253\346\215\267\346\226\271\345\274\217.lnk"
+++ /dev/null
Binary files differ
diff --git a/Source/UBCS-WEB/package-lock.json b/Source/UBCS-WEB/package-lock.json
index 9cb2cf8..a1598f3 100644
--- a/Source/UBCS-WEB/package-lock.json
+++ b/Source/UBCS-WEB/package-lock.json
@@ -2475,6 +2475,16 @@
       "dev": true,
       "optional": true
     },
+    "bindings": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+      "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "file-uri-to-path": "1.0.0"
+      }
+    },
     "bluebird": {
       "version": "3.7.2",
       "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
@@ -5563,6 +5573,13 @@
           }
         }
       }
+    },
+    "file-uri-to-path": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+      "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+      "dev": true,
+      "optional": true
     },
     "filesize": {
       "version": "3.6.1",
@@ -13338,6 +13355,7 @@
           "dev": true,
           "optional": true,
           "requires": {
+            "bindings": "^1.5.0",
             "nan": "^2.12.1"
           }
         },
@@ -13659,6 +13677,7 @@
           "dev": true,
           "optional": true,
           "requires": {
+            "bindings": "^1.5.0",
             "nan": "^2.12.1"
           }
         },
diff --git a/Source/UBCS-WEB/public/index.html b/Source/UBCS-WEB/public/index.html
index b185481..5579dae 100644
--- a/Source/UBCS-WEB/public/index.html
+++ b/Source/UBCS-WEB/public/index.html
@@ -96,10 +96,10 @@
         鍒濇鍔犺浇璧勬簮鍙兘闇�瑕佽緝澶氭椂闂� 璇疯�愬績绛夊緟
       </div>
     </div>
-    <div class="avue-home__footer">
+    <!-- <div class="avue-home__footer">
       <a href="https://bladex.vip" target="_blank">
         https://bladex.vip </a>
-    </div>
+    </div> -->
   </div>
 </div>
 <!-- built files will be auto injected -->
diff --git a/Source/UBCS-WEB/public/src/mock/menu.js b/Source/UBCS-WEB/public/src/mock/menu.js
index ce5eaea..b457291 100644
--- a/Source/UBCS-WEB/public/src/mock/menu.js
+++ b/Source/UBCS-WEB/public/src/mock/menu.js
@@ -9,24 +9,24 @@
   },
   parentId: 0
 },
-  {
-    label: "bladex瀹樼綉",
-    icon: 'el-icon-document',
-    meta: {
-      i18n: 'website',
-    },
-    path: "https://bladex.vip/#/",
-    parentId: 1
-  },
-  {
-    label: "avuex瀹樼綉",
-    icon: 'el-icon-document',
-    meta: {
-      i18n: 'avuexwebsite',
-    },
-    path: "https://avuex.avue.top",
-    parentId: 2
-  },
+  // {
+  //   label: "bladex瀹樼綉",
+  //   icon: 'el-icon-document',
+  //   meta: {
+  //     i18n: 'website',
+  //   },
+  //   path: "https://bladex.vip/#/",
+  //   parentId: 1
+  // },
+  // {
+  //   label: "avuex瀹樼綉",
+  //   icon: 'el-icon-document',
+  //   meta: {
+  //     i18n: 'avuexwebsite',
+  //   },
+  //   path: "https://avuex.avue.top",
+  //   parentId: 2
+  // },
   {
     label: "娴嬭瘯",
     icon: 'el-icon-document',
diff --git a/Source/UBCS-WEB/public/src/views/wel/index.vue b/Source/UBCS-WEB/public/src/views/wel/index.vue
index 3da49f5..b3f6084 100644
--- a/Source/UBCS-WEB/public/src/views/wel/index.vue
+++ b/Source/UBCS-WEB/public/src/views/wel/index.vue
@@ -13,12 +13,12 @@
             <img src="https://img.shields.io/badge/JDK-1.8+-green.svg" alt="Build Status"/>
             <img src="https://img.shields.io/badge/Spring%20Cloud-2021-blue.svg" alt="Coverage Status"/>
             <img src="https://img.shields.io/badge/Spring%20Boot-2.7-blue.svg" alt="Downloads"/>
-            <a target="_blank" href="https://bladex.vip">
+            <!-- <a target="_blank" href="https://bladex.vip">
               <img src="https://img.shields.io/badge/Saber%20Author-Small%20Chill-ff69b4.svg" alt="Downloads"/>
             </a>
             <a target="_blank" href="https://bladex.vip">
               <img src="https://img.shields.io/badge/Copyright%20-@BladeX-%23ff3f59.svg" alt="Downloads"/>
-            </a>
+            </a> -->
           </p>
         </basic-container>
       </el-col>
diff --git a/Source/UBCS-WEB/src/api/code/codebutton.js b/Source/UBCS-WEB/src/api/code/codebutton.js
index 6a650fa..9619933 100644
--- a/Source/UBCS-WEB/src/api/code/codebutton.js
+++ b/Source/UBCS-WEB/src/api/code/codebutton.js
@@ -2,7 +2,7 @@
 
 export const getList = (current, size, params) => {
   return request({
-    url: '/api/ubcs-code/codebutton/list',
+    url: '/api/ubcs-code/codeButtonController/list',
     method: 'get',
     params: {
       ...params,
@@ -14,7 +14,7 @@
 
 export const getDetail = (id) => {
   return request({
-    url: '/api/ubcs-code/codebutton/detail',
+    url: '/api/ubcs-code/codeButtonController/detail',
     method: 'get',
     params: {
       id
@@ -24,7 +24,7 @@
 
 export const remove = (ids) => {
   return request({
-    url: '/api/ubcs-code/codebutton/remove',
+    url: '/api/ubcs-code/codeButtonController/remove',
     method: 'post',
     params: {
       ids,
@@ -34,7 +34,7 @@
 
 export const add = (row) => {
   return request({
-    url: '/api/ubcs-code/codebutton/submit',
+    url: '/api/ubcs-code/codeButtonController/submit',
     method: 'post',
     data: row
   })
@@ -42,7 +42,7 @@
 
 export const update = (row) => {
   return request({
-    url: '/api/ubcs-code/codebutton/submit',
+    url: '/api/ubcs-code/codeButtonController/submit',
     method: 'post',
     data: row
   })
@@ -52,7 +52,7 @@
   debugger;
   if(flag){
     return request({
-      url: '/api/ubcs-code/codebutton/enableData',
+      url: '/api/ubcs-code/codeButtonController/enableData',
       method: 'post',
       params: {
         "oid":ids
@@ -60,7 +60,7 @@
     })
   }
   return request({
-    url: '/api/ubcs-code/codebutton/disableData',
+    url: '/api/ubcs-code/codeButtonController/disableData',
     method: 'post',
     params: {
       "oid":ids
diff --git a/Source/UBCS-WEB/src/api/omd/dict.js b/Source/UBCS-WEB/src/api/omd/dict.js
deleted file mode 100644
index 957bc5e..0000000
--- a/Source/UBCS-WEB/src/api/omd/dict.js
+++ /dev/null
@@ -1,89 +0,0 @@
-import request from '@/router/axios';
-
-export const getList = (current, size, params) => {
-  return request({
-    url: '/api/ubcs-omd/dict/list',
-    method: 'get',
-    params: {
-      ...params,
-      current,
-      size,
-    }
-  })
-}
-
-export const getParentList = (current, size, params) => {
-  return request({
-    url: '/api/ubcs-omd/dict/parent-list',
-    method: 'get',
-    params: {
-      ...params,
-      current,
-      size,
-    }
-  })
-}
-
-export const getChildList = (current, size, parentId, params) => {
-  return request({
-    url: '/api/ubcs-omd/dict/child-list',
-    method: 'get',
-    params: {
-      ...params,
-      current,
-      size,
-      parentId: parentId,
-    }
-  })
-}
-
-export const remove = (ids) => {
-  return request({
-    url: '/api/ubcs-omd/dict/remove',
-    method: 'post',
-    params: {
-      ids,
-    }
-  })
-}
-
-export const add = (row) => {
-  return request({
-    url: '/api/ubcs-omd/dict/submit',
-    method: 'post',
-    data: row
-  })
-}
-
-export const update = (row) => {
-  return request({
-    url: '/api/ubcs-omd/dict/submit',
-    method: 'post',
-    data: row
-  })
-}
-
-
-export const getDict = (id) => {
-  return request({
-    url: '/api/ubcs-omd/dict/detail',
-    method: 'get',
-    params: {
-      id,
-    }
-  })
-}
-export const getDictTree = () => {
-  return request({
-    url: '/api/ubcs-omd/dict/tree?code=DICT',
-    method: 'get'
-  })
-}
-
-export const getDictionary = (params) => {
-  return request({
-    url: '/api/ubcs-omd/dict/dictionary',
-    method: 'get',
-    params,
-  })
-}
diff --git a/Source/UBCS-WEB/src/api/omd/enum.js b/Source/UBCS-WEB/src/api/omd/enum.js
new file mode 100644
index 0000000..0427f19
--- /dev/null
+++ b/Source/UBCS-WEB/src/api/omd/enum.js
@@ -0,0 +1,131 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/ubcs-omd/enum/list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getParentList = (current, size, params) => {
+  return request({
+    url: '/api/ubcs-omd/enum/parent-list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getChildList = (current, size, parentoid, params) => {
+  debugger;
+  return request({
+    url: '/api/ubcs-omd/enumItem/listAll',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+      parentoid: parentoid,
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/ubcs-omd/enum/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const removeChild = (ids) => {
+  return request({
+    url: '/api/ubcs-omd/enumItem/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/ubcs-omd/enum/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const addChild = (row) => {
+  return request({
+    url: '/api/ubcs-omd/enumItem/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  debugger;
+  return request({
+    url: '/api/ubcs-omd/enum/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const updateChild = (row) => {
+  return request({
+    url: '/api/ubcs-omd/enumItem/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+
+export const getDict = (oid) => {
+  return request({
+    url: '/api/ubcs-omd/enum/detail',
+    method: 'get',
+    params: {
+      oid,
+    }
+  })
+}
+export const getDictChild = (oid) => {
+  return request({
+    url: '/api/ubcs-omd/enumItem/detail',
+    method: 'get',
+    params: {
+      oid,
+    }
+  })
+}
+export const getDictTree  = (current, size, params) => {
+  return request({
+    url: '/api/ubcs-omd/enum/tree',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDictionary = (params) => {
+  return request({
+    url: '/api/ubcs-omd/enum/dictionary',
+    method: 'get',
+    params,
+  })
+}
diff --git a/Source/UBCS-WEB/src/components/code-dialog-page/formulaEditor.vue b/Source/UBCS-WEB/src/components/code-dialog-page/formulaEditor.vue
index 1b582e6..d78462b 100644
--- a/Source/UBCS-WEB/src/components/code-dialog-page/formulaEditor.vue
+++ b/Source/UBCS-WEB/src/components/code-dialog-page/formulaEditor.vue
@@ -45,168 +45,168 @@
         <!-- 鍙充晶杩愮畻绗� -->
         <el-col :span="10">
           <el-card
-            class="box-card"
-            style="height: 33vh;">
+            class="box-card formula-box-card"
+            style="height: 35vh;">
             <div slot="header" class="clearfix">
               <span style="font-size: medium">杩愮畻绗�</span>
             </div>
-            <div class="text item">
+            <div class="formula-editor-total">
               <div class="formula-editor">
                 <div class="one">
-                  <button
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '7' })"
                   >
                     7
-                  </button>
-                  <button
+                  </el-button>
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '8' })"
                   >
                     8
-                  </button>
-                  <button
+                  </el-button>
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '9' })"
                   >
                     9
-                  </button>
-                  <button
+                  </el-button>
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '/' })"
                   >
-                    /</button
-                  ><br />
+                    /</el-button>
+                  <br />
                 </div>
                 <div class="one">
-                  <button
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '4' })"
                   >
                     4
-                  </button>
-                  <button
+                  </el-button>
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '5' })"
                   >
                     5
-                  </button>
-                  <button
+                  </el-button>
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '6' })"
                   >
                     6
-                  </button>
-                  <button
+                  </el-button>
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '*' })"
                   >
-                    *</button
-                  ><br />
+                    *</el-button>
+                  <br />
                 </div>
                 <div class="one">
-                  <button
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '1' })"
                   >
                     1
-                  </button>
-                  <button
+                  </el-button>
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '2' })"
                   >
                     2
-                  </button>
-                  <button
+                  </el-button>
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '3' })"
                   >
                     3
-                  </button>
-                  <button
+                  </el-button>
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '>' })"
                   >
-                    -</button
-                  ><br />
+                    -</el-button>
+                  <br />
                 </div>
                 <div class="one">
-                  <button
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '0' })"
                   >
                     0
-                  </button>
-                  <button
+                  </el-button>
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '00' })"
                   >
                     00
-                  </button>
-                  <button
+                  </el-button>
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '.' })"
                   >
                     .
-                  </button>
-                  <button
+                  </el-button>
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '+' })"
                   >
-                    +</button
-                  ><br />
+                    +</el-button>
+                  <br/>
                 </div>
                 <div class="one">
-                  <button
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '->' })"
                   >
                     ->
-                  </button>
-                  <button
+                  </el-button>
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '==' })"
                   >
                     ==
-                  </button>
-                  <button
+                  </el-button>
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '(' })"
                   >
                     (
-                  </button>
-                  <button
+                  </el-button>
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: ')' })"
                   >
-                    )</button
-                  ><br />
+                    )</el-button>
+                  <br />
                 </div>
                 <div class="one">
-                  <button
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '<' })"
                   >
                     &lt;
-                  </button>
-                  <button
+                  </el-button>
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '>' })"
                   >
                     &gt;
-                  </button>
-                  <button
+                  </el-button>
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '<=' })"
                   >
                     &lt;=
-                  </button>
-                  <button
+                  </el-button>
+                  <el-button type="primary"
                     class="formula-editor-btn-sm"
                     @click="dbClickAddContent({ formula: '>=' })"
                   >
                     &gt;=
-                  </button>
+                  </el-button>
                 </div>
               </div>
             </div>
@@ -669,16 +669,27 @@
 };
 </script>
   
-<style scoped>
+<style>
+
+  .formula-box-card > .el-card__body {
+    padding: 0px;
+    height: 85%;
+    width: 100%;
+  }
+  
+  .formula-editor-total {
+    /* margin-top: 3px; */
+    height: 100%;
+    width: 100%;
+  }
+
   .formula-editor{
-    margin-top: -15px;
-    margin-left: 4vw;
     /*璁剧疆寮规�х洅瀛�*/
     display: flex;
     /*瀛愬厓绱犱互绔栧垪鎺掑垪锛屼竴鍏辨湁6鍒�*/
     flex-direction:column;
-    width: 310px;
-    height: 185px;
+    width: 100%;
+    height: 100%;
     /*宸﹀彸鍧囧寑鎺掑垪*/
     justify-content: space-around;
     /*涓婁笅鍧囧寑鎺掑垪*/
@@ -689,17 +700,22 @@
     display: flex;
     /*浠ヨ鎺掑垪*/
     flex-direction: row;
-    width: 223px;
-    height: 80px;
+    width: auto;
+    height: auto;
     justify-content: space-between;
     align-items: center;
 	}    
 
   .formula-editor-btn-sm {
-    width: 55px;
-    height: 29px;
-    background: rgb(153, 214, 240);
-    border-radius: 10%;
+    width: 4.5vw;
+    height: 4vh;
+    margin-left: 10px;
+    text-align: center;
+    line-height: 0;
+    /* background: rgb(153, 214, 240); */
+    background: #87c2fc;
+    /* border-radius: 10%; */
   }
+
 </style>
   
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/components/code-dialog-page/referConfigDialog.vue b/Source/UBCS-WEB/src/components/code-dialog-page/referConfigDialog.vue
new file mode 100644
index 0000000..38708a5
--- /dev/null
+++ b/Source/UBCS-WEB/src/components/code-dialog-page/referConfigDialog.vue
@@ -0,0 +1,618 @@
+<template>
+    <!-- 绗簩灞傚璇濇,灞炴�х爜娈碉紝鍏紡缂栬緫妗嗗脊绐� -->
+    <el-dialog
+      title="鍙傜収閰嶇疆"
+      append-to-body
+      :visible.sync="isShowReferConfig"
+      width="90%"
+      @close="recoveryDataAndForm('initData')"
+      style="height: 110vh; margin-top: -13vh; overflow-y: hidden">
+        <div style="width: 100%; overflow-y: auto; height: 70vh">
+            <el-row>
+                <avue-form :option="formOption" v-model="form"></avue-form>
+            </el-row>
+            <el-row v-show="form.referWindowType==0 || form.referWindowType==3">
+                <avue-crud
+                    ref="crudAttr"
+                    :option="attrOption" 
+                    :data="attrData">
+                    <!-- 琛ㄦ牸鍐呮搷浣滄寜閽� -->
+                    <template slot="menu" slot-scope="scope">
+                        <el-button type="text"
+                            size="small"
+                            icon="el-icon-search"
+                            plain
+                            @click="scope.row.isquery=!scope.row.isquery">
+                            {{scope.row.isquery ? "蹇�熸煡璇�":"鍙栨秷蹇�熸煡璇�"}}
+                        </el-button>
+                        <el-button type="text"
+                            size="small"
+                            icon="el-icon-minus"
+                            plain
+                            @click="removeCurrentRow(scope.row,'removeAttr')">绉婚櫎
+                        </el-button>
+                    </template>
+                    <!-- 琛ㄦ牸宸︿笂鏂规寜閽尯鍩� -->
+                    <template slot="menuLeft" slot-scope="scope">
+                        <el-button type="primary"
+                            size="small"
+                            icon="el-icon-plus"
+                            @click="openAddSearchOrAttrDialog('selectAttr')">閫夋嫨灞炴��
+                        </el-button>
+                    </template>
+                </avue-crud>
+            </el-row>
+            <el-row>
+                <avue-crud
+                    ref="crudAddCondition"
+                    :option="addSearchCondtionOption" 
+                    :data="addSearchCondtionData">
+                    <!-- 琛ㄦ牸鍐呮搷浣滄寜閽� -->
+                    <template slot="menu" slot-scope="scope">
+                        <el-button type="text"
+                            size="small"
+                            icon="el-icon-minus"
+                            plain
+                            @click="removeCurrentRow(scope.row,'removeaddSearchCondtion')">绉婚櫎
+                        </el-button>
+                    </template>
+                    <!-- 琛ㄦ牸宸︿笂鏂规寜閽尯鍩� -->
+                    <template slot="menuLeft" slot-scope="scope">
+                        <el-button type="primary"
+                            size="small"
+                            icon="el-icon-plus"
+                            @click="openAddSearchOrAttrDialog('addSearchCondition')">
+                            娣诲姞鏌ヨ鏉′欢
+                        </el-button>
+                    </template>
+                </avue-crud>
+            </el-row>
+        </div>
+        <div slot="footer" class="dialog-footer">
+            <el-button type="primary" @click="selectedListReferConfig">纭� 瀹�</el-button>
+            <el-button @click="recoveryDataAndForm('initForm')">娓呯┖鍐呭</el-button>
+            <el-button @click="isShowReferConfig = false">鍙� 娑�</el-button>
+        </div>
+    </el-dialog>
+
+</template>
+    
+<script>
+    export default {
+        name: "referConfigDialog",
+        props: {
+            //鏈満鏅彉閲�
+            thisSceneTableData: {
+            type: Array,
+            },
+        },
+        data() {
+            return {
+                labelWidth: '150',   // 鏍囬瀹藉害
+                isShowReferConfig: false,  // 瀵硅瘽妗嗘樉绀洪殣钘忔帶鍒�
+                // 琛ㄥ崟瀵硅薄
+                form: {
+                    text: '',
+                    text1: '',
+                    text2: '',
+                    referWindowType: 0, //鍙傜収绐楀彛绫诲瀷
+                },
+                attrData: [
+                    {
+                        field: 'id',
+                        title: '缂栧彿',
+                        fieldType: 'text',
+                        fieldTypeText: '鏂囨湰妗�',
+                        sort: "true",
+                        sortField: 'id',
+                        width: '150',
+                        isquery: true,
+                    },{
+                        field: 'name',
+                        title: '鍚嶇О',
+                        fieldType: 'text',
+                        fieldTypeText: '鏂囨湰妗�',
+                        sort: "true",
+                        sortField: 'name',
+                        width: '180',
+                        isquery: true,
+                    }
+                ],
+                attrOption: {
+                    height:'150',
+                    tip: false,
+                    addBtn: false,
+                    editBtn: false,
+                    searchShow: false,
+                    searchMenuSpan: 6,
+                    border: false,
+                    index: true,
+                    viewBtn: false,
+                    delBtn: false,
+                    selection: false,
+                    disablePage: false,
+                    refreshBtn: false,
+                    columnBtn: false,
+                    dialogClickModal: false,
+                    highlightCurrentRow: true,
+                    column: [
+                        {
+                            label: "鍒楀瓧娈�(*)",
+                            prop: "field",
+                        },{
+                            label: "鍒楀悕(*)",
+                            prop: "title",
+                        },{
+                            label: "瀛楁绫诲瀷(*)",
+                            prop: "fieldTypeText",
+                        },{
+                            label: "鍒楄〃鍙帓搴�",
+                            prop: "sort",
+                        },{
+                            label: "鎺掑簭瀛楁",
+                            prop: "sortField",
+                        },{
+                            label: "瀛楁瀹藉害",
+                            prop: "width",
+                        },{
+                            label: "鍒楀浐瀹氫綅缃�",
+                            prop: "fixedText",
+                        },{
+                            label: "js鏄剧ず浠g爜",
+                            prop: "templet",
+                        },
+                    ]
+                },
+                addSearchCondtionData: [
+                        {
+                            id: 'test',
+                            cate: 'test',
+                            value: 1
+                        },{
+                            id: 'test1',
+                            cate: 'test1',
+                            value: 2
+                        },{
+                            id: 'test2',
+                            cate: 'test2',
+                            value: 3
+                        },{
+                            id: 'test4',
+                            cate: 'test4',
+                            value: 4
+                        }
+                ],
+                addSearchCondtionOption: {
+                    height:'150',
+                    tip: false,
+                    addBtn: false,
+                    editBtn: false,
+                    searchShow: false,
+                    searchMenuSpan: 6,
+                    border: false,
+                    index: true,
+                    viewBtn: false,
+                    delBtn: false,
+                    selection: false,
+                    disablePage: false,
+                    refreshBtn: false,
+                    columnBtn: false,
+                    dialogClickModal: false,
+                    highlightCurrentRow: true,
+                    column: [
+                        {
+                            label: "绛涢�夊瓧娈�",
+                            prop: "id",
+                        },{
+                            label: "绛涢�夌被鍨�",
+                            prop: "cate",
+                        },{
+                            label: "绛涢�夊��",
+                            prop: "value",
+                        }
+                    ]
+                }
+            };
+        },
+        // 琛ㄥ崟鐣岄潰鏄剧ず鍐呭閰嶇疆
+        computed: {
+            formOption() {
+                return {
+                    submitBtn: false,
+                    emptyBtn: false,
+                    labelWidth: '145', //榛樿鏍囩瀹藉害
+                    // 鍩虹琛ㄥ崟淇℃伅灞曠ず鍖哄煙
+                    column: [
+                        {
+                            label: '鍙傜収鐨勪笟鍔$被鍨�',
+                            prop: 'text1',
+                            span: 7,
+                            type: 'table',
+                            children: {
+                                border: true,
+                                column: [{
+                                    label: '涓氬姟绫诲瀷缂栧彿',
+                                    width: 120,
+                                    search: true,
+                                    searchSpan: 8,
+                                    searchLabelWidth: 100,
+                                    prop: 'id'
+                                },{
+                                    label: '涓氬姟绫诲瀷鍚嶇О',
+                                    search: true,
+                                    searchSpan: 8,
+                                    searchLabelWidth: 100,
+                                    prop: 'name'
+                                },{
+                                    label: '鎻忚堪',
+                                    search: false,
+                                    prop: 'description'
+                                }],
+                            },
+                            rules: [{
+                                required: true,
+                                message: "(鍙傜収鐨勪笟鍔$被鍨�)蹇呭~椤逛笉鑳戒负绌�",
+                                trigger: "blur",
+                            }],
+                        },{
+                            label: '鏄剧ず鐨勫睘鎬�',
+                            prop: 'text2',
+                            tip: '閫夋嫨鏁版嵁鍚庯紝鏄剧ず鍒板瓧娈典笂鐨勪俊鎭墍灞炵殑灞炴�э紝涓�鑸兘鏄痭ame,濡傛灉鏄涓睘鎬т娇鐢ㄩ�楀彿鍒嗗壊锛屽id,name',
+                            tipPlacement: 'right',
+                            span: 7,
+                            rules: [{
+                                required: true,
+                                message: "(鏄剧ず鐨勫睘鎬�)蹇呭~椤逛笉鑳戒负绌�",
+                                trigger: "blur",
+                            }],
+                        },{
+                            label: '瀛樺偍鍊肩殑灞炴��',
+                            prop: 'text2',
+                            tip: '閫夋嫨鏁版嵁鍚庯紝淇濆瓨鍒版暟鎹簱閲岀殑灞炴�э紝涓�鑸兘鏄痮id鎴栬�卛d锛屽鏋滄槸澶氫釜灞炴�т娇鐢ㄩ�楀彿鍒嗗壊锛屽oid ,id',
+                            tipPlacement: 'right',
+                            span: 7,
+                            rules: [{
+                                required: true,
+                                message: "(瀛樺偍鍊肩殑灞炴��)蹇呭~椤逛笉鑳戒负绌�",
+                                trigger: "blur",
+                            }],
+                        },{
+                            label: '鍙傜収绐楀彛绫诲瀷',
+                            prop: 'referWindowType',
+                            //tip: '鎴戞槸涓�涓乏杈规彁绀鸿',
+                            //tipPlacement: 'left',
+                            span: 7,
+                            type: 'select',
+                            dicData: [{
+                                label: '榛樿鏍峰紡',
+                                value: 0
+                            }, {
+                                label: '骞冲彴閰嶇疆',
+                                value: 1
+                            }, {
+                                label: '鏍戝舰',
+                                value: 2
+                            }, {
+                                label: '鍒楄〃',
+                                value: 3
+                            }, {
+                                label: '閮ㄩ棬鏍�',
+                                value: 4
+                            }, {
+                                label: '閮ㄩ棬鍒楄〃',
+                                value: 5
+                            }, {
+                                label: '鐢ㄦ埛',
+                                value: 6
+                            }, {
+                                label: '鐢ㄦ埛鍒楄〃',
+                                value: 7
+                            }, {
+                                label: '瑙掕壊鍒楄〃',
+                                value: 8
+                            }, {
+                                label: '鑱屽姟',
+                                value: 9
+                            }, {
+                                label: '宸ョ',
+                                value: 10
+                            }, {
+                                label: '娴佺▼妯℃澘',
+                                value: 11
+                            }],
+                            rules: [{
+                                required: true,
+                                message: "(鍙傜収绐楀彛绫诲瀷)蹇呭~椤逛笉鑳戒负绌�",
+                                trigger: "blur",
+                            }],
+                        },{
+                            label: '鑷畾涔夌殑鍚庡彴璺緞',
+                            prop: 'text2',
+                            tip: '閫氬父涓虹┖;濡傛灉鏄垪琛紝鍚庡彴蹇呴』杩斿洖DataGrid锛屽鏋滄槸鏍戯紝鍚庡彴蹇呴』杩斿洖List',
+                            tipPlacement: 'right',
+                            span: 7,
+                        },{
+                            label: '鏈嶅姟鐨勫湴鍧�',
+                            prop: 'text2',
+                            tip: '閫氬父涓虹┖锛屽湪鏀寔寰湇鍔℃垨鑰呭垎甯冨紡閮ㄧ讲鐨勬椂鍊欐墠閰嶇疆',
+                            tipPlacement: 'right',
+                            span: 7,
+                        },{
+                            label: '璇锋眰鍚庡彴鐨勫崗璁柟寮�',
+                            prop: 'text2',
+                            //tip: '',
+                            //tipPlacement: 'right',
+                            span: 7,
+                            type: 'select',
+                        },{
+                            label: '绐楀彛鏄剧ず鐨勯珮搴�',
+                            prop: 'text2',
+                            tip: '榛樿绌虹潃锛岃缃悗琛ㄧず寮哄埗鏄剧ず杩欐牱鐨勯珮搴�',
+                            tipPlacement: 'right',
+                            span: 7,
+                        },{
+                            label: '杩囨护(绾ц仈)灞炴��',
+                            prop: 'text2',
+                            tip: '鑾峰彇琛ㄥ崟涓婄殑鍏朵粬灞炴�х殑灞炴�х殑鍊兼潵杩囨护,鎴栬�呬娇鐢ㄦ煇涓睘鎬ф潵绾ц仈閫夋嫨',
+                            tipPlacement: 'right',
+                            span: 7,
+                        },{
+                            label: '杩囨护灞炴�ц姹傚弬鏁�',
+                            prop: 'text2',
+                            tip: '浣跨敤杩囨护灞炴�ф椂锛屽彂閫佺粰鍚庡彴鐨勮姹傚弬鏁�',
+                            tipPlacement: 'right',
+                            span: 7,
+                        },{
+                            label: '鏄惁澶氶��',
+                            type: 'switch',
+                            prop: 'text2',
+                            //tip: '',
+                            //tipPlacement: 'right',
+                            span: 7,
+                            row: true,
+                        },{
+                            label: '鏄犲皠鍏朵粬灞炴��',
+                            prop: 'text2',
+                            tip: '閫夋嫨鏁版嵁鍚庯紝灏嗛�夋嫨鐨勬暟鎹嫹璐濆埌琛ㄥ崟閲岀殑鍏朵粬灞炴�э紝涔﹀啓鏍煎紡涓簕褰撳墠琛ㄥ崟涓婄殑灞炴��:閫夋嫨鏁版嵁閲岀殑灞炴��,XXXXx:yyyy}',
+                            tipPlacement: 'right',
+                            span: 18,
+                        }
+                    ],
+                    // 鍙樺姩鐨勮〃鍗曞尯鍩�
+                    group: [
+                        {   
+                            display: this.form.referWindowType==0||this.form.referWindowType==3,
+                            icon: 'el-icon-info',
+                            label: this.form.referWindowType==0 ? '榛樿鍙傜収鐨勯厤缃�(涓嬫柟鍒楄〃)':'鍒楄〃鍙傜収鐨勯厤缃紙涓嬫柟鍒楄〃)',
+                            collapse: true,
+                            prop: 'group1',
+                            column: [
+                                {
+                                    label: '姣忛〉鏄剧ず鏉℃暟',
+                                    prop: 'text1',
+                                    span: 7,
+                                    tip: '鍒嗛〉鏃舵瘡椤垫樉绀虹殑鏁伴噺锛屼笉鍒嗛〉濉�-1',
+                                    tipPlacement: 'right',
+                                },{
+                                    label: '鎺掑簭瀛楁',
+                                    prop: 'text1',
+                                    span: 7,
+                                    type: 'table',
+                                    children: {
+                                        border: true,
+                                        column: [{
+                                            label: '灞炴�ц嫳鏂囩紪鍙�',
+                                            width: 120,
+                                            search: true,
+                                            searchSpan: 8,
+                                            searchLabelWidth: 100,
+                                            prop: 'id'
+                                        },{
+                                            label: '灞炴�т腑鏂囧悕绉�',
+                                            search: true,
+                                            searchSpan: 8,
+                                            searchLabelWidth: 100,
+                                            prop: 'name'
+                                        },{
+                                            label: '灞炴�ч暱搴�',
+                                            search: false,
+                                            prop: 'attrLength'
+                                        },{
+                                            label: '灞炴�х被鍨�',
+                                            search: false,
+                                            prop: 'attrType'
+                                        }],
+                                    },
+                                },{
+                                    label: '鎺掑簭绫诲瀷',
+                                    prop: 'text1',
+                                    span: 7,
+                                    type: 'select',
+                                    tip: '鏌ヨ鏁版嵁鏃剁殑鎺掑簭绫诲瀷',
+                                    tipPlacement: 'right',
+                                }
+                            ]
+                        },
+                        {   
+                            display: this.form.referWindowType==1,
+                            icon: 'el-icon-info',
+                            label: 'stand(骞冲彴閰嶇疆)鍙傜収',
+                            collapse: true,
+                            prop: 'group2',
+                            column: [
+                                {
+                                    label: '鍙傝�冪殑UI涓婁笅鏂�',
+                                    prop: 'text1',
+                                    span: 7,
+                                    tip: '鍙湁鍙傜収绐楀彛绫诲瀷鏄痵tand鏃舵墠蹇呴』璁剧疆,涓斿湪stand绫诲瀷涓嬫墠鑳界敓鏁�',
+                                    tipPlacement: 'right',
+                                },
+                                {
+                                    label: '骞冲彴鐨勮〃鏍肩紪鍙�',
+                                    prop: 'text1',
+                                    span: 7,
+                                    tip: '涓庡弬鐓х殑UI涓婁笅鏂囦簰鏂ワ紝鍙湁鍙傜収绐楀彛绫诲瀷鏄痵tand鏃舵墠蹇呴』璁剧疆锛屼笖鍦╯tand绫诲瀷涓嬫墠鑳界敓鏁�',
+                                    tipPlacement: 'right',
+                                    type: 'table',
+                                    children: {
+                                        border: true,
+                                        column: [{
+                                            label: '灞炴�ц嫳鏂囩紪鍙�',
+                                            width: 120,
+                                            search: true,
+                                            searchSpan: 8,
+                                            searchLabelWidth: 100,
+                                            prop: 'id'
+                                        },{
+                                            label: '灞炴�т腑鏂囧悕绉�',
+                                            search: true,
+                                            searchSpan: 8,
+                                            searchLabelWidth: 100,
+                                            prop: 'name'
+                                        },{
+                                            label: '灞炴�ч暱搴�',
+                                            search: false,
+                                            prop: 'attrLength'
+                                        },{
+                                            label: '灞炴�х被鍨�',
+                                            search: false,
+                                            prop: 'attrType'
+                                        }],
+                                    },
+                                },
+                            ]
+                        },
+                        {   
+                            display: this.form.referWindowType==2,
+                            icon: 'el-icon-info',
+                            label: '鏍戝舰鍙傜収淇℃伅',
+                            collapse: true,
+                            prop: 'group3',
+                            labelWidth: '158',
+                            column: [
+                                {
+                                    label: '鏍戝舰鐨勪笂绾ф爲褰�',
+                                    prop: 'text1',
+                                    span: 7,
+                                    tip: '鏍戝舰灞曠ず鐨勬椂鍊欙紝涓婁笅绾у叧绯绘煡鎵剧殑灞炴�с��',
+                                    tipPlacement: 'right',
+                                },{
+                                    label: '涓婄骇灞炴�у�煎搴斿睘鎬�',
+                                    prop: 'text1',
+                                    span: 7,
+                                    tip: '涓婄骇灞炴�у瓨鍌ㄧ殑鍊�,鏄笂绾ф暟鎹殑浠�涔堝睘鎬с�備竴鑸兘鏄痮id銆�',
+                                    tipPlacement: 'right',
+                                },{
+                                    label: '鏍硅妭鐐圭殑鍊�',
+                                    prop: 'text1',
+                                    span: 7,
+                                    tip: '鏍戝舰灞曠ず鐨勬椂鍊欙紝涓婄骇鐨勫�笺��',
+                                    tipPlacement: 'right',
+                                },{
+                                    label: '鏍戝姞杞芥柟寮�',
+                                    prop: 'text1',
+                                    span: 7,
+                                    type: 'select',
+                                },{
+                                    label: '鏄惁鍙兘閫夋嫨鍙跺瓙鑺傜偣',
+                                    prop: 'text1',
+                                    span: 7,
+                                    type: 'switch',
+                                },{
+                                    label: '鎺掑簭瀛楁',
+                                    prop: 'text1',
+                                    span: 7,
+                                    type: 'table',
+                                    children: {
+                                        border: true,
+                                        column: [{
+                                            label: '灞炴�ц嫳鏂囩紪鍙�',
+                                            width: 120,
+                                            search: true,
+                                            searchSpan: 8,
+                                            searchLabelWidth: 100,
+                                            prop: 'id'
+                                        },{
+                                            label: '灞炴�т腑鏂囧悕绉�',
+                                            search: true,
+                                            searchSpan: 8,
+                                            searchLabelWidth: 100,
+                                            prop: 'name'
+                                        },{
+                                            label: '灞炴�ч暱搴�',
+                                            search: false,
+                                            prop: 'attrLength'
+                                        },{
+                                            label: '灞炴�х被鍨�',
+                                            search: false,
+                                            prop: 'attrType'
+                                        }],
+                                    },
+                                },{
+                                    label: '鎺掑簭绫诲瀷',
+                                    prop: 'text1',
+                                    span: 7,
+                                    type: 'select',
+                                },
+                            ]
+                        },
+                    ]
+                }
+            },
+        },
+        methods: {
+            // 閫夋嫨瀹屽弬鐓ч厤缃箣鍚庣偣鍑讳繚瀛樻寜閽Е鍙�
+            selectedListReferConfig(){
+                console.log(this.option);
+                console.log(this.form.referWindowType);
+            },
+            /** 鍏跺疄閫夊彇灞炴�ц〃鏍肩殑榛樿鏁版嵁涓嶉渶瑕佸姞杞斤紝
+             浣嗘槸寮圭獥鎵撳紑浼氭湁琛ㄦ牸閿欒闂鎵�浠ラ渶瑕佸湪杩欒皟鐢╠oLayout鏂规硶*/
+            onloadAttrData(){
+                this.$nextTick(() => {
+                    this.$refs.crudAttr.doLayout()
+                })
+            },
+            // 灞炴�ч�夋嫨琛ㄦ牸涓殑绉婚櫎鎸夐挳鍔熻兘
+            removeCurrentRow(row,condition){
+                if(condition=='removeAttr'){
+                    this.$delete(this.attrData, row.$index);
+                    return;
+                }
+                this.$delete(this.addSearchCondtionData, row.$index);
+            },
+            // 璇ョ晫闈㈢殑鏁版嵁杩涜鍒濆鍖栧鍘�
+            recoveryDataAndForm(condition){
+                if(condition=='initForm'){
+                    this.form = this.$options.data().form;
+                    return;
+                }
+                Object.assign(this.$data,this.$options.data());         
+            },
+            // 鎵撳紑娣诲姞鏌ヨ鏉′欢瀵硅瘽妗�
+            openAddSearchOrAttrDialog(condition){
+                if(condition=='addSearchCondition'){
+                    console.log('this is open addSearchCondition');
+                }else {
+                    console.log('this is open selectAttr');
+                }
+            }
+        }
+    };
+</script>
+
+<style>
+
+    /* 鎻愮ず鏂囨湰鍑虹幇鐨勯�熷害 */
+    .el-tooltip__popper{
+        width: 200px !important;
+        transition-duration: 0.2s !important;
+        transition-delay: 0.1s !important;
+    }
+    /* 鎻愮ず鏂囨湰娑堝け鏃剁殑閫熷害 */
+    .fel-fade-in-linear-leave-active,.el-fade-in-linear-leave-to{
+        -webkit-transition:opacity .0s !important;
+        transition:opacity .0s !important;
+    }
+    
+</style>
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/const/code/codeSynonym.js b/Source/UBCS-WEB/src/const/code/codeSynonym.js
index 038020a..4c2b50f 100644
--- a/Source/UBCS-WEB/src/const/code/codeSynonym.js
+++ b/Source/UBCS-WEB/src/const/code/codeSynonym.js
@@ -10,6 +10,7 @@
   viewBtn: true,
   selection: true,
   dialogClickModal: false,
+  highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
   column: [
     {
       label: "",
diff --git a/Source/UBCS-WEB/src/const/code/codebasic.js b/Source/UBCS-WEB/src/const/code/codebasic.js
index a67ccaa..40a1b65 100644
--- a/Source/UBCS-WEB/src/const/code/codebasic.js
+++ b/Source/UBCS-WEB/src/const/code/codebasic.js
@@ -13,6 +13,9 @@
     selection: true,
     menuWidth:260,
     dialogClickModal: false,
+    refreshBtn: true,
+    columnBtn: true,
+    searchShowBtn: false,
     highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
     column: [
       {
@@ -20,14 +23,14 @@
         prop: "id",
         search: true,
         searchLabelWidth: 80,
-        searchSpan: 5,
+        searchSpan: 6,
       },
       {
         label: "鐮佹鍚嶇О",
         prop: "name",
         search: true,
         searchLabelWidth: 80,
-        searchSpan: 5,
+        searchSpan: 6,
       },
       {
         label: "鐮佹鎻忚堪",
diff --git a/Source/UBCS-WEB/src/const/code/codebutton.js b/Source/UBCS-WEB/src/const/code/codebutton.js
index 75d3028..6b43ddb 100644
--- a/Source/UBCS-WEB/src/const/code/codebutton.js
+++ b/Source/UBCS-WEB/src/const/code/codebutton.js
@@ -11,6 +11,7 @@
   viewBtn: true,
   selection: true,
   dialogClickModal: false,
+  highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
   column: [
     {
       label: "",
diff --git a/Source/UBCS-WEB/src/const/code/mdmrule.js b/Source/UBCS-WEB/src/const/code/mdmrule.js
index 2a27f96..3fb66a1 100644
--- a/Source/UBCS-WEB/src/const/code/mdmrule.js
+++ b/Source/UBCS-WEB/src/const/code/mdmrule.js
@@ -57,6 +57,13 @@
       search: true,
       searchLabelWidth: 45,
       searchSpan: 5,
+      type: 'select',
+      //鐢变簬杩欎釜鎺ュ彛杩樺湪璋冭瘯鎵�浠ヨ绛夎皟濂戒簡鎵嶈兘璋冪敤
+      dicUrl: "/api/ubcs-omd/enum/dictionary?code=codeSearchLCStatus",
+      props: {
+        label: "itemName",
+        value: "itemValue"
+      },
       display: false,
     },
   ]
diff --git a/Source/UBCS-WEB/src/const/code/selectattroption.js b/Source/UBCS-WEB/src/const/code/selectattroption.js
index 5fa3fe7..6aa7405 100644
--- a/Source/UBCS-WEB/src/const/code/selectattroption.js
+++ b/Source/UBCS-WEB/src/const/code/selectattroption.js
@@ -13,7 +13,7 @@
     selection: true,
     menu: false,
     dialogClickModal: false,
-    
+    highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
     column: [
       {
         label: "灞炴�ц嫳鏂囧悕绉�",
diff --git a/Source/UBCS-WEB/src/const/omd/dict.js b/Source/UBCS-WEB/src/const/omd/enum.js
similarity index 70%
rename from Source/UBCS-WEB/src/const/omd/dict.js
rename to Source/UBCS-WEB/src/const/omd/enum.js
index d6c8c32..43d3b69 100644
--- a/Source/UBCS-WEB/src/const/omd/dict.js
+++ b/Source/UBCS-WEB/src/const/omd/enum.js
@@ -14,7 +14,7 @@
   column: [
     {
       label: "浠e彿",
-      prop: "code",
+      prop: "name",
       search: true,
       slot: true,
       span: 24,
@@ -28,7 +28,7 @@
     },
     {
       label: "鍚嶇О",
-      prop: "dictValue",
+      prop: "label",
       search: true,
       align: "center",
       rules: [
@@ -39,21 +39,21 @@
         }
       ]
     },
-    {
-      label: "鏋氫妇鎺掑簭",
-      prop: "sort",
-      type: "number",
-      align: "right",
-      width: 100,
-      hide: true,
-      rules: [
-        {
-          required: true,
-          message: "璇疯緭鍏ユ灇涓炬帓搴�",
-          trigger: "blur"
-        }
-      ]
-    },
+    // {
+    //   label: "鏋氫妇鎺掑簭",
+    //   prop: "sort",
+    //   type: "number",
+    //   align: "right",
+    //   width: 100,
+    //   hide: true,
+    //   rules: [
+    //     {
+    //       required: true,
+    //       message: "璇疯緭鍏ユ灇涓炬帓搴�",
+    //       trigger: "blur"
+    //     }
+    //   ]
+    // },
     // {
     //   label: "灏佸瓨",
     //   prop: "isSealed",
@@ -105,25 +105,25 @@
   dialogWidth: 880,
   dialogClickModal: false,
   column: [
-    {
-      label: "浠e彿",
-      prop: "code",
-      addDisabled: true,
-      editDisabled: true,
-      search: true,
-      span: 24,
-      hide: true,
-      rules: [
-        {
-          required: true,
-          message: "璇疯緭鍏ヤ唬鍙�",
-          trigger: "blur"
-        }
-      ]
-    },
+    // {
+    //   label: "浠e彿",
+    //   prop: "value",
+    //   addDisabled: true,
+    //   editDisabled: true,
+    //   search: true,
+    //   span: 24,
+    //   hide: true,
+    //   rules: [
+    //     {
+    //       required: true,
+    //       message: "璇疯緭鍏ヤ唬鍙�",
+    //       trigger: "blur"
+    //     }
+    //   ]
+    // },
     {
       label: "鍚嶇О",
-      prop: "dictValue",
+      prop: "name",
       search: true,
       align: "center",
       rules: [
@@ -134,29 +134,30 @@
         }
       ]
     },
-    {
-      label: "涓婄骇",
-      prop: "parentId",
-      type: "tree",
-      dicData: [],
-      hide: true,
-      props: {
-        label: "title"
-      },
-      addDisabled: true,
-      editDisabled: true,
-      rules: [
-        {
-          required: false,
-          message: "璇烽�夋嫨涓婄骇",
-          trigger: "click"
-        }
-      ]
-    },
+    // {
+    //   label: "涓婄骇",
+    //   prop: "parentoid",
+    //   type: "tree",
+    //   dicData: [],
+    //   hide: true,
+    //   props: {
+    //     label: "title"
+    //   },
+    //   addDisabled: true,
+    //   editDisabled: true,
+    //   rules: [
+    //     {
+    //       required: false,
+    //       message: "璇烽�夋嫨涓婄骇",
+    //       trigger: "click"
+    //     }
+    //   ]
+    // },
     {
       label: "鍊�",
-      prop: "dictKey",
+      prop: "value",
       width: 80,
+      search: true,
       rules: [
         {
           required: true,
@@ -164,6 +165,10 @@
           trigger: "blur"
         }
       ]
+    },{
+      label: "鎻忚堪",
+      prop: "description",
+      // hide: true
     },
     {
       label: "鏋氫妇鎺掑簭",
@@ -205,10 +210,6 @@
     //     }
     //   ]
     // },
-    {
-      label: "鎻忚堪",
-      prop: "remark",
-      // hide: true
-    }
+
   ]
 };
diff --git a/Source/UBCS-WEB/src/main.js b/Source/UBCS-WEB/src/main.js
index 70cbc70..373277b 100644
--- a/Source/UBCS-WEB/src/main.js
+++ b/Source/UBCS-WEB/src/main.js
@@ -36,6 +36,8 @@
 import classifyTreeform from "@/components/Tree/classifyTreeform"
 import TemplatePro from "@/components/Tree/TemplatePro"
 import formulaEditor from "@/components/code-dialog-page/formulaEditor"
+import referConfigDialog from "@/components/code-dialog-page/referConfigDialog"
+import businessAdd from "@/views/modeling/BusinessAdd"
 
 // 娉ㄥ唽鍏ㄥ眬crud椹卞姩
 window.$crudCommon = crudCommon;
@@ -69,6 +71,8 @@
 Vue.component('classifyTreeform',classifyTreeform)
 Vue.component('TemplatePro',TemplatePro)
 Vue.component('formulaEditor',formulaEditor)
+Vue.component('referConfigDialog',referConfigDialog)
+Vue.component('businessAdd',businessAdd)
 
 // 鍔犺浇鐩稿叧url鍦板潃
 Object.keys(urls).forEach(key => {
diff --git a/Source/UBCS-WEB/src/mock/menu.js b/Source/UBCS-WEB/src/mock/menu.js
index ce5eaea..b457291 100644
--- a/Source/UBCS-WEB/src/mock/menu.js
+++ b/Source/UBCS-WEB/src/mock/menu.js
@@ -9,24 +9,24 @@
   },
   parentId: 0
 },
-  {
-    label: "bladex瀹樼綉",
-    icon: 'el-icon-document',
-    meta: {
-      i18n: 'website',
-    },
-    path: "https://bladex.vip/#/",
-    parentId: 1
-  },
-  {
-    label: "avuex瀹樼綉",
-    icon: 'el-icon-document',
-    meta: {
-      i18n: 'avuexwebsite',
-    },
-    path: "https://avuex.avue.top",
-    parentId: 2
-  },
+  // {
+  //   label: "bladex瀹樼綉",
+  //   icon: 'el-icon-document',
+  //   meta: {
+  //     i18n: 'website',
+  //   },
+  //   path: "https://bladex.vip/#/",
+  //   parentId: 1
+  // },
+  // {
+  //   label: "avuex瀹樼綉",
+  //   icon: 'el-icon-document',
+  //   meta: {
+  //     i18n: 'avuexwebsite',
+  //   },
+  //   path: "https://avuex.avue.top",
+  //   parentId: 2
+  // },
   {
     label: "娴嬭瘯",
     icon: 'el-icon-document',
diff --git a/Source/UBCS-WEB/src/page/login/userlogin.vue b/Source/UBCS-WEB/src/page/login/userlogin.vue
index af14bc8..2bbf23b 100644
--- a/Source/UBCS-WEB/src/page/login/userlogin.vue
+++ b/Source/UBCS-WEB/src/page/login/userlogin.vue
@@ -229,7 +229,7 @@
     },
     handleLogin: function () {
       this.userInfo = this.$store.state.upadatastatus
-      console.log(this.userInfo)
+      //console.log(this.userInfo)
       this.$refs.loginForm.validate(valid => {
         if (valid) {
           const loading = this.$loading({
diff --git a/Source/UBCS-WEB/src/views/authority/apiscope.vue b/Source/UBCS-WEB/src/views/authority/apiscope.vue
index 1e9f47a..133b675 100644
--- a/Source/UBCS-WEB/src/views/authority/apiscope.vue
+++ b/Source/UBCS-WEB/src/views/authority/apiscope.vue
@@ -12,6 +12,7 @@
                @row-save="rowSave"
                @search-change="searchChange"
                @search-reset="searchReset"
+               @row-click="clickRowChange"
                @selection-change="selectionChange"
                @current-change="currentChange"
                @size-change="sizeChange"
@@ -50,6 +51,7 @@
                    :before-open="beforeOpenScope"
                    @search-change="searchChangeScope"
                    @search-reset="searchResetScope"
+                   @row-click="clickRowChangeResetScope"
                    @selection-change="selectionChangeScope"
                    @current-change="currentChangeScope"
                    @size-change="sizeChangeScope"
@@ -457,8 +459,15 @@
         this.onLoad(this.page, params);
         done();
       },
+      clickRowChange(row){
+        this.$refs.crud.toggleSelection();
+        this.selectionList = row;
+        this.$refs.crud.setCurrentRow(row);
+        this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
+      },
       selectionChange(list) {
         this.selectionList = list;
+        this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
       },
       selectionClear() {
         this.selectionList = [];
@@ -615,8 +624,15 @@
         this.onLoadScope(this.pageScope, params);
         done();
       },
+      clickRowChangeResetScope(row){
+        this.$refs.crudScope.toggleSelection();
+        this.selectionList = row;
+        this.$refs.crudScope.setCurrentRow(row);
+        this.$refs.crudScope.toggleRowSelection(row); //閫変腑褰撳墠琛�
+      },
       selectionChangeScope(list) {
         this.selectionListScope = list;
+        this.$refs.crudScope.setCurrentRow(this.selectionList[list.length-1]);
       },
       currentChangeScope(currentPage) {
         this.pageScope.currentPage = currentPage;
diff --git a/Source/UBCS-WEB/src/views/authority/datascope.vue b/Source/UBCS-WEB/src/views/authority/datascope.vue
index d944116..68ec880 100644
--- a/Source/UBCS-WEB/src/views/authority/datascope.vue
+++ b/Source/UBCS-WEB/src/views/authority/datascope.vue
@@ -13,6 +13,7 @@
                @row-save="rowSave"
                @search-change="searchChange"
                @search-reset="searchReset"
+               @row-click="clickRowChange"
                @selection-change="selectionChange"
                @current-change="currentChange"
                @size-change="sizeChange"
@@ -51,6 +52,7 @@
                    :before-open="beforeOpenScope"
                    @search-change="searchChangeScope"
                    @search-reset="searchResetScope"
+                   @row-click="clickRowChangeScope"
                    @selection-change="selectionChangeScope"
                    @current-change="currentChangeScope"
                    @size-change="sizeChangeScope"
@@ -130,6 +132,7 @@
           delBtn: false,
           menuWidth: 150,
           dialogClickModal: false,
+          highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
           column: [
             {
               label: "鑿滃崟鍚嶇О",
@@ -317,6 +320,7 @@
           menuWidth: 200,
           dialogWidth: 900,
           dialogClickModal: false,
+          highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
           column: [
             {
               label: "鏉冮檺鍚嶇О",
@@ -535,8 +539,15 @@
         this.onLoad(this.page, params);
         done();
       },
+      clickRowChange(row){
+        this.$refs.crud.toggleSelection();
+        this.selectionList = row;
+        this.$refs.crud.setCurrentRow(row);
+        this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
+      },
       selectionChange(list) {
         this.selectionList = list;
+        this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
       },
       selectionClear() {
         this.selectionList = [];
@@ -703,8 +714,15 @@
         this.onLoadScope(this.pageScope, params);
         done();
       },
+      clickRowChangeScope(row){
+        this.$refs.crudScope.toggleSelection();
+        this.selectionList = row;
+        this.$refs.crudScope.setCurrentRow(row);
+        this.$refs.crudScope.toggleRowSelection(row); //閫変腑褰撳墠琛�
+      },
       selectionChangeScope(list) {
         this.selectionListScope = list;
+        this.$refs.crudScope.setCurrentRow(this.selectionList[list.length-1]);
       },
       currentChangeScope(currentPage) {
         this.pageScope.currentPage = currentPage;
diff --git a/Source/UBCS-WEB/src/views/authority/role.vue b/Source/UBCS-WEB/src/views/authority/role.vue
index 0384af2..14b2e79 100644
--- a/Source/UBCS-WEB/src/views/authority/role.vue
+++ b/Source/UBCS-WEB/src/views/authority/role.vue
@@ -12,6 +12,7 @@
                @row-save="rowSave"
                @search-change="searchChange"
                @search-reset="searchReset"
+               @row-click="clickRowChange"
                @selection-change="selectionChange"
                @current-change="currentChange"
                @size-change="sizeChange"
@@ -107,6 +108,7 @@
           total: 0
         },
         option: {
+          height: "auto",
           tip: false,
           simplePage: true,
           searchShow: true,
@@ -118,6 +120,7 @@
           viewBtn: true,
           dialogWidth: 900,
           dialogClickModal: false,
+          highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
           column: [
             {
               label: "瑙掕壊鍚嶇О",
diff --git a/Source/UBCS-WEB/src/views/code/code.vue b/Source/UBCS-WEB/src/views/code/code.vue
index 89dd072..b30a4e4 100644
--- a/Source/UBCS-WEB/src/views/code/code.vue
+++ b/Source/UBCS-WEB/src/views/code/code.vue
@@ -184,6 +184,7 @@
             ref="crudCloneCodeBasicOther"
             :table-loading="loadingBasic"
             :data="basicData"
+            @row-click="codeOtherCloneBasicRowClick"
             @selection-change="selectionOtherCloneCodeBasicChange">
           </avue-crud>
         </el-row>
@@ -202,6 +203,9 @@
         ref="crudBasic"
         :table-loading="loadingBasic"
         :data="basicData"
+        @row-click="codeBasicSecRowClick"
+        @search-change="basicSearchChange"
+        @search-reset="basicSearchReset"
         :permission="permissionList"
         @selection-change="selectionBasicChange"
         @refresh-change="refreshChangeBasicSec">
@@ -252,15 +256,19 @@
       <!-- 鍩虹鐮佹琛ㄦ牸宸︿笂鏂规寜閽尯鍩� -->
       <template slot="menuLeft" slot-scope="scope">
         <el-button type="primary"
-                  size="small"
-                  icon="el-icon-plus"
-                  @click="addBasicCodeSec">鏂� 澧�
+            size="small"
+            icon="el-icon-plus"
+            :disabled="selectionList.length <= 0"
+            @click="addBasicCodeSec">
+            鏂� 澧�
         </el-button>
         <el-button type="danger"
-                  size="small"
-                  icon="el-icon-delete"
-                  plain
-                  @click="deleteBasicCode(scope.row)">鍒� 闄�
+            size="small"
+            icon="el-icon-delete"
+            :disabled="selectionList.length <= 0"
+            plain
+            @click="deleteBasicCode(scope.row)">
+            鍒� 闄�
         </el-button>
       </template>
 
@@ -360,7 +368,7 @@
             </div>
             <div style="margin-top:20px; display: flex; align-items:center; justify-content:center;">
               <el-button :disabled="selectedFixedOrCodeclassifyValue!=''" size="mini" type="primary" icon="el-icon-circle-plus" class="button" @click="addCodeSecValue('codefixedsec')">娣诲姞</el-button>
-              <el-button :disabled="selectedFixedOrCodeclassifyValue==''" size="mini" type="success" plain plain icon="el-icon-edit-outline" class="button" @click="editCodeSecValue('codefixedsec')">淇敼</el-button>
+              <el-button :disabled="selectedFixedOrCodeclassifyValue==''" size="mini" type="success" plain icon="el-icon-edit-outline" class="button" @click="editCodeSecValue('codefixedsec')">淇敼</el-button>
               <el-button :disabled="selectedFixedOrCodeclassifyValue==''" size="mini" type="danger" icon="el-icon-close" class="button" @click="delCodeSecValue('codefixedsec')">鍒犻櫎</el-button>
               <el-button size="mini" type="warning" plain icon="el-icon-close" class="button" @click = "clearFixedOrClassifyForm('codefixedsec')">鍙栨秷</el-button>
             </div>
@@ -379,8 +387,8 @@
       @close="clearBasicAddForm">
 
       <!--  绗竴灞傚璇濇,娣诲姞鐮佹淇℃伅瀵硅瘽妗嗕腑鐨勫唴瀹� -->
-      <div class="total" style="overflow-y: auto; height: 70vh">
-        <el-form :model="form">
+      <div class="add-basicsec-total" style="overflow-y: auto; height: 70vh">
+        <el-form :model="form" class="add-basicsec-form">
           <span class="left">
             <el-form-item label="鐮佹缂栧彿:" :label-width="leftFormLabelWidth" required>
               <el-input v-model="form.id" :readonly="basicSecOnlyRead" ref="id"></el-input>
@@ -394,9 +402,9 @@
               <el-select v-model="form.secType" placeholder="璇烽�夋嫨" @change="changeSectypeFormItems(null)" :disabled="basicSecOnlyRead">
                 <el-option
                   v-for="item in sectypeList"
-                  :key="item.dictValue"
-                  :label="item.dictValue"
-                  :value="item.dictKey">
+                  :key="item.itemValue"
+                  :label="item.itemName"
+                  :value="item.itemValue">
                 </el-option>
               </el-select>
             </el-form-item>
@@ -422,9 +430,9 @@
                 <el-select v-model="form.codeSecLengthType" placeholder="璇烽�夋嫨" :disabled="basicSecOnlyRead">
                   <el-option
                   v-for="item in codeSecLengthType"
-                  :key="item.dictValue"
-                  :label="item.dictValue"
-                  :value="item.dictKey">
+                  :key="item.itemValue"
+                  :label="item.itemName"
+                  :value="item.itemValue">
                 </el-option>
                 </el-select>
               </el-form-item>
@@ -479,9 +487,9 @@
                 <el-select v-model="form.codeFillType" placeholder="璇烽�夋嫨" :disabled="basicSecOnlyRead">
                   <el-option label="宸﹁ˉ浣�" value="codeattrsec"
                     v-for="item in codeFillType"
-                    :key="item.dictValue"
-                    :label="item.dictValue"
-                    :value="item.dictKey">
+                    :key="item.itemValue"
+                    :label="item.itemName"
+                    :value="item.itemValue">
                   </el-option>
                 </el-select>
               </el-form-item>
@@ -489,9 +497,9 @@
                 <el-select v-model="form.codeFillSeparatorSelect" @blur="inputSelectBlur" filterable placeholder="璇烽�夋嫨" :disabled="basicSecOnlyRead">
                   <el-option
                     v-for="item in codeFillSeparator"
-                    :key="item.dictValue"
-                    :label="item.dictValue"
-                    :value="item.dictKey">
+                    :key="item.itemValue"
+                    :label="item.itemName"
+                    :value="item.itemValue">
                   </el-option>
                 </el-select>
               </el-form-item>
@@ -514,9 +522,9 @@
                 <el-select v-model="form.codeLevelType" placeholder="璇烽�夋嫨" :disabled="basicSecOnlyRead">
                   <el-option
                     v-for="item in codeLevelType"
-                    :key="item.dictValue"
-                    :label="item.dictValue"
-                    :value="item.dictKey">
+                    :key="item.itemValue"
+                    :label="item.itemName"
+                    :value="item.itemValue">
                   </el-option>
                 </el-select>
               </el-form-item>
@@ -527,9 +535,9 @@
                 <el-select v-model="form.valueCutType" placeholder="璇烽�夋嫨" :disabled="basicSecOnlyRead">
                   <el-option
                     v-for="item in codeCutType"
-                    :key="item.dictValue"
-                    :label="item.dictValue"
-                    :value="item.dictKey">
+                    :key="item.itemValue"
+                    :label="item.itemName"
+                    :value="item.itemValue">
                   </el-option>
                 </el-select>
               </el-form-item>
@@ -537,9 +545,9 @@
                 <el-select v-model="form.codeGetValueType" placeholder="璇烽�夋嫨" :disabled="basicSecOnlyRead">
                   <el-option
                     v-for="item in codeGetValueType"
-                    :key="item.dictValue"
-                    :label="item.dictValue"
-                    :value="item.dictKey">
+                    :key="item.itemValue"
+                    :label="item.itemName"
+                    :value="item.itemValue">
                   </el-option>
                 </el-select>
               </el-form-item>
@@ -583,9 +591,9 @@
                 <el-select v-model="form.codeSecLengthType" placeholder="璇烽�夋嫨" :disabled="basicSecOnlyRead">
                   <el-option
                     v-for="item in codeSecLengthType"
-                    :key="item.dictValue"
-                    :label="item.dictValue"
-                    :value="item.dictKey">
+                    :key="item.itemValue"
+                    :label="item.itemName"
+                    :value="item.itemValue">
                   </el-option>
                 </el-select>
               </el-form-item>
@@ -600,7 +608,7 @@
                   placeholder="璇烽�夋嫨"
                   prefix-icon="el-icon-search"
                   readonly="true"
-                  v-model="form.parentClassifySecOid"
+                  v-model="form.parentClassifySecText"
                   @focus="openAttrSelectOrGetValue('parentClassifySecOid')"
                   :disabled="basicSecOnlyRead">
                   <i slot="suffix" class="el-icon-circle-close" @click="clearAttrDataByIcon('parentClassifySecOid')" style="margin-right: 5px;cursor: pointer;"></i>
@@ -616,9 +624,9 @@
                 <el-select v-model="form.codeFillType" placeholder="璇烽�夋嫨" :disabled="basicSecOnlyRead">
                   <el-option
                       v-for="item in codeFillType"
-                      :key="item.dictValue"
-                      :label="item.dictValue"
-                      :value="item.dictKey">
+                      :key="item.itemValue"
+                      :label="item.itemName"
+                      :value="item.itemValue">
                   </el-option>
                 </el-select>
               </el-form-item>
@@ -626,9 +634,9 @@
                 <el-select v-model="form.codeFillSeparatorSelect" filterable @blur="inputSelectBlur" placeholder="璇烽�夋嫨" :disabled="basicSecOnlyRead">
                   <el-option
                     v-for="item in codeFillSeparator"
-                    :key="item.dictValue"
-                    :label="item.dictValue"
-                    :value="item.dictKey">
+                    :key="item.itemValue"
+                    :label="item.itemName"
+                    :value="item.itemValue">
                   </el-option>
                 </el-select>
               </el-form-item>
@@ -643,7 +651,7 @@
         <el-button type="primary" @click="saveOrEditBasicCode" v-show="showbtn">淇� 瀛�</el-button>
       </div>
 
-      <!--  绗簩灞傚璇濇,灞炴�х爜娈碉紝灞炴�ч�夋嫨寮圭獥 -->
+      <!--  绗簩灞傚璇濇,灞炴�х爜娈碉紝灞炴�ч�夋嫨瀵硅瘽妗� -->
       <el-dialog title="涓恒�愬睘鎬с�戦�夊彇鍊�"
         append-to-body
         :visible.sync="isShowSelectAttrOption"
@@ -663,7 +671,6 @@
                 </el-scrollbar>
               </div>
             </el-col>
-
             <!-- 鍙充晶琛ㄦ牸鏄剧ず鍖哄煙 -->
             <el-col span="19">
               <basic-container>
@@ -672,17 +679,17 @@
                   :data="selectattrData"
                   :option="attrOption"
                   :table-loading="selectAttrOptionLoading"
+                  ref="selectionAttrCrud"
                   @search-change="selectAttrOptionSearchChange"
                   @search-reset="searchAttrReset"
+                  @row-click="selectionAttrRowClick"
                   @selection-change="selectionChangeAttr">
                 </avue-crud>
                 </div>
               </basic-container>
             </el-col>
-
           </el-row>
         </div>
-
         <div slot="footer" class="dialog-footer">
           <el-button @click="isShowSelectAttrOption = false">鍙� 娑�</el-button>
           <el-button type="primary" @click="selectedListClassifyLinkAttr">纭� 瀹�</el-button>
@@ -690,21 +697,20 @@
         
       </el-dialog>
 
-      <!-- 绗簩灞傚璇濇,灞炴�х爜娈碉紝鍏紡缂栬緫妗嗗脊绐楃粍浠� -->
+      <!-- 绗簩灞傚璇濇,灞炴�х爜娈碉紝鍏紡缂栬緫妗嗗璇濇缁勪欢 -->
       <formula-editor ref="formulaEditor" 
         @updateFormulaContent="updateFormulaContent" 
         :thisSceneTableData="thisSceneTableData"
         :systemVariableTableData="systemVariableTableData">
       </formula-editor>
 
-      <!-- 绗簩灞傚璇濇,涓恒�愮埗鍒嗙被鐮佹銆戦�夊彇鍊煎脊绐� -->
+      <!-- 绗簩灞傚璇濇,涓恒�愮埗鍒嗙被鐮佹銆戦�夊彇鍊煎璇濇 -->
       <el-dialog title="涓恒�愮埗鍒嗙被鐮佹銆戦�夊彇鍊�"
         append-to-body
         :visible.sync="isShowParentClassifyOption"
         width="65%"
         style="height: 150vh; margin-top: -13vh;"
         destroy-on-close>
-
         <avue-crud
           :page.sync="parentClassifyDataPage"
           ref="crudParentClassify"
@@ -714,26 +720,24 @@
           @refresh-change="refreshParentClassifyDataChange"
           @search-change="parentClassifySearchChange"
           @search-reset="parentClassifySearchReset"
+          @row-click="parentClassifyRowClick"
           @selection-change="parentClassifySelectionChange"
           @current-change="parentClassifyCurrentChange"
           @size-change="parentClassifySizeChange"
           @on-load="parentClassifyOnLoad">
         </avue-crud>
-
         <div slot="footer" class="dialog-footer">
           <el-button @click="isShowParentClassifyOption = false">鍙� 娑�</el-button>
           <el-button type="primary" @click="saveSelectedParentClassify">淇� 瀛�</el-button>
         </div>
       </el-dialog>
 
-      <!-- 绗簩灞傚璇濇,涓恒�愬弬鐓у紩鐢ㄧ殑涓氬姟绫诲瀷銆戦�夊彇鍊煎脊绐� -->
+      <!-- 绗簩灞傚璇濇,涓恒�愬弬鐓у紩鐢ㄧ殑涓氬姟绫诲瀷銆戦�夊彇鍊煎脊瀵硅瘽妗� -->
       <el-dialog title="涓恒�愬弬鐓у紩鐢ㄧ殑涓氬姟绫诲瀷銆戦�夊彇鍊�"
         append-to-body
         :visible.sync="isShowSelectReferBtmOption"
         width="65%"
-        style="height: 150vh; margin-top: -13vh;"
-        destroy-on-close>
-
+        style="height: 150vh; margin-top: -13vh;">
         <avue-crud
           :page.sync="referBtmDataPage"
           ref="crudReferBtm"
@@ -746,19 +750,23 @@
           @selection-change="referBtmSelectionChange"
           @current-change="referBtmCurrentChange"
           @size-change="referBtmSizeChange"
-          @on-load="referBtmOnLoad">
+          @row-click="referBtmRowClick">
         </avue-crud>
-
         <div slot="footer" class="dialog-footer">
           <el-button @click="isShowSelectReferBtmOption = false">鍙� 娑�</el-button>
           <el-button type="primary" @click="saveSelectedreferBtm">淇� 瀛�</el-button>
         </div>
       </el-dialog>
 
+      <!-- 绗簩灞傚璇濇,鍙傜収閰嶇疆缁勪欢 -->
+      <refer-config-dialog
+        ref="referConfigDialog"
+        @echoReferConfig="echoReferConfig" >
+      </refer-config-dialog>
+
     </el-dialog>
 
   </basic-container>
- 
 </template>
 
 <script>
@@ -776,7 +784,7 @@
   import { treeTopCodeClassify, listClassifyLinkAttr } from "@/api/code/codeclassify";
   import { gridCodeFixedValue,addSaveCodeFixedValue,deleteCodeFixedValue,editCodeFixedValue,saveOrder } from "@/api/code/codeFixedValue";
   import { treeCodeClassifyValue,addSaveCodeClassifyValue,editCodeClassifyValue,deleteCodeClassifyValue,saveCodeClassifyValueOrder } from "@/api/code/codeClassifyValue";
-  import { getDictionary } from "@/api/omd/dict";
+  import { getDictionary } from "@/api/omd/enum";
   import optionBasic from "@/const/code/codebasic";
   import cloneOption from "@/const/code/cloneOption";
   import cloneBasicOption from "@/const/code/cloneBasicDialogOption";
@@ -894,7 +902,7 @@
           },
           classisyValueTreeOption: classisyValueTreeOption, //鍒嗙被鐮佹鏍戠浉鍏抽厤缃」
           classifyValueTreeData: [],
-          currentSelectTreeData: '', //褰撳墠閫変腑鐨勫垎绫荤爜鍊兼爲鑺傜偣
+          //currentSelectClsValueTreeData: '', //褰撳墠閫変腑鐨勫垎绫荤爜鍊兼爲鑺傜偣
 
           /* 涓哄睘鎬ч�夊彇鍊肩獥鍙f樉绀烘墦寮�鎺у埗鍙橀噺 */
           isShowSelectAttrOption: false,
@@ -1107,8 +1115,17 @@
         updateFormulaContent(content){
           this.form.getValueClass = content;
         },
+
+        /* 鍙傜収閰嶇疆,瀛愮粍浠跺~瀹屽弬鐓ч厤缃箣鍚庡唴瀹瑰洖鏄炬椂璋冪敤 */
+        echoReferConfig(content){
+          this.form.referConfig = content;
+        },
         
-        /** 閫変腑鍙傜収寮曠敤鐨勪笟鍔$被鍨嬶紝绗簩灞傚祵濂楀璇濇锛屽強鍏剁浉鍏虫柟娉�  */
+        /** 涓哄弬鐓у紩鐢ㄧ殑涓氬姟绫诲瀷閫夊彇鍊硷紝绗簩灞傚祵濂楀璇濇锛屽強鍏剁浉鍏虫柟娉�  */
+        // 琛ㄦ牸鏁版嵁鍒锋柊鎸夐挳
+        referBtmDataChange(){
+          this.referBtmOnLoad(this.referBtmDataPage, this.referBtmQuery);
+        },
         saveSelectedreferBtm(){
           if(this.referBtmSelectionList.length != 1){
             this.$message.warning("鍙兘閫夋嫨涓�鏉℃暟鎹�!");
@@ -1131,9 +1148,16 @@
           this.referBtmOnLoad(this.page, params);
           done();
         },
+         // 鍗曞嚮閫変腑琛ㄦ牸琛屾椂瑙﹀彂
+        referBtmRowClick(row){
+          this.$refs.crudReferBtm.toggleSelection();
+          this.referBtmSelectionList = row;
+          this.$refs.crudReferBtm.setCurrentRow(row);
+          this.$refs.crudReferBtm.toggleRowSelection(row); //閫変腑褰撳墠琛�
+        },
         referBtmSelectionChange(list) {
-          //console.log(list);
           this.referBtmSelectionList = list;
+          this.$refs.crudReferBtm.setCurrentRow(this.referBtmSelectionList[list.length-1]);
         },
         referBtmSelectionClear() {
           this.referBtmSelectionList = [];
@@ -1150,6 +1174,10 @@
         },
         //鍔犺浇涓弬鐓у紩鐢ㄧ殑涓氬姟绫诲瀷鐨勬暟鎹�
         referBtmOnLoad(page, params = {}) {
+          //琛ㄦ牸琛岄敊浣嶉棶棰�
+          this.$nextTick(() => {
+            this.$refs.crudReferBtm.doLayout();
+          })
           this.referBtmDialogLoading = true;
           let oid = this.selectionList.length==0 ?  this.form.pkCodeRule:this.selectionList[0].oid;
           Object.assign(params,{pkCodeRule:oid})
@@ -1170,10 +1198,10 @@
         saveSelectedParentClassify(){
           //console.log(this.parentClassifySelectionList.length);
           if(this.parentClassifySelectionList.length != 1){
-            this.$message.warning("鍙兘閫夋嫨涓�鏉℃暟鎹�!");
+            this.$message.warning("璇烽�夋嫨涓�鏉℃暟鎹�!");
             return false;
           }
-          //璋冪敤瀛愮粍浠跺苟浼犻�掑綋鍓嶉�変腑鐨勫弬鏁板�硷紝瀹炵幇鍥炴樉
+          //鍙傛暟鍊硷紝瀹炵幇鍥炴樉
           this.form.parentClassifySecOid = this.parentClassifySelectionList[0].oid;
           this.form.parentClassifySecText = this.parentClassifySelectionList[0].name;
           //娓呯┖褰撳墠閫変腑鐨勮
@@ -1190,9 +1218,15 @@
           this.parentClassifyOnLoad(this.page, params);
           done();
         },
+        parentClassifyRowClick(row){
+          this.$refs.crudParentClassify.toggleSelection();
+          this.parentClassifySelectionList = row;
+          this.$refs.crudParentClassify.setCurrentRow(row);
+          this.$refs.crudParentClassify.toggleRowSelection(row); //閫変腑褰撳墠琛�
+        },
         parentClassifySelectionChange(list) {
-          //console.log(this.parentClassifyCurrentChange);
           this.parentClassifySelectionList = list;
+          this.$refs.crudParentClassify.setCurrentRow(this.parentClassifySelectionList[list.length-1]);
         },
         parentClassifySelectionClear() {
           this.parentClassifySelectionList = [];
@@ -1229,7 +1263,8 @@
           this.loadlistClassifyLinkAttr()
         },
         // 鍔犺浇鍒嗙被杩炴帴灞炴�ц〃鏍兼暟鎹�
-        loadlistClassifyLinkAttr(){
+        loadlistClassifyLinkAttr(condition) {
+          //杩欏効杩橀渶瑕佸畬鍠�
           this.selectAttrOptionLoading = true;
           listClassifyLinkAttr({"page": 1,"limit": -1,'conditionMap[codeClassifyOid]':this.currentSelectTreeData.oid}).then(res=>{
           //console.log(res.data.data);
@@ -1246,13 +1281,21 @@
         // 鐐瑰嚮鎼滅储鍚庤Е鍙戣浜嬩欢
         selectAttrOptionSearchChange(params, done) {
           this.query = params;
-          console.log(params);  //杩欏効闇�瑕佹敼
-          this.loadlistClassifyLinkAttr({"page":1,"limit":-1 ,'conditionMap[codeClassifyOid]':this.currentSelectTreeData.oid});
+          //console.log(params);  //杩欏効闇�瑕佹敼
+          this.loadlistClassifyLinkAttr(Object.assign(params,{'conditionMap[codeClassifyOid]':this.currentSelectTreeData.oid}));
           done();
+        },
+        // 涓哄睘鎬ч�夊�肩晫闈紝鍗曞嚮琛ㄦ牸琛屾椂瑙﹀彂璇ヤ簨浠�
+        selectionAttrRowClick(row){
+          this.$refs.selectionAttrCrud.toggleSelection();
+          this.selectionChangeAttrList = row;
+          this.$refs.selectionAttrCrud.setCurrentRow(row);
+          this.$refs.selectionAttrCrud.toggleRowSelection(row); //閫変腑褰撳墠琛�
         },
         // 灞炴�у彇鍊煎綋鍓嶉�変腑琛屽彂鐢熷彉鍖栨椂瑙﹀彂
         selectionChangeAttr(list){
           this.selectionChangeAttrList = list;
+          this.$refs.selectionAttrCrud.setCurrentRow(this.selectionChangeAttrList[list.length-1]);
         },
         // 閲嶇疆浣嶅睘鎬ч�夊彇鍊艰〃鏍肩殑鎼滅储妗嗕箣鍚庣殑鍥炶皟
         searchAttrReset() {
@@ -1261,7 +1304,7 @@
         // 涓哄睘鎬ч�夊彇鍊间箣鍚庣殑鍥炴樉
         selectedListClassifyLinkAttr(){
           if(this.selectionChangeAttrList.length != 1){
-            this.$message.warning("鍙兘閫夋嫨涓�鏉℃暟鎹�!");
+            this.$message.warning("璇烽�夋嫨涓�鏉℃暟鎹�!");
             return false;
           }
           //璋冪敤瀛愮粍浠跺苟浼犻�掑綋鍓嶉�変腑鐨勫弬鏁板�硷紝瀹炵幇鍥炴樉
@@ -1609,7 +1652,7 @@
         /** 鍩虹鐮佹鐩稿叧鏂规硶 */
         //闃叉鎵撳紑杩囩紪杈戠獥鍙d箣鍚庤〃鍗曚腑瀛樺湪鍊硷紝鎵�浠ラ渶瑕佹竻绌�,骞跺垵濮嬪寲form琛ㄥ崟灞炴��
         clearBasicAddForm(){
-          this.form = this.$options.data().form;;
+          this.form = this.$options.data().form;
           // this.changeSectypeFormItems(null);
         },
         // 鎵撳紑鏂板绐楀彛
@@ -1624,7 +1667,7 @@
           this.openBasicDialog('add',null);
           this.loadCodeSecType();
         },
-        //鎵撳紑鏂板鎴栫紪杈戝熀纭�鐮佹瀵硅瘽妗�
+        // 鎵撳紑鏂板鎴栫紪杈戝熀纭�鐮佹瀵硅瘽妗�
         openBasicDialog(condition,row){
           //console.log(row);
           if(condition == 'add') {
@@ -1903,9 +1946,16 @@
           //瀛樺偍褰撳墠鍏宠仈鐨勭紪鐮佽鍒欑浉鍏充俊鎭�
           this.currentCodeRuleOid = row.oid;
           this.currentRuleLcStatus = row.lcStatus;
-          gridCodeBasicSec(1, -1, {"pkCodeRule":row.oid}).then(res => {
+          this.sendGridCodeBasicSec({"pkCodeRule":row.oid});
+        },
+        // 鍙戦�佸姞杞藉熀纭�鐮佹鐨勮姹�
+        sendGridCodeBasicSec(condition){
+          // 濡傛灉褰撳墠鍩虹鐮佹琛ㄤ腑鐨勬悳绱㈡寜閽闅愯棌锛屽氨闇�瑕佸湪姝ゅ紑鍚�
+          if(this.selectionList.length>=0 && !this.$refs.crudBasic.option.column[0].search){
+            this.hideBasicTable(true);
+          }
+          gridCodeBasicSec(1, -1, condition).then(res => {
             const data = res.data.data;
-            // console.log(data);
             if(this.cloneSettingBox){
               this.cloneData = data.records;
               // console.log(tihs.cloneData);
@@ -1920,7 +1970,23 @@
         // 鍩虹鐮佹閫変腑鏃惰Е鍙�
         selectionBasicChange(list) {
           this.selectionBasicList = list;
+          this.$refs.crudBasic.setCurrentRow(this.selectionBasicList[list.length-1]);
           //console.log(this.selectionBasicList);
+        },
+        // 鍩虹鐮佹琚崟鍑昏〃鏍艰鏃惰Е鍙�
+        codeBasicSecRowClick(row){
+          this.$refs.crudBasic.toggleSelection();
+          this.selectionBasicList = row;
+          this.$refs.crudBasic.setCurrentRow(row);
+          this.$refs.crudBasic.toggleRowSelection(row); //閫変腑褰撳墠琛�
+        },
+        basicSearchChange(params, done){
+          //console.log(this.$refs.crudBasic);
+          this.sendGridCodeBasicSec(Object.assign(params,{"pkCodeRule":this.selectionList[this.selectionList.length-1].oid}));
+          done();
+        },
+        basicSearchReset(){
+          this.sendGridCodeBasicSec({"pkCodeRule":this.selectionList[this.selectionList.length-1].oid});
         },
         // 涓婄Щ涓嬬Щ鍩虹鐮佹
         upOrderNum(row){
@@ -1968,12 +2034,19 @@
             });
           })
         },
-        //鍩虹鐮佹鏌ヨ
+        // 鍩虹鐮佹鍒锋柊鏃舵煡璇�
         refreshChangeBasicSec(){
           this.loadBasic({"oid":this.currentCodeRuleOid == null || this.currentCodeRuleOid == '' ? this.selectionList[0].oid:this.currentCodeRuleOid});
         },
+        // 鎿嶄綔鍩虹鐮佹涓悳绱㈡竻绌虹瓑鎸夐挳鐨勬樉绀�/闅愯棌
+        hideBasicTable(hideBoolean){
+          this.$refs.crudBasic.option.refreshBtn = hideBoolean;
+          this.$refs.crudBasic.option.columnBtn = hideBoolean;
+          this.$refs.crudBasic.option.column[0].search = hideBoolean;
+          this.$refs.crudBasic.option.column[1].search = hideBoolean;
+        },
 
-  
+
         /** 缂栫爜瑙勫垯鐩稿叧鏂规硶 */
         // 鏌ヨ浣跨敤鑼冨洿
         handleRange(){
@@ -1983,7 +2056,7 @@
           this.codeRangeSettingBox = true;
           this.getRangeCodeList()
         },
-        //鍔犺浇浣跨敤鑼冨洿鍒楄〃
+        // 鍔犺浇浣跨敤鑼冨洿鍒楄〃
         getRangeCodeList(){        
           this.dialogLoading = true;
           if(this.selectionList[0].oid==null){
@@ -1996,17 +2069,19 @@
             this.dialogLoading = false;
           });
         },
-        //鍒锋柊浣跨敤鑼冨洿鍒楄〃
+        // 鍒锋柊浣跨敤鑼冨洿鍒楄〃
         refreshUseRangeChange(){
           this.getRangeCodeList();
         },
-        //鍗曞嚮缂栫爜瑙勫垯瀹炵幇琛岄�夋嫨
+        // 鍗曞嚮缂栫爜瑙勫垯瀹炵幇琛岄�夋嫨
         codeRuleRowClick (row) {
-          this.$refs.crud.toggleSelection();
           this.selectionList = row;
+          this.$refs.crud.toggleSelection();
           this.$refs.crud.setCurrentRow(row);
           this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
-          this.loadBasic(row);
+          if(row!=''){
+            this.loadBasic(row);
+          }
         },
         // 鍚敤涓庡仠鐢�
         enableOrDeactivatse(oId,update){
@@ -2073,26 +2148,42 @@
           }
           this.cloneOtherCodeRuleSettingBox = true;
         },
-        //鍗曞嚮缂栫爜瑙勫垯瀹炵幇琛岄�夋嫨
-        codeOtherCloneRuleRowClick (row) {
+        // 浠庡叾浠栫紪鐮佽鍒欎腑鍏嬮殕鐮佹瀵硅瘽妗�-鍗曞嚮缂栫爜瑙勫垯瀹炵幇琛岄�夋嫨
+        codeOtherCloneRuleRowClick(row) {
+          this.$refs.crudCloneCodeRuleOther.toggleSelection();
+          this.selectionOtherCloneCodeRuleList = row;
+          this.$refs.crudCloneCodeRuleOther.setCurrentRow(row);
+          this.$refs.crudCloneCodeRuleOther.toggleRowSelection(row); //閫変腑褰撳墠琛�
           this.loadBasic(row);
         },
-        // 缂栫爜瑙勫垯褰撳墠閫変腑琛屽彉鍖栫殑鏃跺�欒Е鍙�
+        // 浠庡叾浠栫紪鐮佽鍒欎腑鍏嬮殕鐮佹瀵硅瘽妗�-鍗曞嚮鍩虹鐮佹瀹炵幇琛岄�夋嫨
+        codeOtherCloneBasicRowClick(row){
+          this.$refs.crudCloneCodeBasicOther.toggleSelection();
+          this.selectionOtherCloneCodeBasicList = row;
+          this.$refs.crudCloneCodeBasicOther.setCurrentRow(row);
+          this.$refs.crudCloneCodeBasicOther.toggleRowSelection(row); //閫変腑褰撳墠琛�
+        },
+        // 浠庡叾浠栬鍒欏厠闅嗙爜娈电晫闈腑缂栫爜瑙勫垯褰撳墠閫変腑琛屽彉鍖栫殑鏃跺�欒Е鍙�
         selectionOtherCloneCodeRuleChange(list) {
           //console.log(list);
           this.selectionOtherCloneCodeRuleList = list;
+          this.$refs.crudBasic.setCurrentRow(this.selectionBasicList[list.length-1]);
+          if(list == ''){
+            this.basicData = [];
+          }
           if(this.selectionOtherCloneCodeRuleList.length > 0){
             this.loadBasic(this.selectionOtherCloneCodeRuleList[list.length-1]);
           }
         },
         selectionOtherCloneCodeBasicChange(list){
-          this.selectionOtherCloneCodeBasicList = list; 
+          this.selectionOtherCloneCodeBasicList = list;
+          this.$refs.crudCloneCodeBasicOther.setCurrentRow(this.selectionOtherCloneCodeBasicList[list.length-1]);
         },
          // 浠庡叾浠栫紪鐮佽鍒欎腑鍏嬮殕鐮佹淇℃伅
         saveOtherCodeBasic(){
           let oid = this.selectionList[0].oid;
           let fromDialogPkCodebasic = this.selectionOtherCloneCodeBasicList;
-          if(fromDialogPkCodebasic.length < 0){
+          if(fromDialogPkCodebasic.length <= 0){
             this.$message.warning("璇烽�夋嫨鐮佹鏁版嵁!");
             return;
           }
@@ -2104,13 +2195,13 @@
             return;
           }
           //console.log(res);
-          let oidArr = '';
-          fromDialogPkCodebasic.forEach((item) =>{
-            oidArr = oidArr+","+item.oid;
-          })
+          let oidArr = [];
+          fromDialogPkCodebasic.forEach(ele => {
+            oidArr.push(ele.id);
+          });
           let data = {
             "pkCodeRule": oid,
-            "oidArr": oidArr,
+            "oidArr": oidArr.join(","),
           }
           //console.log(data);
           cloneCodeBasic(data).then(() => {
@@ -2136,9 +2227,9 @@
           }
           let currentData = this.selectionList[0];
           this.$confirm("纭畾瑕佹竻绌虹爜鍊硷紵濡傛灉娓呯┖灏嗕笉鑳借鎭㈠锛岃璋ㄦ厧锛�", {
-            confirmButtonText: "纭畾",
-            cancelButtonText: "鍙栨秷",
-            type: "warning"
+              confirmButtonText: "纭畾",
+              cancelButtonText: "鍙栨秷",
+              type: "warning"
             })
             .then(() => {
               let ts = new Date(currentData.ts).getTime();
@@ -2152,7 +2243,6 @@
               });
             });
         },
-
         // 娣诲姞
         rowSave(row, done, loading) {
           add(row).then(() => {
@@ -2232,12 +2322,15 @@
         // 缂栫爜瑙勫垯褰撳墠閫変腑琛屽彉鍖栫殑鏃跺�欒Е鍙�
         selectionChange(list) {
           this.selectionList = list;
-          //console.log("selectionChange====="+list);
           this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
+          //褰撳墠閫変腑琛屼负绌虹殑鏃跺�欏氨灏嗙爜娈电鐞嗚〃鏍兼暟鎹疆绌�
+          if(list == ''){
+            this.basicData = [];
+            this.hideBasicTable(false);
+          }
           if(this.selectionList.length > 0){
             this.currentCodeRuleOid = this.selectionList[list.length-1].oid;
             this.currentRuleLcStatus = this.selectionList[list.length-1].lcStatus;
-            //console.log(this.currentRuleLcStatus);
             this.loadBasic(this.selectionList[list.length-1]);
           }
         },
@@ -2264,7 +2357,7 @@
             this.loading = false;
             this.loadBasic(this.data[0])
             this.$nextTick(() => {
-              //this.$refs.crud.toggleRowSelection(this.data[0]);
+              this.$refs.crud.toggleRowSelection(this.data[0]);
               this.$refs.crud.setCurrentRow(this.data[0]);
             })
             this.selectionList = data.records[0];
@@ -2274,7 +2367,7 @@
 
 
         /** 绗竴灞傚璇濇鐩稿叧鏂规硶 */
-        // 鎵撳紑浜屽眰寮圭獥鏂规硶
+        // 鎵撳紑浜屽眰瀵硅瘽妗嗘柟娉�
         openAttrSelectOrGetValue(condition){
           if(condition === 'attr'){
             this.isShowSelectAttrOption = true;
@@ -2285,11 +2378,13 @@
             this.isShowParentClassifyOption = true;
           }else if(condition === 'referBtmId'){
             this.isShowSelectReferBtmOption = true;
+            this.refreshReferBtmDataChange();
           }else if(condition === 'referConfig'){
-            //this.$emit('openSelectreferConfig')
+            this.$refs.referConfigDialog.isShowReferConfig = true;
+            //琛ㄦ牸閿欒鐨勯棶棰樻墍
+            this.$refs.referConfigDialog.onloadAttrData();
           }
         },
-
         // 鐐瑰嚮杈撳叆妗嗙殑脳鍙凤紝娓呯┖杈撳叆妗嗕腑鐨勫唴瀹�
         clearAttrDataByIcon(condition){
           if(condition === 'attr'){
@@ -2434,7 +2529,6 @@
             this.sectypeList = res.data.data;
           })
           this.loadCodeSecLength();
-          //console.log(this.sectypeList);
         },
         loadCodeSecLength(){
           getDictionary({code: "codeSecLength"}).then(res=>{
@@ -2464,7 +2558,6 @@
         loadCodeGetValueType(){
           getDictionary({code: "codeGetValueType"}).then(res=>{
             this.codeGetValueType = res.data.data;
-            //console.log(this.codeGetValueType);
           })
         },
         
@@ -2483,7 +2576,6 @@
     padding: 14px 0 2px 20px;
   }
   
-
   .clone-input-textarea > .el-form-item__content {
     width: 495px;
   }
@@ -2515,17 +2607,16 @@
   .basic-container > .el-card  > .el-card__body {
     margin: -10px 0;
   }
+
   .code-basicsec-container{
     padding: 1px 6px;
   }
 
   .el-divider--horizontal {
-    margin-top: 19px !important;
+    /* margin-top: 19px !important; */
     margin-bottom: -20px !important;
+    width: 100%;
     height: 2px;
-    margin: 0;
-    position: fixed;
-    width: 57.5vw;
   }
 
   .el-card__body > .abox {
@@ -2554,34 +2645,51 @@
   }
 
   /** 鏂板鐮佹 */
-  .total{
-    height: 500px;
+  .add-basicsec-total {
     width: 100%;
   }
 
-  .total .el-input__inner,.total .el-textarea__inner {
+  .add-basicsec-total .el-input__inner,.add-basicsec-total .el-textarea__inner {
     width: 220px;
+  }
+
+  .add-basicsec-total > .add-basicsec-form {
+    display: flex;
+    flex-direction: row;
+    width: 100%;
+    height: 100%;
+    align-items: center;
+    justify-content: space-around;
   }
 
   .el-divider--vertical {
     width: 2px;
-    height: 72vh;
-    margin: 0 5px;
+    height: 72%;
+    margin: 0 auto;
     position: fixed;
   }
 
  .left {
-    float: left;
+    /* float: left; */
     width: 49%;
+    height: 100%;
  }
+
  .right {
-    float: right;
-    margin-right: 2.5vw;
-    /* width: 40%; */
+    /* float: right; */
+    margin-right: 2vw;
+    height: 100%;
+    width: auto;
  }
+
  .right > .el-form > .el-form-item{
     margin-bottom: 8px;
  }
-
+ /* 瀵硅瘽妗嗗簳閮ㄦ寜閽竟妗嗘牱寮� */
+ .el-dialog__footer{
+    /* width: 100%; */
+    border-top: 1px solid #E9E7E7;
+    padding: 5px 10px 10px;
+  }
 
 </style>
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/views/code/codebutton.vue b/Source/UBCS-WEB/src/views/code/codebutton.vue
index 4dd6593..5f0db1d 100644
--- a/Source/UBCS-WEB/src/views/code/codebutton.vue
+++ b/Source/UBCS-WEB/src/views/code/codebutton.vue
@@ -68,10 +68,10 @@
       ...mapGetters(["permission"]),
       permissionList() {
         return {
-          addBtn: this.vaildData(this.permission.codebutton_add, false),
-          viewBtn: this.vaildData(this.permission.codebutton_view, false),
-          delBtn: this.vaildData(this.permission.codebutton_delete, false),
-          editBtn: this.vaildData(this.permission.codebutton_edit, false)
+          // addBtn: this.vaildData(this.permission.codebutton_add, false),
+          // viewBtn: this.vaildData(this.permission.codebutton_view, false),
+          // delBtn: this.vaildData(this.permission.codebutton_delete, false),
+          // editBtn: this.vaildData(this.permission.codebutton_edit, false)
         };
       },
       ids() {
diff --git a/Source/UBCS-WEB/src/views/flow/follow.vue b/Source/UBCS-WEB/src/views/flow/follow.vue
index fbaa282..4e4f44d 100644
--- a/Source/UBCS-WEB/src/views/flow/follow.vue
+++ b/Source/UBCS-WEB/src/views/flow/follow.vue
@@ -1,42 +1,43 @@
 <template>
   <basic-container>
     <avue-crud :option="option"
-               :table-loading="loading"
-               :data="data"
-               ref="crud"
-               v-model="form"
-               :page.sync="page"
-               :permission="permissionList"
-               @row-del="rowDel"
-               @search-change="searchChange"
-               @search-reset="searchReset"
-               @selection-change="selectionChange"
-               @current-change="currentChange"
-               @size-change="sizeChange"
-               @refresh-change="refreshChange"
-               @on-load="onLoad">
+      :table-loading="loading"
+      :data="data"
+      ref="crud"
+      v-model="form"
+      :page.sync="page"
+      :permission="permissionList"
+      @row-del="rowDel"
+      @search-change="searchChange"
+      @search-reset="searchReset"
+      @row-click="clickRowChange"
+      @selection-change="selectionChange"
+      @current-change="currentChange"
+      @size-change="sizeChange"
+      @refresh-change="refreshChange"
+      @on-load="onLoad">
       <template slot-scope="{row}"
-                slot="suspensionState">
+        slot="suspensionState">
         <el-tag>{{row.suspensionState===1?'婵�娲�':'鎸傝捣'}}</el-tag>
       </template>
     </avue-crud>
     <el-dialog title="娴佺▼鍒犻櫎"
-               append-to-body
-               :visible.sync="followBox"
-               width="20%">
+      append-to-body
+      :visible.sync="followBox"
+      width="20%">
       <el-form :model="form"
-               ref="form"
-               label-width="80px">
+        ref="form"
+        label-width="80px">
         <el-form-item label="鍒犻櫎鐞嗙敱">
           <el-input v-model="deleteReason"
-                    placeholder="璇疯緭鍏ュ垹闄ょ悊鐢�" />
+            placeholder="璇疯緭鍏ュ垹闄ょ悊鐢�" />
         </el-form-item>
       </el-form>
       <span slot="footer"
-            class="dialog-footer">
+        class="dialog-footer">
         <el-button @click="followBox = false">鍏� 闂�</el-button>
         <el-button type="primary"
-                   @click="handleDelete">纭� 瀹�</el-button>
+          @click="handleDelete">纭� 瀹�</el-button>
       </span>
     </el-dialog>
   </basic-container>
@@ -77,6 +78,7 @@
           dialogWidth: 900,
           menuWidth: 100,
           dialogClickModal: false,
+          highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
           column: [
             {
               label: "鎵цid",
@@ -167,6 +169,13 @@
       },
       selectionChange(list) {
         this.selectionList = list;
+        this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
+      },
+      clickRowChange(row){
+        this.$refs.crud.toggleSelection();
+        this.selectionList = row;
+        this.$refs.crud.setCurrentRow(row);
+        this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
       },
       selectionClear() {
         this.selectionList = [];
diff --git a/Source/UBCS-WEB/src/views/flow/manager.vue b/Source/UBCS-WEB/src/views/flow/manager.vue
index 11d8184..6679dbb 100644
--- a/Source/UBCS-WEB/src/views/flow/manager.vue
+++ b/Source/UBCS-WEB/src/views/flow/manager.vue
@@ -13,6 +13,7 @@
                @current-change="currentChange"
                @size-change="sizeChange"
                @refresh-change="refreshChange"
+               @row-click="clickRowChange"
                @on-load="onLoad">
       <template slot="menuLeft">
         <el-radio-group v-model="mode" size="small">
@@ -132,6 +133,7 @@
           dialogWidth: 900,
           menuWidth: 250,
           dialogClickModal: false,
+          highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
           column: [
             {
               label: '绉熸埛缂栧彿',
@@ -229,8 +231,15 @@
         this.onLoad(this.page, params);
         done();
       },
+      clickRowChange(row){
+        this.$refs.crud.toggleSelection();
+        this.selectionList = row;
+        this.$refs.crud.setCurrentRow(row);
+        this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
+      },
       selectionChange(list) {
         this.selectionList = list;
+        this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
       },
       selectionClear() {
         this.selectionList = [];
diff --git a/Source/UBCS-WEB/src/views/flow/model.vue b/Source/UBCS-WEB/src/views/flow/model.vue
index 54c7d2a..ff4257a 100644
--- a/Source/UBCS-WEB/src/views/flow/model.vue
+++ b/Source/UBCS-WEB/src/views/flow/model.vue
@@ -1,18 +1,19 @@
 <template>
   <basic-container>
     <avue-crud :option="option"
-               :table-loading="loading"
-               :data="data"
-               ref="crud"
-               v-model="form"
-               :page.sync="page"
-               @search-change="searchChange"
-               @search-reset="searchReset"
-               @selection-change="selectionChange"
-               @current-change="currentChange"
-               @size-change="sizeChange"
-               @refresh-change="refreshChange"
-               @on-load="onLoad">
+      :table-loading="loading"
+      :data="data"
+      ref="crud"
+      v-model="form"
+      :page.sync="page"
+      @search-change="searchChange"
+      @search-reset="searchReset"
+      @selection-change="selectionChange"
+      @current-change="currentChange"
+      @size-change="sizeChange"
+      @refresh-change="refreshChange"
+      @row-click="clickRowChange"
+      @on-load="onLoad">
       <template slot="menuLeft">
         <el-button type="primary"
                    size="mini"
@@ -215,6 +216,7 @@
         dialogWidth: 900,
         menuWidth: 200,
         dialogClickModal: false,
+        highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
         size: 'mini',
         searchSize: 'mini',
         column: [
@@ -381,6 +383,13 @@
     },
     selectionChange(list) {
       this.selectionList = list;
+      this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
+    },
+    clickRowChange(row){
+      this.$refs.crud.toggleSelection();
+      this.selectionList = row;
+      this.$refs.crud.setCurrentRow(row);
+      this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
     },
     selectionClear() {
       this.selectionList = [];
diff --git a/Source/UBCS-WEB/src/views/modeling/Business.vue b/Source/UBCS-WEB/src/views/modeling/Business.vue
index 260b626..40ccabe 100644
--- a/Source/UBCS-WEB/src/views/modeling/Business.vue
+++ b/Source/UBCS-WEB/src/views/modeling/Business.vue
@@ -1,74 +1,141 @@
 <template>
-
   <el-container>
-    <el-aside width="240px">
-      <basic-container>
-        <avue-tree id="basic" :data="treeData" :option="treeOption" @node-click="nodeClick">
-        </avue-tree>
-      </basic-container>
-    </el-aside>
-    <el-main>
-      <!--        鍩烘湰淇℃伅-->
-      <basic-container>
-        <p style="margin-top: 10px;font-weight: 570;font-size: 19px">鍩烘湰淇℃伅</p>
-        <avue-crud
-          v-model="objs"
-          :data="basicData"
-          :option="basicOption"
-          @row-save="basicSave"
-        >
-          <!--           鐗堟湰瑙勫垯-->
-          <template slot="rulesForm" slot-scope="{disabled,size}">
-            <div>
-              <el-input v-if="rulesFalg==false" v-model="objs.tex" :size="size" placeholder="璇疯緭鍏ョ増鏈彿瑙勫垯"
-                        style="width: 290px"></el-input>
-              <el-select v-if="rulesFalg" v-model="objs.select" placeholder="璇烽�夋嫨鐗堟湰鍙疯鍒�" style="max-width: 300px">
-                <el-option label="娴嬭瘯1" value="1"></el-option>
-                <el-option label="娴嬭瘯2" value="2"></el-option>
-                <el-option label="娴嬭瘯3" value="3"></el-option>
-              </el-select>
-              <el-button style="margin-bottom: 5px;margin-left: 10px" type="primary" @click="handelRules">
-                {{ rulesFalg == false ? "閫夋嫨鐗堟湰鍙疯鍒�" : "鎵嬪姩杈撳叆" }}
-              </el-button>
-            </div>
-          </template>
-          <!--            鐢熷懡鍛ㄦ湡-->
-          <template slot="lifeCycleForm">
-            <el-select v-model="objs.select" placeholder="璇烽�夋嫨鐢熷懡鍛ㄦ湡" style="max-width: 300px">
-              <el-option label="娴嬭瘯1" value="1"></el-option>
-              <el-option label="娴嬭瘯2" value="2"></el-option>
-              <el-option label="娴嬭瘯3" value="3"></el-option>
-            </el-select>
-            <el-button style="margin-bottom: 5px;display: inline-block;margin-left: 10px" type="primary"
-                       @click="handelLife">鐢熷懡鍛ㄦ湡鍒楄〃
-            </el-button>
-          </template>
-        </avue-crud>
-        <el-dialog :visible.sync="packageLifeBox"
-                   append-to-body
-                   title="鏌ョ湅浣跨敤鑼冨洿"
-                   width="1000px">
-          <Businpackage></Businpackage>
+    <el-header>
+      <el-button type="primary" @click="businessAdd">鏂板</el-button>
+      <el-button type="primary" @click="businessEdit">淇敼</el-button>
+      <el-button type="primary" @click="selectFromTable">浠庡凡鏈変腑鑾峰彇</el-button>
+    </el-header>
+    <el-container>
+      <el-aside width="240px">
+        <basic-container>
+          <avue-tree id="basic" :data="treeData" :option="treeOption" @node-click="nodeClick">
+            <span class="el-tree-node__label" slot-scope="{ node, data }">
+              <span>
+                <i class="el-icon-star-on"></i>
+                {{ (node || {}).label }}
+              </span>
+            </span>
+          </avue-tree>
+        </basic-container>
+      </el-aside>
+      <el-container>
+        <el-main>
+          <!--鍩烘湰淇℃伅-->
+          <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>
+                <template slot="label">
+                  <i class="el-icon-finished"></i>
+                  鑻辨枃鍚嶇О
+                </template>
+                {{ obj.id }}
+              </el-descriptions-item>
+              <el-descriptions-item>
+                <template slot="label">
+                  <i class="el-icon-info"></i>
+                  涓枃鍚嶇О
+                </template>
+                {{ obj.name }}
+              </el-descriptions-item>
+              <el-descriptions-item>
+                <template slot="label">
+                  <i class="el-icon-date"></i>
+                  鏁版嵁搴撹〃鍚�
+                </template>
+                {{ obj.tableName }}
+              </el-descriptions-item>
+              <el-descriptions-item>
+                <template slot="label">
+                  <i class="el-icon-folder-opened"></i>
+                  鎵�灞為鍩�
+                </template>
+                {{ obj.domain }}
+              </el-descriptions-item>
+              <!-- <el-descriptions-item>
+            <template slot="label">
+              <i class="el-icon-s-ticket"></i>
+              鏍囩
+            </template>
+            {{obj.hashtag}}
+          </el-descriptions-item> -->
+              <!-- <el-descriptions-item>
+            <template slot="label">
+              <i class="el-icon-arrow-up"></i>
+              缁ф壙鑷�
+            </template>
+            {{ obj.sss }}
+          </el-descriptions-item> -->
+              <el-descriptions-item>
+                <template slot="label">
+                  <i class="el-icon-s-check"></i>
+                  鐗堟湰瑙勫垯
+                </template>
+                {{ obj.versionRule }}
+              </el-descriptions-item>
+              <el-descriptions-item>
+                <template slot="label">
+                  <i class="el-icon-refresh-right"></i>
+                  鐢熷懡鍛ㄦ湡
+                </template>
+                {{ obj.lifeCycleId }}
+              </el-descriptions-item>
+              <el-descriptions-item>
+                <template slot="label">
+                  <i class="el-icon-view"></i>
+                  瑙嗗浘
+                </template>
+                {{ obj.viewFlag }}
+              </el-descriptions-item>
+              <!-- <el-descriptions-item>
+            <template slot="label">
+              <i class="el-icon-arrow-down"></i>
+              瀹炵幇绫�
+            </template>
+            {{ obj.implClass }}
+          </el-descriptions-item> -->
+              <el-descriptions-item>
+                <template slot="label">
+                  <i class="el-icon-chat-line-square"></i>
+                  鎻忚堪
+                </template>
+                {{ obj.description }}
+              </el-descriptions-item>
+            </el-descriptions>
+          </basic-container>
+          <!-- 灞炴�у垪琛�-->
+          <basic-container>
+            <p style="margin-top: 10px;font-weight: 570;font-size: 19px">灞炴�у垪琛�</p>
+            <avue-crud v-model="obj" :data="obj.attributes" :option="loadOption" @row-save="loadSave"></avue-crud>
+          </basic-container>
+        </el-main>
+        <el-dialog :visible="ref.visible" title="浠庢暟鎹簱涓坊鍔�" width="700px" append-to-body @close="dialoghandelfalse">
+          閫夋嫨棰嗗煙锛�
+          <el-select v-model="domain" placeholder="璇烽�夋嫨" @change="refOnLoad">
+            <el-option v-for="item in domainOptions" :key="item" :label="item" :value="item">
+            </el-option>
+          </el-select>
+          <avue-crud class="businessCrud" v-model="ref.form" :option="ref.option" :data="ref.data" @selection-change="selectionChange">
+          </avue-crud>
           <span slot="footer" class="dialog-footer">
             <el-button @click="dialoghandelfalse">鍙� 娑�</el-button>
             <el-button type="primary" @click="dialoghandeltrue">纭� 瀹�</el-button>
-  </span>
+          </span>
         </el-dialog>
-      </basic-container>
-      <!--        灞炴�у垪琛�-->
-      <basic-container>
-        <p style="margin-top: 10px;font-weight: 570;font-size: 19px">灞炴�у垪琛�</p>
-        <avue-crud
-          v-model="obj"
-          :data="loadData"
-          :option="loadOption"
-          @row-save="loadSave"
-        ></avue-crud>
-      </basic-container>
-    </el-main>
+      </el-container>
+    </el-container>
+    <business-add ref="btmAdd" :btmType="addOption.btmType" :domainOption="domainOptions">
+  </business-add>
   </el-container>
 </template>
 <script>
+import {
+  initTree,
+  refOnLoad,
+  getDomain,
+  saveFromTable,
+  getDetail
+} from "@/api/omd/btmType"
 export default {
   name: "Business",
   data() {
@@ -78,282 +145,99 @@
       //鐗堟湰瑙勫垯鐘舵��
       rulesFalg: false,
       obj: {},
-      treeData: [{
-        value: 0,
-        label: '涓氬姟绫诲瀷鏍�',
-        children: [
-          {
-            value: 1,
-            label: 'A',
-          },
-          {
-            value: 2,
-            label: 'B',
-          },
-          {
-            value: 3,
-            label: 'C',
-          },
-          {
-            value: 4,
-            label: 'D',
-          },
-          {
-            value: 5,
-            label: 'E',
-          }
-        ]
-      }],
+      selectionList: [],
+      treeData: [],
       treeOption: {
         defaultExpandAll: true,
+        title: '涓氬姟绫诲瀷鏍�',
+        props: {
+          labelText: '',
+          label: 'name',
+          value: 'oid',
+          children: 'childList',
+        }
       },
-      loadData: [],
-      loadData1: [
-        {
-          name: '寮犱笁',
-          business: '娴嬭瘯',
-          attrType: "娴嬭瘯",
-          default: "娴嬭瘯",
-          explain: "娴嬭瘯璇存槑"
-        },
-        {
-          name: '鏉庡洓',
-          business: '娴嬭瘯',
-          attrType: "娴嬭瘯",
-          default: "娴嬭瘯",
-          explain: "娴嬭瘯璇存槑"
-        }
-      ],
-      loadData2: [
-        {
-          name: '鐜嬩簲',
-          business: '娴嬭瘯',
-          attrType: "娴嬭瘯",
-          default: "娴嬭瘯",
-          explain: "娴嬭瘯璇存槑"
-        },
-        {
-          name: '瀹嬪叚',
-          business: '娴嬭瘯',
-          attrType: "娴嬭瘯",
-          default: "娴嬭瘯",
-          explain: "娴嬭瘯璇存槑"
-        }
-      ],
+      addOption:{
+        btmType:{},
+      },
       loadOption: {
         border: true,
-        height: 422,
+        height: 466,
         editBtn: false,
+        addBtn: false,
+        menu: false,
+        highlightCurrentRow: true,
+        refreshBtn:false,
+        columnBtn:false,
         column: [
           {
-            label: '灞炴�у悕',
-            prop: 'name'
-          },
-          {
-            label: '涓氬姟绫诲瀷',
-            prop: 'business'
+            label: '灞炴�ц嫳鏂囧悕绉�',
+            prop: 'id',
+            align: 'center'
+          }, {
+            label: '灞炴�т腑鏂囧悕绉�',
+            prop: 'name',
+            align: 'center'
           },
           {
             label: "灞炴�х被鍨�",
-            prop: "attrType"
+            prop: "attrDataType",
+            align: 'center'
           },
           {
             label: "榛樿鍊�",
-            prop: "default",
+            prop: "defaultValue",
+            align: 'center'
           },
           {
             label: "璇存槑",
-            prop: "explain"
+            prop: "description",
+            align: 'center'
           }
         ]
       },
-      //鍩烘湰淇℃伅
-      objs: {
-        tex: "",
-        select: "",
-        lifeTex: ""
-      },
-      basicData: [],
-      basicData1: [
-        {
-          typeName: "娴嬭瘯1",
-          tag: "瀹㈡埛",
-          inherit: "娴嬭瘯",
-          implement: "娴嬭瘯",
-          lifeCycle: "鍛ㄦ湡",
-          desc: "杩欐槸涓�涓弿杩�"
-        }
-      ],
-      basicData2: [
-        {
-          typeName: "娴嬭瘯2",
-          tag: "瀹㈡埛",
-          inherit: "娴嬭瘯",
-          implement: "娴嬭瘯",
-          lifeCycle: "鍛ㄦ湡",
-          desc: "杩欐槸涓�涓弿杩�"
-        }
-      ],
-      basicOption: {
-        border: true,
-        height: 88,
-        tabs: true,
-        column: [
-          {
-            label: "绫诲瀷鍚嶇О",
-            prop: "typeName",
-            display: false
-          },
-          {
-            label: "鏍囩",
-            prop: "tag",
-            display: false
-          },
-          {
-            label: "缁ф壙鑷�",
-            prop: "inherit",
-            display: false
-          },
-          {
-            label: "瀹炵幇绫�",
-            prop: "implement",
-            display: false
-          },
-          {
-            label: "鎻忚堪",
-            prop: "desc",
-            display: false
-          }
-        ],
-        group: [
-          {
-            label: "鍩烘湰淇℃伅",
-            column: [
-              {
-                label: "绫诲瀷鍚嶇О",
-                prop: "typeName"
-              },
-              {
-                label: "鏍囩",
-                prop: "tag"
-              },
-              {
-                label: "缁ф壙鑷�",
-                prop: "inherit"
-              },
-              {
-                label: "鏄惁瀹炰緥鍖�",
-                prop: "case",
-                type: "switch",
-                align: "center",
-                hide: true,
-                labelWidth: 90,
-                dicData: [
-                  {
-                    label: "鍚�",
-                    value: 0
-                  },
-                  {
-                    label: "鏄�",
-                    value: 1
-                  }
-                ],
-              },
-              {
-                label: "鎻忚堪",
-                prop: "desc",
-                type: "textarea"
-              },
-              {
-                label: "瀹炵幇绫�",
-                prop: "implement"
-              },
-
-            ]
-          },
-          {
-            label: "鐗堟湰瑙勫垯",
-            column: [
-              {
-                label: '鐗堟湰瑙勫垯',
-                prop: 'radio',
-                type: 'radio',
-                button: true,
-                change: this.radioChange,
-                value: 0,
-                dicData: [{
-                  label: '涓嶅彲淇',
-                  value: 0
-                }, {
-                  label: '閲囩敤涓�绾х増鏈鐞�',
-                  value: 1
-                }, {
-                  label: '閲囩敤浜岀骇鐗堟湰绠$悊',
-                  value: 2
-                }]
-              },
-              {
-                label: "鐗堟湰鍙疯鍒�",
-                prop: "rules",
-                display: true,
-                formslot: true,
-              },
-              {
-                label: "鍒嗛殧绗�",
-                prop: "interval",
-                type: "select",
-                display: true,
-                dicData: [
-                  {
-                    label: ".",
-                    value: 0
-                  },
-                  {
-                    label: "-",
-                    value: 1
-                  },
-                  {
-                    label: " ",
-                    value: 2
-                  }
-                ]
-              },
-              {
-                label: '鐗堟鍙疯鍒�',
-                prop: 'radioRules',
-                type: 'radio',
-                display: true,
-                dicData: [{
-                  label: '1.2.3...',
-                  value: 0
-                }, {
-                  label: 'a.b.c...',
-                  value: 1
-                }, {
-                  label: '0.1.2...',
-                  value: 2
-                }]
-              },
-            ]
-          },
-          {
-            label: "鐢熷懡鍛ㄦ湡",
-            column: [
-              {
-                label: "鐢熷懡鍛ㄦ湡",
-                prop: "lifeCycle"
-              }
-            ]
-          }
-        ]
-      },
-
+      domain: null,
+      domainOptions: [],
+      ref: {
+        // 浠庤〃涓�夋嫨dialog鐘舵��
+        visible: false,
+        form: {},
+        option: {
+          height: "550px",
+          selection: true,
+          headerAlign: 'center',
+          border: true,
+          index: true,
+          rowKey: 'id',
+          tabs: true,
+          addBtn: false,
+          menu: false,
+          highlightCurrentRow: true,
+          column: [
+            {
+              label: '琛ㄥ悕',
+              prop: 'tableName',
+              align: 'center',
+              display: false
+            },
+            {
+              label: '鎻忚堪',
+              prop: 'description',
+              align: 'center',
+              display: false
+            }
+          ]
+        },
+        data: [{
+          tableName: '1',
+          description: '2'
+        }]
+      }
     }
   },
   created() {
-    this.loadData = this.loadData1;
-    this.basicData = this.basicData1
-
+    this.initTreeOnLoad();
+    this.initDomainOption();
   },
   methods: {
     //鐢熷懡鍛ㄦ湡瀵硅瘽妗嗗彇娑堢偣鍑讳簨浠�
@@ -389,40 +273,80 @@
       }
     },
     nodeClick(data) {
-      if (data.value == 1) {
-        this.loadData = this.loadData1;
-        this.basicData = this.basicData1
-      } else if (data.value == 2) {
-        this.loadData = this.loadData2;
-        this.basicData = this.basicData2
-      }
-      this.$message.success(JSON.stringify(data))
+      getDetail(data.oid).then(res => {
+        this.obj = res.data.data;
+      })
+    },
+    //  鍩烘湰淇℃伅娣诲姞
+    basicSave(row, done, loading) {
+      add(Object.assign({
+        createUser: this.userInfo.name
+      }, row)).then(() => {
+        this.$message.success('鏂板鎴愬姛')
+        done();
+        this.getList();
+      }).catch(() => {
+        loading()
+      })
+    },
+    //灞炴�ф坊鍔�
+    loadSave(row, done, loading) {
+      add(Object.assign({
+        createUser: this.userInfo.name
+      }, row)).then(() => {
+        this.$message.success('鏂板鎴愬姛')
+        done();
+        this.getList();
+      }).catch(() => {
+        loading()
+      })
+    },
+    selectFromTable() {
+      console.log('鑾峰彇');
+      this.ref.visible = true;
+    },
+    refOnLoad(domain) {
+      refOnLoad(domain).then(res => {
+        this.ref.data = res.data.data;
+      })
+    },
+    initTreeOnLoad() {
+      initTree().then(res => {
+        console.log('123');
+        this.treeData = res.data.data;
+      });
+    },
+    initDomainOption() {
+      getDomain().then(res => {
+        this.domainOptions = res.data.data;
+      })
+    },
+    selectionChange(list) {
+      this.selectionList = list;
+      console.log(this.selectionList);
+    },
+    dialoghandelfalse() {
+      this.ref.visible = false;
+      this.selectionList = [];
+      this.domain = null;
+    },
+    dialoghandeltrue() {
+      saveFromTable(this.selectionList, this.domain).then(res => {
+        this.$message.success('淇濆瓨鎴愬姛');
+        this.dialoghandelfalse();
+        this.initTreeOnLoad();
+      })
+    },
+    businessAdd(){
+      this.$refs.btmAdd.showSubmitDialog = true;
+      console.log('娣诲姞');
+    },
+    businessEdit(){
+      this.addOption.btmType = this.obj;
+      this.$refs.addOption.showSubmitDialog = true;
+      console.log('缂栬緫');
     }
   },
-//  鍩烘湰淇℃伅娣诲姞
-  basicSave(row, done, loading) {
-    add(Object.assign({
-      createUser: this.userInfo.name
-    }, row)).then(() => {
-      this.$message.success('鏂板鎴愬姛')
-      done();
-      this.getList();
-    }).catch(() => {
-      loading()
-    })
-  },
-  //灞炴�ф坊鍔�
-  loadSave(row, done, loading) {
-    add(Object.assign({
-      createUser: this.userInfo.name
-    }, row)).then(() => {
-      this.$message.success('鏂板鎴愬姛')
-      done();
-      this.getList();
-    }).catch(() => {
-      loading()
-    })
-  }
 }
 </script>
 
@@ -432,4 +356,8 @@
   border-radius: 10px;
 }
 
+.businessCrud > .el-card > .el-card__body > .avue-crud_menu{
+  display: none!important;
+}
+
 </style>
diff --git a/Source/UBCS-WEB/src/views/modeling/original.vue b/Source/UBCS-WEB/src/views/modeling/original.vue
index 8597d3e..910206a 100644
--- a/Source/UBCS-WEB/src/views/modeling/original.vue
+++ b/Source/UBCS-WEB/src/views/modeling/original.vue
@@ -94,7 +94,7 @@
   update, getPage
 } from "@/api/omd/OmdAttribute";
 
-import { getDictionary } from "@/api/omd/dict";
+import { getDictionary } from "@/api/omd/enum";
 
 export default {
   name: "original",
diff --git a/Source/UBCS-WEB/src/views/omd/dict.vue b/Source/UBCS-WEB/src/views/omd/enum.vue
similarity index 89%
rename from Source/UBCS-WEB/src/views/omd/dict.vue
rename to Source/UBCS-WEB/src/views/omd/enum.vue
index 9476deb..aebcd6e 100644
--- a/Source/UBCS-WEB/src/views/omd/dict.vue
+++ b/Source/UBCS-WEB/src/views/omd/enum.vue
@@ -49,7 +49,7 @@
         <el-tag>{{ row.isSealed === 0 ? '鍚�' : '鏄�' }}</el-tag>
       </template>
     </avue-crud>
-    <el-dialog :title="`[${dictValue}]鏋氫妇椤归厤缃甡"
+    <el-dialog :title="`[${name}]鏋氫妇椤归厤缃甡"
                append-to-body
                :visible.sync="box"
                width="1000px">
@@ -80,7 +80,7 @@
             icon="el-icon-delete"
             v-if="permission.dict_delete"
             plain
-            @click="handleDelete"
+            @click="handleDeleteChild"
           >鍒� 闄�
           </el-button>
         </template>
@@ -103,23 +103,23 @@
 </template>
 
 <script>
-  import {
-    getParentList,
-    getChildList,
-    remove,
-    update,
-    add,
-    getDict,
-    getDictTree
-  } from "@/api/omd/dict";
-  import {optionParent, optionChild} from "@/const/omd/dict";
+import {
+  getParentList,
+  getChildList,
+  remove,
+  update,
+  add,
+  getDict,
+  getDictTree, addChild, updateChild, getDictChild, removeChild
+} from "@/api/omd/enum";
+  import {optionParent, optionChild} from "@/const/omd/enum";
   import {mapGetters} from "vuex";
 
   export default {
     data() {
       return {
         dictValue: '鏆傛棤',
-        parentId: -1,
+        parentoid: -1,
         formParent: {},
         formChild: {},
         selectionList: [],
@@ -158,7 +158,7 @@
       ids() {
         let ids = [];
         this.selectionList.forEach(ele => {
-          ids.push(ele.id);
+          ids.push(ele.oid);
         });
         return ids.join(",");
       }
@@ -168,18 +168,20 @@
     },
     methods: {
       initData() {
-        getDictTree().then(res => {
-          const column = this.findObject(this.optionChild.column, "parentId");
+        getDictTree(this.pageParent.currentPage,
+                    this.pageParent.pageSize,
+                    this.query).then(res => {
+          const column = this.findObject(this.optionChild.column, "parentoid");
           column.dicData = res.data.data;
         });
       },
       handleAdd(row) {
-        this.formChild.dictValue = "";
-        this.formChild.dictKey = "";
+        this.formChild.value = "";
+        this.formChild.name = "";
         this.formChild.sort = 0;
         this.formChild.isSealed = 0;
         this.formChild.remark = "";
-        this.formChild.parentId = row.id;
+        this.formChild.parentoid = row.oid;
         this.$refs.crudChild.rowAdd();
       },
       rowSave(row, done, loading) {
@@ -220,7 +222,7 @@
           type: "warning"
         })
           .then(() => {
-            return remove(row.id);
+            return remove(row.oid);
           })
           .then(() => {
             this.onLoadParent(this.pageParent);
@@ -232,13 +234,13 @@
       },
       handleRowClick(row) {
         this.query = {};
-        this.parentId = row.id;
-        this.dictValue = row.dictValue;
+        this.parentId = row.oid;
+        this.name = row.name;
 
-        const code = this.findObject(this.optionChild.column, "code");
+        const code = this.findObject(this.optionChild.column, "value");
         code.value = row.code;
-        const parentId = this.findObject(this.optionChild.column, "parentId");
-        parentId.value = row.id;
+        // const parentoid = this.findObject(this.optionChild.column, "parentoid");
+        this.parentoid = row.oid;
 
         this.box = true;
         this.onLoadChild(this.pageChild);
@@ -284,7 +286,7 @@
       },
       beforeOpen(done, type) {
         if (["edit", "view"].includes(type)) {
-          getDict(this.formParent.id).then(res => {
+          getDict(this.formParent.oid).then(res => {
             this.formParent = res.data.data;
           });
         }
@@ -300,7 +302,8 @@
         this.onLoadParent(this.pageParent, this.query);
       },
       rowSaveChild(row, done, loading) {
-        add(row).then(() => {
+        row.parentoid = this.parentoid;
+        addChild(row).then(() => {
           this.onLoadChild(this.pageChild);
           this.$message({
             type: "success",
@@ -313,7 +316,7 @@
         });
       },
       rowUpdateChild(row, index, done, loading) {
-        update(row).then(() => {
+        updateChild(row).then(() => {
           this.onLoadChild(this.pageChild);
           this.$message({
             type: "success",
@@ -332,7 +335,7 @@
           type: "warning"
         })
           .then(() => {
-            return remove(row.id);
+            return removeChild(row.oid);
           })
           .then(() => {
             this.onLoadChild(this.pageChild);
@@ -370,7 +373,7 @@
           type: "warning"
         })
           .then(() => {
-            return remove(this.ids);
+            return removeChild(this.ids);
           })
           .then(() => {
             this.onLoadChild(this.pageChild);
@@ -386,7 +389,7 @@
           this.initData();
         }
         if (["edit", "view"].includes(type)) {
-          getDict(this.formChild.id).then(res => {
+          getDictChild(this.formChild.oid).then(res => {
             this.formChild = res.data.data;
           });
         }
@@ -429,7 +432,7 @@
         getChildList(
           page.currentPage,
           page.pageSize,
-          this.parentId,
+          this.parentoid,
           Object.assign(params, this.query)
         ).then(res => {
           this.dataChild = res.data.data;
diff --git a/Source/UBCS-WEB/src/views/report/reportlist.vue b/Source/UBCS-WEB/src/views/report/reportlist.vue
index e30ac5a..fe55a5a 100644
--- a/Source/UBCS-WEB/src/views/report/reportlist.vue
+++ b/Source/UBCS-WEB/src/views/report/reportlist.vue
@@ -1,20 +1,21 @@
 <template>
   <basic-container>
     <avue-crud :option="option"
-               :table-loading="loading"
-               :data="data"
-               ref="crud"
-               v-model="form"
-               :page.sync="page"
-               :permission="permissionList"
-               @row-del="rowDel"
-               @search-change="searchChange"
-               @search-reset="searchReset"
-               @selection-change="selectionChange"
-               @current-change="currentChange"
-               @size-change="sizeChange"
-               @refresh-change="refreshChange"
-               @on-load="onLoad">
+      :table-loading="loading"
+      :data="data"
+      ref="crud"
+      v-model="form"
+      :page.sync="page"
+      :permission="permissionList"
+      @row-del="rowDel"
+      @search-change="searchChange"
+      @search-reset="searchReset"
+      @selection-change="selectionChange"
+      @current-change="currentChange"
+      @size-change="sizeChange"
+      @refresh-change="refreshChange"
+      @row-click="clickRowChange"
+      @on-load="onLoad">
       <template slot="menuLeft">
         <el-button type="danger"
                    size="small"
@@ -75,6 +76,7 @@
         selection: true,
         viewBtn: true,
         dialogClickModal: false,
+        highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
         column: [
           {
             label: "鏂囦欢鍚�",
@@ -147,8 +149,15 @@
       this.onLoad(this.page, params);
       done();
     },
+    clickRowChange(row){
+      this.$refs.crud.toggleSelection();
+      this.selectionList = row;
+      this.$refs.crud.setCurrentRow(row);
+      this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
+    },
     selectionChange(list) {
       this.selectionList = list;
+      this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
     },
     selectionClear() {
       this.selectionList = [];
diff --git a/Source/UBCS-WEB/src/views/system/client.vue b/Source/UBCS-WEB/src/views/system/client.vue
index a630f6f..e80b4ce 100644
--- a/Source/UBCS-WEB/src/views/system/client.vue
+++ b/Source/UBCS-WEB/src/views/system/client.vue
@@ -13,6 +13,7 @@
                :before-open="beforeOpen"
                @search-change="searchChange"
                @search-reset="searchReset"
+               @row-click="clickRowChange"
                @selection-change="selectionChange"
                @current-change="currentChange"
                @size-change="sizeChange"
@@ -58,6 +59,7 @@
           viewBtn: true,
           selection: true,
           dialogClickModal: false,
+          highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
           column: [
             {
               label: "搴旂敤id",
@@ -275,8 +277,15 @@
         this.onLoad(this.page, params);
         done();
       },
+      clickRowChange(row){
+        this.$refs.crud.toggleSelection();
+        this.selectionList = row;
+        this.$refs.crud.setCurrentRow(row);
+        this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
+      },
       selectionChange(list) {
         this.selectionList = list;
+        this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
       },
       selectionClear() {
         this.selectionList = [];
diff --git a/Source/UBCS-WEB/src/views/system/dept.vue b/Source/UBCS-WEB/src/views/system/dept.vue
index 89cead3..02063bd 100644
--- a/Source/UBCS-WEB/src/views/system/dept.vue
+++ b/Source/UBCS-WEB/src/views/system/dept.vue
@@ -1,24 +1,25 @@
 <template>
   <basic-container>
     <avue-crud :option="option"
-               :table-loading="loading"
-               :data="data"
-               ref="crud"
-               v-model="form"
-               :permission="permissionList"
-               :before-open="beforeOpen"
-               :before-close="beforeClose"
-               @row-del="rowDel"
-               @row-update="rowUpdate"
-               @row-save="rowSave"
-               @search-change="searchChange"
-               @search-reset="searchReset"
-               @selection-change="selectionChange"
-               @current-change="currentChange"
-               @size-change="sizeChange"
-               @refresh-change="refreshChange"
-               @on-load="onLoad"
-               @tree-load="treeLoad">
+      :table-loading="loading"
+      :data="data"
+      ref="crud"
+      v-model="form"
+      :permission="permissionList"
+      :before-open="beforeOpen"
+      :before-close="beforeClose"
+      @row-del="rowDel"
+      @row-update="rowUpdate"
+      @row-save="rowSave"
+      @search-change="searchChange"
+      @search-reset="searchReset"
+      @selection-change="selectionChange"
+      @row-click="clickRowChange"
+      @current-change="currentChange"
+      @size-change="sizeChange"
+      @refresh-change="refreshChange"
+      @on-load="onLoad"
+      @tree-load="treeLoad">
       <template slot="menuLeft">
         <el-button type="danger"
                    size="small"
@@ -84,6 +85,7 @@
           viewBtn: true,
           menuWidth: 300,
           dialogClickModal: false,
+          highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
           column: [
             {
               label: "鏈烘瀯鍚嶇О",
@@ -307,8 +309,15 @@
         this.onLoad(this.page, params);
         done();
       },
+      clickRowChange(row){
+        this.$refs.crud.toggleSelection();
+        this.selectionList = row;
+        this.$refs.crud.setCurrentRow(row);
+        this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
+      },
       selectionChange(list) {
         this.selectionList = list;
+        this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
       },
       selectionClear() {
         this.selectionList = [];
diff --git a/Source/UBCS-WEB/src/views/system/menu.vue b/Source/UBCS-WEB/src/views/system/menu.vue
index 8d70338..d31fcc6 100644
--- a/Source/UBCS-WEB/src/views/system/menu.vue
+++ b/Source/UBCS-WEB/src/views/system/menu.vue
@@ -14,6 +14,7 @@
                @search-change="searchChange"
                @search-reset="searchReset"
                @selection-change="selectionChange"
+               @row-click="clickRowChange"
                @current-change="currentChange"
                @size-change="sizeChange"
                @refresh-change="refreshChange"
@@ -69,6 +70,7 @@
           total: 0,
         },
         option: {
+          height: "auto",
           lazy: true,
           tip: false,
           simplePage: true,
@@ -82,6 +84,7 @@
           viewBtn: true,
           menuWidth: 300,
           dialogClickModal: false,
+          highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
           column: [
             {
               label: "鑿滃崟鍚嶇О",
@@ -366,8 +369,15 @@
         this.onLoad(this.page, params);
         done();
       },
+      clickRowChange(row){
+        this.$refs.crud.toggleSelection();
+        this.selectionList = row;
+        this.$refs.crud.setCurrentRow(row);
+        this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
+      },
       selectionChange(list) {
         this.selectionList = list;
+        this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
       },
       selectionClear() {
         this.selectionList = [];
diff --git a/Source/UBCS-WEB/src/views/system/post.vue b/Source/UBCS-WEB/src/views/system/post.vue
index 63bb9c4..c702914 100644
--- a/Source/UBCS-WEB/src/views/system/post.vue
+++ b/Source/UBCS-WEB/src/views/system/post.vue
@@ -14,6 +14,7 @@
                @search-change="searchChange"
                @search-reset="searchReset"
                @selection-change="selectionChange"
+               @row-click="clickRowChange"
                @current-change="currentChange"
                @size-change="sizeChange"
                @refresh-change="refreshChange"
@@ -63,6 +64,7 @@
           viewBtn: true,
           selection: true,
           dialogClickModal: false,
+          highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
           column: [
             {
               label: "鎵�灞炵鎴�",
@@ -247,8 +249,15 @@
         this.onLoad(this.page, params);
         done();
       },
+      clickRowChange(row){
+        this.$refs.crud.toggleSelection();
+        this.selectionList = row;
+        this.$refs.crud.setCurrentRow(row);
+        this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
+      },
       selectionChange(list) {
         this.selectionList = list;
+        this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
       },
       selectionClear() {
         this.selectionList = [];
diff --git a/Source/UBCS-WEB/src/views/system/tenant.vue b/Source/UBCS-WEB/src/views/system/tenant.vue
index 8cfa8c9..0b84338 100644
--- a/Source/UBCS-WEB/src/views/system/tenant.vue
+++ b/Source/UBCS-WEB/src/views/system/tenant.vue
@@ -13,6 +13,7 @@
                @row-save="rowSave"
                @search-change="searchChange"
                @search-reset="searchReset"
+               @row-click="clickRowChange"
                @selection-change="selectionChange"
                @current-change="currentChange"
                @size-change="sizeChange"
@@ -135,6 +136,7 @@
         viewBtn: true,
         dialogWidth: 900,
         dialogClickModal: false,
+        highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
         column: [
           {
             label: "绉熸埛ID",
@@ -420,8 +422,15 @@
       this.onLoad(this.page, params);
       done();
     },
+    clickRowChange(row){
+      this.$refs.crud.toggleSelection();
+      this.selectionList = row;
+      this.$refs.crud.setCurrentRow(row);
+      this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
+    },
     selectionChange(list) {
       this.selectionList = list;
+      this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
     },
     selectionClear() {
       this.selectionList = [];
diff --git a/Source/UBCS-WEB/src/views/system/topmenu.vue b/Source/UBCS-WEB/src/views/system/topmenu.vue
index fdb6388..96c8cf1 100644
--- a/Source/UBCS-WEB/src/views/system/topmenu.vue
+++ b/Source/UBCS-WEB/src/views/system/topmenu.vue
@@ -17,6 +17,7 @@
                @current-change="currentChange"
                @size-change="sizeChange"
                @refresh-change="refreshChange"
+               @row-click="clickRowChange"
                @on-load="onLoad">
       <template slot="menuLeft">
         <el-button type="danger"
@@ -101,6 +102,7 @@
           selection: true,
           dialogWidth: 900,
           dialogClickModal: false,
+          highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
           column: [
             {
               label: "鑿滃崟鍚�",
@@ -294,8 +296,15 @@
         this.onLoad(this.page, params);
         done();
       },
+      clickRowChange(row){
+        this.$refs.crud.toggleSelection();
+        this.selectionList = row;
+        this.$refs.crud.setCurrentRow(row);
+        this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
+      },
       selectionChange(list) {
         this.selectionList = list;
+        this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
       },
       selectionClear() {
         this.selectionList = [];
diff --git a/Source/UBCS-WEB/src/views/system/user.vue b/Source/UBCS-WEB/src/views/system/user.vue
index 671d40a..390e11b 100644
--- a/Source/UBCS-WEB/src/views/system/user.vue
+++ b/Source/UBCS-WEB/src/views/system/user.vue
@@ -15,24 +15,25 @@
       <basic-container>
         <div class="bbox">
         <avue-crud ref="crud"
-                   v-model="form"
-                   :before-open="beforeOpen"
-                   :data="data"
-                   :option="option"
-                   :page.sync="page"
-                   :permission="permissionList"
-                   :search.sync="search"
-                   :table-loading="loading"
-                   @row-del="rowDel"
-                   @row-update="rowUpdate"
-                   @row-save="rowSave"
-                   @search-change="searchChange"
-                   @search-reset="searchReset"
-                   @selection-change="selectionChange"
-                   @current-change="currentChange"
-                   @size-change="sizeChange"
-                   @refresh-change="refreshChange"
-                   @on-load="onLoad">
+          v-model="form"
+          :before-open="beforeOpen"
+          :data="data"
+          :option="option"
+          :page.sync="page"
+          :permission="permissionList"
+          :search.sync="search"
+          :table-loading="loading"
+          @row-del="rowDel"
+          @row-update="rowUpdate"
+          @row-save="rowSave"
+          @search-change="searchChange"
+          @search-reset="searchReset"
+          @row-click="clickRowChange"
+          @selection-change="selectionChange"
+          @current-change="currentChange"
+          @size-change="sizeChange"
+          @refresh-change="refreshChange"
+          @on-load="onLoad">
           <template slot="menuLeft">
             <el-button v-if="permission.user_delete"
                        icon="el-icon-delete"
@@ -285,6 +286,7 @@
         viewBtn: true,
         dialogType: 'drawer',
         dialogClickModal: false,
+        highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
         column: [
           {
             label: "鐧诲綍璐﹀彿",
@@ -766,8 +768,8 @@
       }else {
         this.passVisible=true;
       }
-      console.log("selectionList",this.selectionList)
-      console.log(this.UserPwdstrategyVO)
+      //console.log("selectionList",this.selectionList)
+      //console.log(this.UserPwdstrategyVO)
     },
     // 璁剧疆瀵嗙爜绛栫暐锛屼紶閫掍笅鎷夋鐨刬d鍜屽閫夋鐨刬d
     passhandle(){
@@ -902,8 +904,15 @@
       this.onLoad(this.page, params);
       done();
     },
+    clickRowChange(row){
+      this.$refs.crud.toggleSelection();
+      this.selectionList = row;
+      this.$refs.crud.setCurrentRow(row);
+      this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
+    },
     selectionChange(list) {
       this.selectionList = list;
+      this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
     },
     selectionClear() {
       this.selectionList = [];
diff --git a/Source/UBCS-WEB/src/views/wel/index.vue b/Source/UBCS-WEB/src/views/wel/index.vue
index 2bd49ae..f19499e 100644
--- a/Source/UBCS-WEB/src/views/wel/index.vue
+++ b/Source/UBCS-WEB/src/views/wel/index.vue
@@ -13,12 +13,12 @@
             <img src="https://img.shields.io/badge/JDK-1.8+-green.svg" alt="Build Status"/>
             <img src="https://img.shields.io/badge/Spring%20Cloud-2021-blue.svg" alt="Coverage Status"/>
             <img src="https://img.shields.io/badge/Spring%20Boot-2.7-blue.svg" alt="Downloads"/>
-            <a target="_blank" href="https://bladex.vip">
+            <!-- <a target="_blank" href="https://bladex.vip">
               <img src="https://img.shields.io/badge/Saber%20Author-Small%20Chill-ff69b4.svg" alt="Downloads"/>
             </a>
             <a target="_blank" href="https://bladex.vip">
               <img src="https://img.shields.io/badge/Copyright%20-@BladeX-%23ff3f59.svg" alt="Downloads"/>
-            </a>
+            </a> -->
           </p>
         </basic-container>
       </el-col>
diff --git a/Source/UBCS-WEB/src/views/work/claim.vue b/Source/UBCS-WEB/src/views/work/claim.vue
index 7b18e13..9129e51 100644
--- a/Source/UBCS-WEB/src/views/work/claim.vue
+++ b/Source/UBCS-WEB/src/views/work/claim.vue
@@ -1,17 +1,18 @@
 <template>
   <basic-container>
     <avue-crud :option="option"
-               :table-loading="loading"
-               :data="data"
-               ref="crud"
-               v-model="form"
-               @search-change="searchChange"
-               @search-reset="searchReset"
-               @selection-change="selectionChange"
-               @current-change="currentChange"
-               @size-change="sizeChange"
-               @refresh-change="refreshChange"
-               @on-load="onLoad">
+      :table-loading="loading"
+      :data="data"
+      ref="crud"
+      v-model="form"
+      @search-change="searchChange"
+      @search-reset="searchReset"
+      @row-click="clickRowChange"
+      @selection-change="selectionChange"
+      @current-change="currentChange"
+      @size-change="sizeChange"
+      @refresh-change="refreshChange"
+      @on-load="onLoad">
       <template slot-scope="scope" slot="menu">
         <el-button type="text"
                    size="small"
@@ -144,6 +145,13 @@
       },
       selectionChange(list) {
         this.selectionList = list;
+        this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
+      },
+      clickRowChange(row){
+        this.$refs.crud.toggleSelection();
+        this.selectionList = row;
+        this.$refs.crud.setCurrentRow(row);
+        this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
       },
       selectionClear() {
         this.selectionList = [];
diff --git a/Source/UBCS-WEB/src/views/work/done.vue b/Source/UBCS-WEB/src/views/work/done.vue
index 56ef30c..a4d9ad6 100644
--- a/Source/UBCS-WEB/src/views/work/done.vue
+++ b/Source/UBCS-WEB/src/views/work/done.vue
@@ -12,6 +12,7 @@
                @current-change="currentChange"
                @size-change="sizeChange"
                @refresh-change="refreshChange"
+               @row-click="clickRowChange"
                @on-load="onLoad">
       <template slot-scope="scope" slot="menu">
         <el-button type="text"
@@ -136,8 +137,15 @@
         this.onLoad(this.page, params);
         done();
       },
+      clickRowChange(row){
+        this.$refs.crud.toggleSelection();
+        this.selectionList = row;
+        this.$refs.crud.setCurrentRow(row);
+        this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
+      },
       selectionChange(list) {
         this.selectionList = list;
+        this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
       },
       selectionClear() {
         this.selectionList = [];
diff --git a/Source/UBCS-WEB/src/views/work/send.vue b/Source/UBCS-WEB/src/views/work/send.vue
index 34f95f4..aa8acd3 100644
--- a/Source/UBCS-WEB/src/views/work/send.vue
+++ b/Source/UBCS-WEB/src/views/work/send.vue
@@ -9,6 +9,7 @@
                @search-change="searchChange"
                @search-reset="searchReset"
                @selection-change="selectionChange"
+               @row-click="clickRowChange"
                @current-change="currentChange"
                @size-change="sizeChange"
                @refresh-change="refreshChange"
@@ -146,8 +147,15 @@
         this.onLoad(this.page, params);
         done();
       },
+      clickRowChange(row){
+        this.$refs.crud.toggleSelection();
+        this.selectionList = row;
+        this.$refs.crud.setCurrentRow(row);
+        this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
+      },
       selectionChange(list) {
         this.selectionList = list;
+        this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
       },
       selectionClear() {
         this.selectionList = [];
diff --git a/Source/UBCS-WEB/src/views/work/start.vue b/Source/UBCS-WEB/src/views/work/start.vue
index c7a3898..3496c11 100644
--- a/Source/UBCS-WEB/src/views/work/start.vue
+++ b/Source/UBCS-WEB/src/views/work/start.vue
@@ -1,18 +1,19 @@
 <template>
   <basic-container>
     <avue-crud :option="option"
-               :table-loading="loading"
-               :data="data"
-               :page.sync="page"
-               v-model="form"
-               ref="crud"
-               @search-change="searchChange"
-               @search-reset="searchReset"
-               @selection-change="selectionChange"
-               @current-change="currentChange"
-               @size-change="sizeChange"
-               @refresh-change="refreshChange"
-               @on-load="onLoad">
+      :table-loading="loading"
+      :data="data"
+      :page.sync="page"
+      v-model="form"
+      ref="crud"
+      @search-change="searchChange"
+      @search-reset="searchReset"
+      @selection-change="selectionChange"
+      @row-click="clickRowChange"
+      @current-change="currentChange"
+      @size-change="sizeChange"
+      @refresh-change="refreshChange"
+      @on-load="onLoad">
       <template slot="menuLeft">
         <el-radio-group v-model="mode" size="small">
           <el-radio-button label="1">閫氱敤娴佺▼</el-radio-button>
@@ -171,8 +172,15 @@
         this.onLoad(this.page, params);
         done();
       },
+      clickRowChange(row){
+        this.$refs.crud.toggleSelection();
+        this.selectionList = row;
+        this.$refs.crud.setCurrentRow(row);
+        this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
+      },
       selectionChange(list) {
         this.selectionList = list;
+        this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
       },
       selectionClear() {
         this.selectionList = [];
diff --git a/Source/UBCS-WEB/src/views/work/todo.vue b/Source/UBCS-WEB/src/views/work/todo.vue
index 1254acc..688fb27 100644
--- a/Source/UBCS-WEB/src/views/work/todo.vue
+++ b/Source/UBCS-WEB/src/views/work/todo.vue
@@ -1,17 +1,18 @@
 <template>
   <basic-container>
     <avue-crud :option="option"
-               :table-loading="loading"
-               :data="data"
-               ref="crud"
-               v-model="form"
-               @search-change="searchChange"
-               @search-reset="searchReset"
-               @selection-change="selectionChange"
-               @current-change="currentChange"
-               @size-change="sizeChange"
-               @refresh-change="refreshChange"
-               @on-load="onLoad">
+      :table-loading="loading"
+      :data="data"
+      ref="crud"
+      v-model="form"
+      @search-change="searchChange"
+      @search-reset="searchReset"
+      @selection-change="selectionChange"
+      @current-change="currentChange"
+      @size-change="sizeChange"
+      @refresh-change="refreshChange"
+      @row-click="clickRowChange"
+      @on-load="onLoad">
       <template slot-scope="scope" slot="menu">
         <el-button type="text"
                    size="small"
@@ -144,6 +145,13 @@
       },
       selectionChange(list) {
         this.selectionList = list;
+        this.$refs.crud.setCurrentRow(this.selectionList[list.length-1]);
+      },
+      clickRowChange(row){
+        this.$refs.crud.toggleSelection();
+        this.selectionList = row;
+        this.$refs.crud.setCurrentRow(row);
+        this.$refs.crud.toggleRowSelection(row); //閫変腑褰撳墠琛�
       },
       selectionClear() {
         this.selectionList = [];
diff --git a/Source/UBCS-WEB/vue.config.js b/Source/UBCS-WEB/vue.config.js
index 4933f0c..2577e72 100644
--- a/Source/UBCS-WEB/vue.config.js
+++ b/Source/UBCS-WEB/vue.config.js
@@ -26,7 +26,8 @@
     proxy: {
       '/api': {
         //鏈湴鏈嶅姟鎺ュ彛鍦板潃
-        target: 'http://localhost:37000',
+        //target: 'http://localhost:37000',
+        target: 'http://192.168.3.7:37000',
         //target: 'http://dev.vci-tech.com:37000',
         //杩滅▼婕旂ず鏈嶅姟鍦板潃,鍙敤浜庣洿鎺ュ惎鍔ㄩ」鐩�
         //target: 'https://saber.bladex.vip/api',
diff --git a/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java
index f69f844..67fa4d1 100644
--- a/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java
+++ b/Source/UBCS/ubcs-common/src/main/java/com/vci/ubcs/common/constant/LauncherConstant.java
@@ -41,7 +41,7 @@
 	 * nacos dev 鍦板潃
 	 */
 	//String NACOS_DEV_ADDR = "dev.vci-tech.com:38848";
-	String NACOS_DEV_ADDR = "192.168.93.149:38848";
+	String NACOS_DEV_ADDR = "192.168.93.196:38848";
 
 	/**
 	 * nacos prod 鍦板潃
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateAttrDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateAttrDTO.java
index 53b5331..fbb0240 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateAttrDTO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateAttrDTO.java
@@ -1,19 +1,38 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
 package com.vci.ubcs.code.dto;
 
-
 import com.vci.ubcs.code.vo.pagemodel.BaseModelVO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 /**
- * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф暟鎹紶杈撳璞�
+ * 缂栫爜搴撳畾涔�-妯℃澘灞炴�� 鏁版嵁浼犺緭瀵硅薄瀹炰綋绫�
  *
- * @author weidy
- * @date 2022-01-24
+ * @author ludc
+ * @since 2023-05-8
  */
+@Data
+@EqualsAndHashCode(callSuper = true)
 public class CodeClassifyTemplateAttrDTO extends BaseModelVO {
 
 	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
+	 * 绂佹淇敼杩欎釜鍊�
+	 */
 	private static final long serialVersionUID = 4615707118652601470L;
 
 	/**
@@ -261,787 +280,31 @@
 	/**
 	 * 璇存槑
 	 */
+	//@Column(columnDefinition = "璇存槑")
 	private String explain;
 
 	/**
 	 * 閫夋嫨搴撴爣璇�
 	 */
+	//@Column(columnDefinition = "閫夋嫨搴撴爣璇�")
 	private String libraryIdentification;
 
 	/**
 	 * 绾ц仈灞炴�х紪鍙�
 	 */
+	//@Column(columnDefinition = "绾ц仈灞炴�х紪鍙�")
 	private String parentCode;
 
 	/**
 	 * 绾ц仈灞炴�у悕绉�
 	 */
+	//@Column(columnDefinition = "绾ц仈灞炴�у悕绉�")
 	private String parentName;
 
 	/**
 	 * 绾ц仈鏌ヨ灞炴��
 	 */
+	//@Column(columnDefinition = "绾ц仈鏌ヨ灞炴��")
 	private String parentQueryAttr;
 
-	public String getExplain() {
-		return explain;
-	}
-
-	public void setExplain(String explain) {
-		this.explain = explain;
-	}
-
-	public String getLibraryIdentification() {
-		return libraryIdentification;
-	}
-
-	public void setLibraryIdentification(String libraryIdentification) {
-		this.libraryIdentification = libraryIdentification;
-	}
-
-	public String getParentCode() {
-		return parentCode;
-	}
-
-	public void setParentCode(String parentCode) {
-		this.parentCode = parentCode;
-	}
-
-	public String getParentName() {
-		return parentName;
-	}
-
-	public void setParentName(String parentName) {
-		this.parentName = parentName;
-	}
-
-	public String getParentQueryAttr() {
-		return parentQueryAttr;
-	}
-
-	public void setParentQueryAttr(String parentQueryAttr) {
-		this.parentQueryAttr = parentQueryAttr;
-	}
-
-	public String getEnumString() {
-		return enumString;
-	}
-
-	public void setEnumString(String enumString) {
-		this.enumString = enumString;
-	}
-
-	/**
-	 * 鑾峰彇 鎵�灞炴ā鏉�
-	 */
-	public String getClassifytemplateoid (){
-		return classifytemplateoid;
-	}
-
-	/**
-	 * 璁剧疆 鎵�灞炴ā鏉�
-	 */
-	public void setClassifytemplateoid (String classifytemplateoid){
-		this.classifytemplateoid = classifytemplateoid;
-	}
-
-	/**
-	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	 */
-	public String getClassifytemplateoidName (){
-		return classifytemplateoidName;
-	}
-
-	/**
-	 * 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	 */
-	public void setClassifytemplateoidName (String classifytemplateoidName){
-		this.classifytemplateoidName = classifytemplateoidName;
-	}
-	/**
-	 * 鑾峰彇 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
-	 */
-	public String getClassifyattributeoid (){
-		return classifyattributeoid;
-	}
-
-	/**
-	 * 璁剧疆 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
-	 */
-	public void setClassifyattributeoid (String classifyattributeoid){
-		this.classifyattributeoid = classifyattributeoid;
-	}
-
-	/**
-	 * 鑾峰彇鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
-	 */
-	public String getClassifyattributeoidName (){
-		return classifyattributeoidName;
-	}
-
-	/**
-	 * 璁剧疆鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
-	 */
-	public void setClassifyattributeoidName (String classifyattributeoidName){
-		this.classifyattributeoidName = classifyattributeoidName;
-	}
-	/**
-	 * 鑾峰彇 灞炴�х殑绫诲瀷
-	 */
-	public String getAttributedatatype (){
-		return attributedatatype;
-	}
-
-	/**
-	 * 璁剧疆 灞炴�х殑绫诲瀷
-	 */
-	public void setAttributedatatype (String attributedatatype){
-		this.attributedatatype = attributedatatype;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁鍏抽敭灞炴��
-	 */
-	public String getKeyattrflag (){
-		return keyattrflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁鍏抽敭灞炴��
-	 */
-	public void setKeyattrflag (String keyattrflag){
-		this.keyattrflag = keyattrflag;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁蹇�熸煡璇㈠睘鎬�
-	 */
-	public String getQueryattrflag (){
-		return queryattrflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁蹇�熸煡璇㈠睘鎬�
-	 */
-	public void setQueryattrflag (String queryattrflag){
-		this.queryattrflag = queryattrflag;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁楂樼骇鏌ヨ灞炴��
-	 */
-	public String getSeniorqueryattrflag (){
-		return seniorqueryattrflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁楂樼骇鏌ヨ灞炴��
-	 */
-	public void setSeniorqueryattrflag (String seniorqueryattrflag){
-		this.seniorqueryattrflag = seniorqueryattrflag;
-	}
-
-	/**
-	 * 鑾峰彇 鐩镐技鏌ラ噸灞炴��
-	 */
-	public String getSamerepeatattrflag (){
-		return samerepeatattrflag;
-	}
-
-	/**
-	 * 璁剧疆 鐩镐技鏌ラ噸灞炴��
-	 */
-	public void setSamerepeatattrflag (String samerepeatattrflag){
-		this.samerepeatattrflag = samerepeatattrflag;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁鎺掑簭
-	 */
-	public String getSortattrflag (){
-		return sortattrflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁鎺掑簭
-	 */
-	public void setSortattrflag (String sortattrflag){
-		this.sortattrflag = sortattrflag;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁鐢熸垚浜岀淮鐮�
-	 */
-	public String getQrcodeflag (){
-		return qrcodeflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁鐢熸垚浜岀淮鐮�
-	 */
-	public void setQrcodeflag (String qrcodeflag){
-		this.qrcodeflag = qrcodeflag;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁鐢熸垚涓�缁寸爜
-	 */
-	public String getBarcodeflag (){
-		return barcodeflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁鐢熸垚涓�缁寸爜
-	 */
-	public void setBarcodeflag (String barcodeflag){
-		this.barcodeflag = barcodeflag;
-	}
-
-	/**
-	 * 鑾峰彇 缁勫悎瑙勫垯
-	 */
-	public String getComponentrule (){
-		return componentrule;
-	}
-
-	/**
-	 * 璁剧疆 缁勫悎瑙勫垯
-	 */
-	public void setComponentrule (String componentrule){
-		this.componentrule = componentrule;
-	}
-
-	/**
-	 * 鑾峰彇 楠岃瘉瑙勫垯
-	 */
-	public String getVerifyrule (){
-		return verifyrule;
-	}
-
-	/**
-	 * 璁剧疆 楠岃瘉瑙勫垯
-	 */
-	public void setVerifyrule (String verifyrule){
-		this.verifyrule = verifyrule;
-	}
-
-	/**
-	 * 鑾峰彇 鍒嗙被娉ㄥ叆灞傜骇
-	 */
-	public String getClassifyinvokelevel (){
-		return classifyinvokelevel;
-	}
-
-	/**
-	 * 璁剧疆 鍒嗙被娉ㄥ叆灞傜骇
-	 */
-	public void setClassifyinvokelevel (String classifyinvokelevel){
-		this.classifyinvokelevel = classifyinvokelevel;
-	}
-
-	/**
-	 * 鑾峰彇 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
-	 */
-	public String getClassifyinvokeattr (){
-		return classifyinvokeattr;
-	}
-
-	/**
-	 * 璁剧疆 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
-	 */
-	public void setClassifyinvokeattr (String classifyinvokeattr){
-		this.classifyinvokeattr = classifyinvokeattr;
-	}
-
-	/**
-	 * 鑾峰彇 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
-	 */
-	public String getClassifyinvokeattrname (){
-		return classifyinvokeattrname;
-	}
-
-	/**
-	 * 璁剧疆 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
-	 */
-	public void setClassifyinvokeattrname (String classifyinvokeattrname){
-		this.classifyinvokeattrname = classifyinvokeattrname;
-	}
-
-	/**
-	 * 鑾峰彇 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
-	 */
-	public String getClassifyinvokeeditflag (){
-		return classifyinvokeeditflag;
-	}
-
-	/**
-	 * 璁剧疆 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
-	 */
-	public void setClassifyinvokeeditflag (String classifyinvokeeditflag){
-		this.classifyinvokeeditflag = classifyinvokeeditflag;
-	}
-
-	/**
-	 * 鑾峰彇 鐮佸�煎簭鍙�
-	 */
-	public Integer getOrdernum (){
-		return ordernum;
-	}
-
-	/**
-	 * 璁剧疆 鐮佸�煎簭鍙�
-	 */
-	public void setOrdernum (Integer ordernum){
-		this.ordernum = ordernum;
-	}
-
-	/**
-	 * 鑾峰彇 琛ㄥ崟閲屾槸鍚︽樉绀�
-	 */
-	public String getFormdisplayflag (){
-		return formdisplayflag;
-	}
-
-	/**
-	 * 璁剧疆 琛ㄥ崟閲屾槸鍚︽樉绀�
-	 */
-	public void setFormdisplayflag (String formdisplayflag){
-		this.formdisplayflag = formdisplayflag;
-	}
-
-	/**
-	 * 鑾峰彇 鍒楄〃閲屾槸鍚︽樉绀�
-	 */
-	public String getTabledisplayflag (){
-		return tabledisplayflag;
-	}
-
-	/**
-	 * 璁剧疆 鍒楄〃閲屾槸鍚︽樉绀�
-	 */
-	public void setTabledisplayflag (String tabledisplayflag){
-		this.tabledisplayflag = tabledisplayflag;
-	}
-
-	/**
-	 * 鑾峰彇 鎵�灞炲睘鎬у垎缁�
-	 */
-	public String getAttributegroup (){
-		return attributegroup;
-	}
-
-	/**
-	 * 璁剧疆 鎵�灞炲睘鎬у垎缁�
-	 */
-	public void setAttributegroup (String attributegroup){
-		this.attributegroup = attributegroup;
-	}
-
-	/**
-	 * 鑾峰彇 浣跨敤鏋氫妇鑻辨枃缂栧彿
-	 */
-	public String getEnumid (){
-		return enumid;
-	}
-
-	/**
-	 * 璁剧疆 浣跨敤鏋氫妇鑻辨枃缂栧彿
-	 */
-	public void setEnumid (String enumid){
-		this.enumid = enumid;
-	}
-
-	/**
-	 * 鑾峰彇 浣跨敤鏋氫妇涓枃鍚嶇О
-	 */
-	public String getEnumname (){
-		return enumname;
-	}
-
-	/**
-	 * 璁剧疆 浣跨敤鏋氫妇涓枃鍚嶇О
-	 */
-	public void setEnumname (String enumname){
-		this.enumname = enumname;
-	}
-
-	/**
-	 * 鑾峰彇 鏋氫妇鏄惁鍙互缂栬緫
-	 */
-	public String getEnumeditflag (){
-		return enumeditflag;
-	}
-
-	/**
-	 * 璁剧疆 鏋氫妇鏄惁鍙互缂栬緫
-	 */
-	public void setEnumeditflag (String enumeditflag){
-		this.enumeditflag = enumeditflag;
-	}
-
-	/**
-	 * 鑾峰彇 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
-	 */
-	public String getReferbtmid (){
-		return referbtmid;
-	}
-
-	/**
-	 * 璁剧疆 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
-	 */
-	public void setReferbtmid (String referbtmid){
-		this.referbtmid = referbtmid;
-	}
-
-	/**
-	 * 鑾峰彇 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
-	 */
-	public String getReferbtmname (){
-		return referbtmname;
-	}
-
-	/**
-	 * 璁剧疆 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
-	 */
-	public void setReferbtmname (String referbtmname){
-		this.referbtmname = referbtmname;
-	}
-
-
-	/**
-	 * 鑾峰彇 鏄惁蹇呰緭
-	 */
-	public String getRequireflag (){
-		return requireflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁蹇呰緭
-	 */
-	public void setRequireflag (String requireflag){
-		this.requireflag = requireflag;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁鍙
-	 */
-	public String getReadonlyflag (){
-		return readonlyflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁鍙
-	 */
-	public void setReadonlyflag (String readonlyflag){
-		this.readonlyflag = readonlyflag;
-	}
-
-	/**
-	 * 鑾峰彇 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
-	 */
-	public Integer getControllength (){
-		return controllength;
-	}
-
-	/**
-	 * 璁剧疆 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
-	 */
-	public void setControllength (Integer controllength){
-		this.controllength = controllength;
-	}
-
-	/**
-	 * 鑾峰彇 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
-	 */
-	public String getFormdisplaystyle (){
-		return formdisplaystyle;
-	}
-
-	/**
-	 * 璁剧疆 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
-	 */
-	public void setFormdisplaystyle (String formdisplaystyle){
-		this.formdisplaystyle = formdisplaystyle;
-	}
-
-	/**
-	 * 鑾峰彇 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
-	 */
-	public String getTabledisplaystyle (){
-		return tabledisplaystyle;
-	}
-
-	/**
-	 * 璁剧疆 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
-	 */
-	public void setTabledisplaystyle (String tabledisplaystyle){
-		this.tabledisplaystyle = tabledisplaystyle;
-	}
-
-	/**
-	 * 鑾峰彇 琛ㄥ崟涓秴閾炬帴鍐呭
-	 */
-	public String getFormhref (){
-		return formhref;
-	}
-
-	/**
-	 * 璁剧疆 琛ㄥ崟涓秴閾炬帴鍐呭
-	 */
-	public void setFormhref (String formhref){
-		this.formhref = formhref;
-	}
-
-	/**
-	 * 鑾峰彇 琛ㄦ牸涓秴閾炬帴鍐呭
-	 */
-	public String getTablehref (){
-		return tablehref;
-	}
-
-	/**
-	 * 璁剧疆 琛ㄦ牸涓秴閾炬帴鍐呭
-	 */
-	public void setTablehref (String tablehref){
-		this.tablehref = tablehref;
-	}
-
-	/**
-	 * 鑾峰彇 灏忔暟绮惧害
-	 */
-	public Integer getPrecisionlength (){
-		return precisionlength;
-	}
-
-	/**
-	 * 璁剧疆 灏忔暟绮惧害
-	 */
-	public void setPrecisionlength (Integer precisionlength){
-		this.precisionlength = precisionlength;
-	}
-
-	/**
-	 * 鑾峰彇 灏忔暟鍒诲害
-	 */
-	public Integer getScalelength (){
-		return scalelength;
-	}
-
-	/**
-	 * 璁剧疆 灏忔暟鍒诲害
-	 */
-	public void setScalelength (Integer scalelength){
-		this.scalelength = scalelength;
-	}
-
-	/**
-	 * 鑾峰彇 鍙栧�艰寖鍥�
-	 */
-	public String getValuearea (){
-		return valuearea;
-	}
-
-	/**
-	 * 璁剧疆 鍙栧�艰寖鍥�
-	 */
-	public void setValuearea (String valuearea){
-		this.valuearea = valuearea;
-	}
-
-	/**
-	 * 鑾峰彇 鏃堕棿鏍煎紡
-	 */
-	public String getCodedateformat (){
-		return codedateformat;
-	}
-
-	/**
-	 * 璁剧疆 鏃堕棿鏍煎紡
-	 */
-	public void setCodedateformat (String codedateformat){
-		this.codedateformat = codedateformat;
-	}
-
-	/**
-	 * 鑾峰彇 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
-	 */
-	public String getTabledisplayjs (){
-		return tabledisplayjs;
-	}
-
-	/**
-	 * 璁剧疆 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
-	 */
-	public void setTabledisplayjs (String tabledisplayjs){
-		this.tabledisplayjs = tabledisplayjs;
-	}
-
-	/**
-	 * 鑾峰彇 鏄惁鏄剧ず澶氳鏂囨湰
-	 */
-	public String getTextareaflag (){
-		return textareaflag;
-	}
-
-	/**
-	 * 璁剧疆 鏄惁鏄剧ず澶氳鏂囨湰
-	 */
-	public void setTextareaflag (String textareaflag){
-		this.textareaflag = textareaflag;
-	}
-
-	/**
-	 * 鑾峰彇 棰勮鍥�
-	 */
-	public String getImageflag (){
-		return imageflag;
-	}
-
-	/**
-	 * 璁剧疆 棰勮鍥�
-	 */
-	public void setImageflag (String imageflag){
-		this.imageflag = imageflag;
-	}
-
-	/**
-	 * 鑾峰彇 榛樿鍊�
-	 */
-	public String getDefaultvalue (){
-		return defaultvalue;
-	}
-
-	/**
-	 * 璁剧疆 榛樿鍊�
-	 */
-	public void setDefaultvalue (String defaultvalue){
-		this.defaultvalue = defaultvalue;
-	}
-
-	/**
-	 * 鑾峰彇 鍓嶇紑
-	 */
-	public String getPrefixvalue (){
-		return prefixvalue;
-	}
-
-	/**
-	 * 璁剧疆 鍓嶇紑
-	 */
-	public void setPrefixvalue (String prefixvalue){
-		this.prefixvalue = prefixvalue;
-	}
-
-	/**
-	 * 鑾峰彇 鍚庣紑
-	 */
-	public String getSuffixvalue (){
-		return suffixvalue;
-	}
-
-	/**
-	 * 璁剧疆 鍚庣紑
-	 */
-	public void setSuffixvalue (String suffixvalue){
-		this.suffixvalue = suffixvalue;
-	}
-
-	/**
-	 * 鑾峰彇 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
-	 */
-	public String getFiltersourceattr (){
-		return filtersourceattr;
-	}
-
-	/**
-	 * 璁剧疆 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
-	 */
-	public void setFiltersourceattr (String filtersourceattr){
-		this.filtersourceattr = filtersourceattr;
-	}
-
-	/**
-	 * 鑾峰彇 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
-	 */
-	public String getFiltersourceattrname (){
-		return filtersourceattrname;
-	}
-
-	/**
-	 * 璁剧疆 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
-	 */
-	public void setFiltersourceattrname (String filtersourceattrname){
-		this.filtersourceattrname = filtersourceattrname;
-	}
-
-	public Integer getAttrTableWidth() {
-		return attrTableWidth;
-	}
-
-	public void setAttrTableWidth(Integer attrTableWidth) {
-		this.attrTableWidth = attrTableWidth;
-	}
-
-	public String getReferConfig() {
-		return referConfig;
-	}
-
-	public void setReferConfig(String referConfig) {
-		this.referConfig = referConfig;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeClassifyTemplateAttrDTO{" +
-				"classifytemplateoid='" + classifytemplateoid + '\'' +
-				", classifytemplateoidName='" + classifytemplateoidName + '\'' +
-				", classifyattributeoid='" + classifyattributeoid + '\'' +
-				", classifyattributeoidName='" + classifyattributeoidName + '\'' +
-				", attributedatatype='" + attributedatatype + '\'' +
-				", keyattrflag='" + keyattrflag + '\'' +
-				", queryattrflag='" + queryattrflag + '\'' +
-				", seniorqueryattrflag='" + seniorqueryattrflag + '\'' +
-				", samerepeatattrflag='" + samerepeatattrflag + '\'' +
-				", sortattrflag='" + sortattrflag + '\'' +
-				", qrcodeflag='" + qrcodeflag + '\'' +
-				", barcodeflag='" + barcodeflag + '\'' +
-				", componentrule='" + componentrule + '\'' +
-				", verifyrule='" + verifyrule + '\'' +
-				", classifyinvokelevel='" + classifyinvokelevel + '\'' +
-				", classifyinvokeattr='" + classifyinvokeattr + '\'' +
-				", classifyinvokeattrname='" + classifyinvokeattrname + '\'' +
-				", classifyinvokeeditflag='" + classifyinvokeeditflag + '\'' +
-				", ordernum=" + ordernum +
-				", formdisplayflag='" + formdisplayflag + '\'' +
-				", tabledisplayflag='" + tabledisplayflag + '\'' +
-				", attributegroup='" + attributegroup + '\'' +
-				", enumString='" + enumString + '\'' +
-				", enumid='" + enumid + '\'' +
-				", enumname='" + enumname + '\'' +
-				", enumeditflag='" + enumeditflag + '\'' +
-				", referbtmid='" + referbtmid + '\'' +
-				", referbtmname='" + referbtmname + '\'' +
-				", referConfig='" + referConfig + '\'' +
-				", requireflag='" + requireflag + '\'' +
-				", readonlyflag='" + readonlyflag + '\'' +
-				", controllength=" + controllength +
-				", formdisplaystyle='" + formdisplaystyle + '\'' +
-				", tabledisplaystyle='" + tabledisplaystyle + '\'' +
-				", formhref='" + formhref + '\'' +
-				", tablehref='" + tablehref + '\'' +
-				", precisionlength=" + precisionlength +
-				", scalelength=" + scalelength +
-				", valuearea='" + valuearea + '\'' +
-				", codedateformat='" + codedateformat + '\'' +
-				", tabledisplayjs='" + tabledisplayjs + '\'' +
-				", textareaflag='" + textareaflag + '\'' +
-				", imageflag='" + imageflag + '\'' +
-				", defaultvalue='" + defaultvalue + '\'' +
-				", prefixvalue='" + prefixvalue + '\'' +
-				", suffixvalue='" + suffixvalue + '\'' +
-				", filtersourceattr='" + filtersourceattr + '\'' +
-				", filtersourceattrname='" + filtersourceattrname + '\'' +
-				", attrTableWidth=" + attrTableWidth +
-				"} " + super.toString();
-	}
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateButtonDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateButtonDTO.java
index bf77cfb..ca636ca 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateButtonDTO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyTemplateButtonDTO.java
@@ -2,6 +2,7 @@
 
 
 import com.vci.ubcs.code.vo.pagemodel.BaseModelVO;
+import lombok.Data;
 
 /**
  * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽暟鎹紶杈撳璞�
@@ -9,6 +10,7 @@
  * @author weidy
  * @date 2022-01-24
  */
+@Data
 public class CodeClassifyTemplateButtonDTO extends BaseModelVO {
 
 	/**
@@ -19,25 +21,25 @@
 	/**
 	 * 鎵�灞炴ā鏉�
 	 */
-	private String classifytemplateoid;
+	private String classifyTemplateOid;
 
 	/**
 	 * 鎵�灞炴ā鏉挎樉绀烘枃鏈�
 	 */
-	private String classifytemplateoidName;
+	private String classifyTemplateOidName;
 	/**
 	 * 鎸夐挳鐨勪富閿�
 	 */
-	private String classifybuttonoid;
+	private String classifyButtonOid;
 
 	/**
 	 * 鎸夐挳鐨勪富閿樉绀烘枃鏈�
 	 */
-	private String classifybuttonoidName;
+	private String classifyButtonOidName;
 	/**
 	 * 鎸夐挳鐢ㄩ��
 	 */
-	private String buttonuse;
+	private String buttonUse;
 
 	/**
 	 * 鎸夐挳鐢ㄩ�旀樉绀哄璞�
@@ -47,109 +49,6 @@
 	/**
 	 * 鐮佸�煎簭鍙�
 	 */
-	private Integer ordernum;
+	private Integer orderNum;
 
-
-	/**
-	 * 鑾峰彇 鎵�灞炴ā鏉�
-	 */
-	public String getClassifytemplateoid (){
-		return classifytemplateoid;
-	}
-
-	/**
-	 * 璁剧疆 鎵�灞炴ā鏉�
-	 */
-	public void setClassifytemplateoid (String classifytemplateoid){
-		this.classifytemplateoid = classifytemplateoid;
-	}
-
-	/**
-	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	 */
-	public String getClassifytemplateoidName (){
-		return classifytemplateoidName;
-	}
-
-	/**
-	 * 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	 */
-	public void setClassifytemplateoidName (String classifytemplateoidName){
-		this.classifytemplateoidName = classifytemplateoidName;
-	}
-	/**
-	 * 鑾峰彇 鎸夐挳鐨勪富閿�
-	 */
-	public String getClassifybuttonoid (){
-		return classifybuttonoid;
-	}
-
-	/**
-	 * 璁剧疆 鎸夐挳鐨勪富閿�
-	 */
-	public void setClassifybuttonoid (String classifybuttonoid){
-		this.classifybuttonoid = classifybuttonoid;
-	}
-
-	/**
-	 * 鑾峰彇鎸夐挳鐨勪富閿樉绀烘枃鏈�
-	 */
-	public String getClassifybuttonoidName (){
-		return classifybuttonoidName;
-	}
-
-	/**
-	 * 璁剧疆鎸夐挳鐨勪富閿樉绀烘枃鏈�
-	 */
-	public void setClassifybuttonoidName (String classifybuttonoidName){
-		this.classifybuttonoidName = classifybuttonoidName;
-	}
-	/**
-	 * 鑾峰彇 鎸夐挳鐢ㄩ��
-	 */
-	public String getButtonuse (){
-		return buttonuse;
-	}
-
-	/**
-	 * 璁剧疆 鎸夐挳鐢ㄩ��
-	 */
-	public void setButtonuse (String buttonuse){
-		this.buttonuse = buttonuse;
-	}
-
-	/**
-	 * 鑾峰彇 鐮佸�煎簭鍙�
-	 */
-	public Integer getOrdernum (){
-		return ordernum;
-	}
-
-	/**
-	 * 璁剧疆 鐮佸�煎簭鍙�
-	 */
-	public void setOrdernum (Integer ordernum){
-		this.ordernum = ordernum;
-	}
-
-	public String getButtonUseText() {
-		return buttonUseText;
-	}
-
-	public void setButtonUseText(String buttonUseText) {
-		this.buttonUseText = buttonUseText;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeClassifyTemplateButtonDTO{" +
-				"classifytemplateoid='" + classifytemplateoid + '\'' +
-				", classifytemplateoidName='" + classifytemplateoidName + '\'' +
-				", classifybuttonoid='" + classifybuttonoid + '\'' +
-				", classifybuttonoidName='" + classifybuttonoidName + '\'' +
-				", buttonuse='" + buttonuse + '\'' +
-				", buttonUseText='" + buttonUseText + '\'' +
-				", ordernum=" + ordernum +
-				"} " + super.toString();
-	}
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyValueDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyValueDTO.java
index 9d106fd..10d7fdb 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyValueDTO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeClassifyValueDTO.java
@@ -2,24 +2,26 @@
 
 
 import com.vci.ubcs.code.vo.pagemodel.BaseModelVO;
+import lombok.Data;
 
 /**
  * 鍒嗙被鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
  *
- * @author weidy
- * @date 2022-01-24
+ * @author ludc
+ * @date 2022-04-24
  */
+@Data
 public class CodeClassifyValueDTO extends BaseModelVO {
 
 	/**
-     * 绂佹淇敼杩欎釜鍊�
-     */
+	 * 绂佹淇敼杩欎釜鍊�
+	 */
 	private static final long serialVersionUID = 4615707117098778726L;
 
 	/**
 	 * 鍒嗙被鐮佹涓婚敭
 	 */
-	private String codeclassifysecoid;
+	private String codeClassifySecOid;
 
 	/**
 	 * 鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
@@ -28,77 +30,11 @@
 	/**
 	 * 鐮佸�煎簭鍙�
 	 */
-	private Integer ordernum;
+	private Integer orderNum;
 
 	/**
 	 * 涓婄骇鍒嗙被鐮佸�间富閿�
 	 */
-	private String parentclassifyvalueoid;
+	private String parentClassifyValueOid;
 
-
-	/**
-	 * 鑾峰彇 鍒嗙被鐮佹涓婚敭
-	 */
-	public String getCodeclassifysecoid (){
-		return codeclassifysecoid;
-	}
-
-	/**
-	 * 璁剧疆 鍒嗙被鐮佹涓婚敭
-	 */
-	public void setCodeclassifysecoid (String codeclassifysecoid){
-		this.codeclassifysecoid = codeclassifysecoid;
-	}
-
-	/**
-	 * 鑾峰彇鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
-	 */
-	public String getCodeclassifysecoidName (){
-		return codeclassifysecoidName;
-	}
-
-	/**
-	 * 璁剧疆鍒嗙被鐮佹涓婚敭鏄剧ず鏂囨湰
-	 */
-	public void setCodeclassifysecoidName (String codeclassifysecoidName){
-		this.codeclassifysecoidName = codeclassifysecoidName;
-	}
-	/**
-	 * 鑾峰彇 鐮佸�煎簭鍙�
-	 */
-	public Integer getOrdernum (){
-		return ordernum;
-	}
-
-	/**
-	 * 璁剧疆 鐮佸�煎簭鍙�
-	 */
-	public void setOrdernum (Integer ordernum){
-		this.ordernum = ordernum;
-	}
-
-	/**
-	 * 鑾峰彇 涓婄骇鍒嗙被鐮佸�间富閿�
-	 */
-	public String getParentclassifyvalueoid (){
-		return parentclassifyvalueoid;
-	}
-
-	/**
-	 * 璁剧疆 涓婄骇鍒嗙被鐮佸�间富閿�
-	 */
-	public void setParentclassifyvalueoid (String parentclassifyvalueoid){
-		this.parentclassifyvalueoid = parentclassifyvalueoid;
-	}
-
-
-	@Override
-	public String toString() {
-		return "CodeClassifyValueDTO{" +
-		"codeclassifysecoid='" + codeclassifysecoid +"',"+
-		"codeclassifysecoidName='" + codeclassifysecoidName +"'," +
-		"ordernum='" + ordernum +"',"+
-		"parentclassifyvalueoid='" + parentclassifyvalueoid +"',"+
-		"}" + super.toString();
-	}
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeCodeAllcodeDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeCodeAllCodeDTO.java
similarity index 95%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeCodeAllcodeDTO.java
rename to Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeCodeAllCodeDTO.java
index 4a775a4..3b79504 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeCodeAllcodeDTO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeCodeAllCodeDTO.java
@@ -28,7 +28,7 @@
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
-public class CodeCodeAllcodeDTO extends CodeAllCode {
+public class CodeCodeAllCodeDTO extends CodeAllCode {
 	private static final long serialVersionUID = 1L;
 
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTemplatePhaseDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTemplatePhaseDTO.java
index 994d025..e9e485b 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTemplatePhaseDTO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeTemplatePhaseDTO.java
@@ -2,15 +2,17 @@
 
 
 import com.vci.ubcs.code.vo.pagemodel.BaseModelVO;
+import lombok.Data;
 
 import java.util.List;
 
 /**
  * 妯℃澘闃舵鏁版嵁浼犺緭瀵硅薄
  *
- * @author weidy
+ * @author ludc
  * @date 2022-01-24
  */
+@Data
 public class CodeTemplatePhaseDTO extends BaseModelVO {
 
 	/**
@@ -21,60 +23,16 @@
 	/**
 	 * 鎵�灞炵紪鐮佽鍒�
 	 */
-	private String codeclassifytemplateoid;
+	private String codeClassifyTemplateOid;
 
 	/**
 	 * 鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
 	 */
-	private String codeclassifytemplateoidName;
+	private String codeClassifyTemplateOidName;
 
 	/**
 	 * 鍖呭惈鐨勫睘鎬�
 	 */
 	private List<CodePhaseAttrDTO> attributes;
 
-	/**
-	 * 鑾峰彇 鎵�灞炵紪鐮佽鍒�
-	 */
-	public String getCodeclassifytemplateoid (){
-		return codeclassifytemplateoid;
-	}
-
-	/**
-	 * 璁剧疆 鎵�灞炵紪鐮佽鍒�
-	 */
-	public void setCodeclassifytemplateoid (String codeclassifytemplateoid){
-		this.codeclassifytemplateoid = codeclassifytemplateoid;
-	}
-
-	/**
-	 * 鑾峰彇鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
-	 */
-	public String getCodeclassifytemplateoidName (){
-		return codeclassifytemplateoidName;
-	}
-
-	/**
-	 * 璁剧疆鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
-	 */
-	public void setCodeclassifytemplateoidName (String codeclassifytemplateoidName){
-		this.codeclassifytemplateoidName = codeclassifytemplateoidName;
-	}
-
-	public List<CodePhaseAttrDTO> getAttributes() {
-		return attributes;
-	}
-
-	public void setAttributes(List<CodePhaseAttrDTO> attributes) {
-		this.attributes = attributes;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeTemplatePhaseDTO{" +
-				"codeclassifytemplateoid='" + codeclassifytemplateoid + '\'' +
-				", codeclassifytemplateoidName='" + codeclassifytemplateoidName + '\'' +
-				", attributes=" + attributes +
-				"} " + super.toString();
-	}
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeClstemplateVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeClstemplateVO.java
index b0af4bb..93a8daf 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeClstemplateVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodeClstemplateVO.java
@@ -1,41 +1,31 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
 package com.vci.ubcs.code.vo;
 
 import com.vci.ubcs.code.entity.CodeClstemplateEntity;
+import com.vci.ubcs.code.vo.pagemodel.BaseModelVO;
+import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.util.List;
 
 /**
- * 缂栫爜搴撳畾涔�-妯℃澘绠$悊 瑙嗗浘瀹炰綋绫�
+ * 鍒嗙被妯℃澘瀵硅薄鏄剧ず瀵硅薄
  *
  * @author yuxc
- * @since 2023-04-10
+ * @date 2022-01-24
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
 public class CodeClstemplateVO extends CodeClstemplateEntity {
-	private static final long serialVersionUID = 1L;
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707118684061936L;
 
 	/**
 	 * 鍖呭惈鐨勫睘鎬у唴瀹�
 	 */
-	private List<CodeClstempattrVO> attributes;
+	private List<CodeClassifyTemplateAttrVO> attributes;
 
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java
index 43e837a..2a91389 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeBasicSecVO.java
@@ -1,15 +1,17 @@
 package com.vci.ubcs.code.vo.pagemodel;
 
 import com.vci.ubcs.code.vo.pagemodel.BaseModelVO;
+import lombok.Data;
 
 import java.util.List;
 
 /**
  * 鐮佹鍩虹淇℃伅鏄剧ず瀵硅薄
  *
- * @author weidy
- * @date 2022-01-24
+ * @author ludc
+ * @date 2023-04-24
  */
+@Data
 public class CodeBasicSecVO extends BaseModelVO {
 
 	/**
@@ -21,7 +23,6 @@
 	* 鐮佹绫诲瀷
 	*/
 	private String secType;
-
 
 	/**
 	* 鐮佹绫诲瀷鏄剧ず鏂囨湰
@@ -241,411 +242,4 @@
 	 */
 	private List<CodeFixedValueVO> fixedValueVOList;
 
-	public String getReferCodeClassifyOidName() {
-		return referCodeClassifyOidName;
-	}
-
-	public void setReferCodeClassifyOidName(String referCodeClassifyOidName) {
-		this.referCodeClassifyOidName = referCodeClassifyOidName;
-	}
-
-	public String getReferAttributeId() {
-		return referAttributeId;
-	}
-
-	public void setReferAttributeId(String referAttributeId) {
-		this.referAttributeId = referAttributeId;
-	}
-
-	//鍒嗙被鐨勫唴瀹逛笉鑳界洿鎺ユ斁锛屽洜涓哄彲鑳藉緢澶�
-
-	public String getPkCodeRule() {
-		return pkCodeRule;
-	}
-
-	public void setPkCodeRule(String pkCodeRule) {
-		this.pkCodeRule = pkCodeRule;
-	}
-
-	public Integer getOrderNum() {
-		return orderNum;
-	}
-
-	public void setOrderNum(Integer orderNum) {
-		this.orderNum = orderNum;
-	}
-
-	public String getCodeSecLengthTypeText() {
-		return codeSecLengthTypeText;
-	}
-
-	public void setCodeSecLengthTypeText(String codeSecLengthTypeText) {
-		this.codeSecLengthTypeText = codeSecLengthTypeText;
-	}
-
-	public String getMatchClassifyValueFlag() {
-		return matchClassifyValueFlag;
-	}
-
-	public void setMatchClassifyValueFlag(String matchClassifyValueFlag) {
-		this.matchClassifyValueFlag = matchClassifyValueFlag;
-	}
-
-	public String getParentClassifySecOid() {
-		return parentClassifySecOid;
-	}
-
-	public void setParentClassifySecOid(String parentClassifySecOid) {
-		this.parentClassifySecOid = parentClassifySecOid;
-	}
-
-	public String getParentClassifySecText() {
-		return parentClassifySecText;
-	}
-
-	public void setParentClassifySecText(String parentClassifySecText) {
-		this.parentClassifySecText = parentClassifySecText;
-	}
-
-	public String getNullableFlag() {
-		return nullableFlag;
-	}
-
-	public void setNullableFlag(String nullableFlag) {
-		this.nullableFlag = nullableFlag;
-	}
-
-	public String getComponentCodeFlag() {
-		return componentCodeFlag;
-	}
-
-	public void setComponentCodeFlag(String componentCodeFlag) {
-		this.componentCodeFlag = componentCodeFlag;
-	}
-
-	public String getSerialDependFlag() {
-		return serialDependFlag;
-	}
-
-	public void setSerialDependFlag(String serialDependFlag) {
-		this.serialDependFlag = serialDependFlag;
-	}
-
-	public String getDisplayFlag() {
-		return displayFlag;
-	}
-
-	public void setDisplayFlag(String displayFlag) {
-		this.displayFlag = displayFlag;
-	}
-
-	public Integer getSerialDependOrder() {
-		return serialDependOrder;
-	}
-
-	public void setSerialDependOrder(Integer serialDependOrder) {
-		this.serialDependOrder = serialDependOrder;
-	}
-
-	/**
-	* 璁剧疆 鐮佹绫诲瀷
-	*/
-	public void setSecType (String secType){
-		this.secType = secType;
-	}
-
-	public String getSecTypeText() {
-		return secTypeText;
-	}
-
-	public void setSecTypeText(String secTypeText) {
-		this.secTypeText = secTypeText;
-	}
-
-	public String getSecType() {
-		return secType;
-	}
-
-	public String getCodeSecLengthType() {
-		return codeSecLengthType;
-	}
-
-	public void setCodeSecLengthType(String codeSecLengthType) {
-		this.codeSecLengthType = codeSecLengthType;
-	}
-
-	public String getCodeSecLength() {
-		return codeSecLength;
-	}
-
-	public void setCodeSecLength(String codeSecLength) {
-		this.codeSecLength = codeSecLength;
-	}
-
-	public String getGetValueClass() {
-		return getValueClass;
-	}
-
-	public void setGetValueClass(String getValueClass) {
-		this.getValueClass = getValueClass;
-	}
-
-	public String getCodeDateFormatStr() {
-		return codeDateFormatStr;
-	}
-
-	public void setCodeDateFormatStr(String codeDateFormatStr) {
-		this.codeDateFormatStr = codeDateFormatStr;
-	}
-
-	public String getCodeLevelType() {
-		return codeLevelType;
-	}
-
-	public void setCodeLevelType(String codeLevelType) {
-		this.codeLevelType = codeLevelType;
-	}
-
-	public String getCodeLevelTypeText() {
-		return codeLevelTypeText;
-	}
-
-	public void setCodeLevelTypeText(String codeLevelTypeText) {
-		this.codeLevelTypeText = codeLevelTypeText;
-	}
-
-	public Integer getCodeLevelValue() {
-		return codeLevelValue;
-	}
-
-	public void setCodeLevelValue(Integer codeLevelValue) {
-		this.codeLevelValue = codeLevelValue;
-	}
-
-	public Integer getValueCutLength() {
-		return valueCutLength;
-	}
-
-	public void setValueCutLength(Integer valueCutLength) {
-		this.valueCutLength = valueCutLength;
-	}
-
-	public String getValueCutType() {
-		return valueCutType;
-	}
-
-	public void setValueCutType(String valueCutType) {
-		this.valueCutType = valueCutType;
-	}
-
-	public String getValueCutTypeText() {
-		return valueCutTypeText;
-	}
-
-	public void setValueCutTypeText(String valueCutTypeText) {
-		this.valueCutTypeText = valueCutTypeText;
-	}
-
-	public String getCodeGetValueType() {
-		return codeGetValueType;
-	}
-
-	public void setCodeGetValueType(String codeGetValueType) {
-		this.codeGetValueType = codeGetValueType;
-	}
-
-	public String getCodeGetValueTypeText() {
-		return codeGetValueTypeText;
-	}
-
-	public void setCodeGetValueTypeText(String codeGetValueTypeText) {
-		this.codeGetValueTypeText = codeGetValueTypeText;
-	}
-
-	public String getReferCodeClassifyOid() {
-		return referCodeClassifyOid;
-	}
-
-	public void setReferCodeClassifyOid(String referCodeClassifyOid) {
-		this.referCodeClassifyOid = referCodeClassifyOid;
-	}
-
-	public String getReferConfig() {
-		return referConfig;
-	}
-
-	public void setReferConfig(String referConfig) {
-		this.referConfig = referConfig;
-	}
-
-	public String getReferValueInfo() {
-		return referValueInfo;
-	}
-
-	public void setReferValueInfo(String referValueInfo) {
-		this.referValueInfo = referValueInfo;
-	}
-
-	public String getFilterSql() {
-		return filterSql;
-	}
-
-	public void setFilterSql(String filterSql) {
-		this.filterSql = filterSql;
-	}
-
-	public String getSerialStart() {
-		return serialStart;
-	}
-
-	public void setSerialStart(String serialStart) {
-		this.serialStart = serialStart;
-	}
-
-	public Integer getSerialStep() {
-		return serialStep;
-	}
-
-	public void setSerialStep(Integer serialStep) {
-		this.serialStep = serialStep;
-	}
-
-	public String getCodeFillType() {
-		return codeFillType;
-	}
-
-	public void setCodeFillType(String codeFillType) {
-		this.codeFillType = codeFillType;
-	}
-
-	public String getCodeFillTypeText() {
-		return codeFillTypeText;
-	}
-
-	public void setCodeFillTypeText(String codeFillTypeText) {
-		this.codeFillTypeText = codeFillTypeText;
-	}
-
-	public String getCodeFillSeparator() {
-		return codeFillSeparator;
-	}
-
-	public void setCodeFillSeparator(String codeFillSeparator) {
-		this.codeFillSeparator = codeFillSeparator;
-	}
-
-	public String getCodeFillLength() {
-		return codeFillLength;
-	}
-
-	public void setCodeFillLength(String codeFillLength) {
-		this.codeFillLength = codeFillLength;
-	}
-
-	public Integer getCodeFillLimit() {
-		return codeFillLimit;
-	}
-
-	public void setCodeFillLimit(Integer codeFillLimit) {
-		this.codeFillLimit = codeFillLimit;
-	}
-
-	public String getCodeFillFlag() {
-		return codeFillFlag;
-	}
-
-	public void setCodeFillFlag(String codeFillFlag) {
-		this.codeFillFlag = codeFillFlag;
-	}
-
-	public String getCustomCodeSerialClass() {
-		return customCodeSerialClass;
-	}
-
-	public void setCustomCodeSerialClass(String customCodeSerialClass) {
-		this.customCodeSerialClass = customCodeSerialClass;
-	}
-
-
-	public List<CodeFixedValueVO> getFixedValueVOList() {
-		return fixedValueVOList;
-	}
-
-	public void setFixedValueVOList(List<CodeFixedValueVO> fixedValueVOList) {
-		this.fixedValueVOList = fixedValueVOList;
-	}
-
-	public String getReferAttributeName() {
-		return referAttributeName;
-	}
-
-	public void setReferAttributeName(String referAttributeName) {
-		this.referAttributeName = referAttributeName;
-	}
-
-	public String getReferBtmId() {
-		return referBtmId;
-	}
-
-	public void setReferBtmId(String referBtmId) {
-		this.referBtmId = referBtmId;
-	}
-
-	public String getReferBtmName() {
-		return referBtmName;
-	}
-
-	public void setReferBtmName(String referBtmName) {
-		this.referBtmName = referBtmName;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeBasicSecVO{" +
-				"secType='" + secType + '\'' +
-				", secTypeText='" + secTypeText + '\'' +
-				", pkCodeRule='" + pkCodeRule + '\'' +
-				", orderNum=" + orderNum +
-				", codeSecLengthType='" + codeSecLengthType + '\'' +
-				", codeSecLengthTypeText='" + codeSecLengthTypeText + '\'' +
-				", codeSecLength='" + codeSecLength + '\'' +
-				", referAttributeName='" + referAttributeName + '\'' +
-				", referAttributeId='" + referAttributeId + '\'' +
-				", getValueClass='" + getValueClass + '\'' +
-				", codeDateFormatStr='" + codeDateFormatStr + '\'' +
-				", codeLevelType='" + codeLevelType + '\'' +
-				", codeLevelTypeText='" + codeLevelTypeText + '\'' +
-				", codeLevelValue=" + codeLevelValue +
-				", valueCutLength=" + valueCutLength +
-				", valueCutType='" + valueCutType + '\'' +
-				", valueCutTypeText='" + valueCutTypeText + '\'' +
-				", codeGetValueType='" + codeGetValueType + '\'' +
-				", codeGetValueTypeText='" + codeGetValueTypeText + '\'' +
-				", referCodeClassifyOid='" + referCodeClassifyOid + '\'' +
-				", referCodeClassifyOidName='" + referCodeClassifyOidName + '\'' +
-				", referBtmId='" + referBtmId + '\'' +
-				", referBtmName='" + referBtmName + '\'' +
-				", referConfig='" + referConfig + '\'' +
-				", referValueInfo='" + referValueInfo + '\'' +
-				", filterSql='" + filterSql + '\'' +
-				", serialStart='" + serialStart + '\'' +
-				", serialStep=" + serialStep +
-				", codeFillType='" + codeFillType + '\'' +
-				", codeFillTypeText='" + codeFillTypeText + '\'' +
-				", codeFillSeparator='" + codeFillSeparator + '\'' +
-				", codeFillLength='" + codeFillLength + '\'' +
-				", codeFillLimit=" + codeFillLimit +
-				", codeFillFlag='" + codeFillFlag + '\'' +
-				", customCodeSerialClass='" + customCodeSerialClass + '\'' +
-				", matchClassifyValueFlag='" + matchClassifyValueFlag + '\'' +
-				", parentClassifySecOid='" + parentClassifySecOid + '\'' +
-				", parentClassifySecText='" + parentClassifySecText + '\'' +
-				", nullableFlag='" + nullableFlag + '\'' +
-				", componentCodeFlag='" + componentCodeFlag + '\'' +
-				", serialDependFlag='" + serialDependFlag + '\'' +
-				", displayFlag='" + displayFlag + '\'' +
-				", serialDependOrder=" + serialDependOrder +
-				", fixedValueVOList=" + fixedValueVOList +
-				"} " + super.toString();
-	}
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateAttrVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateAttrVO.java
index caabe2b..050798b 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateAttrVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateAttrVO.java
@@ -1,11 +1,14 @@
 package com.vci.ubcs.code.vo.pagemodel;
 
+import lombok.Data;
+
 /**
  * 涓婚搴撳垎绫荤殑妯℃澘灞炴�ф樉绀哄璞�
  *
  * @author weidy
  * @date 2022-01-24
  */
+@Data
 public class CodeClassifyTemplateAttrVO extends BaseModelVO {
 
 	/**
@@ -16,284 +19,242 @@
 	/**
 	* 鎵�灞炴ā鏉�
 	*/
-	private String classifytemplateoid;
+	private String classifyTemplateOid;
 
 	/**
 	* 鎵�灞炴ā鏉挎樉绀烘枃鏈�
 	*/
-	private String classifytemplateoidName;
+	private String classifyTemplateOidName;
 
 	/**
 	* 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
 	*/
-	private String classifyattributeoid;
+	private String classifyAttributeOid;
 
 	/**
 	* 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
 	*/
-	private String classifyattributeoidName;
+	private String classifyAttributeOidName;
 
 	/**
 	* 灞炴�х殑绫诲瀷
 	*/
-	private String attributedatatype;
+	private String attributeDataType;
 
 	/**
 	 * 灞炴�х被鍨嬫樉绀�
 	 */
 	private String attributeDataTypeText;
 
-
 	/**
 	* 鏄惁鍏抽敭灞炴��
 	*/
-	private String keyattrflag;
-
+	private String keyAttrFlag;
 
 	/**
 	* 鏄惁蹇�熸煡璇㈠睘鎬�
 	*/
-	private String queryattrflag;
-
+	private String queryAttrFlag;
 
 	/**
 	* 鏄惁楂樼骇鏌ヨ灞炴��
 	*/
-	private String seniorqueryattrflag;
-
+	private String seniorQueryAttrFlag;
 
 	/**
 	* 鐩镐技鏌ラ噸灞炴��
 	*/
-	private String samerepeatattrflag;
-
+	private String sameRepeatAttrFlag;
 
 	/**
 	* 鏄惁鎺掑簭
 	*/
-	private String sortattrflag;
-
+	private String sortAttrFlag;
 
 	/**
 	* 鏄惁鐢熸垚浜岀淮鐮�
 	*/
-	private String qrcodeflag;
-
+	private String qrcodeFlag;
 
 	/**
 	* 鏄惁鐢熸垚涓�缁寸爜
 	*/
-	private String barcodeflag;
-
+	private String barcodeFlag;
 
 	/**
 	* 缁勫悎瑙勫垯
 	*/
-	private String componentrule;
-
+	private String componentRule;
 
 	/**
 	* 楠岃瘉瑙勫垯
 	*/
-	private String verifyrule;
-
+	private String verifyRule;
 
 	/**
 	* 鍒嗙被娉ㄥ叆灞傜骇
 	*/
-	private String classifyinvokelevel;
-
+	private String classifyInvokeLevel;
 
 	/**
 	* 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
 	*/
-	private String classifyinvokeattr;
-
+	private String classifyInvokeAttr;
 
 	/**
 	* 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
 	*/
-	private String classifyinvokeattrname;
-
+	private String classifyInvokeAttrName;
 
 	/**
 	* 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
 	*/
-	private String classifyinvokeeditflag;
-
+	private String classifyInvokeEditFlag;
 
 	/**
 	* 鐮佸�煎簭鍙�
 	*/
-	private Integer ordernum;
-
+	private Integer orderNum;
 
 	/**
 	* 琛ㄥ崟閲屾槸鍚︽樉绀�
 	*/
-	private String formdisplayflag;
-
+	private String formDisplayFlag;
 
 	/**
 	* 鍒楄〃閲屾槸鍚︽樉绀�
 	*/
-	private String tabledisplayflag;
-
+	private String tableDisplayFlag;
 
 	/**
 	* 鎵�灞炲睘鎬у垎缁�
 	*/
-	private String attributegroup;
-
+	private String attributeGroup;
 
 	/**
 	* 浣跨敤鏋氫妇鑻辨枃缂栧彿
 	*/
-	private String enumid;
-
+	private String enumId;
 
 	/**
 	* 浣跨敤鏋氫妇涓枃鍚嶇О
 	*/
-	private String enumname;
-
+	private String enumName;
 
 	/**
 	* 鏋氫妇鏄惁鍙互缂栬緫
 	*/
-	private String enumeditflag;
-
+	private String enumEditFlag;
 
 	/**
 	* 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
 	*/
-	private String referbtmid;
-
+	private String referBtmId;
 
 	/**
 	* 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
 	*/
-	private String referbtmname;
-
+	private String referBtmName;
 
 	/**
 	* 鍙傜収绐楀彛閰嶇疆
 	*/
 	private String referConfig;
 
-
 	/**
 	* 鏄惁蹇呰緭
 	*/
-	private String requireflag;
-
+	private String requireFlag;
 
 	/**
 	* 鏄惁鍙
 	*/
-	private String readonlyflag;
-
+	private String readOnlyFlag;
 
 	/**
 	* 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
 	*/
-	private Integer controllength;
-
+	private Integer controlLength;
 
 	/**
 	* 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
 	*/
-	private String formdisplaystyle;
-
+	private String formDisplayStyle;
 
 	/**
 	* 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
 	*/
-	private String tabledisplaystyle;
-
+	private String tableDisplayStyle;
 
 	/**
 	* 琛ㄥ崟涓秴閾炬帴鍐呭
 	*/
-	private String formhref;
-
+	private String formHref;
 
 	/**
 	* 琛ㄦ牸涓秴閾炬帴鍐呭
 	*/
-	private String tablehref;
-
+	private String tableHref;
 
 	/**
 	* 灏忔暟绮惧害
 	*/
-	private Integer precisionlength;
-
+	private Integer precisionLength;
 
 	/**
 	* 灏忔暟鍒诲害
 	*/
-	private Integer scalelength;
-
+	private Integer scaleLength;
 
 	/**
 	* 鍙栧�艰寖鍥�
 	*/
-	private String valuearea;
-
+	private String valueArea;
 
 	/**
 	* 鏃堕棿鏍煎紡
 	*/
-	private String codedateformat;
-
+	private String codeDateFormat;
 
 	/**
 	* 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
 	*/
-	private String tabledisplayjs;
-
+	private String tableDisplayJs;
 
 	/**
 	* 鏄惁鏄剧ず澶氳鏂囨湰
 	*/
-	private String textareaflag;
-
+	private String textAreaFlag;
 
 	/**
 	* 棰勮鍥�
 	*/
-	private String imageflag;
-
+	private String imageFlag;
 
 	/**
 	* 榛樿鍊�
 	*/
-	private String defaultvalue;
-
+	private String defaultValue;
 
 	/**
 	* 鍓嶇紑
 	*/
-	private String prefixvalue;
-
+	private String prefixValue;
 
 	/**
 	* 鍚庣紑
 	*/
-	private String suffixvalue;
-
+	private String suffixValue;
 
 	/**
 	* 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
 	*/
-	private String filtersourceattr;
-
+	private String filterSourceAttr;
 
 	/**
 	* 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
 	*/
-	private String filtersourceattrname;
+	private String filterSourceAttrName;
 
 	/**
 	 * 浣跨敤鏋氫妇娉ㄥ叆鐨勫瓧绗︿覆鏍煎紡
@@ -330,734 +291,4 @@
 	 */
 	private String parentQueryAttr;
 
-	public String getExplain() {
-		return explain;
-	}
-
-	public void setExplain(String explain) {
-		this.explain = explain;
-	}
-
-	public String getLibraryIdentification() {
-		return libraryIdentification;
-	}
-
-	public void setLibraryIdentification(String libraryIdentification) {
-		this.libraryIdentification = libraryIdentification;
-	}
-
-	public String getParentCode() {
-		return parentCode;
-	}
-
-	public void setParentCode(String parentCode) {
-		this.parentCode = parentCode;
-	}
-
-	public String getParentName() {
-		return parentName;
-	}
-
-	public void setParentName(String parentName) {
-		this.parentName = parentName;
-	}
-
-	public String getParentQueryAttr() {
-		return parentQueryAttr;
-	}
-
-	public void setParentQueryAttr(String parentQueryAttr) {
-		this.parentQueryAttr = parentQueryAttr;
-	}
-
-	/**
-	 * 鑾峰彇 鎵�灞炴ā鏉�
-	 */
-	public String getClassifytemplateoid (){
-		return classifytemplateoid;
-	}
-
-	/**
-	* 璁剧疆 鎵�灞炴ā鏉�
-	*/
-	public void setClassifytemplateoid (String classifytemplateoid){
-		this.classifytemplateoid = classifytemplateoid;
-	}
-	/**
-	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	 */
-	public String getClassifytemplateoidName (){
-		return classifytemplateoidName;
-	}
-
-	/**
-	* 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	*/
-	public void setClassifytemplateoidName (String classifytemplateoidName){
-		this.classifytemplateoidName = classifytemplateoidName;
-	}
-	/**
-	 * 鑾峰彇 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
-	 */
-	public String getClassifyattributeoid (){
-		return classifyattributeoid;
-	}
-
-	/**
-	* 璁剧疆 鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿�
-	*/
-	public void setClassifyattributeoid (String classifyattributeoid){
-		this.classifyattributeoid = classifyattributeoid;
-	}
-	/**
-	 * 鑾峰彇鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
-	 */
-	public String getClassifyattributeoidName (){
-		return classifyattributeoidName;
-	}
-
-	/**
-	* 璁剧疆鎵�灞炲垎绫讳腑鐨勫睘鎬т富閿樉绀烘枃鏈�
-	*/
-	public void setClassifyattributeoidName (String classifyattributeoidName){
-		this.classifyattributeoidName = classifyattributeoidName;
-	}
-	/**
-	 * 鑾峰彇 灞炴�х殑绫诲瀷
-	 */
-	public String getAttributedatatype (){
-		return attributedatatype;
-	}
-
-	/**
-	* 璁剧疆 灞炴�х殑绫诲瀷
-	*/
-	public void setAttributedatatype (String attributedatatype){
-		this.attributedatatype = attributedatatype;
-	}
-	/**
-	 * 鑾峰彇 鏄惁鍏抽敭灞炴��
-	 */
-	public String getKeyattrflag (){
-		return keyattrflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁鍏抽敭灞炴��
-	*/
-	public void setKeyattrflag (String keyattrflag){
-		this.keyattrflag = keyattrflag;
-	}
-	/**
-	 * 鑾峰彇 鏄惁蹇�熸煡璇㈠睘鎬�
-	 */
-	public String getQueryattrflag (){
-		return queryattrflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁蹇�熸煡璇㈠睘鎬�
-	*/
-	public void setQueryattrflag (String queryattrflag){
-		this.queryattrflag = queryattrflag;
-	}
-	/**
-	 * 鑾峰彇 鏄惁楂樼骇鏌ヨ灞炴��
-	 */
-	public String getSeniorqueryattrflag (){
-		return seniorqueryattrflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁楂樼骇鏌ヨ灞炴��
-	*/
-	public void setSeniorqueryattrflag (String seniorqueryattrflag){
-		this.seniorqueryattrflag = seniorqueryattrflag;
-	}
-	/**
-	 * 鑾峰彇 鐩镐技鏌ラ噸灞炴��
-	 */
-	public String getSamerepeatattrflag (){
-		return samerepeatattrflag;
-	}
-
-	/**
-	* 璁剧疆 鐩镐技鏌ラ噸灞炴��
-	*/
-	public void setSamerepeatattrflag (String samerepeatattrflag){
-		this.samerepeatattrflag = samerepeatattrflag;
-	}
-	/**
-	 * 鑾峰彇 鏄惁鎺掑簭
-	 */
-	public String getSortattrflag (){
-		return sortattrflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁鎺掑簭
-	*/
-	public void setSortattrflag (String sortattrflag){
-		this.sortattrflag = sortattrflag;
-	}
-	/**
-	 * 鑾峰彇 鏄惁鐢熸垚浜岀淮鐮�
-	 */
-	public String getQrcodeflag (){
-		return qrcodeflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁鐢熸垚浜岀淮鐮�
-	*/
-	public void setQrcodeflag (String qrcodeflag){
-		this.qrcodeflag = qrcodeflag;
-	}
-	/**
-	 * 鑾峰彇 鏄惁鐢熸垚涓�缁寸爜
-	 */
-	public String getBarcodeflag (){
-		return barcodeflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁鐢熸垚涓�缁寸爜
-	*/
-	public void setBarcodeflag (String barcodeflag){
-		this.barcodeflag = barcodeflag;
-	}
-	/**
-	 * 鑾峰彇 缁勫悎瑙勫垯
-	 */
-	public String getComponentrule (){
-		return componentrule;
-	}
-
-	/**
-	* 璁剧疆 缁勫悎瑙勫垯
-	*/
-	public void setComponentrule (String componentrule){
-		this.componentrule = componentrule;
-	}
-	/**
-	 * 鑾峰彇 楠岃瘉瑙勫垯
-	 */
-	public String getVerifyrule (){
-		return verifyrule;
-	}
-
-	/**
-	* 璁剧疆 楠岃瘉瑙勫垯
-	*/
-	public void setVerifyrule (String verifyrule){
-		this.verifyrule = verifyrule;
-	}
-	/**
-	 * 鑾峰彇 鍒嗙被娉ㄥ叆灞傜骇
-	 */
-	public String getClassifyinvokelevel (){
-		return classifyinvokelevel;
-	}
-
-	/**
-	* 璁剧疆 鍒嗙被娉ㄥ叆灞傜骇
-	*/
-	public void setClassifyinvokelevel (String classifyinvokelevel){
-		this.classifyinvokelevel = classifyinvokelevel;
-	}
-	/**
-	 * 鑾峰彇 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
-	 */
-	public String getClassifyinvokeattr (){
-		return classifyinvokeattr;
-	}
-
-	/**
-	* 璁剧疆 鍒嗙被娉ㄥ叆鐨勫睘鎬ц嫳鏂囧悕绉�
-	*/
-	public void setClassifyinvokeattr (String classifyinvokeattr){
-		this.classifyinvokeattr = classifyinvokeattr;
-	}
-	/**
-	 * 鑾峰彇 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
-	 */
-	public String getClassifyinvokeattrname (){
-		return classifyinvokeattrname;
-	}
-
-	/**
-	* 璁剧疆 鍒嗙被娉ㄥ叆鐨勫睘鎬т腑鏂囧悕绉�
-	*/
-	public void setClassifyinvokeattrname (String classifyinvokeattrname){
-		this.classifyinvokeattrname = classifyinvokeattrname;
-	}
-	/**
-	 * 鑾峰彇 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
-	 */
-	public String getClassifyinvokeeditflag (){
-		return classifyinvokeeditflag;
-	}
-
-	/**
-	* 璁剧疆 鍒嗙被娉ㄥ叆鏄惁鍙互缂栬緫
-	*/
-	public void setClassifyinvokeeditflag (String classifyinvokeeditflag){
-		this.classifyinvokeeditflag = classifyinvokeeditflag;
-	}
-	/**
-	 * 鑾峰彇 鐮佸�煎簭鍙�
-	 */
-	public Integer getOrdernum (){
-		return ordernum;
-	}
-
-	/**
-	* 璁剧疆 鐮佸�煎簭鍙�
-	*/
-	public void setOrdernum (Integer ordernum){
-		this.ordernum = ordernum;
-	}
-	/**
-	 * 鑾峰彇 琛ㄥ崟閲屾槸鍚︽樉绀�
-	 */
-	public String getFormdisplayflag (){
-		return formdisplayflag;
-	}
-
-	/**
-	* 璁剧疆 琛ㄥ崟閲屾槸鍚︽樉绀�
-	*/
-	public void setFormdisplayflag (String formdisplayflag){
-		this.formdisplayflag = formdisplayflag;
-	}
-	/**
-	 * 鑾峰彇 鍒楄〃閲屾槸鍚︽樉绀�
-	 */
-	public String getTabledisplayflag (){
-		return tabledisplayflag;
-	}
-
-	/**
-	* 璁剧疆 鍒楄〃閲屾槸鍚︽樉绀�
-	*/
-	public void setTabledisplayflag (String tabledisplayflag){
-		this.tabledisplayflag = tabledisplayflag;
-	}
-	/**
-	 * 鑾峰彇 鎵�灞炲睘鎬у垎缁�
-	 */
-	public String getAttributegroup (){
-		return attributegroup;
-	}
-
-	/**
-	* 璁剧疆 鎵�灞炲睘鎬у垎缁�
-	*/
-	public void setAttributegroup (String attributegroup){
-		this.attributegroup = attributegroup;
-	}
-	/**
-	 * 鑾峰彇 浣跨敤鏋氫妇鑻辨枃缂栧彿
-	 */
-	public String getEnumid (){
-		return enumid;
-	}
-
-	/**
-	* 璁剧疆 浣跨敤鏋氫妇鑻辨枃缂栧彿
-	*/
-	public void setEnumid (String enumid){
-		this.enumid = enumid;
-	}
-	/**
-	 * 鑾峰彇 浣跨敤鏋氫妇涓枃鍚嶇О
-	 */
-	public String getEnumname (){
-		return enumname;
-	}
-
-	/**
-	* 璁剧疆 浣跨敤鏋氫妇涓枃鍚嶇О
-	*/
-	public void setEnumname (String enumname){
-		this.enumname = enumname;
-	}
-	/**
-	 * 鑾峰彇 鏋氫妇鏄惁鍙互缂栬緫
-	 */
-	public String getEnumeditflag (){
-		return enumeditflag;
-	}
-
-	/**
-	* 璁剧疆 鏋氫妇鏄惁鍙互缂栬緫
-	*/
-	public void setEnumeditflag (String enumeditflag){
-		this.enumeditflag = enumeditflag;
-	}
-	/**
-	 * 鑾峰彇 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
-	 */
-	public String getReferbtmid (){
-		return referbtmid;
-	}
-
-	/**
-	* 璁剧疆 鍙傜収鐨勪笟鍔$被鍨嬭嫳鏂囧悕绉�
-	*/
-	public void setReferbtmid (String referbtmid){
-		this.referbtmid = referbtmid;
-	}
-	/**
-	 * 鑾峰彇 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
-	 */
-	public String getReferbtmname (){
-		return referbtmname;
-	}
-
-	/**
-	* 璁剧疆 鍙傜収鐨勪笟鍔$被鍨嬩腑鏂囧悕绉�
-	*/
-	public void setReferbtmname (String referbtmname){
-		this.referbtmname = referbtmname;
-	}
-
-	public String getReferConfig() {
-		return referConfig;
-	}
-
-	public void setReferConfig(String referConfig) {
-		this.referConfig = referConfig;
-	}
-
-	/**
-
-	/**
-	 * 鑾峰彇 鏄惁蹇呰緭
-	 */
-	public String getRequireflag (){
-		return requireflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁蹇呰緭
-	*/
-	public void setRequireflag (String requireflag){
-		this.requireflag = requireflag;
-	}
-	/**
-	 * 鑾峰彇 鏄惁鍙
-	 */
-	public String getReadonlyflag (){
-		return readonlyflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁鍙
-	*/
-	public void setReadonlyflag (String readonlyflag){
-		this.readonlyflag = readonlyflag;
-	}
-	/**
-	 * 鑾峰彇 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
-	 */
-	public Integer getControllength (){
-		return controllength;
-	}
-
-	/**
-	* 璁剧疆 灞炴�ф帶鍒惰緭鍏ョ殑闀垮害
-	*/
-	public void setControllength (Integer controllength){
-		this.controllength = controllength;
-	}
-	/**
-	 * 鑾峰彇 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
-	 */
-	public String getFormdisplaystyle (){
-		return formdisplaystyle;
-	}
-
-	/**
-	* 璁剧疆 琛ㄥ崟閲屾樉绀虹殑鏍峰紡
-	*/
-	public void setFormdisplaystyle (String formdisplaystyle){
-		this.formdisplaystyle = formdisplaystyle;
-	}
-	/**
-	 * 鑾峰彇 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
-	 */
-	public String getTabledisplaystyle (){
-		return tabledisplaystyle;
-	}
-
-	/**
-	* 璁剧疆 琛ㄦ牸閲屾樉绀虹殑鏍峰紡
-	*/
-	public void setTabledisplaystyle (String tabledisplaystyle){
-		this.tabledisplaystyle = tabledisplaystyle;
-	}
-	/**
-	 * 鑾峰彇 琛ㄥ崟涓秴閾炬帴鍐呭
-	 */
-	public String getFormhref (){
-		return formhref;
-	}
-
-	/**
-	* 璁剧疆 琛ㄥ崟涓秴閾炬帴鍐呭
-	*/
-	public void setFormhref (String formhref){
-		this.formhref = formhref;
-	}
-	/**
-	 * 鑾峰彇 琛ㄦ牸涓秴閾炬帴鍐呭
-	 */
-	public String getTablehref (){
-		return tablehref;
-	}
-
-	/**
-	* 璁剧疆 琛ㄦ牸涓秴閾炬帴鍐呭
-	*/
-	public void setTablehref (String tablehref){
-		this.tablehref = tablehref;
-	}
-	/**
-	 * 鑾峰彇 灏忔暟绮惧害
-	 */
-	public Integer getPrecisionlength (){
-		return precisionlength;
-	}
-
-	/**
-	* 璁剧疆 灏忔暟绮惧害
-	*/
-	public void setPrecisionlength (Integer precisionlength){
-		this.precisionlength = precisionlength;
-	}
-	/**
-	 * 鑾峰彇 灏忔暟鍒诲害
-	 */
-	public Integer getScalelength (){
-		return scalelength;
-	}
-
-	/**
-	* 璁剧疆 灏忔暟鍒诲害
-	*/
-	public void setScalelength (Integer scalelength){
-		this.scalelength = scalelength;
-	}
-	/**
-	 * 鑾峰彇 鍙栧�艰寖鍥�
-	 */
-	public String getValuearea (){
-		return valuearea;
-	}
-
-	/**
-	* 璁剧疆 鍙栧�艰寖鍥�
-	*/
-	public void setValuearea (String valuearea){
-		this.valuearea = valuearea;
-	}
-	/**
-	 * 鑾峰彇 鏃堕棿鏍煎紡
-	 */
-	public String getCodedateformat (){
-		return codedateformat;
-	}
-
-	/**
-	* 璁剧疆 鏃堕棿鏍煎紡
-	*/
-	public void setCodedateformat (String codedateformat){
-		this.codedateformat = codedateformat;
-	}
-	/**
-	 * 鑾峰彇 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
-	 */
-	public String getTabledisplayjs (){
-		return tabledisplayjs;
-	}
-
-	/**
-	* 璁剧疆 琛ㄦ牸閲屾樉绀鸿皟鐢ㄧ殑js
-	*/
-	public void setTabledisplayjs (String tabledisplayjs){
-		this.tabledisplayjs = tabledisplayjs;
-	}
-	/**
-	 * 鑾峰彇 鏄惁鏄剧ず澶氳鏂囨湰
-	 */
-	public String getTextareaflag (){
-		return textareaflag;
-	}
-
-	/**
-	* 璁剧疆 鏄惁鏄剧ず澶氳鏂囨湰
-	*/
-	public void setTextareaflag (String textareaflag){
-		this.textareaflag = textareaflag;
-	}
-	/**
-	 * 鑾峰彇 棰勮鍥�
-	 */
-	public String getImageflag (){
-		return imageflag;
-	}
-
-	/**
-	* 璁剧疆 棰勮鍥�
-	*/
-	public void setImageflag (String imageflag){
-		this.imageflag = imageflag;
-	}
-	/**
-	 * 鑾峰彇 榛樿鍊�
-	 */
-	public String getDefaultvalue (){
-		return defaultvalue;
-	}
-
-	/**
-	* 璁剧疆 榛樿鍊�
-	*/
-	public void setDefaultvalue (String defaultvalue){
-		this.defaultvalue = defaultvalue;
-	}
-	/**
-	 * 鑾峰彇 鍓嶇紑
-	 */
-	public String getPrefixvalue (){
-		return prefixvalue;
-	}
-
-	/**
-	* 璁剧疆 鍓嶇紑
-	*/
-	public void setPrefixvalue (String prefixvalue){
-		this.prefixvalue = prefixvalue;
-	}
-	/**
-	 * 鑾峰彇 鍚庣紑
-	 */
-	public String getSuffixvalue (){
-		return suffixvalue;
-	}
-
-	/**
-	* 璁剧疆 鍚庣紑
-	*/
-	public void setSuffixvalue (String suffixvalue){
-		this.suffixvalue = suffixvalue;
-	}
-	/**
-	 * 鑾峰彇 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
-	 */
-	public String getFiltersourceattr (){
-		return filtersourceattr;
-	}
-
-	public String getAttributeDataTypeText() {
-		return attributeDataTypeText;
-	}
-
-	public void setAttributeDataTypeText(String attributeDataTypeText) {
-		this.attributeDataTypeText = attributeDataTypeText;
-	}
-
-	/**
-	* 璁剧疆 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴��
-	*/
-	public void setFiltersourceattr (String filtersourceattr){
-		this.filtersourceattr = filtersourceattr;
-	}
-	/**
-	 * 鑾峰彇 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
-	 */
-	public String getFiltersourceattrname (){
-		return filtersourceattrname;
-	}
-
-	/**
-	* 璁剧疆 閫夋嫨鏁版嵁鏃惰繃婊ょ殑灞炴�у悕绉�
-	*/
-	public void setFiltersourceattrname (String filtersourceattrname){
-		this.filtersourceattrname = filtersourceattrname;
-	}
-
-	public String getEnumString() {
-		return enumString;
-	}
-
-	public void setEnumString(String enumString) {
-		this.enumString = enumString;
-	}
-
-
-	public Integer getAttrTableWidth() {
-		return attrTableWidth;
-	}
-
-	public void setAttrTableWidth(Integer attrTableWidth) {
-		this.attrTableWidth = attrTableWidth;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeClassifyTemplateAttrVO{" +
-				"classifytemplateoid='" + classifytemplateoid + '\'' +
-				", classifytemplateoidName='" + classifytemplateoidName + '\'' +
-				", classifyattributeoid='" + classifyattributeoid + '\'' +
-				", classifyattributeoidName='" + classifyattributeoidName + '\'' +
-				", attributedatatype='" + attributedatatype + '\'' +
-				", attributeDataTypeText='" + attributeDataTypeText + '\'' +
-				", keyattrflag='" + keyattrflag + '\'' +
-				", queryattrflag='" + queryattrflag + '\'' +
-				", seniorqueryattrflag='" + seniorqueryattrflag + '\'' +
-				", samerepeatattrflag='" + samerepeatattrflag + '\'' +
-				", sortattrflag='" + sortattrflag + '\'' +
-				", qrcodeflag='" + qrcodeflag + '\'' +
-				", barcodeflag='" + barcodeflag + '\'' +
-				", componentrule='" + componentrule + '\'' +
-				", verifyrule='" + verifyrule + '\'' +
-				", classifyinvokelevel='" + classifyinvokelevel + '\'' +
-				", classifyinvokeattr='" + classifyinvokeattr + '\'' +
-				", classifyinvokeattrname='" + classifyinvokeattrname + '\'' +
-				", classifyinvokeeditflag='" + classifyinvokeeditflag + '\'' +
-				", ordernum=" + ordernum +
-				", formdisplayflag='" + formdisplayflag + '\'' +
-				", tabledisplayflag='" + tabledisplayflag + '\'' +
-				", attributegroup='" + attributegroup + '\'' +
-				", enumid='" + enumid + '\'' +
-				", enumname='" + enumname + '\'' +
-				", enumeditflag='" + enumeditflag + '\'' +
-				", referbtmid='" + referbtmid + '\'' +
-				", referbtmname='" + referbtmname + '\'' +
-				", referConfig='" + referConfig + '\'' +
-				", requireflag='" + requireflag + '\'' +
-				", readonlyflag='" + readonlyflag + '\'' +
-				", controllength=" + controllength +
-				", formdisplaystyle='" + formdisplaystyle + '\'' +
-				", tabledisplaystyle='" + tabledisplaystyle + '\'' +
-				", formhref='" + formhref + '\'' +
-				", tablehref='" + tablehref + '\'' +
-				", precisionlength=" + precisionlength +
-				", scalelength=" + scalelength +
-				", valuearea='" + valuearea + '\'' +
-				", codedateformat='" + codedateformat + '\'' +
-				", tabledisplayjs='" + tabledisplayjs + '\'' +
-				", textareaflag='" + textareaflag + '\'' +
-				", imageflag='" + imageflag + '\'' +
-				", defaultvalue='" + defaultvalue + '\'' +
-				", prefixvalue='" + prefixvalue + '\'' +
-				", suffixvalue='" + suffixvalue + '\'' +
-				", filtersourceattr='" + filtersourceattr + '\'' +
-				", filtersourceattrname='" + filtersourceattrname + '\'' +
-				", enumString='" + enumString + '\'' +
-				", attrTableWidth=" + attrTableWidth +
-				"} " + super.toString();
-	}
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java
index 4ba81b6..ac5cf44 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeClassifyTemplateButtonVO.java
@@ -1,13 +1,17 @@
 package com.vci.ubcs.code.vo.pagemodel;
 
 import com.vci.ubcs.code.entity.CodeClassifyTemplateButton;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 /**
  * 涓婚搴撻噷妯℃澘鍖呭惈鐨勬寜閽樉绀哄璞�
  *
- * @author weidy
- * @date 2022-01-24
+ * @author ludc
+ * @date 2023-05-9
  */
+@Data
+@EqualsAndHashCode(callSuper = true)
 public class CodeClassifyTemplateButtonVO extends CodeClassifyTemplateButton {
 
 	/**
@@ -16,161 +20,28 @@
 	private static final long serialVersionUID = 4615707118535405378L;
 
 	/**
-	* 鎵�灞炴ā鏉�
-	*/
-	private String classifytemplateoid;
-
-	/**
 	* 鎵�灞炴ā鏉挎樉绀烘枃鏈�
 	*/
-	private String classifytemplateoidName;
-
-	/**
-	* 鎸夐挳鐨勪富閿�
-	*/
-	private String classifybuttonoid;
+	private String classifyTemplateOidName;
 
 	/**
 	* 鎸夐挳鐨勪富閿樉绀烘枃鏈�
 	*/
-	private String classifybuttonoidName;
-
-	/**
-	* 鎸夐挳鐢ㄩ��
-	*/
-	private String buttonuse;
+	private String classifyButtonOidName;
 
 	/**
 	 * 鎸夐挳鐢ㄩ�旀樉绀哄璞�
 	 */
 	private String buttonUseText;
 
-
 	/**
 	* 鐮佸�煎簭鍙�
 	*/
-	private Integer ordernum;
+	private Integer orderNum;
 
 	/**
 	 * 鎸夐挳鐨勭浉鍏冲唴瀹�
 	 */
 	private CodeButtonVO buttonVO;
 
-
-
-
-	/**
-	 * 鑾峰彇 鎵�灞炴ā鏉�
-	 */
-	@Override
-	public String getClassifytemplateoid (){
-		return classifytemplateoid;
-	}
-
-	/**
-	* 璁剧疆 鎵�灞炴ā鏉�
-	*/
-	@Override
-	public void setClassifytemplateoid (String classifytemplateoid){
-		this.classifytemplateoid = classifytemplateoid;
-	}
-	/**
-	 * 鑾峰彇鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	 */
-	public String getClassifytemplateoidName (){
-		return classifytemplateoidName;
-	}
-
-	/**
-	* 璁剧疆鎵�灞炴ā鏉挎樉绀烘枃鏈�
-	*/
-	public void setClassifytemplateoidName (String classifytemplateoidName){
-		this.classifytemplateoidName = classifytemplateoidName;
-	}
-	/**
-	 * 鑾峰彇 鎸夐挳鐨勪富閿�
-	 */
-	@Override
-	public String getClassifybuttonoid (){
-		return classifybuttonoid;
-	}
-
-	/**
-	* 璁剧疆 鎸夐挳鐨勪富閿�
-	*/
-	@Override
-	public void setClassifybuttonoid (String classifybuttonoid){
-		this.classifybuttonoid = classifybuttonoid;
-	}
-	/**
-	 * 鑾峰彇鎸夐挳鐨勪富閿樉绀烘枃鏈�
-	 */
-	public String getClassifybuttonoidName (){
-		return classifybuttonoidName;
-	}
-
-	/**
-	* 璁剧疆鎸夐挳鐨勪富閿樉绀烘枃鏈�
-	*/
-	public void setClassifybuttonoidName (String classifybuttonoidName){
-		this.classifybuttonoidName = classifybuttonoidName;
-	}
-	/**
-	 * 鑾峰彇 鎸夐挳鐢ㄩ��
-	 */
-	@Override
-	public String getButtonuse (){
-		return buttonuse;
-	}
-
-	/**
-	* 璁剧疆 鎸夐挳鐢ㄩ��
-	*/
-	@Override
-	public void setButtonuse (String buttonuse){
-		this.buttonuse = buttonuse;
-	}
-	/**
-	 * 鑾峰彇 鐮佸�煎簭鍙�
-	 */
-	public Integer getOrdernum (){
-		return ordernum;
-	}
-
-	/**
-	* 璁剧疆 鐮佸�煎簭鍙�
-	*/
-	public void setOrdernum (Integer ordernum){
-		this.ordernum = ordernum;
-	}
-
-	public String getButtonUseText() {
-		return buttonUseText;
-	}
-
-	public void setButtonUseText(String buttonUseText) {
-		this.buttonUseText = buttonUseText;
-	}
-
-	public CodeButtonVO getButtonVO() {
-		return buttonVO;
-	}
-
-	public void setButtonVO(CodeButtonVO buttonVO) {
-		this.buttonVO = buttonVO;
-	}
-
-	@Override
-	public String toString() {
-		return "CodeClassifyTemplateButtonVO{" +
-				"classifytemplateoid='" + classifytemplateoid + '\'' +
-				", classifytemplateoidName='" + classifytemplateoidName + '\'' +
-				", classifybuttonoid='" + classifybuttonoid + '\'' +
-				", classifybuttonoidName='" + classifybuttonoidName + '\'' +
-				", buttonuse='" + buttonuse + '\'' +
-				", buttonUseText='" + buttonUseText + '\'' +
-				", ordernum=" + ordernum +
-				", buttonVO=" + buttonVO +
-				"} " + super.toString();
-	}
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportTemplateVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportTemplateVO.java
index a0f186f..420b491 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportTemplateVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImportTemplateVO.java
@@ -1,42 +1,15 @@
 package com.vci.ubcs.code.vo.pagemodel;
 
+import com.vci.ubcs.code.vo.CodeClstemplateVO;
+
 import java.util.ArrayList;
 import java.util.List;
 
 public class CodeImportTemplateVO {
     private List<ColumnVO> cloNamesList=new ArrayList<>();
-    private CodeClassifyTemplateVO codeClassifyTemplateVO;
+
+    private CodeClstemplateVO codeClstemplateVO;
+
     private CodeClassifyVO codeClassifyVO;
-    public List<ColumnVO> getCloNamesList() {
-        return cloNamesList;
-    }
 
-    public void setCloNamesList(List<ColumnVO> cloNamesList) {
-        this.cloNamesList = cloNamesList;
-    }
-
-    public CodeClassifyTemplateVO getCodeClassifyTemplateVO() {
-        return codeClassifyTemplateVO;
-    }
-
-    public void setCodeClassifyTemplateVO(CodeClassifyTemplateVO codeClassifyTemplateVO) {
-        this.codeClassifyTemplateVO = codeClassifyTemplateVO;
-    }
-
-    public CodeClassifyVO getCodeClassifyVO() {
-        return codeClassifyVO;
-    }
-
-    public void setCodeClassifyVO(CodeClassifyVO codeClassifyVO) {
-        this.codeClassifyVO = codeClassifyVO;
-    }
-
-    @Override
-    public String toString() {
-        return "CodeImportTemplateVO{" +
-                "cloNamesList=" + cloNamesList +
-                ", codeClassifyTemplateVO=" + codeClassifyTemplateVO +
-                ", codeClassifyVO=" + codeClassifyVO +
-                '}';
-    }
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotDataVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotDataVO.java
index d6bbb76..aafe730 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotDataVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeImprotDataVO.java
@@ -1,5 +1,8 @@
 package com.vci.ubcs.code.vo.pagemodel;
 
+
+import com.vci.ubcs.code.vo.CodeClstemplateVO;
+
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
@@ -46,15 +49,15 @@
      * 鏁版嵁
      */
     private List<Map<String,String>> datas = new ArrayList<>();
-    private CodeClassifyTemplateVO codeClassifyTemplateVO;
+    private CodeClstemplateVO codeClstemplateVO;
     private CodeClassifyVO codeClassifyVO;
 
-    public CodeClassifyTemplateVO getCodeClassifyTemplateVO() {
-        return codeClassifyTemplateVO;
+    public CodeClstemplateVO getCodeClassifyTemplateVO() {
+        return codeClstemplateVO;
     }
 
-    public void setCodeClassifyTemplateVO(CodeClassifyTemplateVO codeClassifyTemplateVO) {
-        this.codeClassifyTemplateVO = codeClassifyTemplateVO;
+    public void setCodeClassifyTemplateVO(CodeClstemplateVO codeClstemplateVO) {
+        this.codeClstemplateVO = codeClstemplateVO;
     }
 
     public CodeClassifyVO getCodeClassifyVO() {
@@ -125,7 +128,7 @@
                 ", fields=" + fields +
                 ", colNames=" + colNames +
                 ", datas=" + datas +
-                ", codeClassifyTemplateVO=" + codeClassifyTemplateVO +
+                ", codeClstemplateVO=" + codeClstemplateVO +
                 ", codeClassifyVO=" + codeClassifyVO +
                 '}';
     }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeTemplatePhaseVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeTemplatePhaseVO.java
new file mode 100644
index 0000000..af805e5
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeTemplatePhaseVO.java
@@ -0,0 +1,30 @@
+package com.vci.ubcs.code.vo.pagemodel;
+
+import com.vci.ubcs.code.entity.CodeTemplatePhase;
+import lombok.Data;
+
+/**
+ * 妯℃澘闃舵鏄剧ず瀵硅薄
+ *
+ * @author ludc
+ * @date 2022-01-24
+ */
+@Data
+public class CodeTemplatePhaseVO extends CodeTemplatePhase {
+
+	/**
+     * 绂佹淇敼杩欎釜鍊�
+     */
+	private static final long serialVersionUID = 4615707117825912259L;
+
+	/**
+	* 鎵�灞炵紪鐮佽鍒欐樉绀烘枃鏈�
+	*/
+	private String codeclassifytemplateoidName;
+
+	/**
+	* 鐮佸�煎簭鍙�
+	*/
+	private Integer orderNum;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/pom.xml b/Source/UBCS/ubcs-service-api/ubcs-omd-api/pom.xml
index c17ea62..69dc113 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-omd-api/pom.xml
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/pom.xml
@@ -14,4 +14,12 @@
     <version>${bladex.project.version}</version>
     <packaging>jar</packaging>
 
+    <dependencies>
+        <dependency>
+            <groupId>com.vci.ubcs</groupId>
+            <artifactId>ubcs-util-api</artifactId>
+            <version>3.0.1.RELEASE</version>
+        </dependency>
+    </dependencies>
+
 </project>
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/EnumCache.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/EnumCache.java
new file mode 100644
index 0000000..ba9f2ac
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/cache/EnumCache.java
@@ -0,0 +1,132 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.cache;
+
+import com.vci.ubcs.omd.entity.Enum;
+import com.vci.ubcs.omd.enums.EnumEnum;
+import com.vci.ubcs.omd.feign.IEnumClient;
+import com.vci.ubcs.omd.vo.EnumVO;
+import org.springblade.core.cache.utils.CacheUtil;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.SpringUtil;
+import org.springblade.core.tool.utils.StringPool;
+
+import java.util.List;
+/**
+ * 涓氬姟瀛楀吀缂撳瓨宸ュ叿绫�
+ *
+ * @author Chill
+ */
+public class EnumCache {
+
+	private static final String ENUM_ID = "enum:id";
+	private static final String ENUM_VALUE = "enum:value";
+	private static final String ENUM_LIST = "enum:list";
+	private static final String ENUM_CACHE = "blade:enum";
+
+	private static IEnumClient iEnumClient;
+
+	private static IEnumClient getIOmdEnumClient() {
+		if (iEnumClient == null) {
+			iEnumClient = SpringUtil.getBean(IEnumClient.class);
+		}
+		return iEnumClient;
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀瀹炰綋
+	 *
+	 * @param oid 涓婚敭
+	 * @return Enum
+	 */
+	public static Enum getById(String oid) {
+		String keyPrefix = ENUM_ID.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+		return CacheUtil.get(ENUM_CACHE, keyPrefix, oid, () -> {
+			R<Enum> result = getIOmdEnumClient().getById(oid);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鍊�
+	 *
+	 * @param name    瀛楀吀缂栧彿鏋氫妇
+	 * @param nameChild Integer鍨嬪瓧鍏搁敭
+	 * @return String
+	 */
+	public static String getValue(EnumEnum name, Integer nameChild) {
+		return getValue(name.getName(), nameChild);
+	}
+
+
+	/**
+	 * 鑾峰彇瀛楀吀鍊�
+	 *
+	 * @param name    鐖跺瓧鍏哥紪鍙�
+	 * @param nameChild 瀛愬瓧鍏哥紪鍙�
+	 * @return String
+	 */
+	public static String getValue(String name, Integer nameChild) {
+		String keyPrefix = ENUM_VALUE.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+		return CacheUtil.get(ENUM_CACHE, keyPrefix + name + StringPool.COLON, String.valueOf(nameChild), () -> {
+			R<String> result = getIOmdEnumClient().getValue(name, String.valueOf(nameChild));
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鍊�
+	 *
+	 * @param name    瀛楀吀缂栧彿鏋氫妇
+	 * @param nameChild String鍨嬪瓧鍏搁敭
+	 * @return String
+	 */
+	public static String getValue(EnumEnum name, String nameChild) {
+		return getValue(name.getName(), nameChild);
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀鍊�
+	 *
+	 * @param code    瀛楀吀缂栧彿
+	 * @param dictKey String鍨嬪瓧鍏搁敭
+	 * @return String
+	 */
+	public static String getValue(String code, String dictKey) {
+		String keyPrefix = ENUM_VALUE.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+		return CacheUtil.get(ENUM_CACHE, keyPrefix + code + StringPool.COLON, dictKey, () -> {
+			R<String> result = getIOmdEnumClient().getValue(code, dictKey);
+			return result.getData();
+		});
+	}
+
+	/**
+	 * 鑾峰彇瀛楀吀闆嗗悎
+	 *
+	 * @param name 瀛楀吀缂栧彿
+	 * @return List<EnumVO>
+	 */
+	public static List<EnumVO> getList(String name) {
+		String keyPrefix = ENUM_LIST.concat(StringPool.DASH).concat(AuthUtil.getTenantId()).concat(StringPool.COLON);
+		return CacheUtil.get(ENUM_CACHE, keyPrefix, name, () -> {
+			R<List<EnumVO>> result = getIOmdEnumClient().getList(name);
+			return result.getData();
+		});
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/Enum.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/Enum.java
new file mode 100644
index 0000000..6f48438
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/Enum.java
@@ -0,0 +1,90 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 鏋氫妇瀹氫箟 瀹炰綋绫�
+ *
+ * @author yuxc
+ * @since 2023-05-08
+ */
+@Data
+@TableName("PL_OMD_ENUM")
+@ApiModel(value = "OmdEnum瀵硅薄", description = "鏋氫妇瀹氫箟")
+//@EqualsAndHashCode(callSuper = true)
+public class Enum implements Serializable {
+	private static final long serialVersionUID = 1L;
+	/**
+	 *
+	 */
+	@TableId(value = "oid", type = IdType.ASSIGN_ID)
+	@ApiModelProperty(value = "")
+	private String oid;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String name;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String label;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private Date ts;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String creator;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private Date createtime;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String modifier;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private Date modifytime;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String remark;
+
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/EnumItem.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/EnumItem.java
new file mode 100644
index 0000000..4ab81a4
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/entity/EnumItem.java
@@ -0,0 +1,99 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 鏋氫妇瀹氫箟瀛愯〃 瀹炰綋绫�
+ *
+ * @author yuxc
+ * @since 2023-05-08
+ */
+@Data
+@TableName("PL_OMD_ENUMITEM")
+@ApiModel(value = "OmdEnumitem瀵硅薄", description = "鏋氫妇瀹氫箟瀛愯〃")
+//@EqualsAndHashCode(callSuper = true)
+public class EnumItem implements Serializable {
+	private static final long serialVersionUID = 1L;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	@TableId(value = "oid", type = IdType.ASSIGN_ID)
+	private String oid;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String name;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String value;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String description;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private Date ts;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String creator;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private Date createtime;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String modifier;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private Date modifytime;
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private String parentoid;
+
+	/**
+	 *
+	 */
+	@ApiModelProperty(value = "")
+	private Integer sort;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/enums/EnumEnum.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/enums/EnumEnum.java
new file mode 100644
index 0000000..bfa9ab6
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/enums/EnumEnum.java
@@ -0,0 +1,95 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 绯荤粺瀛楀吀鏋氫妇绫�
+ *
+ * @author Chill
+ */
+@Getter
+@AllArgsConstructor
+public enum EnumEnum {
+
+	/**
+	 * 鎬у埆
+	 */
+	SEX("sex"),
+	/**
+	 * 閫氱煡绫诲瀷
+	 */
+	NOTICE("notice"),
+	/**
+	 * 鑿滃崟绫诲瀷
+	 */
+	MENU_CATEGORY("menu_category"),
+	/**
+	 * 鎸夐挳鍔熻兘
+	 */
+	BUTTON_FUNC("button_func"),
+	/**
+	 * 鏄惁
+	 */
+	YES_NO("yes_no"),
+	/**
+	 * 娴佺▼绫诲瀷
+	 */
+	FLOW("flow"),
+	/**
+	 * 鏈烘瀯绫诲瀷
+	 */
+	ORG_CATEGORY("org_category"),
+	/**
+	 * 鏁版嵁鏉冮檺
+	 */
+	DATA_SCOPE_TYPE("data_scope_type"),
+	/**
+	 * 鎺ュ彛鏉冮檺
+	 */
+	API_SCOPE_TYPE("api_scope_type"),
+	/**
+	 * 鏉冮檺绫诲瀷
+	 */
+	SCOPE_CATEGORY("scope_category"),
+	/**
+	 * 瀵硅薄瀛樺偍绫诲瀷
+	 */
+	OSS("oss"),
+	/**
+	 * 鐭俊鏈嶅姟绫诲瀷
+	 */
+	SMS("sms"),
+	/**
+	 * 宀椾綅绫诲瀷
+	 */
+	POST_CATEGORY("post_category"),
+	/**
+	 * 琛屾斂鍖哄垝
+	 */
+	REGION("region"),
+	/**
+	 * 鐢ㄦ埛骞冲彴
+	 */
+	USER_TYPE("user_type"),
+	;
+
+	final String name;
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmAttributeClient.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmAttributeClient.java
new file mode 100644
index 0000000..1aebee1
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmAttributeClient.java
@@ -0,0 +1,29 @@
+package com.vci.ubcs.omd.feign;
+
+import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.tool.api.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * Description:涓氬姟绫诲瀷鍏宠仈灞炴�� Feign鎺ュ彛绫�
+ *
+ * @author LiHang
+ * @date 2023/5/10
+ */
+@FeignClient(
+	value = AppConstant.APPLICATION_NAME_OMD,
+	fallback = IBtmAttributeFallback.class
+)
+public interface IBtmAttributeClient {
+
+	String API_PREFIX = "/client";
+	String LIST_BY_BTM_OID = API_PREFIX + "/btm-attribute/list-by-btm-oid";
+
+	@GetMapping(LIST_BY_BTM_OID)
+	R<List<BtmTypeAttributeVO>> listByBtmOid(@RequestParam("oid") String oid);
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmAttributeFallback.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmAttributeFallback.java
new file mode 100644
index 0000000..462ec2c
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IBtmAttributeFallback.java
@@ -0,0 +1,22 @@
+package com.vci.ubcs.omd.feign;
+
+import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
+import org.springblade.core.tool.api.R;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * Description:涓氬姟绫诲瀷鍏宠仈灞炴�eign澶辫触
+ *
+ * @author LiHang
+ * @date 2023/5/10
+ */
+@Component
+public class IBtmAttributeFallback implements IBtmAttributeClient{
+
+	@Override
+	public R<List<BtmTypeAttributeVO>> listByBtmOid(String oid) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IEnumClient.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IEnumClient.java
new file mode 100644
index 0000000..3fe4fd4
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IEnumClient.java
@@ -0,0 +1,97 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.feign;
+
+import com.vci.ubcs.omd.entity.Enum;
+import com.vci.ubcs.omd.entity.EnumItem;
+import com.vci.ubcs.omd.vo.EnumVO;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.mp.support.BladePage;
+import org.springblade.core.tool.api.R;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+
+/**
+ * 鏋氫妇瀹氫箟 Feign鎺ュ彛绫�
+ *
+ * @author yuxc
+ * @since 2023-05-08
+ */
+@FeignClient(
+    value = AppConstant.APPLICATION_NAME_OMD,
+	fallback = IEnumFallback.class
+)
+public interface IEnumClient {
+
+    String API_PREFIX = "/client";
+    String TOP = API_PREFIX + "/enum/top";
+	String GET_BY_ID = API_PREFIX + "/enum/get-by-oid";
+	String GET_BYCHILD_ID = API_PREFIX + "/enum/get-byChild-oid";
+	String GET_VALUE = API_PREFIX + "/enum/get-value";
+	String GET_LIST = API_PREFIX + "/enum/get-list";
+
+    /**
+     * 鑾峰彇鏋氫妇瀹氫箟鍒楄〃
+     *
+     * @param current   椤靛彿
+     * @param size      椤垫暟
+     * @return BladePage
+     */
+    @GetMapping(TOP)
+    BladePage<Enum> top(@RequestParam("current") Integer current, @RequestParam("size") Integer size);
+
+	/**
+	 * 鑾峰彇鏋氫妇瀹氫箟鍒楄〃
+	 *
+	 * @param name   鐖惰妭鐐筺ame
+	 * @param nameChild      瀛愯妭鐐筺ame
+	 * @return BladePage
+	 */
+	@GetMapping(GET_VALUE)
+	R<String> getValue(@RequestParam("name") String name,@RequestParam("nameChild") String nameChild);
+
+	/**
+	 * 鑾峰彇瀛楀吀瀹炰綋
+	 *
+	 * @param oid 涓婚敭
+	 * @return
+	 */
+	@GetMapping(GET_BY_ID)
+	R<Enum> getById(@RequestParam("oid") String oid);
+
+	/**
+	 * 鑾峰彇瀛楀吀瀹炰綋
+	 *
+	 * @param oid 涓婚敭
+	 * @return
+	 */
+	@GetMapping(GET_BYCHILD_ID)
+	R<EnumItem> getByChildId(@RequestParam("oid") String oid);
+
+	/**
+	 * 鑾峰彇瀛楀吀琛�
+	 *
+	 * @param name 鏋氫妇缂栧彿
+	 * @return
+	 */
+	@GetMapping(GET_LIST)
+	R<List<EnumVO>> getList(@RequestParam("name") String name);
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IEnumFallback.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IEnumFallback.java
new file mode 100644
index 0000000..32a8581
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IEnumFallback.java
@@ -0,0 +1,60 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.feign;
+
+import com.vci.ubcs.omd.entity.Enum;
+import com.vci.ubcs.omd.entity.EnumItem;
+import com.vci.ubcs.omd.vo.EnumVO;
+import org.springblade.core.mp.support.BladePage;
+import org.springblade.core.tool.api.R;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * Feign澶辫触閰嶇疆
+ *
+ * @author Chill
+ */
+@Component
+public class IEnumFallback implements IEnumClient {
+	@Override
+	public BladePage<Enum> top(Integer current, Integer size) {
+		return null;
+	}
+
+	@Override
+	public R<String> getValue(String name, String nameChild) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<Enum> getById(String oid) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<EnumItem> getByChildId(String oid) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+	@Override
+	public R<List<EnumVO>> getList(String name) {
+		return R.fail("鑾峰彇鏁版嵁澶辫触");
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IEnumItemClient.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IEnumItemClient.java
new file mode 100644
index 0000000..7168efc
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IEnumItemClient.java
@@ -0,0 +1,51 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.feign;
+
+import com.vci.ubcs.omd.entity.EnumItem;
+import org.springblade.core.launch.constant.AppConstant;
+import org.springblade.core.mp.support.BladePage;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * 鏋氫妇瀹氫箟瀛愯〃 Feign鎺ュ彛绫�
+ *
+ * @author yuxc
+ * @since 2023-05-08
+ */
+@FeignClient(
+	value = AppConstant.APPLICATION_NAME_OMD,
+	fallback = IEnumItemFallback.class
+)
+public interface IEnumItemClient {
+
+    String API_PREFIX = "/clientEnumItem";
+    String TOP = API_PREFIX + "/top";
+
+    /**
+     * 鑾峰彇鏋氫妇瀹氫箟瀛愯〃鍒楄〃
+     *
+     * @param current   椤靛彿
+     * @param size      椤垫暟
+     * @return BladePage
+     */
+    @GetMapping(TOP)
+    BladePage<EnumItem> top(@RequestParam("current") Integer current, @RequestParam("size") Integer size);
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodePhaseattrVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IEnumItemFallback.java
similarity index 61%
copy from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodePhaseattrVO.java
copy to Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IEnumItemFallback.java
index b98fc98..ef93754 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodePhaseattrVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/feign/IEnumItemFallback.java
@@ -14,21 +14,27 @@
  *  this software without specific prior written permission.
  *  Author: Chill 搴勯獮 (smallchill@163.com)
  */
-package com.vci.ubcs.code.vo;
+package com.vci.ubcs.omd.feign;
 
-import com.vci.ubcs.code.entity.CodePhaseattrEntity;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
+import com.vci.ubcs.omd.entity.Enum;
+import com.vci.ubcs.omd.entity.EnumItem;
+import com.vci.ubcs.omd.vo.EnumVO;
+import org.springblade.core.mp.support.BladePage;
+import org.springblade.core.tool.api.R;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
 
 /**
- * 缂栫爜搴撳畾涔�-妯℃澘闃舵-灞炴�� 瑙嗗浘瀹炰綋绫�
+ * Feign澶辫触閰嶇疆
  *
- * @author yuxc
- * @since 2023-04-20
+ * @author Chill
  */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class CodePhaseattrVO extends CodePhaseattrEntity {
-	private static final long serialVersionUID = 1L;
+@Component
+public class IEnumItemFallback implements IEnumItemClient {
+	@Override
+	public BladePage<EnumItem> top(Integer current, Integer size) {
+		return null;
+	}
 
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodePhaseattrVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/EnumItemVO.java
similarity index 81%
rename from Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodePhaseattrVO.java
rename to Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/EnumItemVO.java
index b98fc98..ddcebab 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/CodePhaseattrVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/EnumItemVO.java
@@ -14,21 +14,22 @@
  *  this software without specific prior written permission.
  *  Author: Chill 搴勯獮 (smallchill@163.com)
  */
-package com.vci.ubcs.code.vo;
+package com.vci.ubcs.omd.vo;
 
-import com.vci.ubcs.code.entity.CodePhaseattrEntity;
+import com.vci.ubcs.omd.entity.EnumItem;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 /**
- * 缂栫爜搴撳畾涔�-妯℃澘闃舵-灞炴�� 瑙嗗浘瀹炰綋绫�
+ * 鏋氫妇瀹氫箟瀛愯〃 瑙嗗浘瀹炰綋绫�
  *
  * @author yuxc
- * @since 2023-04-20
+ * @since 2023-05-08
  */
 @Data
 @EqualsAndHashCode(callSuper = true)
-public class CodePhaseattrVO extends CodePhaseattrEntity {
+public class EnumItemVO extends EnumItem {
 	private static final long serialVersionUID = 1L;
 
+	String parentName;
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/EnumVO.java b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/EnumVO.java
new file mode 100644
index 0000000..9fc7e40
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-omd-api/src/main/java/com/vci/ubcs/omd/vo/EnumVO.java
@@ -0,0 +1,76 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.vci.ubcs.omd.entity.Enum;
+import com.vci.ubcs.omd.entity.EnumItem;
+import com.vci.ubcs.starter.util.node.INodeOid;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 鏋氫妇瀹氫箟 瑙嗗浘瀹炰綋绫�
+ *
+ * @author yuxc
+ * @since 2023-05-08
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class EnumVO extends Enum implements INodeOid<EnumItem> {
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 瀛愬瓩鑺傜偣
+	 */
+	@JsonInclude(JsonInclude.Include.NON_EMPTY)
+	private List<EnumItem> children = new ArrayList<>();
+	/**
+	 * 鏄惁鏈夊瓙瀛欒妭鐐�
+	 */
+	private Boolean hasChildren = false;
+	/**
+	 * 瀛愯妭鐐筄ID
+	 */
+	private String itemOid;
+	/**
+	 * 瀛愯妭鐐规灇涓剧紪鐮�
+	 */
+	private String itemName;
+	/**
+	 * 瀛愯妭鐐规灇涓惧��
+	 */
+	private String itemValue;
+	/**
+	 * 瀛愯妭鐐规灇鎻忚堪
+	 */
+	private String itemDescription;
+
+	@Override
+	public String getParentOid() {
+		return null;
+	}
+
+	@Override
+	public List<EnumItem> getChildren() {
+		return this.children;
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/pom.xml b/Source/UBCS/ubcs-service-api/ubcs-util-api/pom.xml
index 22f6d7c..8702264 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-util-api/pom.xml
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/pom.xml
@@ -40,5 +40,10 @@
             <artifactId>poi-ooxml-schemas</artifactId>
             <version>4.1.2</version>
         </dependency>
+        <dependency>
+            <groupId>com.github.yulichang</groupId>
+            <artifactId>mybatis-plus-join-boot-starter</artifactId>
+            <version>${mybatisplus.join.version}</version>
+        </dependency>
     </dependencies>
 </project>
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/DefaultAttrAssimtUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/DefaultAttrAssimtUtil.java
index d070f14..251eb48 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/DefaultAttrAssimtUtil.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/DefaultAttrAssimtUtil.java
@@ -1,5 +1,6 @@
 package com.vci.ubcs.starter.util;
 
+import com.alibaba.druid.util.StringUtils;
 import com.vci.ubcs.starter.exception.VciBaseException;
 import com.vci.ubcs.starter.revision.model.BaseModel;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
@@ -9,6 +10,7 @@
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.Locale;
 
 /**
  * 鏂板鏃堕粯璁ゅ�煎睘鎬ц祴鍊�
@@ -29,11 +31,12 @@
 	public static <T extends BaseModel> T addDefaultAttrAssimt(T object,String btmName) throws VciBaseException {
 		BaseModel baseModel = object;
 		try {
-			baseModel.setOid(VciBaseUtil.getPk());
+			baseModel.setOid(VciBaseUtil.getPk().toUpperCase());
 			baseModel.setCreateTime(new Date());
 			baseModel.setNameOid(VciBaseUtil.getPk());
 			baseModel.setLastModifyTime(new Date());
 			baseModel.setTs(new Date());
+			baseModel.setRevisionOid(VciBaseUtil.getPk());
 			//鐢ㄦ埛id
 			String userId = AuthUtil.getUserId().toString();
 			baseModel.setBtmname(btmName);
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/MPJLambdaWrapperSqlKeyword.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/MPJLambdaWrapperSqlKeyword.java
new file mode 100644
index 0000000..83a1332
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/MPJLambdaWrapperSqlKeyword.java
@@ -0,0 +1,90 @@
+package com.vci.ubcs.starter.util;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.springblade.core.tool.utils.DateUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+
+import java.util.Map;
+
+public class MPJLambdaWrapperSqlKeyword {
+
+	private static final String SQL_REGEX = "'|%|--|insert|delete|select|count|group|union|drop|truncate|alter|grant|execute|exec|xp_cmdshell|call|declare|sql";
+	private static final String EQUAL = "_equal";
+	private static final String NOT_EQUAL = "_notequal";
+	private static final String LIKE = "_like";
+	private static final String LIKE_LEFT = "_likeleft";
+	private static final String LIKE_RIGHT = "_likeright";
+	private static final String NOT_LIKE = "_notlike";
+	private static final String GE = "_ge";
+	private static final String LE = "_le";
+	private static final String GT = "_gt";
+	private static final String LT = "_lt";
+	private static final String DATE_GE = "_datege";
+	private static final String DATE_GT = "_dategt";
+	private static final String DATE_EQUAL = "_dateequal";
+	private static final String DATE_LT = "_datelt";
+	private static final String DATE_LE = "_datele";
+	private static final String IS_NULL = "_null";
+	private static final String NOT_NULL = "_notnull";
+	private static final String IGNORE = "_ignore";
+
+	public MPJLambdaWrapperSqlKeyword() {
+	}
+
+	public static void buildCondition(Map<String, Object> query, MPJLambdaWrapper<?> qw) {
+		if (!Func.isEmpty(query)) {
+			query.forEach((k, v) -> {
+				if (!Func.hasEmpty(new Object[]{k, v}) && !k.endsWith("_ignore")) {
+					if (k.endsWith("_equal")) {
+						qw.eq(getColumn(k, "_equal"), v);
+					} else if (k.endsWith("_notequal")) {
+						qw.ne(getColumn(k, "_notequal"), v);
+					} else if (k.endsWith("_likeleft")) {
+						qw.likeLeft(getColumn(k, "_likeleft"), v);
+					} else if (k.endsWith("_likeright")) {
+						qw.likeRight(getColumn(k, "_likeright"), v);
+					} else if (k.endsWith("_notlike")) {
+						qw.notLike(getColumn(k, "_notlike"), v);
+					} else if (k.endsWith("_ge")) {
+						qw.ge(getColumn(k, "_ge"), v);
+					} else if (k.endsWith("_le")) {
+						qw.le(getColumn(k, "_le"), v);
+					} else if (k.endsWith("_gt")) {
+						qw.gt(getColumn(k, "_gt"), v);
+					} else if (k.endsWith("_lt")) {
+						qw.lt(getColumn(k, "_lt"), v);
+					} else if (k.endsWith("_datege")) {
+						qw.ge(getColumn(k, "_datege"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss"));
+					} else if (k.endsWith("_dategt")) {
+						qw.gt(getColumn(k, "_dategt"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss"));
+					} else if (k.endsWith("_dateequal")) {
+						qw.eq(getColumn(k, "_dateequal"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss"));
+					} else if (k.endsWith("_datele")) {
+						qw.le(getColumn(k, "_datele"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss"));
+					} else if (k.endsWith("_datelt")) {
+						qw.lt(getColumn(k, "_datelt"), DateUtil.parse(String.valueOf(v), "yyyy-MM-dd HH:mm:ss"));
+					} else if (k.endsWith("_null")) {
+						qw.isNull(getColumn(k, "_null"));
+					} else if (k.endsWith("_notnull")) {
+						qw.isNotNull(getColumn(k, "_notnull"));
+					} else {
+						qw.like(getColumn(k, "_like"), v);
+					}
+
+				}
+			});
+		}
+	}
+
+	private static String getColumn(String column, String keyword) {
+		return StringUtil.humpToUnderline(StringUtil.removeSuffix(column, keyword));
+	}
+
+	public static String filter(String param) {
+		return param == null ? null : param.replaceAll("(?i)'|%|--|insert|delete|select|count|group|union|drop|truncate|alter|grant|execute|exec|xp_cmdshell|call|declare|sql", "");
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/Map2MPLLambdaUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/Map2MPLLambdaUtil.java
new file mode 100644
index 0000000..f6f584d
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/Map2MPLLambdaUtil.java
@@ -0,0 +1,74 @@
+package com.vci.ubcs.starter.util;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.metadata.OrderItem;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.mp.support.SqlKeyword;
+import org.springblade.core.tool.support.Kv;
+import org.springblade.core.tool.utils.BeanUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+
+import java.util.Map;
+
+public class Map2MPLLambdaUtil {
+
+	public Map2MPLLambdaUtil() {
+	}
+
+	public static <T> IPage<T> getPage(Query query) {
+		Page<T> page = new Page((long) Func.toInt(query.getCurrent(), 1), (long)Func.toInt(query.getSize(), 10));
+		String[] ascArr = Func.toStrArray(query.getAscs());
+		String[] descArr = ascArr;
+		int var4 = ascArr.length;
+
+		int var5;
+		for(var5 = 0; var5 < var4; ++var5) {
+			String asc = descArr[var5];
+			page.addOrder(new OrderItem[]{OrderItem.asc(StringUtil.cleanIdentifier(asc))});
+		}
+
+		descArr = Func.toStrArray(query.getDescs());
+		String[] var8 = descArr;
+		var5 = descArr.length;
+
+		for(int var9 = 0; var9 < var5; ++var9) {
+			String desc = var8[var9];
+			page.addOrder(new OrderItem[]{OrderItem.desc(StringUtil.cleanIdentifier(desc))});
+		}
+
+		return page;
+	}
+
+	public static <T> MPJLambdaWrapper<T> getMPJLambdaWrapper(T entity) {
+		return new MPJLambdaWrapper(entity);
+	}
+
+	public static <T> MPJLambdaWrapper<T> getMPJLambdaWrapper(Map<String, Object> query, Class<T> clazz) {
+		Kv exclude = Kv.create().set("Blade-Auth", "Blade-Auth").set("current", "current").set("size", "size").set("ascs", "ascs").set("descs", "descs");
+		return getMPJLambdaWrapper(query, exclude, clazz);
+	}
+
+	/**
+	 * map杞崲涓篗PJLambdaWrapper
+	 * @param query
+	 * @param exclude
+	 * @param clazz
+	 * @param <T>
+	 * @return
+	 */
+	public static <T> MPJLambdaWrapper<T> getMPJLambdaWrapper(Map<String, Object> query, Map<String, Object> exclude, Class<T> clazz) {
+		exclude.forEach((k, v) -> {
+			query.remove(k);
+		});
+		MPJLambdaWrapper<T> qw = new MPJLambdaWrapper();
+		qw.setEntity(BeanUtil.newInstance(clazz));
+		MPJLambdaWrapperSqlKeyword.buildCondition(query, qw);
+		return qw;
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/MybatisParameterUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/MybatisParameterUtil.java
index 457dbdb..4931b1e 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/MybatisParameterUtil.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/MybatisParameterUtil.java
@@ -1,12 +1,17 @@
 package com.vci.ubcs.starter.util;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.vci.ubcs.starter.exception.VciBaseException;
+import org.springblade.core.mp.support.SqlKeyword;
+import org.springblade.core.tool.utils.BeanUtil;
 import org.springframework.util.ObjectUtils;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 /**
  * in 鍙傛暟鎴彇锛岃繑鍥瀢rapper
@@ -16,6 +21,44 @@
  */
 public class MybatisParameterUtil {
 
+	/**
+	 * in浣滀负鏌ヨ鏉′欢鏃讹紝闃叉澶т簬1000鍑虹幇鎶ラ敊锛屽鏉′欢杩涜鎴彇锛岃繛琛ㄦ煡璇㈢殑wrapper
+	 * @param wrapper MPJLambdaWrapper,涓嶈繘琛岃繛琛ㄦ煡璇㈡椂浣跨敤
+	 * @param column 浣滀负in鐨勬潯浠跺垪
+	 * @param coll 鏌ヨ鍙傛暟
+	 * @param <T> LambdaQueryWrapper鐨勬硾鍨�
+	 * @param <F> 鏌ヨ鍙傛暟绫诲瀷
+	 * @return
+	 * @throws VciBaseException
+	 */
+	public static <T, F> MPJLambdaWrapper<T> cutInParameter(MPJLambdaWrapper<T> wrapper, SFunction<T, ?> column, List<F> coll) throws VciBaseException {
+		List<List<F>> newList = splitList(coll, 900);
+		if (ObjectUtils.isEmpty(newList)) {
+			throw new VciBaseException("鍙傛暟閿欒");
+		} else if (newList.size() == 1) {
+			wrapper.in(column, newList.get(0));
+			return wrapper;
+		}
+		wrapper.and(i -> {
+			i.in(column, newList.get(0));
+			newList.remove(0);
+			for (List<F> objects : newList) {
+				i.or().in(column, objects);
+			}
+		});
+		return wrapper;
+	}
+
+	/**
+	 * in浣滀负鏌ヨ鏉′欢鏃讹紝闃叉澶т簬1000鍑虹幇鎶ラ敊锛屽鏉′欢杩涜鎴彇锛屼笉鍏峰杩炶〃鏌ヨ鐨剋rapper
+	 * @param wrapper LambdaQueryWrapper,涓嶈繘琛岃繛琛ㄦ煡璇㈡椂浣跨敤
+	 * @param column 浣滀负in鐨勬潯浠跺垪
+	 * @param coll 鏌ヨ鍙傛暟
+	 * @param <T> LambdaQueryWrapper鐨勬硾鍨�
+	 * @param <F> 鏌ヨ鍙傛暟绫诲瀷
+	 * @return
+	 * @throws VciBaseException
+	 */
 	public static <T, F> LambdaQueryWrapper<T> cutInParameter(LambdaQueryWrapper<T> wrapper, SFunction<T, ?> column, List<F> coll) throws VciBaseException {
 		List<List<F>> newList = splitList(coll, 900);
 		if (ObjectUtils.isEmpty(newList)) {
@@ -34,6 +77,44 @@
 		return wrapper;
 	}
 
+	/**
+	 * notin浣滀负鏌ヨ鏉′欢鏃讹紝闃叉澶т簬1000鍑虹幇鎶ラ敊锛屽鏉′欢杩涜鎴彇锛岃繛琛ㄦ煡璇㈢殑wrapper
+	 * @param wrapper MPJLambdaWrapper,涓嶈繘琛岃繛琛ㄦ煡璇㈡椂浣跨敤
+	 * @param column 浣滀负in鐨勬潯浠跺垪
+	 * @param coll 鏌ヨ鍙傛暟
+	 * @param <T> LambdaQueryWrapper鐨勬硾鍨�
+	 * @param <F> 鏌ヨ鍙傛暟绫诲瀷
+	 * @return
+	 * @throws VciBaseException
+	 */
+	public static <T, F> MPJLambdaWrapper<T> cutNotInParameter(MPJLambdaWrapper<T> wrapper, SFunction<T, ?> column, List<F> coll) throws VciBaseException {
+		List<List<F>> newList = splitList(coll, 900);
+		if (ObjectUtils.isEmpty(newList)) {
+			throw new VciBaseException("鍙傛暟閿欒");
+		} else if (newList.size() == 1) {
+			wrapper.notIn(column, newList.get(0));
+			return wrapper;
+		}
+		wrapper.and(i -> {
+			i.in(column, newList.get(0));
+			newList.remove(0);
+			for (List<F> objects : newList) {
+				i.or().notIn(column, objects);
+			}
+		});
+		return wrapper;
+	}
+
+	/**
+	 * notin浣滀负鏌ヨ鏉′欢鏃讹紝闃叉澶т簬1000鍑虹幇鎶ラ敊锛屽鏉′欢杩涜鎴彇锛屼笉鍏峰杩炶〃鏌ヨ鐨剋rapper
+	 * @param wrapper LambdaQueryWrapper,涓嶈繘琛岃繛琛ㄦ煡璇㈡椂浣跨敤
+	 * @param column 浣滀负in鐨勬潯浠跺垪
+	 * @param coll 鏌ヨ鍙傛暟
+	 * @param <T> LambdaQueryWrapper鐨勬硾鍨�
+	 * @param <F> 鏌ヨ鍙傛暟绫诲瀷
+	 * @return
+	 * @throws VciBaseException
+	 */
 	public static <T, F> LambdaQueryWrapper<T> cutNotInParameter(LambdaQueryWrapper<T> wrapper, SFunction<T, ?> column, List<F> coll) throws VciBaseException {
 		List<List<F>> newList = splitList(coll, 900);
 		if (ObjectUtils.isEmpty(newList)) {
@@ -67,4 +148,5 @@
 		return newList;
 	}
 
+
 }
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/PatternUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/PatternUtil.java
new file mode 100644
index 0000000..b40a46a
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/PatternUtil.java
@@ -0,0 +1,50 @@
+package com.vci.ubcs.starter.util;
+
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class PatternUtil {
+
+	//*${xxx}*
+	public static Pattern dynamic = Pattern.compile(".*\\$\\{([a-z]+)\\}.*");
+	public static Pattern dynamicLimitCount = Pattern.compile("\\$\\{([a-z]+)\\}");
+	/**
+	 * 鍒ゆ柇鍐呭涓槸鍚﹀寘鍚姩鎬佸弬鏁�(${key}褰㈠紡鐨�)
+	 *
+	 * @param content 瑕佸垽鏂殑鍐呭
+	 * @return
+	 */
+	public static boolean isContainsDynamicParameter(String content) {
+		if(StringUtils.isBlank(content)){
+			return false;
+		}
+		return dynamic.matcher(content).matches();
+	}
+
+	/**
+	 * 鎸夌収鍔ㄦ�佸唴瀹圭殑鍙傛暟鍑虹幇椤哄簭,灏嗗弬鏁版斁鍒癓ist涓�
+	 *
+	 * @param content
+	 * @return
+	 */
+	public static List<String> getKeyListByContent(String content) {
+		if(StringUtils.isBlank(content)){
+			return new ArrayList<>();
+		}
+		Set<String> paramSet = new LinkedHashSet<>();
+		Matcher m = dynamicLimitCount.matcher(content);
+		while (m.find()) {
+			paramSet.add(m.group(1));
+		}
+		return new ArrayList<>(paramSet);
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/node/ForestNodeManagerOid.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/node/ForestNodeManagerOid.java
new file mode 100644
index 0000000..a60a37e
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/node/ForestNodeManagerOid.java
@@ -0,0 +1,36 @@
+package com.vci.ubcs.starter.util.node;
+
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Maps;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class ForestNodeManagerOid<T extends INodeOid<T>> {
+	private final ImmutableMap<String, T> nodeMap;
+	private final Map<String, Object> parentIdMap = Maps.newHashMap();
+
+	public ForestNodeManagerOid(List<T> nodes) {
+		this.nodeMap = Maps.uniqueIndex(nodes, INodeOid::getOid);
+	}
+
+	public INodeOid<T> getTreeNodeAt(String id) {
+		return this.nodeMap.containsKey(id) ? (INodeOid)this.nodeMap.get(id) : null;
+	}
+
+	public void addParentId(String parentId) {
+		this.parentIdMap.put(parentId, "");
+	}
+
+	public List<T> getRoot() {
+		List<T> roots = new ArrayList();
+		this.nodeMap.forEach((key, node) -> {
+			if (node.getParentOid() == null || this.parentIdMap.containsKey(node.getOid())) {
+				roots.add(node);
+			}
+
+		});
+		return roots;
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/node/ForestNodeMergerOid.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/node/ForestNodeMergerOid.java
new file mode 100644
index 0000000..95b93d9
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/node/ForestNodeMergerOid.java
@@ -0,0 +1,26 @@
+package com.vci.ubcs.starter.util.node;
+
+
+
+import java.util.List;
+
+public class ForestNodeMergerOid {
+	public ForestNodeMergerOid() {
+	}
+
+	public static <T extends INodeOid<T>> List<T> merge(List<T> items) {
+		ForestNodeManagerOid forestNodeManager = new ForestNodeManagerOid(items);
+		items.forEach((forestNode) -> {
+			if (forestNode.getParentOid() != null) {
+				INodeOid<T> node = forestNodeManager.getTreeNodeAt(forestNode.getParentOid());
+				if (node != null) {
+					node.getChildren().add(forestNode);
+				} else {
+					forestNodeManager.addParentId(forestNode.getOid());
+				}
+			}
+
+		});
+		return forestNodeManager.getRoot();
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/node/INodeOid.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/node/INodeOid.java
new file mode 100644
index 0000000..14742f1
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/node/INodeOid.java
@@ -0,0 +1,16 @@
+package com.vci.ubcs.starter.util.node;
+
+import java.io.Serializable;
+import java.util.List;
+
+public interface INodeOid<T> extends Serializable {
+	String getOid();
+
+	String getParentOid();
+
+	List<T> getChildren();
+
+	default Boolean getHasChildren() {
+		return false;
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/VciSystemVarConstants.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/VciSystemVarConstants.java
new file mode 100644
index 0000000..0c049d8
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/constant/VciSystemVarConstants.java
@@ -0,0 +1,70 @@
+package com.vci.ubcs.starter.web.constant;
+
+
+import com.vci.ubcs.starter.web.pagemodel.SessionInfo;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import com.vci.ubcs.starter.web.util.VciDateUtil;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+public class VciSystemVarConstants {
+	public static final String CURRENTUSER_OID = "#CURRENTUSER.OID#";
+	public static final String CURRENTUSER_ID = "#CURRENTUSER.ID#";
+	public static final String CURRENTTIME = "#CURRENTTIME#";
+	public static final String CURRENTDATE = "#CURRENTDATE#";
+	public static final String CURRENTDATETIME = "#CURRENTDATETIME#";
+	public static final String CURRENTUSER_NAME = "#CURRENTUSER_NAME#";
+	public static final String CURRENTUSER_SECRETGRADE = "#CURRENTUSER.SECRETGRADE#";
+	public static final String CURRENTUSER_IP_SECRET = "#CURRENTUSER.IPSECRET#";
+	public static final String CURRENTUSER_BUSINESS_UNIT = "#CURRENTUSER.BUSINESSUNIT#";
+	public static final String CURRENTUSER_BUSINESS_UNIT_NAME = "#CURRENTUSER.BUSINESSUNITNAME#";
+	public static final String CURRENTUSER_GROUPOID = "#CURRENTUSER.GROUPOID#";
+	public static final String CURRENTUSER_GROUPNAME = "#CURRENTUSER.GROUPNAME#";
+	public static final String CURRENTUSER_EMAIL = "#CURRENTUSER.EMAIL#";
+	public static final String CURRENTUSER_ROLENAME = "#CURRENTUSER.ROLENAME#";
+	public static final String[] SYSTEM_VAR_KEYS = new String[]{"#CURRENTUSER.OID#", "#CURRENTUSER.ID#", "#CURRENTDATE#", "#CURRENTTIME#", "#CURRENTDATETIME#", "#CURRENTUSER.GROUPOID#", "#CURRENTUSER_NAME#", "#CURRENTUSER.SECRETGRADE#", "#CURRENTUSER.GROUPNAME#", "#CURRENTUSER.EMAIL#", "#CURRENTUSER.ROLENAME#", "#CURRENTUSER.IPSECRET#", "#CURRENTUSER.BUSINESSUNIT#", "#CURRENTUSER.BUSINESSUNITNAME#"};
+	public static final Map<String, String> SYSTEM_VAR_KEYNAMEMAP = new HashMap();
+
+	public VciSystemVarConstants() {
+		SYSTEM_VAR_KEYNAMEMAP.put("#CURRENTTIME#", "褰撳墠鏃堕棿");
+		SYSTEM_VAR_KEYNAMEMAP.put("#CURRENTDATE#", "褰撳墠鏃ユ湡");
+		SYSTEM_VAR_KEYNAMEMAP.put("#CURRENTDATETIME#", "褰撳墠鏃ユ湡鏃堕棿");
+		SYSTEM_VAR_KEYNAMEMAP.put("#CURRENTUSER.OID#", "褰撳墠鐢ㄦ埛涓婚敭");
+		SYSTEM_VAR_KEYNAMEMAP.put("#CURRENTUSER.ID#", "褰撳墠鐢ㄦ埛璐︽埛");
+		SYSTEM_VAR_KEYNAMEMAP.put("#CURRENTUSER_NAME#", "褰撳墠鐢ㄦ埛濮撳悕");
+		SYSTEM_VAR_KEYNAMEMAP.put("#CURRENTUSER.SECRETGRADE#", "褰撳墠鐢ㄦ埛瀵嗙骇");
+		SYSTEM_VAR_KEYNAMEMAP.put("#CURRENTUSER.IPSECRET#", "褰撳墠鐢ㄦ埛鐨勬満鍣ㄥ瘑绾�");
+		SYSTEM_VAR_KEYNAMEMAP.put("#CURRENTUSER.GROUPOID#", "褰撳墠鐢ㄦ埛鐨勯儴闂ㄧ殑涓婚敭");
+		SYSTEM_VAR_KEYNAMEMAP.put("#CURRENTUSER.GROUPNAME#", "褰撳墠鐢ㄦ埛鎵�灞為儴闂ㄥ悕绉�");
+		SYSTEM_VAR_KEYNAMEMAP.put("#CURRENTUSER.EMAIL#", "褰撳墠鐢ㄦ埛閭欢鍦板潃");
+		SYSTEM_VAR_KEYNAMEMAP.put("#CURRENTUSER.ROLENAME#", "褰撳墠鐢ㄦ埛鎵�灞炶鑹插悕绉�");
+		SYSTEM_VAR_KEYNAMEMAP.put("#CURRENTUSER.BUSINESSUNIT#", "褰撳墠鐢ㄦ埛鎵�灞炰笟鍔″崟鍏冧富閿�");
+		SYSTEM_VAR_KEYNAMEMAP.put("#CURRENTUSER.BUSINESSUNITNAME#", "褰撳墠鐢ㄦ埛鎵�灞炰笟鍔″崟鍏�");
+	}
+
+	public static Map<String, String> getSystemVarValueMap() {
+		Map<String, String> systemVarMap = new HashMap();
+		SessionInfo sessionInfo = VciBaseUtil.getCurrentUserSessionInfo();
+		if (sessionInfo != null) {
+			systemVarMap.put("#CURRENTUSER.OID#", sessionInfo.getUserOid());
+			systemVarMap.put("#CURRENTUSER.ID#", sessionInfo.getUserId());
+			systemVarMap.put("#CURRENTUSER_NAME#", sessionInfo.getUserName());
+			systemVarMap.put("#CURRENTDATETIME#", VciDateUtil.getNowString());
+			systemVarMap.put("#CURRENTDATE#", VciDateUtil.getNowString("yyyy-MM-dd"));
+			systemVarMap.put("#CURRENTTIME#", VciDateUtil.getNowString("HH:mm:ss"));
+			systemVarMap.put("#CURRENTUSER.SECRETGRADE#", sessionInfo.getUserSecret());
+			systemVarMap.put("#CURRENTUSER.GROUPNAME#", sessionInfo.getDeptName());
+			systemVarMap.put("#CURRENTUSER.GROUPOID#", sessionInfo.getDeptOid());
+			systemVarMap.put("#CURRENTUSER.EMAIL#", sessionInfo.getEmail());
+			systemVarMap.put("#CURRENTUSER.ROLENAME#", (String) ((Collection) Optional.ofNullable(sessionInfo.getRolesName().values()).orElseGet(() -> {
+				return new ArrayList();
+			})).stream().collect(Collectors.joining(",")));
+			systemVarMap.put("#CURRENTUSER.IPSECRET#", sessionInfo.getIpSecret());
+			systemVarMap.put("#CURRENTUSER.BUSINESSUNIT#", sessionInfo.getOrgsOid());
+			systemVarMap.put("#CURRENTUSER.BUSINESSUNITNAME#", sessionInfo.getOrgsName());
+		}
+
+		return systemVarMap;
+	}
+}
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/Md5.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/Md5.java
new file mode 100644
index 0000000..de2a60d
--- /dev/null
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/Md5.java
@@ -0,0 +1,82 @@
+package com.vci.ubcs.starter.web.util;
+
+//
+// Source code recreated from a .class file by IntelliJ IDEA
+// (powered by FernFlower decompiler)
+//
+
+
+import java.security.MessageDigest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class Md5 {
+	private static Logger logger = LoggerFactory.getLogger(Md5.class);
+
+	public Md5() {
+	}
+
+	public static String md5(String v) {
+		if (v == null) {
+			return null;
+		} else {
+			try {
+				MessageDigest md = MessageDigest.getInstance("MD5");
+				return toHex(md.digest(v.getBytes()));
+			} catch (Exception var2) {
+				return null;
+			}
+		}
+	}
+
+	public static String twoTimesMd5(String sourceString) throws Exception {
+		return sourceString == null ? null : md5(md5(sourceString));
+	}
+
+	public static boolean equalMd5(String md5String, String sourceString) {
+		if (md5String != null && sourceString != null) {
+			try {
+				return md5String.equals(twoTimesMd5(sourceString));
+			} catch (Exception var3) {
+				var3.printStackTrace();
+				return false;
+			}
+		} else {
+			return false;
+		}
+	}
+
+	public static boolean equalOneMd5(String md5String, String sourceString) {
+		if (md5String != null && sourceString != null) {
+			try {
+				String ms = md5(sourceString);
+				return md5String.equals(ms);
+			} catch (Exception var3) {
+				if (logger.isErrorEnabled()) {
+					logger.error("瀵规瘮md5鐨勬椂鍊欏嚭鐜颁簡閿欒", var3);
+				}
+
+				return false;
+			}
+		} else {
+			return false;
+		}
+	}
+
+	private static String toHex(byte[] buffer) {
+		StringBuffer sb = new StringBuffer(32);
+		String s = null;
+
+		for(int i = 0; i < buffer.length; ++i) {
+			s = Integer.toHexString(buffer[i] & 255);
+			if (s.length() < 2) {
+				sb.append('0');
+			}
+
+			sb.append(s);
+		}
+
+		return sb.toString();
+	}
+}
+
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
index 4cb289a..bf83190 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
@@ -79,7 +79,14 @@
 			return 0;
 		}
 	}
-
+	public static SessionInfo getCurrentUserSessionInfo() throws VciBaseException {
+		SessionInfo si = getCurrentUserSessionInfoNotException();
+		if (si == null) {
+			throw new VciBaseException("noLogin", new String[]{"娌℃湁褰撳墠鐢ㄦ埛淇℃伅"});
+		} else {
+			return si;
+		}
+	}
 	public static long getLong(String s) {
 		long l = 0L;
 		if (s == null) {
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseattrController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseAttrController.java
similarity index 84%
rename from Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseattrController.java
rename to Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseAttrController.java
index 5811080..675d4fd 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseattrController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodePhaseAttrController.java
@@ -20,10 +20,10 @@
 import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import com.vci.ubcs.code.entity.CodePhaseAttr;
-import com.vci.ubcs.code.mapper.CodePhaseattrMapper;
-import com.vci.ubcs.code.service.ICodePhaseattrService;
-import com.vci.ubcs.code.vo.CodePhaseattrVO;
-import com.vci.ubcs.code.wrapper.CodePhaseattrWrapper;
+import com.vci.ubcs.code.mapper.CodePhaseAttrMapper;
+import com.vci.ubcs.code.service.ICodePhaseAttrService;
+import com.vci.ubcs.code.vo.pagemodel.CodePhaseAttrVO;
+import com.vci.ubcs.code.wrapper.CodePhaseAttrWrapper;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -47,11 +47,11 @@
 @AllArgsConstructor
 @RequestMapping("/CodePhaseattr")
 @Api(value = "缂栫爜搴撳畾涔�-妯℃澘闃舵-灞炴��", tags = "缂栫爜搴撳畾涔�-妯℃澘闃舵-灞炴�ф帴鍙�")
-public class CodePhaseattrController extends BladeController {
+public class CodePhaseAttrController extends BladeController {
 
-	private final ICodePhaseattrService CodePhaseattrService;
+	private final ICodePhaseAttrService CodePhaseattrService;
 
-	private CodePhaseattrMapper codePhaseAttrMapper;
+	private CodePhaseAttrMapper codePhaseAttrMapper;
 
 	/**
 	 * 缂栫爜搴撳畾涔�-妯℃澘闃舵-灞炴�� 璇︽儏
@@ -59,9 +59,9 @@
 	@GetMapping("/detail")
 	@ApiOperationSupport(order = 1)
 	@ApiOperation(value = "璇︽儏", notes = "浼犲叆CodePhaseattr")
-	public R<CodePhaseattrVO> detail(CodePhaseAttr codePhaseattr) {
+	public R<CodePhaseAttrVO> detail(CodePhaseAttr codePhaseattr) {
 		CodePhaseAttr detail = CodePhaseattrService.getOne(Condition.getQueryWrapper(codePhaseattr));
-		return R.data(CodePhaseattrWrapper.build().entityVO(detail));
+		return R.data(CodePhaseAttrWrapper.build().entityVO(detail));
 	}
 	/**
 	 * 缂栫爜搴撳畾涔�-妯℃澘闃舵-灞炴�� 鍒嗛〉
@@ -69,9 +69,9 @@
 	@GetMapping("/list")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆CodePhaseattr")
-	public R<IPage<CodePhaseattrVO>> list(CodePhaseAttr codePhaseattr, Query query) {
+	public R<IPage<CodePhaseAttrVO>> list(CodePhaseAttr codePhaseattr, Query query) {
 		IPage<CodePhaseAttr> pages = CodePhaseattrService.page(Condition.getPage(query), Condition.getQueryWrapper(codePhaseattr));
-		return R.data(CodePhaseattrWrapper.build().pageVO(pages));
+		return R.data(CodePhaseAttrWrapper.build().pageVO(pages));
 	}
 
 	/**
@@ -80,8 +80,8 @@
 	@GetMapping("/page")
 	@ApiOperationSupport(order = 3)
 	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆CodePhaseattr")
-	public R<IPage<CodePhaseattrVO>> page(CodePhaseattrVO CodePhaseattr, Query query) {
-		IPage<CodePhaseattrVO> pages = CodePhaseattrService.selectCodePhaseattrPage(Condition.getPage(query), CodePhaseattr);
+	public R<IPage<CodePhaseAttrVO>> page(CodePhaseAttrVO CodePhaseattr, Query query) {
+		IPage<CodePhaseAttrVO> pages = CodePhaseattrService.selectCodePhaseattrPage(Condition.getPage(query), CodePhaseattr);
 		return R.data(pages);
 	}
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodePhaseattrClient.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodePhaseattrClient.java
index 9c685fa..85f0c24 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodePhaseattrClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/feign/CodePhaseattrClient.java
@@ -19,7 +19,8 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.vci.ubcs.code.entity.CodePhaseAttr;
-import com.vci.ubcs.code.mapper.CodePhaseattrMapper;
+import com.vci.ubcs.code.mapper.CodePhaseAttrMapper;
+import com.vci.ubcs.code.mapper.CodePhaseAttrMapper;
 import lombok.AllArgsConstructor;
 import org.springblade.core.mp.support.BladePage;
 import org.springblade.core.mp.support.Condition;
@@ -39,7 +40,7 @@
 @AllArgsConstructor
 public class CodePhaseattrClient implements ICodePhaseattrClient {
 
-    private final CodePhaseattrMapper codePhaseAttrMapper;
+    private final CodePhaseAttrMapper codePhaseAttrMapper;
 
     @Override
     @GetMapping(TOP)
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseattrMapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseAttrMapper.java
similarity index 87%
rename from Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseattrMapper.java
rename to Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseAttrMapper.java
index 0445e1d..070604d 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseattrMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/mapper/CodePhaseAttrMapper.java
@@ -17,9 +17,10 @@
 package com.vci.ubcs.code.mapper;
 
 import com.vci.ubcs.code.entity.CodePhaseAttr;
-import com.vci.ubcs.code.vo.CodePhaseattrVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.code.vo.pagemodel.CodePhaseAttrVO;
+
 import java.util.List;
 
 /**
@@ -28,7 +29,7 @@
  * @author yuxc
  * @since 2023-04-20
  */
-public interface CodePhaseattrMapper extends BaseMapper<CodePhaseAttr> {
+public interface CodePhaseAttrMapper extends BaseMapper<CodePhaseAttr> {
 
 	/**
 	 * 鑷畾涔夊垎椤�
@@ -37,7 +38,7 @@
 	 * @param CodePhaseattr
 	 * @return
 	 */
-	List<CodePhaseattrVO> selectCodePhaseattrPage(IPage page, CodePhaseattrVO CodePhaseattr);
+	List<CodePhaseAttrVO> selectCodePhaseattrPage(IPage page, CodePhaseAttrVO CodePhaseattr);
 
 	List<CodePhaseAttr> selectByPhasea(String oid);
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyValueService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyValueService.java
index 35148e8..6350c98 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyValueService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyValueService.java
@@ -5,20 +5,16 @@
 
 import com.vci.ubcs.code.dto.CodeClassifyValueDTO;
 import com.vci.ubcs.code.entity.CodeClassifyValue;
-import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
 import com.vci.ubcs.code.vo.pagemodel.CodeClassifyValueVO;
 
 import com.vci.ubcs.starter.exception.VciBaseException;
 import com.vci.ubcs.starter.revision.model.TreeQueryObject;
-import com.vci.ubcs.starter.web.pagemodel.DataGrid;
-import com.vci.ubcs.starter.web.pagemodel.PageHelper;
 import com.vci.ubcs.starter.web.pagemodel.Tree;
 import org.springblade.core.tool.api.R;
 
 
 import java.util.Collection;
 import java.util.List;
-import java.util.Map;
 
 /**
  * 鍒嗙被鐮佹鐨勭爜鍊兼湇鍔℃帴鍙�
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstempattrService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstempattrService.java
deleted file mode 100644
index 27c01d0..0000000
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClstempattrService.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package com.vci.ubcs.code.service;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.vci.ubcs.code.entity.CodeClstempattrEntity;
-import com.vci.ubcs.code.vo.CodeClstempattrVO;
-
-import java.util.Collection;
-import java.util.List;
-
-/**
- * 缂栫爜搴撳畾涔�-妯℃澘灞炴�� 鏈嶅姟绫�
- *
- * @author yuxc
- * @since 2023-04-19
- */
-public interface ICodeClstempattrService extends IService<CodeClstempattrEntity> {
-
-	/**
-	 * 鑷畾涔夊垎椤�
-	 *
-	 * @param page
-	 * @param CodeClstempattr
-	 * @return
-	 */
-	IPage<CodeClstempattrVO> selectCodeClstempattrPage(IPage<CodeClstempattrVO> page, CodeClstempattrVO CodeClstempattr);
-
-	/**
-	 * 浣跨敤妯℃澘鐨勪富閿幏鍙栨ā鏉跨殑灞炴��--鎵归噺
-	 * @param templateOidCollection 妯℃澘鐨勪富閿�
-	 * @return 灞炴�х殑淇℃伅
-	 */
-	List<CodeClstempattrVO> listCodeClassifyTemplateAttrByTemplateOids(Collection<String> templateOidCollection);
-
-	/**
-	 * 鎵归噺鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-	 * @param codeClassifyTemplateAttrDOs 鏁版嵁瀵硅薄鍒楄〃
-	 * @return 鏄剧ず瀵硅薄
-	 */
-	List<CodeClstempattrVO> codeClassifyTemplateAttrDO2VOs(Collection<CodeClstempattrEntity>  codeClassifyTemplateAttrDOs);
-
-	/**
-	 * 鏁版嵁瀵硅薄杞崲涓烘樉绀哄璞�
-	 * @param  codeClassifyTemplateAttrDO 鏁版嵁瀵硅薄
-	 * @return 鏄剧ず瀵硅薄
-	 */
-	CodeClstempattrVO codeClassifyTemplateAttrDO2VO(CodeClstempattrEntity codeClassifyTemplateAttrDO);
-
-}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeFixedValueService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeFixedValueService.java
index 8b8a3b9..9dae445 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeFixedValueService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeFixedValueService.java
@@ -17,7 +17,7 @@
  * 鍥哄畾鐮佹鐨勭爜鍊兼湇鍔℃帴鍙�
  *
  * @author ludc
- * @date 2022-01-24
+ * @date 2023-04-24
  */
 public interface ICodeFixedValueService extends IService<CodeFixedValue> {
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseattrService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseAttrService.java
similarity index 84%
rename from Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseattrService.java
rename to Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseAttrService.java
index 167d9b6..6c87bb1 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseattrService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseAttrService.java
@@ -19,7 +19,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.vci.ubcs.code.entity.CodePhaseAttr;
-import com.vci.ubcs.code.vo.CodePhaseattrVO;
+import com.vci.ubcs.code.vo.pagemodel.CodePhaseAttrVO;
 
 /**
  * 缂栫爜搴撳畾涔�-妯℃澘闃舵-灞炴�� 鏈嶅姟绫�
@@ -27,7 +27,7 @@
  * @author yuxc
  * @since 2023-04-20
  */
-public interface ICodePhaseattrService extends IService<CodePhaseAttr> {
+public interface ICodePhaseAttrService extends IService<CodePhaseAttr> {
 
 	/**
 	 * 鑷畾涔夊垎椤�
@@ -36,7 +36,7 @@
 	 * @param CodePhaseattr
 	 * @return
 	 */
-	IPage<CodePhaseattrVO> selectCodePhaseattrPage(IPage<CodePhaseattrVO> page, CodePhaseattrVO CodePhaseattr);
+	IPage<CodePhaseAttrVO> selectCodePhaseattrPage(IPage<CodePhaseAttrVO> page, CodePhaseAttrVO CodePhaseattr);
 
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
index fef2e76..ed02a92 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java
@@ -26,6 +26,7 @@
 import com.vci.ubcs.code.wrapper.CodeBasicSecWrapper;
 import com.vci.ubcs.starter.exception.VciBaseException;
 import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
+import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
 import com.vci.ubcs.starter.web.enumpck.OsCodeFillTypeEnum;
 import com.vci.ubcs.starter.web.pagemodel.KeyValue;
 import com.vci.ubcs.starter.web.pagemodel.UIFormReferVO;
@@ -210,7 +211,6 @@
 		if (! "success".equals(attrKv.getKey())){
 			throw new VciBaseException(attrKv.getValue() + "涓嶈兘涓虹┖");
 		}
-
 		//灏咲TO杞崲涓篋O
 		CodeBasicSec codeBasicSecDO = new CodeBasicSec();
 		BeanUtilForVCI.copyPropertiesIgnoreCase(codeBasicSecDTO, codeBasicSecDO);
@@ -221,15 +221,7 @@
 		codeBasicSecDO.setValueCutTypeText(CodeCutTypeEnum.getValueByText(codeBasicSecDTO.getValueCutType()));
 		codeBasicSecDO.setCodeGetValueTypeText(CodeGetValueTypeEnum.getValueByText(codeBasicSecDTO.getCodeGetValueType()));
 		//濉厖涓�浜涢粯璁ゅ��
-		codeBasicSecDO.setOid(VciBaseUtil.getPk());
-		codeBasicSecDO.setRevisionOid(VciBaseUtil.getPk());
-		codeBasicSecDO.setNameOid(VciBaseUtil.getPk());
-		codeBasicSecDO.setBtmname(MdmBtmTypeConstant.CODE_BASIC_SEC);
-		codeBasicSecDO.setTs(new Date());
-		codeBasicSecDO.setCreateTime(new Date());
-		codeBasicSecDO.setCreator(AuthUtil.getUserId().toString());
-		codeBasicSecDO.setLastModifier(AuthUtil.getUserId().toString());
-		codeBasicSecDO.setLastModifyTime(new Date());
+		DefaultAttrAssimtUtil.addDefaultAttrAssimt(codeBasicSecDO,MdmBtmTypeConstant.CODE_BASIC_SEC);
 		//鎺掑簭鍙凤紝榛樿绛変簬褰撳墠宸叉湁鐨勬暟閲忓姞1
 		Long total = codeBasicSecMapper.selectCount(Wrappers.<CodeBasicSec>query()
 			.lambda()
@@ -287,6 +279,7 @@
 		}
 		//灏咲TO杞崲涓篋O
 		CodeBasicSec codeBasicSecDO = selectByOid(codeBasicSecDTO.getOid());
+		DefaultAttrAssimtUtil.updateDefaultAttrAssimt(codeBasicSecDO);
 		boolean status = codeRuleService.checkEditDelStatus(codeRuleService.getObjectByOid(codeBasicSecDO.getPkCodeRule()).getLcStatus());
 		boolean resBoolean;
 		if (!status){
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyProcessTempServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyProcessTempServiceImpl.java
index 1a3647e..a0469b6 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyProcessTempServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyProcessTempServiceImpl.java
@@ -83,12 +83,10 @@
 		BeanMap beanMap = BeanMap.create(codeClassifyProcessTemp);
 		beanMap.putAll(conditionMap);
 		IPage<CodeClassifyProcessTemp> doList = codeClassifyProcessTempMapper.selectPage(Condition.getPage(query), Condition.getQueryWrapper(codeClassifyProcessTemp));
-		IPage<CodeClassifyProcessTempVO> voList = new Page<CodeClassifyProcessTempVO>();
+		IPage<CodeClassifyProcessTempVO> voList = new Page<>();
 		//DataGrid<CodeClassifyProcessTempVO> dataGrid=new DataGrid<>();
 		if (!CollectionUtils.isEmpty(doList.getRecords())) {
-			voList.setRecords(CodeClassifyProcessTempWrapper.build().listVO(doList.getRecords()));
-			//鍒嗛〉鍙傛暟杞埌pageVO瀵硅薄
-			voList = PageDO2PageVO.pageDO2PageVO(doList,voList);
+			voList = CodeClassifyProcessTempWrapper.build().pageVO(doList);
 		}
 		return voList;
 	}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
index 157a9c3..61722bd 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyTemplateAttrServiceImpl.java
@@ -65,13 +65,12 @@
 			query.setSize(pageHelper.getLimit());
 		}
 		//pageHelper.addDefaultAsc("ordernum");
-		query.setAscs("ordernum");
+		query.setAscs("ORDERNUM");
 		//杩欏効鏄釜杩炶〃鏌ヨ
 		IPage<CodeClassifyTemplateAttr> doList = codeClassifyTemplateAttrMapper.selectPage(Condition.getPage(query), mpjLambdaWrapper);
 		IPage<CodeClassifyTemplateAttrVO> voList = new Page<>();
 		if (!CollectionUtils.isEmpty(doList.getRecords())) {
-			voList.setRecords(CodeClstempattrWrapper.build().listVO(doList.getRecords()));
-			PageDO2PageVO.pageDO2PageVO(doList,voList);
+			voList = CodeClstempattrWrapper.build().pageVO(doList);
 		}
 		return voList;
 	}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java
index d3f6040..08bbbf8 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java
@@ -4,9 +4,11 @@
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
 import com.vci.ubcs.code.dto.CodeClassifyValueDTO;
+import com.vci.ubcs.code.entity.CodeBasicSec;
 import com.vci.ubcs.code.entity.CodeClassifyValue;
-import com.vci.ubcs.code.enumpack.FrameworkDataLCStatus;
+import com.vci.ubcs.code.enumpack.*;
 import com.vci.ubcs.code.mapper.CodeClassifyValueMapper;
 import com.vci.ubcs.code.service.ICodeBasicSecService;
 import com.vci.ubcs.code.service.ICodeClassifyValueService;
@@ -16,9 +18,11 @@
 import com.vci.ubcs.starter.revision.model.TreeQueryObject;
 import com.vci.ubcs.starter.revision.model.TreeWrapperOptions;
 import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
+import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
 import com.vci.ubcs.starter.web.pagemodel.Tree;
 import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
@@ -30,7 +34,8 @@
 import java.util.stream.Collectors;
 
 import static com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant.LC_STATUS;
-import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
+import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.DATA_CASCADE_LINKED_NOT_DELETE;
+import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.DATA_OID_NOT_EXIST;
 
 @Service
 public class CodeClassifyValueServiceImpl  extends ServiceImpl<CodeClassifyValueMapper, CodeClassifyValue> implements ICodeClassifyValueService {
@@ -48,7 +53,7 @@
 	/**
 	 * 涓婄骇鑺傜偣鐨勫睘鎬у悕绉�
 	 */
-	private static  final String PARENT_FIELD_NAME = "parentClassifyValueOid";
+	private static final String PARENT_FIELD_NAME = "parentClassifyValueOid";
 
 	/**
 	 * 鏌ヨ鍒嗙被鐮佹鐨勭爜鍊� 鏍�
@@ -59,7 +64,7 @@
 	@Override
 	public List<Tree> treeCodeClassifyValue(TreeQueryObject treeQueryObject) throws VciBaseException {
 		// List<CodeClassifyValueDO> doList =selectCodeClassifyValueDOByTree(treeQueryObject);
-		List<CodeClassifyValue> doList =selectCodeClassifyValueDO4Tree(treeQueryObject);
+		List<CodeClassifyValue> doList = selectCodeClassifyValueDO4Tree(treeQueryObject);
 		List<CodeClassifyValueVO> voList = CodeClassifyValueWrapper.build().listVO(doList);
 		TreeWrapperOptions treeWrapperOptions = new TreeWrapperOptions(PARENT_FIELD_NAME);
 		treeWrapperOptions.copyFromTreeQuery(treeQueryObject);
@@ -77,12 +82,13 @@
 	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
 	 */
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public boolean addSave(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException{
 		VciBaseUtil.alertNotNull(codeClassifyValueDTO,"闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
 		//娣诲姞瀵圭爜鍊煎瓙鐖剁骇鐨勫垽鏂�
-		if(StringUtils.isNotBlank(codeClassifyValueDTO.getParentclassifyvalueoid())){
-			String parentclassifyvalueoid = codeClassifyValueDTO.getParentclassifyvalueoid();
-			String codeclassifysecoid = codeClassifyValueDTO.getCodeclassifysecoid();
+		if(StringUtils.isNotBlank(codeClassifyValueDTO.getParentClassifyValueOid())){
+			String parentclassifyvalueoid = codeClassifyValueDTO.getParentClassifyValueOid();
+			String codeclassifysecoid = codeClassifyValueDTO.getCodeClassifySecOid();
 			CodeClassifyValue parentDO = codeClassifyValueMapper.selectById(parentclassifyvalueoid);
 			if (parentDO.getCodeClassifySecOid().equalsIgnoreCase(codeclassifysecoid)){
 				throw new VciBaseException("涓嶅厑璁稿湪鐖剁爜鍊间腑鐩存帴娣诲姞瀛愮爜鍊�");
@@ -91,6 +97,8 @@
 		//灏咲TO杞崲涓篋O
 		CodeClassifyValue codeClassifyValueDO = new CodeClassifyValue();
 		BeanUtilForVCI.copyPropertiesIgnoreCase(codeClassifyValueDTO,codeClassifyValueDO);
+		//濉厖涓�浜涢粯璁ゅ��
+		DefaultAttrAssimtUtil.addDefaultAttrAssimt(codeClassifyValueDO,MdmBtmTypeConstant.CODE_CLASSIFY_VALUE);
 		//鏌ヨ
 		List<CodeClassifyValue> existList = codeClassifyValueMapper.selectList(Wrappers.<CodeClassifyValue>query()
 			.lambda().eq(CodeClassifyValue::getCodeClassifySecOid, codeClassifyValueDO.getCodeClassifySecOid())
@@ -108,11 +116,14 @@
 	 * @throws VciBaseException 鍙傛暟涓虹┖锛屽敮涓�椤癸紝蹇呰緭椤逛笉閫氳繃鏃朵細鎶涘嚭寮傚父
 	 */
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public boolean editSave(CodeClassifyValueDTO codeClassifyValueDTO) throws VciBaseException{
 		VciBaseUtil.alertNotNull(codeClassifyValueDTO,"鏁版嵁瀵硅薄",codeClassifyValueDTO.getOid(),"鍒嗙被鐮佹鐨勭爜鍊间富閿�");
 		//灏咲TO杞崲涓篋O
 		CodeClassifyValue codeClassifyValueDO = selectByOid(codeClassifyValueDTO.getOid());
 		revisionModelUtil.copyFromDTOIgnore(codeClassifyValueDTO,codeClassifyValueDO);
+		//濉厖涓�浜涢粯璁ゅ��
+		DefaultAttrAssimtUtil.updateDefaultAttrAssimt(codeClassifyValueDO);
 		boolean resBoolean = codeClassifyValueMapper.updateById(codeClassifyValueDO) > 0;
 		return resBoolean;
 	}
@@ -137,9 +148,7 @@
 	 * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
 	 */
 	private R checkIsCanDeleteForDO(CodeClassifyValueDTO codeClassifyValueDTO, CodeClassifyValue codeClassifyValueDO) {
-		if (!checkTs(codeClassifyValueDTO,codeClassifyValueDO)) {
-			return R.fail(TS_NOT_PROCESS);
-		}
+		//boService.checkTs(codeClassifyValueDTO);
 		//鏍¢獙涓嬬骇鏄惁鏈夊紩鐢�
 		if(checkChildIsLinked(codeClassifyValueDO.getOid())){
 			return R.fail(DATA_CASCADE_LINKED_NOT_DELETE);
@@ -204,7 +213,7 @@
 		VciBaseUtil.alertNotNull(codeClassifyValueDTO,"鍒嗙被鐮佹鐨勭爜鍊兼暟鎹璞�",codeClassifyValueDTO.getOid(),"鍒嗙被鐮佹鐨勭爜鍊肩殑涓婚敭");
 		CodeClassifyValue codeClassifyValueDO = selectByOid(codeClassifyValueDTO.getOid());
 		R baseResult = checkIsCanDeleteForDO(codeClassifyValueDTO,codeClassifyValueDO);
-		if(baseResult.isSuccess()) {
+		if(!baseResult.isSuccess()) {
 			//鎵句笅绾х殑锛岃繖涓槸鍙互鍒犻櫎鐨勬椂鍊橰
 			List<String> childrenOids = codeClassifyValueMapper.selectAllLevelChildOid(codeClassifyValueDO.getOid().trim());
 			if (!CollectionUtils.isEmpty(childrenOids)) {
@@ -281,12 +290,12 @@
 
 		List<CodeClassifyValue> updateList = new ArrayList<>();
 		dtoList.forEach(dto -> {
-			if( StringUtils.isNotBlank( dto.getOid() )){
+			if(StringUtils.isNotBlank(dto.getOid())){
 				List<CodeClassifyValue> collect = valueDOList.stream().filter(value -> {
 					return dto.getOid().equals(value.getOid());
 				}).collect(Collectors.toList());
 				collect.forEach(ccv -> {
-					ccv.setOrderNum(dto.getOrdernum());
+					ccv.setOrderNum(dto.getOrderNum());
 					ccv.setId(dto.getId());
 					ccv.setName(dto.getName());
 					updateList.add(ccv);
@@ -336,22 +345,8 @@
 		List<String> oids = codeBasicSecService.getOidByCodeclassifysecOid(conditionMap.get("codeclassifysecoid"));
 		LambdaQueryWrapper<CodeClassifyValue> wrapper = Wrappers.<CodeClassifyValue>query()
 			.lambda().in(CodeClassifyValue::getCodeClassifySecOid,oids)
-			.orderByDesc(CodeClassifyValue::getOrderNum);
+			.orderByAsc(CodeClassifyValue::getOrderNum);
 		return codeClassifyValueMapper.selectList(wrapper);
-	}
-
-	/**
-	 * 妫�鏌s
-	 * @param tempDO
-	 * @return
-	 */
-	private boolean checkTs(CodeClassifyValueDTO tempDO,CodeClassifyValue codeClassifyValueDO){
-		Date dbTs = codeClassifyValueDO.getTs();
-		Date currentTs = tempDO.getTs();
-		if(currentTs == null ?  dbTs == null:currentTs.compareTo(dbTs)==0){
-			return true;
-		}
-		return false;
 	}
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstemplateServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstemplateServiceImpl.java
index a43b9e8..dfba31d 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstemplateServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClstemplateServiceImpl.java
@@ -94,7 +94,7 @@
 	@Autowired(required = false)
 	private CodeClassifyTemplateButtonMapper codeTempbuttonMapper;
 	@Autowired(required = false)
-	private CodePhaseattrMapper codePhaseattrMapper;
+	private CodePhaseAttrMapper codePhaseattrMapper;
 	@Autowired(required = false)
 	private CodeClassifyMapper codeClassifyMapper;
 	@Autowired(required = false)
@@ -102,7 +102,7 @@
 	@Autowired(required = false)
 	private CodeClstemplateMapper codeClstemplateMapper;
 	@Autowired(required = false)
-	private CodePhaseattrServiceImpl codePhaseattrServiceImpl;
+	private CodePhaseAttrServiceImpl codePhaseattrServiceImpl;
 
 	@Override
 	public IPage<CodeClstemplateVO> selectPlCodeClstemplatePage(IPage<CodeClstemplateVO> page, CodeClstemplateVO plCodeClstemplate) {
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java
index e9e329e..0edf541 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java
@@ -1,13 +1,11 @@
 package com.vci.ubcs.code.service.impl;
 
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
 import com.vci.ubcs.code.dto.CodeFixedValueDTO;
-import com.vci.ubcs.code.entity.CodeClassifyProcessTemp;
 import com.vci.ubcs.code.entity.CodeFixedValue;
 import com.vci.ubcs.code.mapper.CodeFixedValueMapper;
 import com.vci.ubcs.code.service.ICodeFixedValueService;
@@ -15,6 +13,7 @@
 import com.vci.ubcs.code.wrapper.CodeFixedValueWrapper;
 import com.vci.ubcs.starter.exception.VciBaseException;
 import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
+import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
 import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import org.slf4j.Logger;
@@ -33,7 +32,8 @@
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.*;
+import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.DATA_LINKED_NOT_DELETE;
+import static com.vci.ubcs.code.constant.FrameWorkLangCodeConstant.DATA_OID_NOT_EXIST;
 
 /**
  * 鍥哄畾鐮佹鐨勭爜鍊兼湇鍔�
@@ -85,15 +85,7 @@
 		CodeFixedValue codeFixedValueDO = new CodeFixedValue();
 		BeanUtilForVCI.copyPropertiesIgnoreCase(codeFixedValueDTO,codeFixedValueDO);
 		//濉厖涓�浜涢粯璁ゅ��
-		codeFixedValueDO.setOid(VciBaseUtil.getPk());
-		codeFixedValueDO.setRevisionOid(VciBaseUtil.getPk());
-		codeFixedValueDO.setNameOid(VciBaseUtil.getPk());
-		codeFixedValueDO.setBtmname(MdmBtmTypeConstant.CODE_FIXED_VALUE);
-		codeFixedValueDO.setCreateTime(new Date());
-		codeFixedValueDO.setCreator(AuthUtil.getUserId().toString());
-		codeFixedValueDO.setLastModifier(AuthUtil.getUserId().toString());
-		codeFixedValueDO.setLastModifyTime(new Date());
-		codeFixedValueDO.setTs(new Date());
+		DefaultAttrAssimtUtil.addDefaultAttrAssimt(codeFixedValueDO,MdmBtmTypeConstant.CODE_FIXED_VALUE);
 		Long count = this.codeFixedValueMapper.selectCount(Wrappers.<CodeFixedValue>query()
 			.lambda().eq(CodeFixedValue::getCodeFixedSecOid, codeFixedValueDO.getCodeFixedSecOid())
 		)+1L;
@@ -116,9 +108,7 @@
 		CodeFixedValue codeFixedValueDO = selectByOid(codeFixedValueDTO.getOid());
 		revisionModelUtil.copyFromDTOIgnore(codeFixedValueDTO,codeFixedValueDO);
 		//濉厖涓�浜涢粯璁ゅ��
-		codeFixedValueDO.setLastModifier(AuthUtil.getUserId().toString());
-		codeFixedValueDO.setLastModifyTime(new Date());
-		codeFixedValueDO.setTs(new Date());
+		DefaultAttrAssimtUtil.updateDefaultAttrAssimt(codeFixedValueDO);
 		boolean resBoolean = codeFixedValueMapper.updateById(codeFixedValueDO) > 0;
 		return resBoolean;
 	}
@@ -130,28 +120,12 @@
 	 * @return success涓簍rue涓哄彲浠ュ垹闄わ紝false琛ㄧず鏈夋暟鎹紩鐢紝obj涓簍rue琛ㄧず鏈変笅绾�
 	 */
 	private R checkIsCanDeleteForDO(CodeFixedValueDTO codeFixedValueDTO, CodeFixedValue codeFixedValueDO) {
-		if(!checkTs(codeFixedValueDTO,codeFixedValueDO)) {
-			return R.fail(TS_NOT_PROCESS);
-		}
+		//boService.checkTs(codeFixedValueDTO);
 		if(!checkIsLinked(codeFixedValueDO.getOid())) {
 			return R.status(true);
 		}else{
 			return R.fail(DATA_LINKED_NOT_DELETE);
 		}
-	}
-
-	/**
-	 * 妫�鏌s
-	 * @param tempDO
-	 * @return
-	 */
-	private boolean checkTs(CodeFixedValueDTO tempDO,CodeFixedValue codeFixedValueDO){
-		Date dbTs = codeFixedValueDO.getTs();
-		Date currentTs = tempDO.getTs();
-		if(currentTs == null ?  dbTs == null:currentTs.compareTo(dbTs)==0){
-			return true;
-		}
-		return false;
 	}
 
 	/**
@@ -340,6 +314,5 @@
 		boolean resBoolean = codeFixedValueMapper.deleteBatchIds(doList.stream().map(CodeFixedValue::getOid).collect(Collectors.toList())) > 0;
 		return resBoolean;
 	}
-
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseattrServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseAttrServiceImpl.java
similarity index 75%
rename from Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseattrServiceImpl.java
rename to Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseAttrServiceImpl.java
index 8ecb853..5fc292e 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseattrServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodePhaseAttrServiceImpl.java
@@ -19,9 +19,9 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.vci.ubcs.code.entity.CodePhaseAttr;
-import com.vci.ubcs.code.mapper.CodePhaseattrMapper;
-import com.vci.ubcs.code.service.ICodePhaseattrService;
-import com.vci.ubcs.code.vo.CodePhaseattrVO;
+import com.vci.ubcs.code.mapper.CodePhaseAttrMapper;
+import com.vci.ubcs.code.service.ICodePhaseAttrService;
+import com.vci.ubcs.code.vo.pagemodel.CodePhaseAttrVO;
 import org.springframework.stereotype.Service;
 
 /**
@@ -31,11 +31,11 @@
  * @since 2023-04-20
  */
 @Service
-public class CodePhaseattrServiceImpl extends ServiceImpl<CodePhaseattrMapper, CodePhaseAttr> implements ICodePhaseattrService {
+public class CodePhaseAttrServiceImpl extends ServiceImpl<CodePhaseAttrMapper, CodePhaseAttr> implements ICodePhaseAttrService {
 
 	@Override
-	public IPage<CodePhaseattrVO> selectCodePhaseattrPage(IPage<CodePhaseattrVO> page, CodePhaseattrVO CodePhaseattr) {
-		return page.setRecords(baseMapper.selectCodePhaseattrPage(page, CodePhaseattr));
+	public IPage<CodePhaseAttrVO> selectCodePhaseattrPage(IPage<CodePhaseAttrVO> page, CodePhaseAttrVO codePhaseAttr) {
+		return page.setRecords(baseMapper.selectCodePhaseattrPage(page, codePhaseAttr));
 	}
 
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java
index 31d235c..a990d5f 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java
@@ -21,6 +21,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
 import com.vci.ubcs.code.dto.CodeBasicSecDTO;
 import com.vci.ubcs.code.dto.CodeRuleDTO;
 import com.vci.ubcs.code.entity.*;
@@ -38,6 +39,7 @@
 import com.vci.ubcs.code.wrapper.CodeRuleWrapper;
 import com.vci.ubcs.starter.exception.VciBaseException;
 import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
+import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
 import com.vci.ubcs.starter.web.pagemodel.KeyValue;
 import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
@@ -118,26 +120,9 @@
 		//灏咲TO杞崲涓篋O
 		CodeRule codeRule = Objects.requireNonNull(BeanUtil.copy(codeRuleDTO, CodeRule.class));
 		String userId = AuthUtil.getUserId().toString();
-		codeRule.setOid(VciBaseUtil.getPk());
-
-		codeRule.setRevisionOid(VciBaseUtil.getPk());
-		codeRule.setNameOid(VciBaseUtil.getPk());
-		codeRule.setBtmname("coderule");
-		codeRule.setLastR("1");
-		codeRule.setLastV("1");
-		codeRule.setFirstR("1");
-		codeRule.setFirstV("1");
-		codeRule.setCreator(userId);
-		codeRule.setCreateTime(new Date());
-		codeRule.setLastModifier("1");
-		codeRule.setLastModifyTime(new Date());
-		codeRule.setVersionRule("0");
-		codeRule.setVersionSeq(1);
+		DefaultAttrAssimtUtil.addDefaultAttrAssimt(codeRule, MdmBtmTypeConstant.CODE_RULE);
 		codeRule.setLctid(CODE_RULE_LC);
 		codeRule.setLcStatus(FRAMEWORK_RELEASE_EDITING);
-		codeRule.setOwner("1");
-		codeRule.setCreator(userId);
-		codeRule.setLastModifier(userId);
 		return codeRuleMapper.insert(codeRule)>0;
 	}
 
@@ -171,6 +156,7 @@
 		//灏咲TO杞崲涓篋O
 		CodeRule codeRule = selectByOid(codeRuleDTO.getOid());
 		revisionModelUtil.copyFromDTOIgnore(codeRuleDTO, codeRule);
+		DefaultAttrAssimtUtil.updateDefaultAttrAssimt(codeRule);
 		return codeRuleMapper.updateById(codeRule)>0;
 	}
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempbuttonServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempbuttonServiceImpl.java
index 034e69e..afe45ba 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempbuttonServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempbuttonServiceImpl.java
@@ -114,8 +114,7 @@
 		IPage<CodeClassifyTemplateButton> doList = codeClassifyTemplateButtonMapper.selectPage(Condition.getPage(query),getMPJLambdaWrapper(conditionMap));
 		IPage<CodeClassifyTemplateButtonVO> voList = new Page<>();
 		if (!CollectionUtils.isEmpty(doList.getRecords())) {
-			voList.setRecords(codeClassifyTemplateButtonDO2VOs(doList.getRecords()));
-			voList = PageDO2PageVO.pageDO2PageVO(doList,voList);
+			voList = CodeTempbuttonWrapper.build().pageVO(doList);
 		}
 		return voList;
 	}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempphaseServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempphaseServiceImpl.java
index b1f55fe..c5cd59e 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempphaseServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeTempphaseServiceImpl.java
@@ -17,11 +17,8 @@
 package com.vci.ubcs.code.service.impl;
 
 import com.alibaba.cloud.commons.lang.StringUtils;
-import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -30,11 +27,11 @@
 import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
 import com.vci.ubcs.code.dto.CodeTemplatePhaseDTO;
 import com.vci.ubcs.code.entity.*;
-import com.vci.ubcs.code.mapper.CodePhaseattrMapper;
+import com.vci.ubcs.code.mapper.CodePhaseAttrMapper;
 import com.vci.ubcs.code.mapper.CodeTemplatePhaseMapper;
 import com.vci.ubcs.code.mapper.CommonsMapper;
 import com.vci.ubcs.code.service.ICodeClassifyTemplateAttrService;
-import com.vci.ubcs.code.service.ICodePhaseattrService;
+import com.vci.ubcs.code.service.ICodePhaseAttrService;
 import com.vci.ubcs.code.vo.pagemodel.CodeClassifyTemplateAttrVO;
 import com.vci.ubcs.code.vo.pagemodel.CodeTemplatePhaseVO;
 import com.vci.ubcs.code.wrapper.CodeTemplatePhaseWapper;
@@ -43,8 +40,6 @@
 import com.vci.ubcs.starter.revision.service.RevisionModelUtil;
 import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
 import com.vci.ubcs.starter.util.MybatisParameterUtil;
-import com.vci.ubcs.starter.web.constant.QueryOptionConstant;
-import com.vci.ubcs.starter.web.pagemodel.DataGrid;
 import com.vci.ubcs.starter.web.pagemodel.PageHelper;
 import com.vci.ubcs.starter.web.util.BeanUtil;
 import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
@@ -73,7 +68,7 @@
 public class CodeTempphaseServiceImpl extends ServiceImpl<CodeTemplatePhaseMapper, CodeTemplatePhase> implements ICodeTempphaseService {
 
 	@Autowired(required = false)
-	private CodePhaseattrMapper codePhaseAttrMapper;
+	private CodePhaseAttrMapper codePhaseAttrMapper;
 
 	@Autowired(required = false)
 	private CodeTemplatePhaseMapper codeTemplatePhaseMapper;
@@ -82,7 +77,7 @@
 	private CommonsMapper commonsMapper;
 
 	@Autowired(required = false)
-	private ICodePhaseattrService codePhaseattrService;
+	private ICodePhaseAttrService codePhaseattrService;
 
 	/**
 	 * 瀵硅薄鐨勬搷浣�
@@ -112,16 +107,14 @@
 			query.setSize(pageHelper.getLimit());
 			query.setCurrent(pageHelper.getPage());
 		}
-		query.setDescs("createTime");
+		query.setDescs("CREATETIME");
 		CodeTemplatePhase codeTemplatePhase = new CodeTemplatePhase();
 		BeanMap beanMap = BeanMap.create(codeTemplatePhase);
 		beanMap.putAll(conditionMap);
 		IPage<CodeTemplatePhase> doList = codeTemplatePhaseMapper.selectPage(Condition.getPage(query), Condition.getQueryWrapper(codeTemplatePhase));
 		IPage<CodeTemplatePhaseVO> voList = new Page<>();
 		if (!CollectionUtils.isEmpty(doList.getRecords())) {
-			voList.setRecords(CodeTemplatePhaseWapper.build().listVO(doList.getRecords()));
-			//鍒嗛〉鍙傛暟杞埌pageVO瀵硅薄
-			voList = PageDO2PageVO.pageDO2PageVO(doList,voList);
+			CodeTemplatePhaseWapper.build().pageVO(doList);
 		}
 		return voList;
 	}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodePhaseattrWrapper.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodePhaseAttrWrapper.java
similarity index 78%
rename from Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodePhaseattrWrapper.java
rename to Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodePhaseAttrWrapper.java
index 69343f4..c361709 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodePhaseattrWrapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/wrapper/CodePhaseAttrWrapper.java
@@ -17,9 +17,9 @@
 package com.vci.ubcs.code.wrapper;
 
 import com.vci.ubcs.code.entity.CodePhaseAttr;
+import com.vci.ubcs.code.vo.pagemodel.CodePhaseAttrVO;
 import org.springblade.core.mp.support.BaseEntityWrapper;
 import org.springblade.core.tool.utils.BeanUtil;
-import com.vci.ubcs.code.vo.CodePhaseattrVO;
 import java.util.Objects;
 
 /**
@@ -28,15 +28,15 @@
  * @author yuxc
  * @since 2023-04-20
  */
-public class CodePhaseattrWrapper extends BaseEntityWrapper<CodePhaseAttr, CodePhaseattrVO>  {
+public class CodePhaseAttrWrapper extends BaseEntityWrapper<CodePhaseAttr, CodePhaseAttrVO>  {
 
-	public static CodePhaseattrWrapper build() {
-		return new CodePhaseattrWrapper();
+	public static CodePhaseAttrWrapper build() {
+		return new CodePhaseAttrWrapper();
  	}
 
 	@Override
-	public CodePhaseattrVO entityVO(CodePhaseAttr codePhaseattr) {
-		CodePhaseattrVO CodePhaseattrVO = Objects.requireNonNull(BeanUtil.copy(codePhaseattr, CodePhaseattrVO.class));
+	public CodePhaseAttrVO entityVO(CodePhaseAttr codePhaseattr) {
+		CodePhaseAttrVO CodePhaseattrVO = Objects.requireNonNull(BeanUtil.copy(codePhaseattr, CodePhaseAttrVO.class));
 
 		//User createUser = UserCache.getUser(CodePhaseattr.getCreateUser());
 		//User updateUser = UserCache.getUser(CodePhaseattr.getUpdateUser());
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeBasicSecMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeBasicSecMapper.xml
index 6955fe4..e375966 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeBasicSecMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodeBasicSecMapper.xml
@@ -148,7 +148,6 @@
                 and PL_CODE_BASICSEC.TS = #{codeBasicSec.ts}
             </if>
             <if test="codeBasicSec.id != null and codeBasicSec.id != ''">
-
                 and PL_CODE_BASICSEC.ID like CONCAT(CONCAT('%', #{codeBasicSec.id}), '%')
             </if>
             <if test="codeBasicSec.name != null and codeBasicSec.name != ''">
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseAttrMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseAttrMapper.xml
index b9945a7..b23f6e2 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseAttrMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseAttrMapper.xml
@@ -31,7 +31,7 @@
         <result column="OWNER" property="owner"/>
         <result column="COPYFROMVERSION" property="copyFromVersion"/>
         <result column="CODEPHASEOID" property="codePhaseOid"/>
-        <result column="ATTRIBUTEGROUP" property="attributegroup"/>
+        <result column="ATTRIBUTEGROUP" property="attributeGroup"/>
     </resultMap>
 
     <select id="selectCodePhaseattrPage" resultMap="CodePhaseattrResultMap">
@@ -45,36 +45,32 @@
                description,
                oid,
                versionseq,
-               checkinby,
                revisionrule,
                lctid,
                id,
                owner,
-               checkoutby,
                creator,
                createtime,
-               isfirstv,
+               firstv,
                attributegroup,
                revisionoid,
                btmname,
-               checkouttime,
                revisionvalue,
                versionrule,
                name,
-               islastr,
+               lastr,
                lastmodifytime,
                copyfromversion,
                nameoid,
                lcstatus,
-               islastv,
-               checkintime,
+               lastv,
                codephaseoid,
-               isfirstr
+               firstr
         from PL_CODE_PHASEATTR
         where codephaseoid in
-              (select oid
-               from PL_CODE_TEMPPHASE
-               where codeClassifyTemplateOid = #{oid})
+          (select oid
+           from PL_CODE_TEMPPHASE
+           where codeClassifyTemplateOid = #{oid})
     </select>
 
     <select id="selectByPhaseaIds" resultMap="CodePhaseattrResultMap">
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseattrMapper.xml b/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseattrMapper.xml
deleted file mode 100644
index 663ee81..0000000
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/resources/mapper/CodePhaseattrMapper.xml
+++ /dev/null
@@ -1,152 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.vci.ubcs.code.mapper.CodePhaseattrMapper">
-
-    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
-    <resultMap id="CodePhaseattrResultMap" type="com.vci.ubcs.code.entity.CodePhaseAttr">
-        <result column="OID" property="oid"/>
-        <result column="REVISIONOID" property="revisionOid"/>
-        <result column="NAMEOID" property="nameOid"/>
-        <result column="BTMNAME" property="btmname"/>
-        <result column="LASTR" property="lastR"/>
-        <result column="FIRSTR" property="firstR"/>
-        <result column="LASTV" property="lastV"/>
-        <result column="FIRSTV" property="firstV"/>
-        <result column="CREATOR" property="creator"/>
-        <result column="CREATETIME" property="createTime"/>
-        <result column="LASTMODIFIER" property="lastModifier"/>
-        <result column="LASTMODIFYTIME" property="lastModifyTime"/>
-        <result column="REVISIONRULE" property="revisionRule"/>
-        <result column="VERSIONRULE" property="versionRule"/>
-        <result column="REVISIONSEQ" property="revisionSeq"/>
-        <result column="REVISIONVALUE" property="revisionValue"/>
-        <result column="VERSIONSEQ" property="versionSeq"/>
-        <result column="VERSIONVALUE" property="versionValue"/>
-        <result column="LCTID" property="lctid"/>
-        <result column="LCSTATUS" property="lcStatus"/>
-        <result column="TS" property="ts"/>
-        <result column="ID" property="id"/>
-        <result column="NAME" property="name"/>
-        <result column="DESCRIPTION" property="description"/>
-        <result column="OWNER" property="owner"/>
-        <result column="COPYFROMVERSION" property="copyFromVersion"/>
-        <result column="CODEPHASEOID" property="codePhaseOid"/>
-        <result column="ATTRIBUTEGROUP" property="attributeGroup"/>
-    </resultMap>
-
-    <select id="selectCodePhaseattrPage" resultMap="CodePhaseattrResultMap">
-        select * from PL_CODE_PHASEATTR where is_deleted = 0
-    </select>
-
-    <select id="selectByPhasea" resultMap="CodePhaseattrResultMap">
-        select lastmodifier,
-               revisionseq,
-               versionvalue,
-               description,
-               oid,
-               versionseq,
-               revisionrule,
-               lctid,
-               id,
-               owner,
-               creator,
-               createtime,
-               firstv,
-               attributegroup,
-               revisionoid,
-               btmname,
-               revisionvalue,
-               versionrule,
-               name,
-               lastr,
-               lastmodifytime,
-               copyfromversion,
-               nameoid,
-               lcstatus,
-               lastv,
-               codephaseoid,
-               firstr
-        from PL_CODE_PHASEATTR
-        where codephaseoid in
-          (select oid
-           from PL_CODE_TEMPPHASE
-           where codeClassifyTemplateOid = #{oid})
-    </select>
-
-    <select id="selectByPhaseaIds" resultMap="CodePhaseattrResultMap">
-        select lastmodifier,
-               revisionseq,
-               versionvalue,
-               description,
-               oid,
-               versionseq,
-               checkinby,
-               revisionrule,
-               lctid,
-               id,
-               owner,
-               checkoutby,
-               creator,
-               createtime,
-               isfirstv,
-               attributegroup,
-               revisionoid,
-               btmname,
-               checkouttime,
-               revisionvalue,
-               versionrule,
-               name,
-               islastr,
-               lastmodifytime,
-               copyfromversion,
-               nameoid,
-               lcstatus,
-               islastv,
-               checkintime,
-               codephaseoid,
-               isfirstr
-        from PL_CODE_PHASEATTR
-        where codephaseoid in
-              (#{oids})
-    </select>
-
-    <select id="listLinkAttrDOByTemplateAttrDOS" resultMap="CodePhaseattrResultMap">
-
-        SELECT lastmodifier,
-               revisionseq,
-               versionvalue,
-               description,
-               oid,
-               versionseq, /*checkinby,*/
-               revisionrule,
-               lctid,
-               id,
-               owner, /*checkoutby, */
-               creator,
-               createtime, /*is*/
-               firstv,
-               attributegroup,
-               revisionoid,
-               btmname, /*checkouttime,*/
-               revisionvalue,
-               versionrule,
-               name, /*is*/
-               lastr,
-               lastmodifytime,
-               copyfromversion,
-               nameoid,
-               lcstatus, /*is*/
-               lastv, /*checkintime,*/
-               codephaseoid,
-            /*is*/
-               firstr,
-               ts
-        FROM PL_CODE_PHASEATTR
-            where ID IN (#{id})
-          AND codephaseoid in
-              (select oid
-               from PL_CODE_TEMPPHASE
-               where codeClassifyTemplateOid =#{codeClassifyTemplateOid})
-    </select>
-
-</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/DictController.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/DictController.java
deleted file mode 100644
index 7b65fa2..0000000
--- a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/DictController.java
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
- *
- *  Redistribution and use in source and binary forms, with or without
- *  modification, are permitted provided that the following conditions are met:
- *
- *  Redistributions of source code must retain the above copyright notice,
- *  this list of conditions and the following disclaimer.
- *  Redistributions in binary form must reproduce the above copyright
- *  notice, this list of conditions and the following disclaimer in the
- *  documentation and/or other materials provided with the distribution.
- *  Neither the name of the dreamlu.net developer nor the names of its
- *  contributors may be used to endorse or promote products derived from
- *  this software without specific prior written permission.
- *  Author: Chill 搴勯獮 (smallchill@163.com)
- */
-package com.vci.ubcs.omd.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
-import com.vci.ubcs.common.constant.CommonConstant;
-import com.vci.ubcs.omd.entity.Dict;
-import com.vci.ubcs.omd.service.IDictService;
-import com.vci.ubcs.omd.vo.DictVO;
-import com.vci.ubcs.omd.wrapper.DictWrapper;
-import io.swagger.annotations.*;
-import lombok.AllArgsConstructor;
-import org.springblade.core.boot.ctrl.BladeController;
-import org.springblade.core.cache.utils.CacheUtil;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
-import org.springblade.core.tenant.annotation.NonDS;
-import org.springblade.core.tool.api.R;
-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.List;
-import java.util.Map;
-
-import static org.springblade.core.cache.constant.CacheConstant.DICT_CACHE;
-
-/**
- * 鎺у埗鍣�
- *
- * @author Chill
- */
-@NonDS
-@RestController
-@AllArgsConstructor
-@RequestMapping("/dict")
-@Api(value = "鏋氫妇瀹氫箟", tags = "鏋氫妇瀹氫箟")
-public class DictController extends BladeController {
-
-	private final IDictService dictService;
-
-	/**
-	 * 璇︽儏
-	 */
-	@GetMapping("/detail")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "璇︽儏", notes = "浼犲叆dict")
-	public R<DictVO> detail(Dict dict) {
-		Dict detail = dictService.getOne(Condition.getQueryWrapper(dict));
-		return R.data(DictWrapper.build().entityVO(detail));
-	}
-
-	/**
-	 * 鍒楄〃
-	 */
-	@GetMapping("/list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "code", value = "鏋氫妇缂栧彿", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "dictValue", value = "鏋氫妇鍚嶇О", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dict")
-	public R<List<DictVO>> list(@ApiIgnore @RequestParam Map<String, Object> dict) {
-		List<Dict> list = dictService.list(Condition.getQueryWrapper(dict, Dict.class).lambda().orderByAsc(Dict::getSort));
-		return R.data(DictWrapper.build().listNodeVO(list));
-	}
-
-	/**
-	 * 椤剁骇鍒楄〃
-	 */
-	@GetMapping("/parent-list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "code", value = "鏋氫妇缂栧彿", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "dictValue", value = "鏋氫妇鍚嶇О", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dict")
-	public R<IPage<DictVO>> parentList(@ApiIgnore @RequestParam Map<String, Object> dict, Query query) {
-		return R.data(dictService.parentList(dict, query));
-	}
-
-	/**
-	 * 瀛愬垪琛�
-	 */
-	@GetMapping("/child-list")
-	@ApiImplicitParams({
-		@ApiImplicitParam(name = "code", value = "瀛楀吀缂栧彿", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "dictValue", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string"),
-		@ApiImplicitParam(name = "parentId", value = "瀛楀吀鍚嶇О", paramType = "query", dataType = "string")
-	})
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "鍒楄〃", notes = "浼犲叆dict")
-	public R<List<DictVO>> childList(@ApiIgnore @RequestParam Map<String, Object> dict, @RequestParam(required = false, defaultValue = "-1") Long parentId) {
-		return R.data(dictService.childList(dict, parentId));
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鏍戝舰缁撴瀯
-	 */
-	@GetMapping("/tree")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
-	public R<List<DictVO>> tree() {
-		List<DictVO> tree = dictService.tree();
-		return R.data(tree);
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鏍戝舰缁撴瀯
-	 */
-	@GetMapping("/parent-tree")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
-	public R<List<DictVO>> parentTree() {
-		List<DictVO> tree = dictService.parentTree();
-		return R.data(tree);
-	}
-
-	/**
-	 * 鏂板鎴栦慨鏀�
-	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆dict")
-	public R submit(@Valid @RequestBody Dict dict) {
-		CacheUtil.clear(DICT_CACHE);
-		return R.status(dictService.submit(dict));
-	}
-
-
-	/**
-	 * 鍒犻櫎
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 7)
-	@ApiOperation(value = "鍒犻櫎", notes = "浼犲叆ids")
-	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
-		CacheUtil.clear(DICT_CACHE);
-		return R.status(dictService.removeDict(ids));
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀
-	 */
-	@GetMapping("/dictionary")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "鑾峰彇瀛楀吀", notes = "鑾峰彇瀛楀吀")
-	public R<List<Dict>> dictionary(String code) {
-		List<Dict> tree = dictService.getList(code);
-		return R.data(tree);
-	}
-
-	/**
-	 * 鑾峰彇瀛楀吀鏍�
-	 */
-	@GetMapping("/dictionary-tree")
-	@ApiOperationSupport(order = 9)
-	@ApiOperation(value = "鑾峰彇瀛楀吀鏍�", notes = "鑾峰彇瀛楀吀鏍�")
-	public R<List<DictVO>> dictionaryTree(String code) {
-		List<Dict> tree = dictService.getList(code);
-		return R.data(DictWrapper.build().listNodeVO(tree));
-	}
-
-	/**
-	 * 妫�鏌ュ瓧鍏告槸鍚﹀瓨鍦紝瀛樺湪鍗宠繑鍥烇紝涓嶅瓨鍦ㄦ柊澧�
-	 */
-	@PostMapping("/check")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆dict")
-	public R checkOrInsert(@Valid @RequestBody Dict dict) {
-		CacheUtil.clear(DICT_CACHE);
-		return dictService.checkOrInsert(dict);
-	}
-
-	/**
-	 * 瀛楀吀閿�煎垪琛�
-	 */
-	@GetMapping("/select")
-	@ApiOperationSupport(order = 10)
-	@ApiOperation(value = "瀛楀吀閿�煎垪琛�", notes = "瀛楀吀閿�煎垪琛�")
-	public R<List<Dict>> select() {
-		List<Dict> list = dictService.list(Wrappers.<Dict>query().lambda().eq(Dict::getParentId, CommonConstant.TOP_PARENT_ID));
-		list.forEach(dict -> dict.setDictValue(dict.getCode() + StringPool.COLON + StringPool.SPACE + dict.getDictValue()));
-		return R.data(list);
-	}
-
-}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/EnumController.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/EnumController.java
new file mode 100644
index 0000000..cba83cd
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/EnumController.java
@@ -0,0 +1,163 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.controller;
+
+import com.vci.ubcs.omd.wrapper.EnumWrapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import lombok.AllArgsConstructor;
+import javax.validation.Valid;
+
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.omd.entity.Enum;
+import com.vci.ubcs.omd.vo.EnumVO;
+import com.vci.ubcs.omd.service.IEnumService;
+import org.springblade.core.boot.ctrl.BladeController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鏋氫妇瀹氫箟 鎺у埗鍣�
+ *
+ * @author yuxc
+ * @since 2023-05-08
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/enum")
+@Api(value = "鏋氫妇瀹氫箟", tags = "鏋氫妇瀹氫箟鎺ュ彛")
+public class EnumController extends BladeController {
+
+	private final IEnumService omdEnumService;
+
+	/**
+	 * 鏋氫妇瀹氫箟 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆omdEnum")
+	public R<EnumVO> detail(Enum omdEnum) {
+		Enum detail = omdEnumService.getOne(Condition.getQueryWrapper(omdEnum));
+		return R.data(EnumWrapper.build().entityVO(detail));
+	}
+	/**
+	 * 鏋氫妇瀹氫箟 鍒嗛〉
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆omdEnum")
+	public R<IPage<EnumVO>> list(Enum omdEnum, Query query) {
+		IPage<Enum> pages = omdEnumService.page(Condition.getPage(query), Condition.getQueryWrapper(omdEnum));
+		return R.data(EnumWrapper.build().pageVO(pages));
+	}
+
+	/**
+	 * 鏋氫妇瀹氫箟 鑷畾涔夊垎椤�
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆omdEnum")
+	public R<IPage<EnumVO>> page(EnumVO omdEnum, Query query) {
+		IPage<EnumVO> pages = omdEnumService.selectOmdEnumPage(Condition.getPage(query), omdEnum);
+		return R.data(pages);
+	}
+
+	/**
+	 * 鏋氫妇瀹氫箟 鏂板
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鏂板", notes = "浼犲叆omdEnum")
+	public R save(@Valid @RequestBody Enum omdEnum) {
+		return R.status(omdEnumService.save(omdEnum));
+	}
+
+	/**
+	 * 鏋氫妇瀹氫箟 淇敼
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "淇敼", notes = "浼犲叆omdEnum")
+	public R update(@Valid @RequestBody Enum omdEnum) {
+		return R.status(omdEnumService.updateById(omdEnum));
+	}
+
+	/**
+	 * 鏋氫妇瀹氫箟 鏂板鎴栦慨鏀�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆omdEnum")
+	public R submit(@Valid @RequestBody Enum omdEnum) {
+		return R.status(omdEnumService.saveOrUpdate(omdEnum));
+	}
+
+	/**
+	 * 鏋氫妇瀹氫箟 鍒犻櫎
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		return R.status(omdEnumService.deleteLogic(Func.toStrList(ids)));
+	}
+
+
+	/**
+	 * 鏋氫妇瀹氫箟 鍒嗛〉
+	 */
+	@GetMapping("/parent-list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆omdEnum")
+	public R<IPage<EnumVO>> parentList(@ApiIgnore @RequestParam Map<String, Object> dict , Query query) {
+		return R.data(omdEnumService.parentList(dict, query));
+	}
+
+
+	/**
+	 * 鑾峰彇瀛楀吀鏍戝舰缁撴瀯
+	 */
+	@GetMapping("/tree")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "鏍戝舰缁撴瀯", notes = "鏍戝舰缁撴瀯")
+	public R<List<EnumVO>> tree(@ApiIgnore @RequestParam Map<String, Object> dict , Query query) {
+		List<EnumVO> tree = omdEnumService.tree(dict, query);
+		return R.data(tree);
+	}
+
+	/**
+	 * 鑾峰彇鏋氫妇
+	 */
+	@GetMapping("/dictionary")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "鑾峰彇鏋氫妇", notes = "鑾峰彇鏋氫妇")
+	public R<List<EnumVO>> dictionary(String code) {
+		List<EnumVO> tree = omdEnumService.getList(code);
+		return R.data(tree);
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/EnumItemController.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/EnumItemController.java
new file mode 100644
index 0000000..ce482c0
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/controller/EnumItemController.java
@@ -0,0 +1,149 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.controller;
+
+import com.vci.ubcs.omd.wrapper.EnumitemWrapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import lombok.AllArgsConstructor;
+import javax.validation.Valid;
+
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springframework.web.bind.annotation.*;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.vci.ubcs.omd.entity.EnumItem;
+import com.vci.ubcs.omd.vo.EnumItemVO;
+import com.vci.ubcs.omd.service.IEnumItemService;
+import org.springblade.core.boot.ctrl.BladeController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鏋氫妇瀹氫箟瀛愯〃 鎺у埗鍣�
+ *
+ * @author yuxc
+ * @since 2023-05-08
+ */
+@RestController
+@AllArgsConstructor
+@RequestMapping("/enumItem")
+@Api(value = "鏋氫妇瀹氫箟瀛愯〃", tags = "鏋氫妇瀹氫箟瀛愯〃鎺ュ彛")
+public class EnumItemController extends BladeController {
+
+	private final IEnumItemService omdEnumitemService;
+
+	/**
+	 * 鏋氫妇瀹氫箟瀛愯〃 璇︽儏
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "璇︽儏", notes = "浼犲叆omdEnumitem")
+	public R<EnumItemVO> detail(EnumItem enumitem) {
+		EnumItem detail = omdEnumitemService.getOne(Condition.getQueryWrapper(enumitem));
+		return R.data(EnumitemWrapper.build().entityVO(detail));
+	}
+	/**
+	 * 鏋氫妇瀹氫箟瀛愯〃 鍒嗛〉
+	 */
+	@GetMapping("/list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆omdEnumitem")
+	public R<IPage<EnumItemVO>> list(EnumItem enumitem, Query query) {
+		IPage<EnumItem> pages = omdEnumitemService.page(Condition.getPage(query), Condition.getQueryWrapper(enumitem).orderByAsc("sort"));
+		return R.data(EnumitemWrapper.build().pageVO(pages));
+	}
+
+	/**
+	 * 鏋氫妇瀹氫箟瀛愯〃 鍒嗛〉
+	 */
+	@GetMapping("/listAll")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆omdEnumitem")
+	public R<List<EnumItemVO>> listAll(@ApiIgnore @RequestParam Map<String, Object> omdEnumitem, Query query) {
+		return R.data(omdEnumitemService.childList(Condition.getQueryWrapper(omdEnumitem, EnumItem.class).orderByAsc("sort")));
+	}
+
+	/**
+	 * 鏋氫妇瀹氫箟瀛愯〃 鑷畾涔夊垎椤�
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "鍒嗛〉", notes = "浼犲叆omdEnumitem")
+	public R<IPage<EnumItemVO>> page(EnumItemVO omdEnumitem, Query query) {
+		IPage<EnumItemVO> pages = omdEnumitemService.selectOmdEnumitemPage(Condition.getPage(query), omdEnumitem);
+		return R.data(pages);
+	}
+
+	/**
+	 * 鏋氫妇瀹氫箟瀛愯〃 鏂板
+	 */
+	@PostMapping("/save")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "鏂板", notes = "浼犲叆omdEnumitem")
+	public R save(@Valid @RequestBody EnumItem enumitem) {
+		return R.status(omdEnumitemService.save(enumitem));
+	}
+
+	/**
+	 * 鏋氫妇瀹氫箟瀛愯〃 淇敼
+	 */
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "淇敼", notes = "浼犲叆omdEnumitem")
+	public R update(@Valid @RequestBody EnumItem enumitem) {
+		return R.status(omdEnumitemService.updateById(enumitem));
+	}
+
+	/**
+	 * 鏋氫妇瀹氫箟瀛愯〃 鏂板鎴栦慨鏀�
+	 */
+	@PostMapping("/submit")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "鏂板鎴栦慨鏀�", notes = "浼犲叆omdEnumitem")
+	public R submit(@Valid @RequestBody EnumItem enumitem) {
+
+		if(enumitem.getOid() == null){
+			enumitem.setCreatetime(new Date());
+			enumitem.setCreator(AuthUtil.getUser().getUserName());
+		}
+		enumitem.setModifier(AuthUtil.getUser().getUserName());
+		enumitem.setModifytime(new Date());
+		enumitem.setTs(new Date());
+		return R.status(omdEnumitemService.saveOrUpdate(enumitem));
+	}
+
+	/**
+	 * 鏋氫妇瀹氫箟瀛愯〃 鍒犻櫎
+	 */
+	@PostMapping("/remove")
+	@ApiOperationSupport(order = 7)
+	@ApiOperation(value = "閫昏緫鍒犻櫎", notes = "浼犲叆ids")
+	public R remove(@ApiParam(value = "涓婚敭闆嗗悎", required = true) @RequestParam String ids) {
+		return R.status(omdEnumitemService.deleteLogic(Func.toStrList(ids)));
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/BtmAttributeClient.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/BtmAttributeClient.java
new file mode 100644
index 0000000..a322f89
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/BtmAttributeClient.java
@@ -0,0 +1,38 @@
+package com.vci.ubcs.omd.feign;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.vci.ubcs.omd.entity.BtmTypeAttribute;
+import com.vci.ubcs.omd.service.IBtmTypeAttributeService;
+import com.vci.ubcs.omd.vo.BtmTypeAttributeVO;
+import com.vci.ubcs.omd.wrapper.BtmTypeAttributeWrapper;
+import lombok.AllArgsConstructor;
+import org.springblade.core.tenant.annotation.NonDS;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.List;
+
+/**
+ * Description: 涓氬姟绫诲瀷鍏宠仈灞炴�ф湇鍔eign瀹炵幇绫�
+ *
+ * @author LiHang
+ * @date 2023/5/10
+ */
+@NonDS
+@ApiIgnore
+@RestController
+@AllArgsConstructor
+public class BtmAttributeClient implements IBtmAttributeClient{
+
+	private final IBtmTypeAttributeService btmTypeAttributeService;
+
+	@GetMapping(LIST_BY_BTM_OID)
+	@Override
+	public R<List<BtmTypeAttributeVO>> listByBtmOid(String oid) {
+		return R.data(BtmTypeAttributeWrapper.build().listEntityVO(
+		btmTypeAttributeService.list(Wrappers.<BtmTypeAttribute>query().lambda().eq(BtmTypeAttribute::getPkBtmType,oid))
+		));
+	}
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/EnumClient.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/EnumClient.java
new file mode 100644
index 0000000..5798a75
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/EnumClient.java
@@ -0,0 +1,91 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.feign;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.vci.ubcs.omd.entity.Enum;
+import com.vci.ubcs.omd.entity.EnumItem;
+import com.vci.ubcs.omd.mapper.EnumMapper;
+import com.vci.ubcs.omd.service.IEnumItemService;
+import com.vci.ubcs.omd.service.IEnumService;
+import com.vci.ubcs.omd.vo.EnumVO;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.BladePage;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.api.R;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import java.util.List;
+
+/**
+ * 鏋氫妇瀹氫箟 Feign瀹炵幇绫�
+ *
+ * @author yuxc
+ * @since 2023-05-08
+ */
+@ApiIgnore()
+@RestController
+@AllArgsConstructor
+public class EnumClient implements IEnumClient {
+	private final EnumMapper enumMapper;
+
+	private IEnumService iEnumService;
+	private IEnumItemService iEnumItemService;
+    @Override
+    @GetMapping(TOP)
+    public BladePage<Enum> top(Integer current, Integer size) {
+        Query query = new Query();
+        query.setCurrent(current);
+        query.setSize(size);
+        IPage<Enum> page = enumMapper.selectPage(Condition.getPage(query),
+			Wrappers.emptyWrapper());
+//			service.page(Condition.getPage(query));
+        return BladePage.of(page);
+    }
+	/**
+	 * 鑾峰彇鏋氫妇瀹氫箟鍒楄〃
+	 *
+	 * @param name   鐖惰妭鐐筺ame
+	 * @param nameChild      瀛愯妭鐐筺ame
+	 * @return BladePage
+	 */
+	@Override
+	public R<String> getValue(String name,String nameChild) {
+		return R.data(iEnumService.getValue(name, nameChild));
+	}
+
+	@Override
+	public R<Enum> getById(String oid) {
+		return R.data(iEnumService.getById(oid));
+	}
+
+	@Override
+	public R<EnumItem> getByChildId(String oid) {
+		return R.data(iEnumItemService.getById(oid));
+	}
+
+	@Override
+	public R<List<EnumVO>> getList(String name) {
+		return R.data(iEnumService.getList(name));
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/EnumItemClient.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/EnumItemClient.java
new file mode 100644
index 0000000..2519e3d
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/feign/EnumItemClient.java
@@ -0,0 +1,55 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.feign;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.vci.ubcs.omd.entity.EnumItem;
+import com.vci.ubcs.omd.mapper.EnumItemMapper;
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.support.BladePage;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+/**
+ * 鏋氫妇瀹氫箟瀛愯〃 Feign瀹炵幇绫�
+ *
+ * @author yuxc
+ * @since 2023-05-08
+ */
+@ApiIgnore()
+@RestController
+@AllArgsConstructor
+public class EnumItemClient implements IEnumItemClient {
+
+	private final EnumItemMapper enumItemMapper;
+    @Override
+    @GetMapping(TOP)
+    public BladePage<EnumItem> top(Integer current, Integer size) {
+        Query query = new Query();
+        query.setCurrent(current);
+        query.setSize(size);
+        IPage<EnumItem> page = enumItemMapper.selectPage(Condition.getPage(query),
+			Wrappers.emptyWrapper());
+//		service.page(Condition.getPage(query));
+        return BladePage.of(page);
+    }
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseattrService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/EnumItemMapper.java
similarity index 67%
copy from Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseattrService.java
copy to Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/EnumItemMapper.java
index 167d9b6..afe70d3 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseattrService.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/EnumItemMapper.java
@@ -14,29 +14,29 @@
  *  this software without specific prior written permission.
  *  Author: Chill 搴勯獮 (smallchill@163.com)
  */
-package com.vci.ubcs.code.service;
+package com.vci.ubcs.omd.mapper;
 
+import com.vci.ubcs.omd.entity.EnumItem;
+import com.vci.ubcs.omd.vo.EnumItemVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.vci.ubcs.code.entity.CodePhaseAttr;
-import com.vci.ubcs.code.vo.CodePhaseattrVO;
+import java.util.List;
 
 /**
- * 缂栫爜搴撳畾涔�-妯℃澘闃舵-灞炴�� 鏈嶅姟绫�
+ * 鏋氫妇瀹氫箟瀛愯〃 Mapper 鎺ュ彛
  *
  * @author yuxc
- * @since 2023-04-20
+ * @since 2023-05-08
  */
-public interface ICodePhaseattrService extends IService<CodePhaseAttr> {
+public interface EnumItemMapper extends BaseMapper<EnumItem> {
 
 	/**
 	 * 鑷畾涔夊垎椤�
 	 *
 	 * @param page
-	 * @param CodePhaseattr
+	 * @param omdEnumitem
 	 * @return
 	 */
-	IPage<CodePhaseattrVO> selectCodePhaseattrPage(IPage<CodePhaseattrVO> page, CodePhaseattrVO CodePhaseattr);
-
+	List<EnumItemVO> selectOmdEnumitemPage(IPage page, EnumItemVO omdEnumitem);
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseattrService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/EnumMapper.java
similarity index 67%
copy from Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseattrService.java
copy to Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/EnumMapper.java
index 167d9b6..315e969 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseattrService.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/mapper/EnumMapper.java
@@ -14,29 +14,33 @@
  *  this software without specific prior written permission.
  *  Author: Chill 搴勯獮 (smallchill@163.com)
  */
-package com.vci.ubcs.code.service;
+package com.vci.ubcs.omd.mapper;
 
+import com.vci.ubcs.omd.entity.Enum;
+import com.vci.ubcs.omd.vo.EnumVO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.vci.ubcs.code.entity.CodePhaseAttr;
-import com.vci.ubcs.code.vo.CodePhaseattrVO;
+import java.util.List;
 
 /**
- * 缂栫爜搴撳畾涔�-妯℃澘闃舵-灞炴�� 鏈嶅姟绫�
+ * 鏋氫妇瀹氫箟 Mapper 鎺ュ彛
  *
  * @author yuxc
- * @since 2023-04-20
+ * @since 2023-05-08
  */
-public interface ICodePhaseattrService extends IService<CodePhaseAttr> {
+public interface EnumMapper extends BaseMapper<Enum> {
 
 	/**
 	 * 鑷畾涔夊垎椤�
 	 *
 	 * @param page
-	 * @param CodePhaseattr
+	 * @param omdEnum
 	 * @return
 	 */
-	IPage<CodePhaseattrVO> selectCodePhaseattrPage(IPage<CodePhaseattrVO> page, CodePhaseattrVO CodePhaseattr);
+	List<EnumVO> selectOmdEnumPage(IPage page, EnumVO omdEnum);
 
 
+    String getValue(String name, String nameChild);
+
+	List<EnumVO> getList(String name);
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseattrService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IEnumItemService.java
similarity index 64%
copy from Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseattrService.java
copy to Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IEnumItemService.java
index 167d9b6..8b9044c 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodePhaseattrService.java
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IEnumItemService.java
@@ -14,29 +14,37 @@
  *  this software without specific prior written permission.
  *  Author: Chill 搴勯獮 (smallchill@163.com)
  */
-package com.vci.ubcs.code.service;
+package com.vci.ubcs.omd.service;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.vci.ubcs.code.entity.CodePhaseAttr;
-import com.vci.ubcs.code.vo.CodePhaseattrVO;
+import com.vci.ubcs.omd.entity.EnumItem;
+import com.vci.ubcs.omd.vo.EnumItemVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import java.util.List;
 
 /**
- * 缂栫爜搴撳畾涔�-妯℃澘闃舵-灞炴�� 鏈嶅姟绫�
+ * 鏋氫妇瀹氫箟瀛愯〃 鏈嶅姟绫�
  *
  * @author yuxc
- * @since 2023-04-20
+ * @since 2023-05-08
  */
-public interface ICodePhaseattrService extends IService<CodePhaseAttr> {
+public interface IEnumItemService extends IService<EnumItem> {
 
 	/**
 	 * 鑷畾涔夊垎椤�
 	 *
 	 * @param page
-	 * @param CodePhaseattr
+	 * @param omdEnumitem
 	 * @return
 	 */
-	IPage<CodePhaseattrVO> selectCodePhaseattrPage(IPage<CodePhaseattrVO> page, CodePhaseattrVO CodePhaseattr);
+	IPage<EnumItemVO> selectOmdEnumitemPage(IPage<EnumItemVO> page, EnumItemVO omdEnumitem);
+
+
+	boolean deleteLogic(List<String> toStringList);
+
+    List<EnumItemVO> childList(QueryWrapper<EnumItem> queryWrapper);
 
 
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IEnumService.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IEnumService.java
new file mode 100644
index 0000000..d9232d4
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/IEnumService.java
@@ -0,0 +1,65 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.vci.ubcs.omd.entity.Enum;
+import com.vci.ubcs.omd.vo.EnumVO;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springblade.core.mp.support.Query;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 鏋氫妇瀹氫箟 鏈嶅姟绫�
+ *
+ * @author yuxc
+ * @since 2023-05-08
+ */
+public interface IEnumService extends IService<Enum> {
+
+	/**
+	 * 鑷畾涔夊垎椤�
+	 *
+	 * @param page
+	 * @param omdEnum
+	 * @return
+	 */
+	IPage<EnumVO> selectOmdEnumPage(IPage<EnumVO> page, EnumVO omdEnum);
+
+
+	boolean deleteLogic(List<String> toStringList);
+
+	IPage<EnumVO> parentList(Map<String, Object> dict, Query query);
+	/**
+	 * 鏍戝舰缁撴瀯
+	 *
+	 * @return
+	 */
+    List<EnumVO> tree(Map<String, Object> dict , Query query);
+	/**
+	 * 鑾峰彇鏋氫妇瀹氫箟鍒楄〃
+	 *
+	 * @param name   鐖惰妭鐐筺ame
+	 * @param nameChild      瀛愯妭鐐筺ame
+	 * @return BladePage
+	 */
+    String getValue(String name, String nameChild);
+
+	List<EnumVO> getList(String 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 8c7215d..70559e2 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
@@ -649,7 +649,6 @@
 			domainMap.forEach((k,v)-> {
 				if (domain.contains(k)){
 					BtmTypeTreeVO parent = new BtmTypeTreeVO();
-					parent.setOid(k);
 					parent.setName(k);
 					parent.setChildList(v.stream().map(s -> {
 						BtmTypeTreeVO child = new BtmTypeTreeVO();
@@ -749,6 +748,7 @@
 				attribute.setReferToName(attr.getReferBtmTypeName());
 				attribute.setTs(now);
 				attribute.setCreateTime(now);
+				attribute.setIsDeleted(0);
 				attribute.setCreateUser(AuthUtil.getUserId());
 				idAttrMap.put(attribute.getKey(),attribute);
 				// 鍦ㄨ繖閲岀粰涓氬姟绫诲瀷璁剧疆鐗堟湰鎺у埗銆佺敓鍛藉懆鏈熸帶鍒躲�佸瘑绾ф帶鍒剁浉鍏崇殑淇℃伅
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/EnumItemServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/EnumItemServiceImpl.java
new file mode 100644
index 0000000..eb0a7df
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/EnumItemServiceImpl.java
@@ -0,0 +1,58 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
+import com.vci.ubcs.omd.entity.EnumItem;
+import com.vci.ubcs.omd.vo.EnumItemVO;
+import com.vci.ubcs.omd.mapper.EnumItemMapper;
+import com.vci.ubcs.omd.service.IEnumItemService;
+import com.vci.ubcs.omd.wrapper.EnumitemWrapper;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import java.util.List;
+
+/**
+ * 鏋氫妇瀹氫箟瀛愯〃 鏈嶅姟瀹炵幇绫�
+ *
+ * @author yuxc
+ * @since 2023-05-08
+ */
+@Service
+public class EnumItemServiceImpl extends ServiceImpl<EnumItemMapper, EnumItem> implements IEnumItemService {
+
+	@Override
+	public IPage<EnumItemVO> selectOmdEnumitemPage(IPage<EnumItemVO> page, EnumItemVO omdEnumitem) {
+		return page.setRecords(baseMapper.selectOmdEnumitemPage(page, omdEnumitem));
+	}
+
+	@Override
+	public boolean deleteLogic(List<String> toStringList) {
+		return SqlHelper.retBool(baseMapper.deleteBatchIds(toStringList));
+	}
+
+	@Override
+	public List<EnumItemVO> childList(QueryWrapper<EnumItem> queryWrapper) {
+
+		return EnumitemWrapper.build().listVO(baseMapper.selectList(queryWrapper));
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/EnumServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/EnumServiceImpl.java
new file mode 100644
index 0000000..56c6a1a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/service/impl/EnumServiceImpl.java
@@ -0,0 +1,101 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.extension.toolkit.SqlHelper;
+import com.vci.ubcs.omd.entity.Enum;
+import com.vci.ubcs.omd.entity.EnumItem;
+import com.vci.ubcs.omd.mapper.EnumItemMapper;
+import com.vci.ubcs.omd.vo.EnumVO;
+import com.vci.ubcs.omd.mapper.EnumMapper;
+import com.vci.ubcs.omd.service.IEnumService;
+import com.vci.ubcs.omd.wrapper.EnumWrapper;
+import org.springblade.core.mp.support.Condition;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringPool;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+/**
+ * 鏋氫妇瀹氫箟 鏈嶅姟瀹炵幇绫�
+ *
+ * @author yuxc
+ * @since 2023-05-08
+ */
+@Service
+public class EnumServiceImpl extends ServiceImpl<EnumMapper, Enum> implements IEnumService {
+
+	@Resource
+	EnumItemMapper enumItemMapper;
+	@Override
+	public IPage<EnumVO> selectOmdEnumPage(IPage<EnumVO> page, EnumVO omdEnum) {
+		return page.setRecords(baseMapper.selectOmdEnumPage(page, omdEnum));
+	}
+
+	@Override
+	public boolean deleteLogic(List<String> toStringList) {
+		return SqlHelper.retBool(baseMapper.deleteBatchIds(toStringList));
+	}
+
+	@Override
+	public IPage<EnumVO> parentList(Map<String, Object> dict, Query query) {
+		IPage<Enum> page = this.page(Condition.getPage(query),
+			Condition.getQueryWrapper(dict, Enum.class).lambda()
+				.orderByDesc(Enum::getCreatetime));
+		return EnumWrapper.build().pageVO(page);
+	}
+
+	@Override
+	public List<EnumVO> tree(Map<String, Object> dict, Query query) {
+		List<Enum> pages = this.page(Condition.getPage(query),Condition.getQueryWrapper(dict, Enum.class).lambda()
+				.orderByDesc(Enum::getCreatetime)).getRecords();
+		List<EnumVO> listVo = new ArrayList<>();
+		pages.stream().forEach(page->{
+			EnumVO enumVO = new EnumVO();
+			QueryWrapper<EnumItem> wrapper = new QueryWrapper<>();
+			wrapper.eq("parentOid",page.getOid());
+			List<EnumItem> enumItems = enumItemMapper.selectList(wrapper);
+			BeanUtils.copyProperties(page, enumVO);
+			if(enumItems.size()>0){
+				enumVO.setChildren(enumItems);
+				enumVO.setHasChildren(true);
+			}
+			listVo.add(enumVO);
+		});
+
+		return listVo;
+	}
+
+	@Override
+	public String getValue(String name, String nameChild) {
+		return Func.toStr(baseMapper.getValue(name, nameChild), StringPool.EMPTY);
+	}
+
+	@Override
+	public List<EnumVO> getList(String name) {
+		return baseMapper.getList(name);
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/EnumWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/EnumWrapper.java
new file mode 100644
index 0000000..4869526
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/EnumWrapper.java
@@ -0,0 +1,50 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.wrapper;
+
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.utils.BeanUtil;
+import com.vci.ubcs.omd.entity.Enum;
+import com.vci.ubcs.omd.vo.EnumVO;
+import java.util.Objects;
+
+/**
+ * 鏋氫妇瀹氫箟 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
+ *
+ * @author yuxc
+ * @since 2023-05-08
+ */
+public class EnumWrapper extends BaseEntityWrapper<Enum, EnumVO>  {
+
+	public static EnumWrapper build() {
+		return new EnumWrapper();
+ 	}
+
+	@Override
+	public EnumVO entityVO(Enum omdEnum) {
+		EnumVO enumVO = Objects.requireNonNull(BeanUtil.copy(omdEnum, EnumVO.class));
+
+		//User createUser = UserCache.getUser(omdEnum.getCreateUser());
+		//User updateUser = UserCache.getUser(omdEnum.getUpdateUser());
+		//omdEnumVO.setCreateUserName(createUser.getName());
+		//omdEnumVO.setUpdateUserName(updateUser.getName());
+
+		return enumVO;
+	}
+
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/EnumitemWrapper.java b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/EnumitemWrapper.java
new file mode 100644
index 0000000..885903d
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/java/com/vci/ubcs/omd/wrapper/EnumitemWrapper.java
@@ -0,0 +1,62 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 搴勯獮 (smallchill@163.com)
+ */
+package com.vci.ubcs.omd.wrapper;
+
+import com.vci.ubcs.omd.cache.EnumCache;
+import com.vci.ubcs.omd.entity.Enum;
+import com.vci.ubcs.omd.vo.EnumVO;
+import org.springblade.core.mp.support.BaseEntityWrapper;
+import org.springblade.core.tool.constant.BladeConstant;
+import org.springblade.core.tool.node.ForestNodeMerger;
+import org.springblade.core.tool.utils.BeanUtil;
+import com.vci.ubcs.omd.entity.EnumItem;
+import com.vci.ubcs.omd.vo.EnumItemVO;
+
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * 鏋氫妇瀹氫箟瀛愯〃 鍖呰绫�,杩斿洖瑙嗗浘灞傛墍闇�鐨勫瓧娈�
+ *
+ * @author yuxc
+ * @since 2023-05-08
+ */
+public class EnumitemWrapper extends BaseEntityWrapper<EnumItem, EnumItemVO>  {
+
+	public static EnumitemWrapper build() {
+		return new EnumitemWrapper();
+ 	}
+
+	@Override
+	public EnumItemVO entityVO(EnumItem enumitem) {
+
+		EnumItemVO enumItemVO = Objects.requireNonNull(BeanUtil.copy(enumitem, EnumItemVO.class));
+		if (enumitem.getParentoid() == null ) {
+			enumItemVO.setParentName(BladeConstant.TOP_PARENT_NAME);
+		} else {
+			Enum parent = EnumCache.getById(enumitem.getParentoid());
+			enumItemVO.setParentName(parent.getLabel());
+		}
+		return enumItemVO;
+	}
+	public List<EnumVO> listNodeVO(List<EnumItem> list) {
+		List<EnumItem> collect = list.stream().map(omdEnumItem -> BeanUtil.copy(omdEnumItem, EnumItem.class)).collect(Collectors.toList());
+		return ForestNodeMerger.merge((List)collect);
+	}
+
+}
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/EnumItemMapper.xml b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/EnumItemMapper.xml
new file mode 100644
index 0000000..5305b6a
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/EnumItemMapper.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.omd.mapper.EnumItemMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="enumitemResultMap" type="com.vci.ubcs.omd.entity.EnumItem">
+        <result column="OID" property="oid"/>
+        <result column="NAME" property="name"/>
+        <result column="VALUE" property="value"/>
+        <result column="DESCRIPTION" property="description"/>
+        <result column="TS" property="ts"/>
+        <result column="CREATOR" property="creator"/>
+        <result column="CREATETIME" property="createtime"/>
+        <result column="MODIFIER" property="modifier"/>
+        <result column="MODIFYTIME" property="modifytime"/>
+        <result column="PARENTOID" property="parentoid"/>
+        <result column="SORT" property="sort"/>
+    </resultMap>
+
+
+    <select id="selectOmdEnumitemPage" resultMap="enumitemResultMap">
+        select * from PL_OMD_ENUMITEM where 1 = 1
+    </select>
+
+
+</mapper>
diff --git a/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/EnumMapper.xml b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/EnumMapper.xml
new file mode 100644
index 0000000..d37dd63
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-omd/src/main/resources/mapper/EnumMapper.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.vci.ubcs.omd.mapper.EnumMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="enumResultMap" type="com.vci.ubcs.omd.entity.Enum">
+        <result column="OID" property="oid"/>
+        <result column="NAME" property="name"/>
+        <result column="LABEL" property="label"/>
+        <result column="TS" property="ts"/>
+        <result column="CREATOR" property="creator"/>
+        <result column="CREATETIME" property="createtime"/>
+        <result column="MODIFIER" property="modifier"/>
+        <result column="MODIFYTIME" property="modifytime"/>
+        <result column="REMARK" property="remark"/>
+    </resultMap>
+
+
+    <select id="selectOmdEnumPage" resultMap="enumResultMap">
+        select * from PL_OMD_ENUM where 1 = 0
+    </select>
+
+    <select id="getValue" resultType="java.lang.String">
+        select POE.NAME
+        from PL_OMD_ENUM PO, PL_OMD_ENUMITEM POE
+        WHERE PO.OID = POE.PARENTOID
+          AND PO.NAME = #{param1}
+          AND POE.VALUE = #{param2}
+    </select>
+
+    <select id="getList" resultType="com.vci.ubcs.omd.vo.EnumVO">
+        select PO.OID,
+               PO.NAME,
+               PO.LABEL,
+               PO.TS,
+               PO.CREATOR,
+               PO.CREATOR,
+               PO.CREATETIME,
+               PO.MODIFIER,
+               PO.MODIFYTIME,
+               PO.REMARK,
+               POE.OID ITEM_OID,
+               POE.NAME ITEM_NAME,
+               POE.VALUE ITEM_VALUE,
+               POE.DESCRIPTION ITEM_DESCRIPTION
+        from PL_OMD_ENUM PO, PL_OMD_ENUMITEM POE
+        WHERE PO.OID = POE.PARENTOID
+          AND PO.NAME = #{param1}
+    </select>
+
+
+</mapper>

--
Gitblit v1.9.3