From 8c2bc4c9cfac26210dd9018482586112469c44c8 Mon Sep 17 00:00:00 2001
From: xiejun <xj@2023>
Date: 星期一, 11 九月 2023 17:54:47 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeBasicSecService.java              |   13 
 Source/UBCS-WEB/src/components/refer/vciWebRefer.vue                                                              |    2 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeFixedValueService.java            |    9 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeClassifyValueServiceImpl.java |   27 +
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeRuleController.java             |    3 
 Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue                                                       |    2 
 Source/UBCS-WEB/src/components/code-dialog-page/cloneRuleDialog.vue                                               |  222 +++++++++
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java               |    5 
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java       |    2 
 Source/UBCS-WEB/src/views/docking/loge.vue                                                                        |   60 ++
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeFixedValueVO.java     |    2 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeBasicSecServiceImpl.java      |  111 +++
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeRuleService.java                  |    3 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java         |    3 
 Source/UBCS-WEB/src/components/Master/MasterTree.vue                                                              |    2 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/PasswordFreeLoginServiceImpl.java |   31 +
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeFixedValue.java             |    1 
 Source/UBCS-WEB/src/components/code-dialog-page/cloneOtherBasicSecDialog.vue                                      |  247 ++++++++++
 Source/UBCS-WEB/src/views/code/code.vue                                                                           |  325 ------------
 Source/UBCS-WEB/src/components/dockingSearch/VciDockingSearch.vue                                                 |   73 +++
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/util/DefaultAttrAssimtUtil.java     |    2 
 Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue                                                       |   36 +
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeFixedValueServiceImpl.java    |   20 
 Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyValue.java          |    2 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeClassifyValueService.java         |    7 
 Source/UBCS-WEB/src/views/MasterData/items.vue                                                                    |    4 
 Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue                                                         |   26 
 Source/UBCS-WEB/src/const/code/cloneCodeRuleDialogOption.js                                                       |   10 
 Source/UBCS-WEB/src/main.js                                                                                       |    6 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IPasswordFreeLoginService.java         |   18 
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/CodeRuleServiceImpl.java          |   81 ++
 Source/UBCS-WEB/src/const/code/classisyValueTreeDialog.js                                                         |    4 
 Source/UBCS-WEB/src/components/refer/vciWebReferTree.vue                                                          |   26 
 33 files changed, 996 insertions(+), 389 deletions(-)

diff --git a/Source/UBCS-WEB/src/components/Master/MasterTree.vue b/Source/UBCS-WEB/src/components/Master/MasterTree.vue
index f485dbe..7e248d2 100644
--- a/Source/UBCS-WEB/src/components/Master/MasterTree.vue
+++ b/Source/UBCS-WEB/src/components/Master/MasterTree.vue
@@ -15,7 +15,7 @@
   props: {
     pageSize: {
       type: String,
-      default: "10"
+      default: "100"
     },
     currentPage: {
       type: String,
diff --git a/Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue b/Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue
index 1505e83..6e24287 100644
--- a/Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue
+++ b/Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue
@@ -93,7 +93,7 @@
           <ResembleQueryDialog :codeClassifyOid="codeClassifyOid" :codeRuleOid="this.codeRuleOid" :rowOid="rowOid"
                                :templateOid="templateOid" :visible.sync="similarVisible"></ResembleQueryDialog>
           <div class="block" style="display: flex; justify-content: flex-end">
-            <el-pagination :current-page="page.currentPage" :page-size="page.pageSizes" :page-sizes="page.pageSizes"
+            <el-pagination :current-page="page.currentPage" :page-size="page.pageSize" :page-sizes="page.pageSizes"
                            :total="page.total" layout="total, sizes, prev, pager, next, jumper"
                            @size-change="handleSizeChange"
                            @current-change="handleCurrentChange">
diff --git a/Source/UBCS-WEB/src/components/code-dialog-page/cloneOtherBasicSecDialog.vue b/Source/UBCS-WEB/src/components/code-dialog-page/cloneOtherBasicSecDialog.vue
new file mode 100644
index 0000000..5a85239
--- /dev/null
+++ b/Source/UBCS-WEB/src/components/code-dialog-page/cloneOtherBasicSecDialog.vue
@@ -0,0 +1,247 @@
+<template>
+  <el-dialog
+    :visible.sync="cloneOtherCodeRuleSettingBox"
+    append-to-body
+    class="avue-dialog avue-dialog--top"
+    style="height: 100vh"
+    @close="closeCloneOtherBasicSecDialog"
+    title="鍏嬮殕缂栫爜瑙勫垯鐨勫熀纭�淇℃伅"
+    top="-3%"
+    width="800px">
+    <div>
+      <el-row>
+        <p
+          style="margin-top: -20px;
+            margin-bottom: 4px;
+            font-weight: 570;
+            font-size: 19px;
+            color: #0e2d5f;">
+          缂栫爜瑙勫垯
+        </p>
+        <avue-crud
+          ref="crudCloneCodeRuleOther"
+          :data="codeRuleData"
+          :option="cloneCodeRuleOption"
+          :page.sync="codeRulePage"
+          :table-loading="codeRuleloading"
+          class="other-clone-coderule-crud"
+          @row-click="codeOtherCloneRuleRowClick"
+          @selection-change="selectionOtherCloneCodeRuleChange"
+          @search-change="searchOtherCloneChange"
+          @search-reset="searchOtherCloneReset"
+          @on-load="onLoad">
+          <template #radio="{row}">
+            <el-radio v-model="selectOtherCodeRuleRowIndex"
+                :label="row.$index">&nbsp;</el-radio>
+          </template>
+        </avue-crud>
+      </el-row>
+      <el-row style="margin-top: 10px; border-top: 1px solid #ebeef5">
+        <p
+          style="
+            margin-top: 10px;
+            margin-bottom: 4px;
+            font-weight: 570;
+            font-size: 19px;
+            color: #0e2d5f;
+          "
+        >
+          鐮佹淇℃伅
+        </p>
+        <avue-crud
+          ref="crudCloneCodeBasicOther"
+          :data="cloneBasicData"
+          :option="cloneBasicOption"
+          :table-loading="codeBasicloading"
+          class="other-clone-codebasic-crud"
+          @row-click="codeOtherCloneBasicRowClick"
+          @selection-change="selectionOtherCloneCodeBasicChange">
+        </avue-crud>
+      </el-row>
+    </div>
+    <div slot="footer" class="dialog-footer" style="height: 50px">
+      <el-button type="primary" @click="saveOtherCodeBasic" :loading="cloneSaveLoding">淇� 瀛�</el-button>
+      <el-button @click="cloneOtherCodeRuleSettingBox = false">鍙� 娑�</el-button>
+    </div>
+  </el-dialog>
+</template>
+
+<script>
+import cloneBasicOption from "@/const/code/cloneBasicDialogOption";
+import cloneCodeRuleOption from "@/const/code/cloneCodeRuleDialogOption";
+import {gridCodeRule} from "@/api/code/mdmrule";
+import {gridCodeBasicSec,cloneCodeBasic} from "@/api/code/codebasic";
+export default {
+    name: "cloneRuleDialog",
+    props: {
+        // 瀵硅瘽妗嗘樉绀洪殣钘忔帶鍒�
+        visible: {
+            type: "Boolean",
+            default: false,
+        },
+        // 琚厠闅嗙殑瑙勫垯oid
+        quiltCloneCodeRule:{
+            type: "Object",
+        }
+    },
+    data() {
+        return {
+            cloneOtherCodeRuleSettingBox: this.visible, 
+            /*鍏嬮殕缂栫爜瑙勫垯瀵硅瘽妗嗘帶鍒跺彉閲�*/
+            cloneBasicOption: cloneBasicOption,
+            cloneCodeRuleOption: cloneCodeRuleOption,
+            selectionOtherCloneCodeBasicList: [], // 姝ょ晫闈㈠唴褰撳墠閫変腑鐨勫熀纭�鐮佹
+            selectionOtherCloneCodeRuleList: {}, // 姝ょ晫闈㈠唴褰撳墠閫変腑鐨勭紪鐮佽鍒�
+            selectOtherCodeRuleRowIndex: '',
+            cloneOtherQuery: {}, // 鏌ヨ鏉′欢瀵硅薄
+            codeRulePage: {
+                pageSize: 10,
+                currentPage: 1,
+                total: 0,
+            },
+            codeRuleloading: false,
+            codeRuleData: [],
+            codeBasicloading: false,
+            cloneBasicData: [],
+            cloneSaveLoding: false,
+        };
+    },
+    watch: {
+        // 鐩戝惉鐖剁粍浠朵紶鐨勭獥鍙f樉绀洪殣钘忕殑鍊硷紝浠ュ強鍊肩殑鍥炲~
+        visible() {
+            //console.log(this.visible);
+            if(this.visible){
+                //console.log(this.quiltCloneCodeRule);
+                let conditionMap = {};
+                conditionMap["conditionMap[oid_notequal]"] = this.quiltCloneCodeRule.oid.trim();
+                this.cloneOtherQuery = conditionMap;
+                this.onLoad(this.codeRulePage);
+            }else{
+                this.codeRuleData = [];
+                this.cloneBasicData = [];
+            }
+            this.cloneOtherCodeRuleSettingBox = this.visible;
+        },
+        selectionOtherCloneCodeRuleList(){
+            this.loadBasic(this.selectionOtherCloneCodeRuleList);
+        },
+    },
+    methods: {
+
+        //鍏抽棴绐楀彛鏃惰Е鍙�
+        closeCloneOtherBasicSecDialog(){
+            this.$emit('update:visible',false);
+        },
+        /** 浠庡叾浠栫紪鐮佽鍒欎腑鍏嬮殕鐮佹瀵硅瘽妗�-鍗曞嚮缂栫爜瑙勫垯瀹炵幇琛岄�夋嫨*/
+        codeOtherCloneRuleRowClick(row) {
+            this.selectOtherCodeRuleRowIndex = row.$index
+            this.selectionOtherCloneCodeRuleList = row;
+            this.loadBasic(row);
+        },
+        /** 浠庡叾浠栫紪鐮佽鍒欎腑鍏嬮殕鐮佹瀵硅瘽妗�-鍗曞嚮鍩虹鐮佹瀹炵幇琛岄�夋嫨*/
+        codeOtherCloneBasicRowClick(row) {
+            this.$refs.crudCloneCodeBasicOther.toggleSelection();
+            this.selectionOtherCloneCodeBasicList = row;
+            this.$refs.crudCloneCodeBasicOther.setCurrentRow(row);
+            this.$refs.crudCloneCodeBasicOther.toggleRowSelection(row); //閫変腑褰撳墠琛�
+        },
+        selectionOtherCloneCodeBasicChange(list) {
+            this.selectionOtherCloneCodeBasicList = list;
+            this.$refs.crudCloneCodeBasicOther.setCurrentRow(
+                this.selectionOtherCloneCodeBasicList.slice(-1)[0]
+            );
+        },
+        /** 浠庡叾浠栬鍒欏厠闅嗙爜娈电晫闈㈤噸缃悳绱㈠姛鑳� */
+        searchOtherCloneReset() {
+            let conditionMap = {};
+            conditionMap["conditionMap[oid_notequal]"] = this.quiltCloneCodeRule.oid.trim();
+            this.cloneOtherQuery = conditionMap;
+            this.onLoad(this.codeRulePage);
+        },
+        /** 浠庡叾浠栬鍒欏厠闅嗙爜娈电晫闈㈡悳绱㈠姛鑳�*/
+        searchOtherCloneChange(params, done) {
+            this.codeRulePage.currentPage = 1;
+            // 澶氫釜conditionMap杩欐牱浼犲弬锛屽揩閫熸煡璇㈤粯璁ら噰鐢ㄦā绯婃煡璇�
+            if (params) {
+                Object.keys(params).forEach((key) => {
+                    this.cloneOtherQuery["conditionMap" + "[" + key + "_like]"] =
+                    params[key].trim();
+                });
+            }
+            this.onLoad(this.codeRulePage,this.cloneOtherQuery);
+            done();
+        },
+        /** 淇濆瓨浠庡叾浠栫紪鐮佽鍒欎腑鍏嬮殕鐮佹淇℃伅*/
+        async saveOtherCodeBasic() {
+            this.cloneSaveLoding = true;
+            let oid = this.quiltCloneCodeRule.oid;
+            let fromDialogPkCodebasic = this.selectionOtherCloneCodeBasicList;
+            if (fromDialogPkCodebasic.length <= 0) {
+                this.$message.warning("璇烽�夋嫨鐮佹鏁版嵁!");
+                return;
+            }
+            let oidArr = [];
+            fromDialogPkCodebasic.forEach((ele) => {
+                oidArr.push(ele.oid);
+            });
+            let data = {
+                pkCodeRule: oid,
+                oidArr: oidArr.join(","),
+            };
+            //console.log(data);
+            await cloneCodeBasic(data).then( () => {
+                this.cloneOtherCodeRuleSettingBox = false;
+                this.$message({
+                    type: "success",
+                    message: "鎿嶄綔鎴愬姛!",
+                });
+                // 璋冪敤鐖剁粍浠舵柟娉曢噸鏂板姞杞界爜娈佃〃
+                this.$emit('refreshRuleTable',{"currentPage":1,"pageSize":10});
+            },(error) => {
+                window.console.log(error);
+            });
+            this.cloneSaveLoding = false;
+        },
+        /** 鐐瑰嚮瑙﹀彂鍔犺浇鍩虹鐮佹淇℃伅*/
+        loadBasic(row) {
+            this.codeBasicloading = true;
+            // console.log(row)
+            if (row != "" && row != null && row !="undefined") {
+                let conditionMap = {};
+                conditionMap["conditionMap[pkCodeRule]"] = row.oid.trim();
+                gridCodeBasicSec(1, -1, conditionMap).then((res) => {
+                    const data = res.data.data;
+                    this.cloneBasicData = data.records;
+                    this.codeBasicloading = false;
+                });
+            }else {
+                this.cloneBasicData = [];
+                this.codeBasicloading = false;
+            }
+        },
+        // 瑙勫垯琛ㄦ牸鐩稿叧鏂规硶
+        onLoad(page, params = {}) {
+            this.codeRuleloading = true;
+            gridCodeRule(page.currentPage, page.pageSize, Object.assign({},this.cloneOtherQuery, params)).then((res) => {
+                // console.log(res.data);
+                const data = res.data.data;
+                this.codeRulePage.total = data.total;
+                this.codeRuleData = data.records;
+                this.codeRuleloading = false;
+                if(this.codeRuleData.length > 0) {
+                    this.$nextTick(() => {
+                        this.selectOtherCodeRuleRowIndex = this.codeRuleData[0].$index
+                        this.selectionOtherCloneCodeRuleList = this.codeRuleData[0];
+                    });
+                }else{
+                    this.cloneBasicData = [];
+                }
+            });
+        },
+
+    }
+};
+</script>
+
+<style>
+</style>
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/components/code-dialog-page/cloneRuleDialog.vue b/Source/UBCS-WEB/src/components/code-dialog-page/cloneRuleDialog.vue
new file mode 100644
index 0000000..897c547
--- /dev/null
+++ b/Source/UBCS-WEB/src/components/code-dialog-page/cloneRuleDialog.vue
@@ -0,0 +1,222 @@
+<template>
+  <el-dialog
+      :visible.sync="cloneSettingBox"
+      append-to-body
+      class="avue-dialog avue-dialog--top"
+      style="height: 100vh"
+      title="鍏嬮殕缂栫爜瑙勫垯"
+      top="-3%"
+      @close="closeCloneDialog"
+      width="800px">
+      <div>
+        <el-row>
+          <el-form ref="form" :inline="true" :model="form" label-width="80px">
+            <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="渚濇嵁" required>
+              <el-input v-model="cloneCodeRuleForm.accordingTo"></el-input>
+            </el-form-item>
+            <el-form-item class="clone-input-textarea" label="鎻忚堪">
+              <el-input
+                v-model="cloneCodeRuleForm.description"
+                :autosize="{ minRows: 3, maxRows: 5 }"
+                type="textarea"
+              ></el-input>
+            </el-form-item>
+          </el-form>
+        </el-row>
+        <el-row>
+          <p
+            style="
+              margin: 0 0px 16px 50%;
+              font-weight: 500;
+              font-size: 20px;
+              color: #000;">
+            鐮佹绠$悊
+          </p>
+          <avue-crud
+            :data="cloneData"
+            :option="cloneOption"
+            :table-loading="cloneTableLoading"
+            class="clone-avue-crud">
+            <template slot="menu" slot-scope="scope">
+              <el-button
+                v-show="scope.row.orderNum > 1"
+                icon="el-icon-arrow-up"
+                plain
+                size="small"
+                type="text"
+                @click="upOrderNum(scope.row)"
+                >涓婄Щ
+              </el-button>
+              <el-button
+                icon="el-icon-arrow-down"
+                plain
+                size="small"
+                type="text"
+                @click="downOrderNum(scope.row)"
+                >涓嬬Щ
+              </el-button>
+            </template>
+          </avue-crud>
+        </el-row>
+      </div>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="saveCloneCodeRule" :loading="cloneCodeRuleLoading">淇� 瀛�</el-button>
+        <el-button @click="cloneSettingBox = false">鍙� 娑�</el-button>
+      </div>
+  </el-dialog>
+</template>
+
+<script>
+import cloneOption from "@/const/code/cloneOption";
+import {clone} from "@/api/code/mdmrule";
+import {downOrderNum, upOrderNum, gridCodeBasicSec} from "@/api/code/codebasic";
+export default {
+    name: "cloneRuleDialog",
+    props: {
+        // 瀵硅瘽妗嗘樉绀洪殣钘忔帶鍒�
+        visible: {
+            type: "Boolean",
+            default: false,
+        },
+        ruleData:{
+            type: "Object",
+        }
+    },
+    data() {
+        return {
+            cloneSettingBox: this.visible, 
+            /*鍏嬮殕缂栫爜瑙勫垯瀵硅瘽妗嗘帶鍒跺彉閲�*/
+            cloneTableLoading: false,
+            cloneCodeRuleLoading: false,
+            cloneOption: cloneOption,
+            cloneData: [],
+            cloneCodeRuleForm: {
+                id: "",
+                name: "",
+                accordingTo: "",
+                description: "",
+            },
+        };
+    },
+    watch: {
+        // 鐩戝惉鐖剁粍浠朵紶鐨勭獥鍙f樉绀洪殣钘忕殑鍊硷紝浠ュ強鍊肩殑鍥炲~
+        visible() {
+            //console.log(this.visible);
+            if(this.visible){
+                this.loadBasic(this.ruleData);
+                this.cloneCodeRuleForm.id = this.ruleData.id;
+                this.cloneCodeRuleForm.name = this.ruleData.name;
+                this.cloneCodeRuleForm.accordingTo = this.ruleData.accordingTo;
+                this.cloneCodeRuleForm.description = this.ruleData.description;
+            }
+            this.cloneSettingBox = this.visible;
+        },
+    },
+    methods: {
+
+        //鍏抽棴瀵硅瘽妗�
+        closeCloneDialog(){
+            this.$emit('update:visible',false);
+            this.cloneData = [];
+        },    
+        /** 涓婄Щ涓嬬Щ鍩虹鐮佹*/
+        async upOrderNum(row) {
+            if (this.ruleData.lcStatus != "Editing") {
+                this.$message.warning(
+                "鍙湁缂栫爜瑙勫垯鐨勭姸鎬佹槸 [缂栬緫涓璢 鐨勬椂鍊欙紝鎵嶈兘璋冩暣鐮佹椤哄簭!"
+                );
+                return;
+            }
+            if (row.oid == null || row.oid == "") {
+                this.$message.warning("鏈幏鍙栧埌蹇呭~鍙傛暟!");
+                return;
+            }
+            await upOrderNum(row.oid).then(() => {
+                this.loadBasic(this.ruleData);
+                this.$message({
+                type: "success",
+                message: "鎿嶄綔鎴愬姛!",
+                });
+            });
+        },
+        downOrderNum(row) {
+            let codeRuleOid = this.ruleData.oid;
+            if (this.ruleData.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: "鎿嶄綔鎴愬姛!",
+                });
+            });
+        },
+        /** 鐐瑰嚮瑙﹀彂鍔犺浇鍩虹鐮佹淇℃伅*/
+        loadBasic(row) {
+            this.cloneTableLoading = true;
+            if (row != "" || row != null) {
+                let conditionMap = {};
+                conditionMap["conditionMap[pkCodeRule]"] = row.oid.trim();
+                gridCodeBasicSec(1, -1, conditionMap).then((res) => {
+                    const data = res.data.data;
+                    this.cloneData = data.records;
+                    this.cloneTableLoading = false;
+                });
+            }
+        },
+         /** 鍏嬮殕缂栫爜瑙勫垯淇濆瓨鍔熻兘*/
+        saveCloneCodeRule() {
+            this.cloneCodeRuleLoading = true;
+            let form = this.cloneCodeRuleForm;
+            if (form.id.trim() == "") {
+                this.$message.warning("缂栧彿涓嶈兘涓虹┖!");
+                return;
+            }
+            if (form.name.trim() == "") {
+                this.$message.warning("鐮佸�间笉鑳戒负绌�!");
+                return;
+            }
+            let data = Object.assign({}, form, {
+                oid: "",
+                createTime: new Date().getTime(),
+                ts: new Date(this.ruleData.ts).getTime(),
+                lcStatus: "Editing",
+                elements: this.cloneData,
+            });
+            // console.log(data);
+            this.cloneCodeRuleLoading = true;
+            clone(data).then(() => {
+                this.cloneSettingBox = false;
+                // 璋冪敤鐖剁粍浠舵柟娉曢噸鏂板姞杞界爜娈佃〃
+                this.$emit('refreshRuleTable',{"currentPage":1,"pageSize":10});
+                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/src/components/dockingSearch/VciDockingSearch.vue b/Source/UBCS-WEB/src/components/dockingSearch/VciDockingSearch.vue
new file mode 100644
index 0000000..82411d9
--- /dev/null
+++ b/Source/UBCS-WEB/src/components/dockingSearch/VciDockingSearch.vue
@@ -0,0 +1,73 @@
+<template>
+  <div style="display: flex" >
+    <el-form :inline="true" :model="formInline" class="demo-form-inline">
+      <el-form-item label="绫诲瀷:" size="small">
+        <el-select v-model="formInline.type" placeholder="璇疯緭鍏ョ被鍨�" @change="SelectChange">
+          <el-option :label="item.label" :value="item.value" v-for="item in SearchObject.searchData" ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item v-if="typeFlag" size="small">
+        <el-select v-model="formInline.check" placeholder="璇烽�夋嫨鍒嗙被">
+          <el-option label="1" value="0"></el-option>
+          <el-option label="2" value="1"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item size="small" v-if="dateFlag">
+        <el-date-picker
+          v-model="formInline.Date"
+          type="date"
+          placeholder="閫夋嫨鏃ユ湡鏃堕棿">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item size="small" >
+        <el-input v-model="formInline.text" placeholder="璇疯緭鍏ュ唴瀹�" @keyup.enter.native="SaveHandler"></el-input>
+      </el-form-item>
+    </el-form>
+  </div>
+</template>
+
+<script>
+import {getList} from "@/api/docking/loge";
+export default {
+  name: "VciDockingSearch",
+  props:['SearchObject','page'],
+  data() {
+    return {
+      typeFlag:false,
+      dateFlag:false,
+      formInline:{
+        type:'',
+        check:'',
+        text:'',
+        Date:''
+      },
+    }
+  },
+  methods:{
+    SelectChange(val){
+      if(this.SearchObject.type === 'loge'){
+        if(val === 5){
+          this.typeFlag=true;
+        }else {
+          this.typeFlag=false;
+        }
+        if(val === 6){
+          this.dateFlag=true;
+        }else {
+          this.dateFlag=false;
+        }
+      }
+    },
+    SaveHandler(){
+      let name = this.SearchObject.searchData[this.formInline.type].prop;
+      getList(this.page.currentPage, this.page.pageSize, {[name]: this.formInline.text}).then(res => {
+        console.log(res);
+      });
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/Source/UBCS-WEB/src/components/refer/vciWebRefer.vue b/Source/UBCS-WEB/src/components/refer/vciWebRefer.vue
index 406c2b4..fa4a1bd 100644
--- a/Source/UBCS-WEB/src/components/refer/vciWebRefer.vue
+++ b/Source/UBCS-WEB/src/components/refer/vciWebRefer.vue
@@ -25,12 +25,12 @@
     };
   },
   created() {
+    console.log('referer')
     if (!this.referConfig.options) {
       this.referConfig.options = {
         isMuti: false
       }
     }
-    console.log('referConfig',this.referConfig)
   },
   mounted() {
     var title = this.referConfig.title || '';
diff --git a/Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue b/Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue
index 727d79a..8422b43 100644
--- a/Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue
+++ b/Source/UBCS-WEB/src/components/refer/vciWebReferDefalut.vue
@@ -158,22 +158,34 @@
           label: '鑻辨枃鍚嶇О',
           sortable: true,
           width: 150,
-          search: true
+          search: true,
+          formatter:function (d){
+            return d.id || d.data.id
+          }
         }, {
           prop: 'name',
           label: '涓枃鍚嶇О',
           sortable: true,
           width: 150,
-          search: true
+          search: true,
+          formatter:function (d){
+            return d.name || d.data.name
+          }
         }, {
           prop: 'description',
           label: '鎻忚堪',
-          width: 250
+          width: 250,
+          formatter:function (d){
+            return d.description || d.data.description
+          }
         }, {
           prop: 'secretGradeText',
           label: '瀵嗙骇',
           width: 60,
-          hidden: (!this.controllerSecret)
+          hidden: (!this.controllerSecret),
+          formatter:function (d){
+            return d.secretGradeText || d.data.secretGradeText
+          }
         }];
       } else {
         this.option.column = this.options.tableConfig.cols.map(item => {
@@ -181,6 +193,16 @@
             let formatter=item.template || item.templet;
             if(typeof formatter == "string" && formatter !=''){
               formatter=eval("(" + formatter + ")")
+            }else{
+              formatter=function (d){
+                if(d[item.field]!=undefined){
+                  return d[item.field]
+                }else if(d.data[item.field] !=undefined){
+                  return d.data[item.field]
+                }else {
+                  return ''
+                }
+              }
             }
             return {
               ...item,
@@ -295,6 +317,12 @@
             this.data = res.data.data.records;
             this.page.total=res.data.data.total;
           }
+          this.data=this.data.map(item => {
+            item.data=item.data || {}
+            return {
+              ...item
+            }
+          })
           this.loading = false;
           this.selectionClear();
         }).catch(error=>{
diff --git a/Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue b/Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue
index 8e83d4f..522df5b 100644
--- a/Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue
+++ b/Source/UBCS-WEB/src/components/refer/vciWebReferTable.vue
@@ -87,10 +87,12 @@
   },
   created() {
     this.getParams();
+
     // console.log('referConfig:')
     // console.log(this.referConfig)
   },
   mounted() {
+    console.log('referrTable')
     if(this.referConfig.options.page){
       this.page.pageSize=this.referConfig.options.page.limit || this.referConfig.options.page.pageSize;
       this.page.currentPage=this.referConfig.options.page.page || this.referConfig.options.page.currentPage;
@@ -200,10 +202,9 @@
                     message: "璇疯緭鍏�" + item.field,
                     trigger: "blur"
                   }];
-                  /*item.formatter=function(d,thisItem){
-                    var vciWebComboxStore = layui.vciWebComboxStore;
-                    return vciWebComboxStore.getComboxText(thisItem.enumCode,d[thisItem.field]);
-                  };*/
+                  item.formatter=function(d){
+                    return d.field || d.data.field
+                  };
                 }
                 return {
                   ...item,
@@ -250,6 +251,16 @@
               let formatter=item.template || item.templet;
               if(typeof formatter == "string" && formatter !=''){
                 formatter=eval("(" + formatter + ")")
+              }else{
+                formatter=function (d){
+                  if(d[item.field]!=undefined){
+                    return d[item.field]
+                  }else if(d.data[item.field] !=undefined){
+                    return d.data[item.field]
+                  }else {
+                    return ''
+                  }
+                }
               }
               return {
                 ...item,
@@ -270,6 +281,7 @@
       this.params=paramsData;
     },
     setValue(){
+      console.log('纭畾')
       if(this.selectionList.length==0){
         this.$message.warning( '娌℃湁閫夋嫨鏁版嵁');
         return false;
@@ -359,6 +371,12 @@
             this.data = res.data.data.records;
             this.page.total=res.data.data.total;
           }
+          this.data=this.data.map(item => {
+            item.data=item.data || {}
+            return {
+              ...item
+            }
+          })
           this.loading = false;
           this.selectionClear();
         }).catch(error=>{
diff --git a/Source/UBCS-WEB/src/components/refer/vciWebReferTree.vue b/Source/UBCS-WEB/src/components/refer/vciWebReferTree.vue
index 3000eba..16756d9 100644
--- a/Source/UBCS-WEB/src/components/refer/vciWebReferTree.vue
+++ b/Source/UBCS-WEB/src/components/refer/vciWebReferTree.vue
@@ -123,10 +123,23 @@
       this.params=queryParams;
 
     },
-    getTree(){
-      getTree(this.params,this.treeUrl).then(res => {
-          this.treeData=res.data
+    getTree() {
+      getTree(this.params, this.treeUrl).then(res => {
+        res.data.map(item => {
+          if (!item.attribute) {
+            item.attribute = {
+              data: {}
+            }
+          } else {
+            item.attribute.data = item.attribute.data || {}
+          }
+          return {
+            ...item,
+            leaf: !item.hasChildren
+          }
         })
+        this.treeData = res.data
+      })
     },
     treeLoad: function (treeNode, resolve) {
       const parentOid = (treeNode.level === 0) ? 0 : treeNode.data.oid;
@@ -142,6 +155,13 @@
       }
       getLazyTree(this.params,this.treeUrl).then(res => {
         resolve(res.data.data.map(item => {
+          if(!item.attribute){
+            item.attribute={
+              data:{}
+            }
+          }else{
+            item.attribute.data=item.attribute.data || {}
+          }
           return {
             ...item,
             leaf: !item.hasChildren
diff --git a/Source/UBCS-WEB/src/const/code/classisyValueTreeDialog.js b/Source/UBCS-WEB/src/const/code/classisyValueTreeDialog.js
index ff746da..a7e4d4e 100644
--- a/Source/UBCS-WEB/src/const/code/classisyValueTreeDialog.js
+++ b/Source/UBCS-WEB/src/const/code/classisyValueTreeDialog.js
@@ -1,8 +1,8 @@
 export default {
-    nodeKey: 'oid',
+    // nodeKey: 'oid',
     border: true,
     lazy: false,
-    defaultExpandAll: true,
+    defaultExpandAll: false,
     treeLoad: function (node, resolve) {
       // const parentId = (node.level === 0) ? 0 : node.data.id;
 
diff --git a/Source/UBCS-WEB/src/const/code/cloneCodeRuleDialogOption.js b/Source/UBCS-WEB/src/const/code/cloneCodeRuleDialogOption.js
index 8b4fedf..990ff22 100644
--- a/Source/UBCS-WEB/src/const/code/cloneCodeRuleDialogOption.js
+++ b/Source/UBCS-WEB/src/const/code/cloneCodeRuleDialogOption.js
@@ -11,15 +11,23 @@
     border: true,
     index: true,
     viewBtn: false,
-    selection: true,
+    selection: false,
     menu: false,
     refreshBtn: false,
     columnBtn: false,
     dialogClickModal: false,
     highlightCurrentRow: true, //琛岄�変腑鏃堕珮浜�
     rowKey: "oid", //琛屾暟鎹殑 Key锛岀敤鏉ヤ紭鍖� Table 鐨勬覆鏌�
+    align: 'center',
+    menuAlign: 'center',
     column: [
       {
+        label: '',
+        prop: 'radio',
+        width: 60,
+        hide: false
+      },
+      {
         label: "缂栧彿",
         prop: "id",
         search: true,
diff --git a/Source/UBCS-WEB/src/main.js b/Source/UBCS-WEB/src/main.js
index c409b2d..32083d0 100644
--- a/Source/UBCS-WEB/src/main.js
+++ b/Source/UBCS-WEB/src/main.js
@@ -41,6 +41,8 @@
 import referConfigDialog from "@/components/code-dialog-page/referConfigDialog"
 import referBtmTypeCrudDialog from "@/components/code-dialog-page/referBtmTypeCrudDialog"
 import referSelectBtmAttrDialog from "@/components/code-dialog-page/referSelectBtmAttrDialog"
+import cloneRuleDialog from "@/components/code-dialog-page/cloneRuleDialog"
+import cloneOtherBasicSecDialog from "@/components/code-dialog-page/cloneOtherBasicSecDialog"
 import advancedQuery from "@/components/advanced-query/advancedQuery"
 import businessAdd from "@/views/modeling/BusinessAdd"
 import VciMasterCrud from "@/components/MasterCrud/VciMasterCrud"
@@ -54,6 +56,7 @@
 import MasterTransfer from "@/components/Master/MasterTransfer";
 import ThemeImport from "@/components/Theme/ThemeImport";
 import maxSerialnumDialog from '@/components/code-dialog-page/maxSerialnumDialog'
+import VciDockingSearch from '@/components/dockingSearch/VciDockingSearch'
 // 灏嗗伐鍏峰嚱鏁版坊鍔犲埌鍏ㄥ眬
 import utilFunc from './util/func'
 Vue.prototype.$utilFunc = utilFunc
@@ -98,6 +101,8 @@
 Vue.component('originalAdd',originalAdd)
 Vue.component('referBtmTypeCrudDialog',referBtmTypeCrudDialog)
 Vue.component('referSelectBtmAttrDialog',referSelectBtmAttrDialog)
+Vue.component('cloneOtherBasicSecDialog',cloneOtherBasicSecDialog)
+Vue.component('cloneRuleDialog',cloneRuleDialog)
 Vue.component('FormTemplateDialog',FormTemplateDialog)
 Vue.component('LinkTypeAdd',linkTypeAdd)
 Vue.component('MasterTree',MasterTree)
@@ -108,6 +113,7 @@
 Vue.component('MasterTransfer', MasterTransfer)
 Vue.component('ThemeImport', ThemeImport)
 Vue.component('maxSerialnumDialog', maxSerialnumDialog)
+Vue.component('VciDockingSearch', VciDockingSearch)
 
 // 鍔犺浇鐩稿叧url鍦板潃
 Object.keys(urls).forEach(key => {
diff --git a/Source/UBCS-WEB/src/views/MasterData/items.vue b/Source/UBCS-WEB/src/views/MasterData/items.vue
index 1745425..be13f12 100644
--- a/Source/UBCS-WEB/src/views/MasterData/items.vue
+++ b/Source/UBCS-WEB/src/views/MasterData/items.vue
@@ -28,10 +28,10 @@
       page: {
         total: 0,
         currentPage: 1,
-        pageSize: 10,
+        pageSize: 100,
         pageSizes: [10, 30, 50, 100, 200],
       },
-      pageSize: "10",
+      pageSize: "100",
       currentPage: "1",
       codeClassifyOid: "",
       coderuleoid: "",
diff --git a/Source/UBCS-WEB/src/views/code/code.vue b/Source/UBCS-WEB/src/views/code/code.vue
index cdbc7b8..59f6ec1 100644
--- a/Source/UBCS-WEB/src/views/code/code.vue
+++ b/Source/UBCS-WEB/src/views/code/code.vue
@@ -156,7 +156,7 @@
     >
     </advanced-query>
 
-    <!-- 缂栫爜瑙勫垯鐩稿叧瀵硅瘽妗� -->
+    <!-- 浠ヤ笅鏄紪鐮佽鍒欑浉鍏冲璇濇 -->
     <el-dialog
       :visible.sync="codeRangeSettingBox"
       append-to-body
@@ -177,150 +177,18 @@
     </el-dialog>
 
     <!-- 缂栫爜瑙勫垯,鍏嬮殕瀵硅瘽妗� -->
-    <el-dialog
+    <clone-rule-dialog
       :visible.sync="cloneSettingBox"
-      append-to-body
-      class="avue-dialog avue-dialog--top"
-      style="height: 100vh"
-      title="鍏嬮殕缂栫爜瑙勫垯"
-      top="-3%"
-      width="800px"
-    >
-      <div>
-        <el-row>
-          <el-form ref="form" :inline="true" :model="form" label-width="80px">
-            <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 class="clone-input-textarea" label="鎻忚堪">
-              <el-input
-                v-model="cloneCodeRuleForm.description"
-                :autosize="{ minRows: 3, maxRows: 5 }"
-                type="textarea"
-              ></el-input>
-            </el-form-item>
-          </el-form>
-        </el-row>
-        <el-row>
-          <p
-            style="
-              margin: 0 0px 16px 50%;
-              font-weight: 500;
-              font-size: 20px;
-              color: #000;
-            "
-          >
-            鐮佹绠$悊
-          </p>
-          <avue-crud
-            :data="cloneData"
-            :option="cloneOption"
-            :table-loading="cloneTableLoading"
-            class="clone-avue-crud"
-            @on-load="cloneDataOnLoad"
-          >
-            <template slot="menu" slot-scope="scope">
-              <el-button
-                v-show="scope.row.orderNum > 1"
-                icon="el-icon-arrow-up"
-                plain
-                size="small"
-                type="text"
-                @click="upOrderNum(scope.row)"
-                >涓婄Щ
-              </el-button>
-              <el-button
-                icon="el-icon-arrow-down"
-                plain
-                size="small"
-                type="text"
-                @click="downOrderNum(scope.row)"
-                >涓嬬Щ
-              </el-button>
-            </template>
-          </avue-crud>
-        </el-row>
-      </div>
-      <div slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="saveCloneCodeRule">淇� 瀛�</el-button>
-        <el-button @click="cloneSettingBox = false">鍙� 娑�</el-button>
-      </div>
-    </el-dialog>
+      :ruleData="selectionList[0]"
+      @refreshRuleTable="onLoad">
+    </clone-rule-dialog>
 
     <!-- 缂栫爜瑙勫垯,浠庡叾浠栬鍒欏厠闅嗗璇濇 -->
-    <el-dialog
+    <clone-other-basic-sec-dialog
       :visible.sync="cloneOtherCodeRuleSettingBox"
-      append-to-body
-      class="avue-dialog avue-dialog--top"
-      destroy-on-close
-      style="height: 100vh"
-      title="鍏嬮殕缂栫爜瑙勫垯鐨勫熀纭�淇℃伅"
-      top="-3%"
-      width="800px"
-    >
-      <div>
-        <el-row>
-          <p
-            style="
-              margin-top: -20px;
-              margin-bottom: 4px;
-              font-weight: 570;
-              font-size: 19px;
-              color: #0e2d5f;
-            "
-          >
-            缂栫爜瑙勫垯
-          </p>
-          <avue-crud
-            ref="crudCloneCodeRuleOther"
-            :data="data"
-            :option="cloneCodeRuleOption"
-            :page.sync="page"
-            :table-loading="loading"
-            class="other-clone-coderule-crud"
-            @row-click="codeOtherCloneRuleRowClick"
-            @size-change="sizeChange"
-            @selection-change="selectionOtherCloneCodeRuleChange"
-            @search-change="searchOtherCloneChange"
-            @search-reset="searchOtherCloneReset"
-            @on-load="onLoad"
-          >
-          </avue-crud>
-        </el-row>
-        <el-row style="margin-top: 10px; border-top: 1px solid #ebeef5">
-          <p
-            style="
-              margin-top: 10px;
-              margin-bottom: 4px;
-              font-weight: 570;
-              font-size: 19px;
-              color: #0e2d5f;
-            "
-          >
-            鐮佹淇℃伅
-          </p>
-          <avue-crud
-            ref="crudCloneCodeBasicOther"
-            :data="basicData"
-            :option="cloneBasicOption"
-            :table-loading="loadingBasic"
-            class="other-clone-codebasic-crud"
-            @row-click="codeOtherCloneBasicRowClick"
-            @selection-change="selectionOtherCloneCodeBasicChange"
-          >
-          </avue-crud>
-        </el-row>
-      </div>
-      <div slot="footer" class="dialog-footer" style="height: 50px">
-        <el-button type="primary" @click="saveOtherCodeBasic">淇� 瀛�</el-button>
-        <el-button @click="cloneOtherCodeRuleSettingBox = false"
-          >鍙� 娑�</el-button
-        >
-      </div>
-    </el-dialog>
+      :quiltCloneCodeRule="selectionList[0]"
+      @refreshRuleTable="onLoad">
+    </clone-other-basic-sec-dialog>
 
     <!-- 缂栫爜瑙勫垯,杞Щ鎵�鏈夎�呭璇濇 -->
     <el-dialog
@@ -1414,7 +1282,6 @@
   remove,
   listUseRange,
   updateStatus,
-  clone,
   clearAllCode,
   checkLikeCodeRule,
 } from "@/api/code/mdmrule";
@@ -1424,7 +1291,6 @@
   upOrderNum,
   deleteData,
   editSave,
-  cloneCodeBasic,
   addSave,
   refDataGridClassifySec,
 } from "@/api/code/codebasic";
@@ -1445,9 +1311,6 @@
 } 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";
 import optionRule from "@/const/code/mdmrule";
 import attrOption from "@/const/code/selectAttrOptionDialog";
 import treeOption from "@/const/code/classifyTreeOptionDialog";
@@ -1476,24 +1339,11 @@
       data: [],
       currentRuleLcStatus: "",
 
-      /*鍏嬮殕瀵硅瘽妗嗘帶鍒跺彉閲�*/
+      /*鍏嬮殕缂栫爜瑙勫垯瀵硅瘽妗嗘帶鍒跺彉閲�*/
       cloneSettingBox: false,
-      cloneTableLoading: false,
-      cloneOption: cloneOption,
-      cloneData: [],
-      cloneCodeRuleForm: {
-        id: "",
-        name: "",
-        description: "",
-      },
-      
+
       /*浠庡叾浠栬鍒欏厠闅嗙爜娈�*/
       cloneOtherCodeRuleSettingBox: false,
-      cloneBasicOption: cloneBasicOption,
-      cloneCodeRuleOption: cloneCodeRuleOption,
-      selectionOtherCloneCodeBasicList: [], // 姝ょ晫闈㈠唴褰撳墠閫変腑鐨勫熀纭�鐮佹
-      selectionOtherCloneCodeRuleList: [], // 姝ょ晫闈㈠唴褰撳墠閫変腑鐨勭紪鐮佽鍒�
-      otherCloneQuery: {}, // 鏌ヨ鏉′欢瀵硅薄
 
       /** 杞Щ鎵�鏈夎�呭璇濇 */
       escapeOwnerVisible: false,
@@ -1549,7 +1399,7 @@
       loadingBasic: false,
       selectionBasicList: [],
       addBasicCodeSettingBox: false,
-      showbtn: false, //鍩虹鐮佹鏂板鏄惁鏄剧ず鍩虹鐮佹
+      showbtn: false, //鍩虹鐮佹鏂板鎸夐挳鏄惁绂佺敤
       isLoadingSecCodeAddBtn: false,
       basicSecDialogTitle: "", //鍩虹鐮佹绗竴灞傚璇濇鏍囬
       basicSecOnlyRead: false, //鏂板鍩虹鐮佹琛ㄥ崟鏄惁鍙
@@ -2568,53 +2418,13 @@
         this.updateStatus(oid, update);
       }
     },
-    
+
     /** 鎵撳紑缂栫爜瑙勫垯鍏嬮殕瀵硅瘽妗�*/
     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);
-        }
-      );
-      //console.log(data);
     },
 
     /** 鎵撳紑浠庡叾浠栫紪鐮佽鍒欎腑鍏嬮殕鐮佹瀵硅瘽妗�*/
@@ -2627,99 +2437,6 @@
         return;
       }
       this.cloneOtherCodeRuleSettingBox = true;
-    },
-    /** 浠庡叾浠栫紪鐮佽鍒欎腑鍏嬮殕鐮佹瀵硅瘽妗�-鍗曞嚮缂栫爜瑙勫垯瀹炵幇琛岄�夋嫨*/
-    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.$refs.crudCloneCodeBasicOther.setCurrentRow(
-        this.selectionOtherCloneCodeBasicList[list.length - 1]
-      );
-    },
-    /** 浠庡叾浠栬鍒欏厠闅嗙爜娈电晫闈㈤噸缃悳绱㈠姛鑳� */
-    searchOtherCloneReset() {
-      this.otherCloneQuery = {};
-      this.onLoad(this.page);
-    },
-    /** 浠庡叾浠栬鍒欏厠闅嗙爜娈电晫闈㈡悳绱㈠姛鑳�*/
-    searchOtherCloneChange(params, done) {
-      this.page.currentPage = 1;
-      // 澶氫釜conditionMap杩欐牱浼犲弬锛屽揩閫熸煡璇㈤粯璁ら噰鐢ㄦā绯婃煡璇�
-      let requestData = {};
-      if (params) {
-        Object.keys(params).forEach((key) => {
-          requestData["conditionMap" + "[" + key + "_like]"] =
-            params[key].trim();
-        });
-      }
-      this.otherCloneQuery = requestData;
-      this.onLoad(this.page,requestData);
-      done();
-    },
-    /** 淇濆瓨浠庡叾浠栫紪鐮佽鍒欎腑鍏嬮殕鐮佹淇℃伅*/
-    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;
-      }
-      let oidArr = [];
-      fromDialogPkCodebasic.forEach((ele) => {
-        oidArr.push(ele.oid);
-      });
-      let data = {
-        pkCodeRule: oid,
-        oidArr: oidArr.join(","),
-      };
-      //console.log(data);
-      cloneCodeBasic(data).then(
-        () => {
-          this.cloneOtherCodeRuleSettingBox = false;
-          this.onLoad(this.page);
-          this.$message({
-            type: "success",
-            message: "鎿嶄綔鎴愬姛!",
-          });
-        },
-        (error) => {
-          window.console.log(error);
-        }
-      );
     },
 
     /** 娓呯┖鐮佸��*/
@@ -3235,11 +2952,7 @@
     },
     /** 鐐瑰嚮瑙﹀彂鍔犺浇鍩虹鐮佹淇℃伅*/
     loadBasic(row) {
-      if (this.cloneSettingBox) {
-        this.cloneTableLoading = true;
-      } else {
-        this.loadingBasic = true;
-      }
+      this.loadingBasic = true;
       // console.log(row.oid);
       if (row != "" || row != null) {
         //瀛樺偍褰撳墠鍏宠仈鐨勭紪鐮佽鍒欑浉鍏充俊鎭�
@@ -3272,14 +2985,8 @@
       gridCodeBasicSec(1, -1, isAdancedQuery ? condition : conditionMaps).then(
         (res) => {
           const data = res.data.data;
-          if (this.cloneSettingBox) {
-            this.cloneData = data.records;
-            this.cloneTableLoading = false;
-          } else {
-            this.basicData = data.records;
-            // console.log(this.basicData);
-            this.loadingBasic = false;
-          }
+          this.basicData = data.records;
+          this.loadingBasic = false;
         }
       );
     },
diff --git a/Source/UBCS-WEB/src/views/docking/loge.vue b/Source/UBCS-WEB/src/views/docking/loge.vue
index 574dfaa..64d7cce 100644
--- a/Source/UBCS-WEB/src/views/docking/loge.vue
+++ b/Source/UBCS-WEB/src/views/docking/loge.vue
@@ -14,6 +14,9 @@
                @size-change="sizeChange"
                @refresh-change="refreshChange"
                @on-load="onLoad">
+      <template slot-scope="scope" slot="menuLeft">
+        <vci-docking-search :SearchObject="SearchObject" :page="page"></vci-docking-search>
+      </template>
     </avue-crud>
   </basic-container>
 </template>
@@ -27,6 +30,51 @@
   name: "loge",
   data(){
     return {
+      SearchObject:{
+        type:'loge',
+        searchData:[
+          {
+            label:'鏁版嵁缂栫爜',
+            prop: "id",
+            value:0
+          },
+          {
+            label:'鍒嗙被浠e彿',
+            prop: 'classifyId',
+            value:1
+          },
+          {
+            label:'鍒嗙被鍚嶇О',
+            prop: 'classifyName',
+            value:2
+          },
+          {
+            label:'闆嗘垚绯荤粺缂栧彿',
+            prop: 'systemCode',
+            value:3
+          },
+          {
+            label:'闆嗘垚绯荤粺鍚嶇О',
+            prop: 'systemName',
+            value:4
+          },
+          {
+            label:'绫诲瀷',
+            prop: 'typeText',
+            value:5
+          },
+          {
+            label:'璁板綍鏃堕棿',
+            value:6,
+            prop: 'createTime',
+          },
+          {
+            label:'鏄惁鎴愬姛',
+            prop: 'interfaceStatus',
+            value:7
+          },
+        ],
+      },
       loading: false,
       query: {},
       selectionList: [],
@@ -41,7 +89,7 @@
         calcHeight: 0,
         tip: false,
         searchShow: false,
-        searchMenuSpan: 6,
+        // searchMenuSpan: 12,
         border: true,
         index: true,
         viewBtn: true,
@@ -52,14 +100,12 @@
           {
             label: "鏁版嵁缂栫爜",
             prop: "id",
-            search: true,
             sortable:true,
             width:130
           },
           {
             label: "鍥惧彿",
             prop: "uniqueCode",
-            search: true,
             hide:true,
             sortable:true,
             width:150
@@ -67,7 +113,6 @@
           {
             label: '鍒嗙被浠e彿',
             prop: 'classifyId',
-            search: true,
             sortable:true,
             overHidden:true,
             width: 150
@@ -75,7 +120,6 @@
           {
             label: '鍒嗙被鍚嶇О',
             prop: 'classifyName',
-            search: true,
             sortable:true,
             overHidden: true,
             width: 140
@@ -83,21 +127,18 @@
           {
             label: '闆嗘垚绯荤粺缂栧彿',
             prop: 'systemCode',
-            search: true,
             sortable:true,
             width: 130
           },
           {
             label: '闆嗘垚绯荤粺鍚嶇О',
             prop: 'systemName',
-            search: true,
             sortable:true,
             width: 150
           },
           {
             label: '绫诲瀷',
             prop: 'typeText',
-            search: true,
             sortable:true,
             width: 150
           },
@@ -105,7 +146,6 @@
             label:'鎺ュ彛鍙傛暟',
             prop:'paramString',
             overHidden:true,
-            search: true,
             sortable:true,
             width: 150
           },
@@ -113,7 +153,6 @@
             label:'杩斿洖鍙傛暟',
             prop:'returnString',
             overHidden:true,
-            search: true,
             sortable:true,
             width: 150
           },
@@ -131,7 +170,6 @@
           {
             label: '鏄惁鎴愬姛',
             prop: 'interfaceStatus',
-            search: true,
             sortable:true,
             width: 120,
             html:true,
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java
index 95b8e8f..dc7c752 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/dto/CodeBasicSecDTO.java
@@ -82,7 +82,6 @@
 	 */
 	private String codeSecLength;
 
-
 	/**
 	 * 灞傜骇绫诲瀷
 	 */
@@ -148,7 +147,6 @@
 	 */
 	private String filterSql ;
 
-
 	/**
 	 * 娴佹按鍙疯捣濮嬪��
 	 */
@@ -158,7 +156,6 @@
 	 * 娴佹按鐨勬闀�
 	 */
 	private Integer serialStep;
-
 
 	/**
 	 * 缂栫爜琛ヤ綅鏂瑰紡
@@ -210,7 +207,6 @@
 	 */
 	private String parentClassifySecText;
 
-
 	/**
 	 * 鏄惁鍙互涓虹┖
 	 */
@@ -240,6 +236,7 @@
 	 * 閫夋嫨鐮佹淇℃伅鐨勪富閿泦鍚�
 	 */
 	private String oidArr;
+
 	/**
 	 * 鑾峰彇 鐮佹绫诲瀷
 	 */
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyValue.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyValue.java
index 171542c..7f627a8 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyValue.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeClassifyValue.java
@@ -19,11 +19,11 @@
 @EqualsAndHashCode(callSuper = true)
 public class CodeClassifyValue extends BaseModel {
 
-
 	/**
 	 * 搴忓垪鍖�
 	 */
 	private static final long serialVersionUID = 5238387322464830032L;
+
 	/**
 	 * 鍒嗙被鐮佹涓婚敭
 	 */
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeFixedValue.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeFixedValue.java
index a286bae..eca4ff3 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeFixedValue.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/entity/CodeFixedValue.java
@@ -23,6 +23,7 @@
 	 * 搴忓垪鍖�
 	 */
 	private static final long serialVersionUID = 3392365440606832597L;
+
 	/**
 	 * 鍥哄畾鐮佹涓婚敭
 	 */
diff --git a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeFixedValueVO.java b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeFixedValueVO.java
index ac8e6ee..e4e2355 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeFixedValueVO.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-code-api/src/main/java/com/vci/ubcs/code/vo/pagemodel/CodeFixedValueVO.java
@@ -30,8 +30,6 @@
 	*/
 	private Integer orderNum;
 
-
-
 	/**
 	 * 鑾峰彇 鍥哄畾鐮佹涓婚敭
 	 */
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java
index 9bb7b6f..4647cee 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/revision/model/BaseModel.java
@@ -21,7 +21,7 @@
 		using = ToStringSerializer.class
 	)
 	@ApiModelProperty("涓婚敭id")
-	@TableId(value = "OID",type = IdType.ASSIGN_UUID)
+	@TableId(value = "OID",type = IdType.ASSIGN_ID)
 	private String oid;
 
 	@TableField(value = "id")
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 106b325..a004b76 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
@@ -36,7 +36,7 @@
 	public static <T extends BaseModel> T addDefaultAttrAssimt(T object,String btmName) throws VciBaseException {
 		BaseModel baseModel = object;
 		try {
-			baseModel.setOid(VciBaseUtil.getPk().toUpperCase());
+			baseModel.setOid(VciBaseUtil.getPk());
 			baseModel.setCreateTime(new Date());
 			baseModel.setNameOid(VciBaseUtil.getPk());
 			baseModel.setLastModifyTime(new Date());
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java
index 5aaed90..5f81558 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeBasicSecController.java
@@ -23,6 +23,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.rmi.ServerException;
 import java.util.Collection;
 import java.util.List;
 
@@ -162,7 +163,7 @@
     @PostMapping("/clone")
 	@ApiOperationSupport(order = 10)
 	@ApiOperation(value = "鍏嬮殕鐮佹淇℃伅", notes = "codeBasicSecDTO")
-    public R cloneCodeBasicSec(@RequestBody CodeBasicSecDTO codeBasicSecDTO){
+    public R cloneCodeBasicSec(@RequestBody CodeBasicSecDTO codeBasicSecDTO) throws ServerException {
         VciBaseUtil.alertNotNull(codeBasicSecDTO.getOidArr(),"閫夋嫨鐮佹涓婚敭");
         List<String> oidArr = VciBaseUtil.str2List(codeBasicSecDTO.getOidArr());
         if (CollectionUtils.isEmpty(oidArr)){
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeRuleController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeRuleController.java
index e49b382..34039f6 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeRuleController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/CodeRuleController.java
@@ -48,6 +48,7 @@
 import javax.validation.Valid;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
+import java.rmi.ServerException;
 import java.util.Collection;
 import java.util.Map;
 
@@ -200,7 +201,7 @@
 	@PostMapping("/clone")
 	@ApiOperationSupport(order = 13)
 	@ApiOperation(value = "鍏嬮殕缂栫爜瑙勫垯", notes = "浼犲叆codeRuleDTO")
-	public R cloneCodeRule(@RequestBody CodeRuleDTO codeRuleDTO){
+	public R cloneCodeRule(@RequestBody CodeRuleDTO codeRuleDTO) throws ServerException {
 		return codeRuleService.cloneCodeRule(codeRuleDTO);
 	}
 
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeBasicSecService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeBasicSecService.java
index 95bd055..c985b94 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeBasicSecService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeBasicSecService.java
@@ -17,6 +17,7 @@
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springframework.util.CollectionUtils;
 
+import java.rmi.ServerException;
 import java.util.*;
 
 /**
@@ -41,7 +42,7 @@
 	 * @param codeRuleOid 缂栫爜瑙勫垯涓婚敭
 	 * @return 鎵ц缁撴灉
 	 */
-	boolean batchDeleteSecByCodeRuleOid(String codeRuleOid);
+	boolean batchDeleteSecByCodeRuleOid(String codeRuleOid)throws VciBaseException;
 
 	/**
 	 * 鏍规嵁鐮佹鍒嗙被鐨勭被鍨嬪垽鏂睘鎬ф槸鍚︽槸绌虹殑
@@ -122,7 +123,15 @@
 	 * @param pkCodeRule 鐩爣缂栫爜瑙勫垯
 	 * @return 鍏嬮殕缁撴灉鍙嶉锛氾細success锛氭垚鍔燂紝fail锛氬け璐�
 	 */
-	R cloneCodeBasicSec(List<String> oidList, String pkCodeRule);
+	R cloneCodeBasicSec(List<String> oidList, String pkCodeRule) throws ServerException;
+
+	/**
+	 * 鏀瑰彉鐮佹涓埗鍒嗙被鐮佹鍜屽瓙鍒嗙被鐮佹涔嬮棿鐨勫叧鑱攐id涓烘柊鐨刼id,骞朵笖涓嶇牬鍧忓垎绫荤爜鍊肩殑鍏宠仈鍏崇郴
+	 * @param basicSecs
+	 * @return
+	 * @throws ServerException
+	 */
+	boolean changeParentOidAssnOid(List<CodeBasicSec> basicSecs) throws ServerException;
 
 	/**
 	 * 鏌ヨ鐩爣鍒嗙被鐮佹鎵�鍦ㄧ殑鏍戠粨鏋�
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 52a5ed5..00d59d5 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
@@ -25,6 +25,13 @@
 public interface ICodeClassifyValueService extends IService<CodeClassifyValue> {
 
 	/**
+	 * 鍏嬮殕鍒嗙被鐮佸��
+	 * @param codeClassifyValues
+	 * @return
+	 */
+	boolean cloneCodeClassifyVaue(List<CodeClassifyValue> codeClassifyValues);
+
+	/**
 	 * 鏌ヨ鍒嗙被鐮佹鐨勭爜鍊� 鏍�
 	 * @param treeQueryObject 鏍戞煡璇㈠璞�
 	 * @return 鍒嗙被鐮佹鐨勭爜鍊� 鏄剧ず鏍�
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 9dae445..e147304 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
@@ -7,8 +7,6 @@
 import com.vci.ubcs.code.vo.pagemodel.CodeFixedValueVO;
 import com.vci.ubcs.starter.exception.VciBaseException;
 import org.springblade.core.tool.api.R;
-import org.springframework.data.domain.Page;
-
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -102,4 +100,11 @@
 	 */
 	boolean batchDeleteBySecOid(String codefixedsecoid);
 
+	/**
+	 * 鏍规嵁codeFixedSecOid鏌ヨ鐮佸��
+	 * @param codeFixedSecOids
+	 * @return
+	 */
+	List<CodeFixedValue> listFixedValueByCodeFixedSecOid(List<String> codeFixedSecOids);
+
 }
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeRuleService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeRuleService.java
index e65a4a4..e68c5e7 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeRuleService.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/ICodeRuleService.java
@@ -27,6 +27,7 @@
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 
+import java.rmi.ServerException;
 import java.util.Collection;
 import java.util.Map;
 
@@ -144,7 +145,7 @@
 	 * @param codeRuleDTO 涓绘暟鎹紪鐮佽鍒欐暟鎹紶杈撳璞★紝oid鍜宼s闇�瑕佷紶杈�
 	 * @return 涓绘暟鎹紪鐮佽鍒欐樉绀哄璞�
 	 */
-	R cloneCodeRule(CodeRuleDTO codeRuleDTO) throws VciBaseException;
+	R cloneCodeRule(CodeRuleDTO codeRuleDTO) throws VciBaseException, ServerException;
 
 	/**
 	 * 缂栫爜瑙勫垯娓呯┖鎵�鏈夊凡鐢熸垚鐨勭紪鐮�
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IPasswordFreeLoginService.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IPasswordFreeLoginService.java
new file mode 100644
index 0000000..c202116
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/IPasswordFreeLoginService.java
@@ -0,0 +1,18 @@
+package com.vci.ubcs.code.service;
+
+/**
+ * 鍏嶅瘑鐧诲綍鏈嶅姟
+ * @author ludc
+ * @date 2023/9/11 15:46
+ */
+public interface IPasswordFreeLoginService {
+
+	/**
+	 * 鍏嶅瘑鐧诲綍鏂规硶
+	 * @param account 璐﹀彿
+	 * @return
+	 */
+	boolean passwordFreeLogin(String account);
+
+
+}
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 ea4666f..1123541 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
@@ -52,6 +52,7 @@
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+import java.rmi.ServerException;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -114,7 +115,7 @@
 	/**
 	 * 涓婂眰鍒嗙被鐮佹鐨勫睘鎬у悕绉�
 	 */
-	private static  final String PARENT_FIELD_NAME = "parentclassifysecoid";
+	private static  final String PARENT_FIELD_NAME = "parentClassifySecOid";
 
 	/**
 	 * 涓婄骇鍒嗙被鐮佸�肩殑灞炴�у悕绉�
@@ -170,10 +171,10 @@
 			// 灏嗚浣滀负鍒犻櫎鏉′欢鐨勫�兼斁鍦ㄤ竴涓泦鍚堥噷闈�
 			Set<String> fixedSecOidSet = fixedSecList.stream().map(CodeBasicSec::getOid).collect(Collectors.toSet());
 			// 閫氳繃澶栭敭杩涜鏌ヨ
-			List<CodeFixedValue> fixedValueS = fixedValueMapper.selectList(Wrappers.<CodeFixedValue>query().lambda().in(CodeFixedValue::getCodeFixedSecOid,fixedSecOidSet));
-			if(!fixedValueS.isEmpty()){
+			List<CodeFixedValue> fixedValues = fixedValueMapper.selectList(Wrappers.<CodeFixedValue>query().lambda().in(CodeFixedValue::getCodeFixedSecOid,fixedSecOidSet));
+			if(!fixedValues.isEmpty()){
 				// 鏍规嵁鏌ヨ鍑烘潵鐨刬d鎵ц鍥哄畾鐮佹鎵ц鍒犻櫎
-				deletFlag = fixedValueMapper.deleteBatchIds(fixedValueS.stream().map(CodeFixedValue::getOid).collect(Collectors.toSet()))>0;
+				deletFlag = fixedValueMapper.deleteBatchIds(fixedValues.stream().map(CodeFixedValue::getOid).collect(Collectors.toSet()))>0;
 			}
 		}
 		// 4銆佸啀鍒犻櫎鍒嗙被鐮佹
@@ -184,10 +185,10 @@
 			// 灏嗚浣滀负鍒犻櫎鏉′欢鐨勫�兼斁鍦ㄤ竴涓泦鍚堥噷闈�
 			Set<String> classifySecOidSet = classifySecList.stream().map(CodeBasicSec::getOid).collect(Collectors.toSet());
 			// 閫氳繃澶栭敭杩涜鏌ヨ
-			List<CodeClassifyValue> fixedValueS = codeClassifyValueMapper.selectList(Wrappers.<CodeClassifyValue>query().lambda().in(CodeClassifyValue::getCodeClassifySecOid,classifySecOidSet));
-			if(!fixedValueS.isEmpty()){
+			List<CodeClassifyValue> codeClassifyValues = codeClassifyValueMapper.selectList(Wrappers.<CodeClassifyValue>query().lambda().in(CodeClassifyValue::getCodeClassifySecOid,classifySecOidSet));
+			if(!codeClassifyValues.isEmpty()){
 				// 鏍规嵁鏌ヨ鍑烘潵鐨勪富閿甶d鎵ц鍥哄畾鐮佹鎵ц鍒犻櫎
-				deletFlag = fixedValueMapper.deleteBatchIds(fixedValueS.stream().map(CodeClassifyValue::getOid).collect(Collectors.toSet()))>0;
+				deletFlag = codeClassifyValueMapper.deleteBatchIds(codeClassifyValues.stream().map(CodeClassifyValue::getOid).collect(Collectors.toSet()))>0;
 			}
 		}
 		return deletFlag;
@@ -574,7 +575,7 @@
 	 */
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public R cloneCodeBasicSec(List<String> oidList, String pkCodeRule) throws ServiceException {
+	public R cloneCodeBasicSec(List<String> oidList, String pkCodeRule) throws ServiceException, ServerException {
 		boolean isLinked = checkIsLinked(pkCodeRule,null);
 		if (isLinked) {
 			return R.fail("缂栫爜瑙勫垯宸茶寮曠敤锛屼笉鍏佽缂栬緫鎴栧垹闄�");
@@ -584,20 +585,96 @@
 		if(basicSecDOS.isEmpty()){
 			return R.fail("鍏嬮殕鐨勭爜娈典俊鎭笉瀛樺湪锛�");
 		}
-		basicSecDOS.forEach(sec -> {
+		List<CodeBasicSec> codeClassifySec = new ArrayList<>();
+		Map<String,List<CodeFixedValue>> codeFixedValueMaps = new HashMap<>();
+		for (CodeBasicSec sec : basicSecDOS) {
 			CodeBasicSec newSecDO = new CodeBasicSec();
 			BeanUtilForVCI.copyPropertiesIgnoreCase(sec,newSecDO);
-			newSecDO.setOid(VciBaseUtil.getPk());
-			newSecDO.setNameOid(VciBaseUtil.getPk());
-			newSecDO.setRevisionOid(VciBaseUtil.getPk());
-			newSecDO.setId(newSecDO.getId() + "_copy");
-			newSecDO.setName(newSecDO.getName() + "_copy");
+			String oldBasicOid = newSecDO.getOid();
+			newSecDO.setId(newSecDO.getId());
+			newSecDO.setName(newSecDO.getName());
 			newSecDO.setPkCodeRule(pkCodeRule);
+			// 鍒ゆ柇鏄惁鏄垎绫荤爜娈�,涓氬姟閫昏緫绋嶅井澶嶆潅涓�鐐规墍浠ラ渶瑕佸厛鎻愬嚭鏉ュ崟鐙鐞�
+			if(newSecDO.getSecType().equals(CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue())){
+				// 瀛樺偍鏃х殑鐮佹oid鍜屾柊鐨勭爜娈电殑oid鐨勫叧鑱斿叧绯�
+				codeClassifySec.add(newSecDO);
+				continue;
+			}
+			// 鏇存敼鍒涘缓鏃堕棿锛屼慨鏀规椂闂寸瓑榛樿鍊�
+			DefaultAttrAssimtUtil.addDefaultAttrAssimt(newSecDO,MdmBtmTypeConstant.CODE_BASIC_SEC);
+			//鍥哄畾鐮佹
+			if(newSecDO.getSecType().equals(CodeSecTypeEnum.CODE_FIXED_SEC.getValue())){
+				// 鍥哄畾鐮佹瀛樺偍濂給id鍜岀爜鍊肩殑鍏宠仈鍏崇郴
+				codeFixedValueMaps.put(newSecDO.getOid(),fixedValueService.list(Wrappers.<CodeFixedValue>query()
+					.lambda().eq(CodeFixedValue::getCodeFixedSecOid, oldBasicOid)
+				));
+			}
 			createList.add(newSecDO);
-		});
+		}
+		// 澶勭悊鍒嗙被鐮佹鐨刼id锛屽洜涓簅id鍏宠仈parentClassifyOid锛屼笌鐮佸�糲odeClassifyOid锛岀爜鍊煎張闇�瑕侀�氳繃鏃х殑鐮佹oid鏉ユ煡璇紝鎵�浠ヤ笉鑳界洿鎺ユ敼鍙榦id
+		boolean resChangeAssn = changeParentOidAssnOid(codeClassifySec);
+		// 灏嗗鐞嗚繃鐨勫垎绫荤爜娈典篃娣诲姞杩涜鍋氭柊澧炲鐞嗙殑鐮佹闆嗗悎涓�
+		createList.addAll(codeClassifySec);
 		boolean resBoolean = saveBatch(createList);
-		//codeBasicSecMapper.insertBatch(createList);
-		return resBoolean ? R.data(resBoolean,"鍏嬮殕鐮佹淇℃伅鎴愬姛"):R.fail("鍏嬮殕鐮佹淇℃伅澶辫触锛�");
+		// 鏈�缁堣瀛樺叆鐮佸�艰〃涓殑锛岀爜鍊煎璞�
+		List<CodeFixedValue> codeFixedDOValues = new ArrayList<>();
+		// 鏋勯�犵爜鍊煎璞★紝涓庣爜娈典富閿叧鑱斿叧绯伙紝浠ュ強鏀瑰彉鍥哄畾鐮佸�肩殑oid
+		codeFixedValueMaps.forEach((key, value) -> {
+			value.stream().forEach(item -> {
+				item.setOid("");
+				item.setCodeFixedSecOid(key);
+				DefaultAttrAssimtUtil.updateDefaultAttrAssimt(item);
+				codeFixedDOValues.add(item);
+			});
+		});
+		// 鍏嬮殕鍥哄畾鐮佸��
+		boolean resFixed = fixedValueService.saveBatch(codeFixedDOValues);
+		return (resBoolean&&resFixed&&resChangeAssn) ? R.data(resBoolean,"鍏嬮殕鐮佹淇℃伅鎴愬姛"):R.fail("鍏嬮殕鐮佹淇℃伅澶辫触锛�");
+	}
+
+	/**
+	 * 鏀瑰彉鐮佹涓埗鍒嗙被鐮佹鍜屽瓙鍒嗙被鐮佹涔嬮棿鐨勫叧鑱攐id涓烘柊鐨刼id,骞朵笖涓嶇牬鍧忓垎绫荤爜鍊肩殑鍏宠仈鍏崇郴
+	 * @param basicSecs
+	 * @return
+	 * @throws ServerException
+	 */
+	@Override
+	public boolean changeParentOidAssnOid(List<CodeBasicSec> basicSecs) throws ServerException {
+		Map<String, List<CodeClassifyValue>> codeClassValues = new HashMap<>();
+		List<CodeClassifyValue> codeClassifyDOValues = new ArrayList<>();
+		HashMap<String, String> oidMap = new HashMap<>();
+		boolean resClone = false;
+		try {
+			// 閬嶅巻瀵硅薄鏁扮粍锛屼负姣忎釜瀵硅薄鐢熸垚鏂扮殑oid锛屽苟灏嗗師濮媜id鍜屾柊oid鐨勬槧灏勫叧绯诲瓨鍌ㄥ埌Map涓�
+			for (CodeBasicSec obj : basicSecs) {
+				String originalOid = obj.getOid();
+				String newOid = VciBaseUtil.getPk();
+				oidMap.put(originalOid, newOid);
+			}
+			// 閬嶅巻瀵硅薄鏁扮粍锛屾洿鏂版瘡涓璞$殑oid鍜宑odeClassifySecOid灞炴�у��
+			for (CodeBasicSec obj : basicSecs) {
+				String originalOid = obj.getOid();
+				String newOid = oidMap.get(originalOid);
+				// 鏂扮殑oid鍏宠仈瑕佸厠闅嗙爜鍊�
+				codeClassValues.put(newOid,codeClassifyValueService.list(Wrappers.<CodeClassifyValue>query()
+					.lambda().eq(CodeClassifyValue::getCodeClassifySecOid, originalOid)));
+				obj.setOid(newOid);
+				String originalParentClassifyValueOid = obj.getParentClassifySecOid();
+				String newParentClassifyValueOid = oidMap.get(originalParentClassifyValueOid);
+				obj.setParentClassifySecOid(newParentClassifyValueOid);
+			}
+			codeClassValues.forEach((key, value) -> {
+				value.stream().forEach(item -> {
+					DefaultAttrAssimtUtil.updateDefaultAttrAssimt(item);
+					item.setCodeClassifySecOid(key);
+					codeClassifyDOValues.add(item);
+				});
+			});
+			resClone = codeClassifyValueService.cloneCodeClassifyVaue(codeClassifyDOValues);
+		}catch (Exception e){
+			throw new ServerException("鐖跺垎绫荤爜娈靛拰瀛愬垎绫荤爜娈礳lone杞崲oid鏃跺嚭閿欙細"+e.getCause());
+		}
+		return resClone;
 	}
 
 	/**
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 132ea09..88770ac 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
@@ -61,6 +61,33 @@
 	private static final String PARENT_FIELD_NAME = "parentClassifyValueOid";
 
 	/**
+	 * 鍏嬮殕鍒嗙被鐮佸��
+	 * @param codeClassifyValues
+	 * @return
+	 */
+	@Override
+	public boolean cloneCodeClassifyVaue(List<CodeClassifyValue> codeClassifyValues) {
+		// 鍒涘缓Map瀵硅薄锛岀敤浜庡瓨鍌ㄥ師濮媜id鍜屾柊oid鐨勬槧灏勫叧绯�
+		Map<String, String> oidMap = new HashMap<>();
+		// 閬嶅巻瀵硅薄鏁扮粍锛屼负姣忎釜瀵硅薄鐢熸垚鏂扮殑oid锛屽苟灏嗗師濮媜id鍜屾柊oid鐨勬槧灏勫叧绯诲瓨鍌ㄥ埌Map涓�
+		for (CodeClassifyValue obj : codeClassifyValues) {
+			String originalOid = obj.getOid();
+			String newOid = VciBaseUtil.getPk();
+			oidMap.put(originalOid, newOid);
+		}
+		// 閬嶅巻瀵硅薄鏁扮粍锛屾洿鏂版瘡涓璞$殑oid鍜宑odeClassifySecOid灞炴�у��
+		for (CodeClassifyValue obj : codeClassifyValues) {
+			String originalOid = obj.getOid();
+			String newOid = oidMap.get(originalOid);
+			obj.setOid(newOid);
+			String originalParentClassifyValueOid = obj.getParentClassifyValueOid();
+			String newParentClassifyValueOid = oidMap.get(originalParentClassifyValueOid);
+			obj.setParentClassifyValueOid(newParentClassifyValueOid);
+		}
+		return this.saveBatch(codeClassifyValues);
+	}
+
+	/**
 	 * 鏌ヨ鍒嗙被鐮佹鐨勭爜鍊� 鏍�
 	 * @param treeQueryObject 鏍戞煡璇㈠璞�
 	 * @return 鍒嗙被鐮佹鐨勭爜鍊� 鏄剧ず鏍�
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 97fc88d..47d537f 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
@@ -3,6 +3,7 @@
 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.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 import com.vci.ubcs.code.dto.CodeFixedValueDTO;
@@ -24,7 +25,6 @@
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -74,6 +74,24 @@
 	}
 
 	/**
+	 * 鏍规嵁codeFixedSecOid鏌ヨ鐮佸��
+	 * @param codeFixedSecOids
+	 * @return
+	 */
+	@Override
+	public List<CodeFixedValue> listFixedValueByCodeFixedSecOid(List<String> codeFixedSecOids){
+		if(codeFixedSecOids.isEmpty()){
+			return new ArrayList<CodeFixedValue>();
+		}
+		/*List<CodeFixedValue> codeFixedValues = codeFixedValueMapper.selectList(
+			Wrappers.<CodeFixedValue>query().lambda()
+				.in(CodeFixedValue::getCodeFixedSecOid, codeFixedSecOids)
+		);*/
+		List<CodeFixedValue> codeFixedValues = codeFixedValueMapper.selectByPageByCodeFixedSecOid(codeFixedSecOids, new Page<>(1, -1));
+		return codeFixedValues;
+	}
+
+	/**
 	 * 澧炲姞鍥哄畾鐮佹鐨勭爜鍊�
 	 * @param codeFixedValueDTO 鍥哄畾鐮佹鐨勭爜鍊兼暟鎹紶杈撳璞�
 	 * @return 鎵ц缁撴灉
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 be398aa..5d8bd08 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
@@ -17,6 +17,7 @@
 package com.vci.ubcs.code.service.impl;
 
 import com.alibaba.cloud.commons.lang.StringUtils;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -48,6 +49,7 @@
 import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
 import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import com.vci.ubcs.starter.web.util.WebUtil;
+import com.vci.ubcs.system.cache.NacosConfigCache;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.AuthUtil;
@@ -64,6 +66,7 @@
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
+import java.rmi.ServerException;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -110,10 +113,14 @@
 	@Resource
 	private RevisionModelUtil revisionModelUtil;
 
-	@Value("${user-info.tenant-id}")
-	private String tenantId;
-	@Value("${user-info.id}")
-	private String userId;
+	@Resource
+	private NacosConfigCache nacosConfigCache;
+
+	@Resource
+	private ICodeFixedValueService codeFixedValueService;
+
+	@Resource
+	private ICodeClassifyValueService codeClassifyValueService;
 
 	/**
 	 * 鍒嗛〉鏌ヨ
@@ -124,7 +131,9 @@
 	@Override
 	public IPage<CodeRuleVO> gridCodeRule(Query query, Map<String,Object> conidtionMap) {
 		//濡傛灉绛変簬鑷繁閰嶇疆鐨勭鐞嗙粍绉熸埛id鍜岀鐞嗙粍瓒呯璐﹀彿锛屽氨涓嶉渶瑕佹寜鐓ц鍒欐墍鏈夎�呮潵杩涜鏌ヨ
-		if(!(AuthUtil.getTenantId().equals(this.tenantId) && AuthUtil.getUserId().toString().equals(this.userId))){
+		if(!(AuthUtil.getTenantId().equals(nacosConfigCache.getAdminUserInfo().getTenantId())
+			&& AuthUtil.getUserId().toString().equals(nacosConfigCache.getAdminUserInfo().getUserId().toString()))
+		){
 			// 鎸夌収瑙勫垯鎵�鏈夎�呮潵鏌ヨ
 			conidtionMap.put("owner",AuthUtil.getUserId());
 		}
@@ -162,14 +171,17 @@
 	 */
 	@Override
 	public boolean checkCodeRuleRepeat(CodeRuleDTO codeRuleDTO){
+		LambdaQueryWrapper<CodeRule> wrapper = Wrappers.<CodeRule>query()
+			.lambda().eq(CodeRule::getId, codeRuleDTO.getId());
+		if(AuthUtil.getTenantId().equals(nacosConfigCache.getAdminUserInfo().getTenantId())){
+			wrapper.eq(CodeRule::getTenantId,codeRuleDTO.getTenantId());
+		}
 		// 鏍规嵁瑙勫垯id鏌ヨ缂栧彿
-		List<CodeRule> codeRulesList = this.codeRuleMapper.selectList(Wrappers.<CodeRule>query()
-			.lambda().eq(CodeRule::getId, codeRuleDTO.getId())
-			.eq(CodeRule::getTenantId,AuthUtil.getTenantId().equals(this.tenantId) ? "":codeRuleDTO.getTenantId()));
+		List<CodeRule> codeRulesList = this.codeRuleMapper.selectList(wrapper);
 		if(!codeRulesList.isEmpty()){
 			return codeRulesList.parallelStream().anyMatch(codeRule -> {
 				if(StringUtils.isNotBlank(codeRuleDTO.getOid())){
-					// 浠h〃鏄慨鏀癸紝涓嶆槸灏嗙紪鍙蜂慨鏀圭浉鍚岀殑缂栧彿
+					// 浠h〃鏄慨鏀硅鍒欙紝涓嶆槸灏嗙紪鍙蜂慨鏀逛负宸插瓨鍦ㄧ殑鐨勭紪鍙�
 					return !codeRule.getOid().equals(codeRuleDTO.getOid());
 				}else {
 					return true;
@@ -465,14 +477,21 @@
 	 */
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public R cloneCodeRule(CodeRuleDTO codeRuleDTO) {
+	public R cloneCodeRule(CodeRuleDTO codeRuleDTO) throws ServerException {
+		if(checkCodeRuleRepeat(codeRuleDTO)){
+			return R.fail("瑙勫垯缂栧彿宸插瓨鍦紒");
+		}
 		VciBaseUtil.alertNotNull(codeRuleDTO, "闇�瑕佹坊鍔犵殑鏁版嵁瀵硅薄");
 		CodeRule codeRuleDO = new CodeRule();
+		DefaultAttrAssimtUtil.addDefaultAttrAssimt(codeRuleDO,MdmBtmTypeConstant.CODE_RULE);
 		BeanUtilForVCI.copyPropertiesIgnoreCase(codeRuleDTO, codeRuleDO);
 		boolean exFlag = codeRuleMapper.insert(codeRuleDO)>0;
 		List<CodeBasicSecDTO> secList = codeRuleDTO.getElements();
 		List<CodeBasicSec> codeBasicSecs = new ArrayList<>();
-		secList.forEach(codeBasicSecDTO -> {
+		List<CodeBasicSec> codeClassifySec = new ArrayList<>();
+		// 鍥哄畾鐮佸�兼槧灏勫叧绯�
+		Map<String,List<CodeFixedValue>> codeFixedValueMaps = new HashMap<>();
+		for (CodeBasicSecDTO codeBasicSecDTO : secList) {
 			codeBasicSecDTO.setPkCodeRule(codeRuleDO.getOid());
 			KeyValue attrKv = codeBasicSecService.checkAttrNullableBySecType(codeBasicSecDTO);
 			if (!"success".equals(attrKv.getKey())) {
@@ -480,13 +499,43 @@
 			}
 			CodeBasicSec codeBasicSecDO = new CodeBasicSec();
 			BeanUtilForVCI.copyPropertiesIgnoreCase(codeBasicSecDTO, codeBasicSecDO);
-			codeBasicSecDO.setOid("");
-			codeBasicSecDO.setRevisionOid("");
-			codeBasicSecDO.setNameOid("");
+			String oldBasicOid = codeBasicSecDO.getOid(); //琚厠闅嗙殑鐮佹鐨刼id
+			// 鍒ゆ柇鏄惁鏄垎绫荤爜娈�
+			if(codeBasicSecDO.getSecType().equals(CodeSecTypeEnum.CODE_CLASSIFY_SEC.getValue())){
+				// 瀛樺偍鏃х殑鐮佹oid鍜屾柊鐨勭爜娈电殑oid鐨勫叧鑱斿叧绯�
+				codeClassifySec.add(codeBasicSecDO);
+				continue;
+			}
+			// 鏇存敼鍒涘缓鏃堕棿锛屼慨鏀规椂闂寸瓑榛樿鍊�
+			DefaultAttrAssimtUtil.addDefaultAttrAssimt(codeBasicSecDO,MdmBtmTypeConstant.CODE_BASIC_SEC);
+			// 鍥哄畾鐮佹
+			if(codeBasicSecDO.getSecType().equals(CodeSecTypeEnum.CODE_FIXED_SEC.getValue())){
+				// 鍥哄畾鐮佹瀛樺偍濂給id鍜岀爜鍊肩殑鍏宠仈鍏崇郴
+				codeFixedValueMaps.put(codeBasicSecDO.getOid(),codeFixedValueService.list(Wrappers.<CodeFixedValue>query()
+					.lambda().eq(CodeFixedValue::getCodeFixedSecOid, oldBasicOid)
+				));
+			}
 			codeBasicSecs.add(codeBasicSecDO);
-		});
+		}
+		// 澶勭悊鍒嗙被鐮佹鐨刼id锛屽洜涓簅id鍏宠仈parentClassifyOid锛屼笌鐮佸�糲odeClassifyOid锛岀爜鍊煎張闇�瑕侀�氳繃鏃х殑鐮佹oid鏉ユ煡璇紝鎵�浠ヤ笉鑳界洿鎺ユ敼鍙榦id
+		boolean resChangeAssn = codeBasicSecService.changeParentOidAssnOid(codeClassifySec);
+		// 灏嗗鐞嗚繃鐨勫垎绫荤爜娈典篃娣诲姞杩涜鍋氭柊澧炲鐞嗙殑鐮佹闆嗗悎涓�
+		codeBasicSecs.addAll(codeClassifySec);
+		// 鏂板鐮佹
 		boolean exFlag1 = this.codeBasicSecService.saveBatch(codeBasicSecs);
-		return R.data(exFlag&&exFlag1);
+		// 鏈�缁堣瀛樺叆鐮佸�艰〃涓殑锛岀爜鍊煎璞�
+		List<CodeFixedValue> codeFixedDOValues = new ArrayList<>();
+		// 鏋勯�犵爜鍊煎璞★紝涓庣爜娈典富閿叧鑱斿叧绯伙紝浠ュ強鏀瑰彉鐮佸�肩殑oid
+		codeFixedValueMaps.forEach((key, value) -> {
+			value.stream().forEach(item -> {
+				item.setOid("");
+				item.setCodeFixedSecOid(key);
+				DefaultAttrAssimtUtil.updateDefaultAttrAssimt(item);
+				codeFixedDOValues.add(item);
+			});
+		});
+		boolean exFlag2 = codeFixedValueService.saveBatch(codeFixedDOValues) && resChangeAssn;
+		return R.data(exFlag&&exFlag1&&exFlag2);
 	}
 
 	/**
diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/PasswordFreeLoginServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/PasswordFreeLoginServiceImpl.java
new file mode 100644
index 0000000..ef70cbe
--- /dev/null
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/PasswordFreeLoginServiceImpl.java
@@ -0,0 +1,31 @@
+package com.vci.ubcs.code.service.impl;
+
+import com.vci.ubcs.code.service.IPasswordFreeLoginService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * 鍏嶅瘑鐧诲綍鏈嶅姟
+ * @author ludc
+ * @date 2023/9/11 15:45
+ */
+@Service
+public class PasswordFreeLoginServiceImpl implements IPasswordFreeLoginService {
+
+
+	/**
+	 * 鍏嶅瘑鐧诲綍鏂规硶
+	 * @param account 璐﹀彿
+	 * @return
+	 */
+	@Override
+	public boolean passwordFreeLogin(String account) {
+
+
+
+		return false;
+	}
+
+
+}

--
Gitblit v1.9.3