From 74cac758319c66a5544a022362c0c61165138407 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期三, 26 七月 2023 15:03:30 +0800
Subject: [PATCH] Merge branch 'master' of http://dev.vci-tech.com:1065/r/ubcs

---
 Source/UBCS-WEB/src/components/template/FlowPath.vue    |  156 +++---
 Source/UBCS-WEB/src/components/template/Stage.vue       |   20 
 Source/UBCS-WEB/src/api/system/statistic.js             |   11 
 Source/UBCS-WEB/src/components/basic-container/main.vue |    6 
 Source/UBCS-WEB/src/views/wel/Statistic.vue             |  150 ++++++
 Source/UBCS-WEB/src/api/system/user.js                  |   15 
 Source/UBCS-WEB/src/views/wel/index.vue                 |  796 ++++++-----------------------------
 Source/UBCS-WEB/src/components/Crud/VciMasterCrud.vue   |  115 ++++
 Source/UBCS-WEB/src/components/Tree/TemplatePro.vue     |    8 
 Source/UBCS-WEB/src/components/Tree/attrCrud.vue        |   28 
 10 files changed, 547 insertions(+), 758 deletions(-)

diff --git a/Source/UBCS-WEB/src/api/system/statistic.js b/Source/UBCS-WEB/src/api/system/statistic.js
new file mode 100644
index 0000000..fc60966
--- /dev/null
+++ b/Source/UBCS-WEB/src/api/system/statistic.js
@@ -0,0 +1,11 @@
+import request from '@/router/axios';
+
+export const getList = (url, params) => {
+  return request({
+    url: url,
+    method: 'get',
+    params: {
+      ...params
+    }
+  })
+}
diff --git a/Source/UBCS-WEB/src/api/system/user.js b/Source/UBCS-WEB/src/api/system/user.js
index 855786d..f0e5d18 100644
--- a/Source/UBCS-WEB/src/api/system/user.js
+++ b/Source/UBCS-WEB/src/api/system/user.js
@@ -158,4 +158,17 @@
       roleName
     }
   })
-}
\ No newline at end of file
+}
+
+// 棣栭〉浠e姙娴佺▼浠诲姟鏌ヨ
+export const getUndoTaskList =(current, size, params) => {
+  return request({
+    url: '/api/ubcs-flow/work/send-list',
+    method: 'get',
+    params:{
+      ...params,
+      current,
+      size
+    }
+  })
+}
diff --git a/Source/UBCS-WEB/src/components/Crud/VciMasterCrud.vue b/Source/UBCS-WEB/src/components/Crud/VciMasterCrud.vue
index 87b0057..d04c8ff 100644
--- a/Source/UBCS-WEB/src/components/Crud/VciMasterCrud.vue
+++ b/Source/UBCS-WEB/src/components/Crud/VciMasterCrud.vue
@@ -261,9 +261,13 @@
   created() {
   },
   mounted() {
+
   },
   activated() {
     // this.doLayout();
+    this.$nextTick(() => {
+      this.$refs.dataTable.doLayout()
+    })
   },
   watch: {
     tableHeadDataFateher: {
@@ -302,8 +306,6 @@
           }
         })
         this.tableHeadFindDatas = newval;
-        console.log('newval',newval)
-        console.log('newval',this.tableHeadFindData)
       },
     },
     total: {
@@ -340,7 +342,6 @@
       }
     },
     openVis(visible) {
-      console.log(visible)
       this[visible] = true
     },
     handelBtnClick(event) {
@@ -439,16 +440,16 @@
       if (this.selectRow.length <= 0) {
         this.$message.warning("璇烽�夋嫨涓�鏉℃暟鎹�");
       } else {
-        let hasEditing = this.selectRow.some(item => item.lcstatus == 'Released');
+        let hasEditing = this.selectRow.every(item => item.lcstatus == 'Released');
         let showMessage = true;
         this.selectRow.forEach(item => {
           if (this.selectRow.length === 1 && item.lcstatus === "Disabled" && showMessage) {
             this.$message.warning('閫夋嫨鐨勬暟鎹腑鐘舵�佹棤闇�鍐嶆墽琛屽綋鍓嶆搷浣�');
             showMessage = false;
-          }  else if (this.selectRow.length >1 && !hasEditing  && showMessage) {
+          }  else if (this.selectRow.length >=1 && !hasEditing  && showMessage) {
             this.$message.warning('鎮ㄩ�夋嫨鐨勬暟鎹叏閮ㄤ负銆愬彂甯冪姸鎬併�戞墠鍙互鍙戣捣娴佺▼');
             showMessage = false;
-          } else if (this.selectRow.length >= 1 && hasEditing && showMessage) {
+          } else if (this.selectRow.length > 1 && hasEditing && showMessage) {
             processTS({ templateId: this.templateOid, buttonTypeKey: 'PUBLIC' }).then(res => {
               if (res.data.records != [] && res.data.code != 200) {
                 this.userName = localStorage.getItem("username");
@@ -494,7 +495,53 @@
       if (this.selectRow.length <= 0) {
         this.$message.warning("璇烽�夋嫨涓�鏉℃暟鎹�");
       } else {
-
+        let hasEditing = this.selectRow.every(item => item.lcstatus == 'Disabled');
+        console.log('hasEditing',hasEditing)
+        let showMessage = true;
+        this.selectRow.forEach(item => {
+          if (this.selectRow.length === 1 && item.lcstatus !== "Disabled" && showMessage) {
+            this.$message.warning('閫夋嫨鐨勬暟鎹腑鐘舵�佹棤闇�鍐嶆墽琛屽綋鍓嶆搷浣�');
+            showMessage = false;
+          } else if (this.selectRow.length >=1 && hasEditing && showMessage) {
+            processTS({ templateId: this.templateOid, buttonTypeKey: 'PUBLIC' }).then(res => {
+              if (res.data.records != [] && res.data.code != 200) {
+                this.userName = localStorage.getItem("username");
+                this.parameter.template = this.userName + "鍚敤" + "[鐗╁搧]";
+                this.parameter.type = 'Released'
+                this.title = '鍚敤缂栫爜鏁版嵁'
+                this.visibleDeactivate = true;
+              } else {
+                if (showMessage) {
+                  showMessage = false; // 鏍囪宸叉墽琛岃繃鎿嶄綔
+                  this.$confirm('褰撳墠鍒嗙被娌℃湁娣诲姞娴佺▼妯℃澘锛屾槸鍚︿笉鐢ㄦ祦绋嬪鎵圭洿鎺ユ墽琛�?', '鎻愮ず', {
+                    confirmButtonText: '纭畾',
+                    cancelButtonText: '鍙栨秷',
+                    type: 'warning'
+                  }).then(() => {
+                    const index = this.$route.query.id.indexOf('@');
+                    const result = this.$route.query.id.substring(0, index);
+                    const oid = this.selectRow.map(obj => obj.oid).join(",");
+                    changeStatus({ oid: oid, btmname: result, lcStatus: 'Released' }).then(res => {
+                      console.log(res);
+                      if(res.data.code == 200 ){
+                        this.$message.success('鍚敤鎴愬姛')
+                        this.onLoad()
+                      }
+                    });
+                  }).catch(() => {
+                    this.$message({
+                      type: 'info',
+                      message: '宸插彇娑�'
+                    });
+                  });
+                }
+              }
+            });
+          } else if (this.selectRow.length >1 && !hasEditing  && showMessage) {
+            this.$message.warning('鎮ㄩ�夋嫨鐨勬暟鎹叏閮ㄤ负銆愬仠鐢ㄧ姸鎬併�戞墠鍙互鍙戣捣娴佺▼');
+            showMessage = false;
+          }
+        });
       }
     },
     //鍥炴敹
@@ -502,7 +549,59 @@
       if (this.selectRow.length <= 0) {
         this.$message.warning("璇烽�夋嫨涓�鏉℃暟鎹�");
       } else {
-
+        // 缂栬緫涓�-鍙兘鍙戝竷锛屼笉鑳藉洖鏀�
+        // 瀹℃牳涓�-浠�涔堥兘涓嶈兘鍋�
+        // 宸插彂甯�-鍋滅敤銆佸洖鏀�
+        // 鍋滅敤-鍙兘鍚敤銆佸洖鏀�
+        const disabledCount = this.selectRow.filter(item => item.lcstatus === 'Disabled').length;
+        const releasedCount = this.selectRow.filter(item => item.lcstatus === 'Released').length;
+        console.log('hasEditing',disabledCount,releasedCount)
+        let showMessage = true;
+        this.selectRow.forEach(item => {
+          if (this.selectRow.length === 1 && item.lcstatus == "TakeBack" && showMessage) {
+            this.$message.warning('閫夋嫨鐨勬暟鎹腑鐘舵�佹棤闇�鍐嶆墽琛屽綋鍓嶆搷浣�');
+            showMessage = false;
+          } else if (this.selectRow.length >=1 && (disabledCount === this.selectRow.length || releasedCount === this.selectRow.length) || (disabledCount > 0 && releasedCount > 0) && showMessage) {
+            //disabledCount 鍜� releasedCount 涓换鎰忎竴涓瓑浜� this.selectRow 鏁扮粍鐨勯暱搴� 鍒欒〃绀哄叏閮ㄦ槸鍚屼竴绉嶇姸鎬侊紝杩斿洖 true 濡傛灉disabledCount 鍜� releasedCount 閮藉ぇ浜�0锛屽垯琛ㄧず鏃㈡湁Disabled涔熸湁Released杩斿洖 true
+            processTS({ templateId: this.templateOid, buttonTypeKey: 'PUBLIC' }).then(res => {
+              if (res.data.records != [] && res.data.code != 200) {
+                this.userName = localStorage.getItem("username");
+                this.parameter.template = this.userName + "鍥炴敹" + "[鐗╁搧]";
+                this.parameter.type = 'TakeBack'
+                this.title = '鍥炴敹缂栫爜鏁版嵁'
+                this.visibleDeactivate = true;
+              } else {
+                if (showMessage) {
+                  showMessage = false; // 鏍囪宸叉墽琛岃繃鎿嶄綔
+                  this.$confirm('褰撳墠鍒嗙被娌℃湁娣诲姞娴佺▼妯℃澘锛屾槸鍚︿笉鐢ㄦ祦绋嬪鎵圭洿鎺ユ墽琛�?', '鎻愮ず', {
+                    confirmButtonText: '纭畾',
+                    cancelButtonText: '鍙栨秷',
+                    type: 'warning'
+                  }).then(() => {
+                    const index = this.$route.query.id.indexOf('@');
+                    const result = this.$route.query.id.substring(0, index);
+                    const oid = this.selectRow.map(obj => obj.oid).join(",");
+                    changeStatus({ oid: oid, btmname: result, lcStatus: 'TakeBack' }).then(res => {
+                      console.log(res);
+                      if(res.data.code == 200 ){
+                        this.$message.success('鍥炴敹鎴愬姛')
+                        this.onLoad()
+                      }
+                    });
+                  }).catch(() => {
+                    this.$message({
+                      type: 'info',
+                      message: '宸插彇娑�'
+                    });
+                  });
+                }
+              }
+            });
+          } else if (this.selectRow.length >=1 && !(disabledCount === this.selectRow.length || releasedCount === this.selectRow.length) || (disabledCount > 0 && releasedCount > 0)  && showMessage) {
+            this.$message.warning('鎮ㄩ�夋嫨鐨勬暟鎹叏閮ㄤ负銆愬仠鐢ㄧ姸鎬佹垨鍙戝竷鐘舵�併�戞墠鍙互鍙戣捣娴佺▼');
+            showMessage = false;
+          }
+        });
       }
     },
     handleSizeChange(val) {
diff --git a/Source/UBCS-WEB/src/components/Tree/TemplatePro.vue b/Source/UBCS-WEB/src/components/Tree/TemplatePro.vue
index b030217..63588d6 100644
--- a/Source/UBCS-WEB/src/components/Tree/TemplatePro.vue
+++ b/Source/UBCS-WEB/src/components/Tree/TemplatePro.vue
@@ -2,10 +2,10 @@
   <basic-container>
     <avue-tabs :option="Taboption" @change="handleChange"></avue-tabs>
     <span v-if="type.prop==='tab1'">
-      <attrCrud :ProData="ProData" :crudOid="crudOid" :crudLCStatus="crudLCStatus" :crudArray="crudArray" :Formlist="Formlist" :codeClassifyOid="codeClassifyOid"></attrCrud>
+      <attrCrud :ProData="ProData" :crudOid="crudOid" :checkStatus="checkStatus" :crudLCStatus="crudLCStatus" :crudArray="crudArray" :Formlist="Formlist" :codeClassifyOid="codeClassifyOid"></attrCrud>
     </span>
     <span v-else-if="type.prop==='tab2'">
-       <FlowPath :code="this.crudOid" :crudLCStatus="crudLCStatus"></FlowPath>
+       <FlowPath :code="this.crudOid" :checkStatus="checkStatus" :crudLCStatus="crudLCStatus"></FlowPath>
 
     </span>
     <span v-else-if="type.prop==='tab3'">
@@ -34,13 +34,13 @@
           prop: 'tab3',
         }]
       },
-
+      checkStatus:false //鏄惁闇�瑕侀獙璇佹ā鏉跨姸鎬�
     }
   },
   created() {
     // 杩涘叆椤甸潰榛樿鏄ā鏉垮睘鎬�
     this.type = this.Taboption.column[0];
-    this.type.prop = "tab1"
+    this.type.prop = "tab1";
   },
   methods: {
     // Tab鏍忓垏鎹�
diff --git a/Source/UBCS-WEB/src/components/Tree/attrCrud.vue b/Source/UBCS-WEB/src/components/Tree/attrCrud.vue
index ec68c50..bbd676c 100644
--- a/Source/UBCS-WEB/src/components/Tree/attrCrud.vue
+++ b/Source/UBCS-WEB/src/components/Tree/attrCrud.vue
@@ -3,31 +3,31 @@
     <div style="display: flex;flex-wrap: wrap;" v-if="this.crudArrayFlag"class="app">
 
       <!--鏂板-->
-      <el-button v-if="attrEditVisible == false && attrFlagChiledren==false && crudLCStatus=='Editing'" size="small" type="primary" icon="el-icon-plus" @click="busineHandle">娣诲姞 {{ msg }}</el-button>
+      <el-button v-if="attrEditVisible == false && attrFlagChiledren==false && (!checkStatus || crudLCStatus=='Editing')" size="small" type="primary" icon="el-icon-plus" @click="busineHandle">娣诲姞 {{ msg }}</el-button>
       <!--        鍏ㄥ睆缂栬緫-->
-      <el-button v-if=" attrEditVisible == false && attrFlagChiledren==false && crudLCStatus=='Editing'" size="small" @click="fullscreenHandle" icon="el-icon-full-screen">鍏ㄥ睆缂栬緫</el-button>
+      <el-button v-if=" attrEditVisible == false && attrFlagChiledren==false && (!checkStatus || crudLCStatus=='Editing')" size="small" @click="fullscreenHandle" icon="el-icon-full-screen">鍏ㄥ睆缂栬緫</el-button>
       <!--        楠岃瘉瑙勫垯-->
-      <el-button v-if="crudLCStatus=='Editing'" icon="el-icon-info" size="small" @click="ruleAddHandler">楠岃瘉瑙勫垯</el-button>
+      <el-button v-if="!checkStatus || crudLCStatus=='Editing'" icon="el-icon-info" size="small" @click="ruleAddHandler">楠岃瘉瑙勫垯</el-button>
       <!--        灞炴�у垎缁�-->
-      <el-button v-if="crudLCStatus=='Editing'" icon="el-icon-menu" size="small" @click="attrVisibleHandle">灞炴�у垎缁�</el-button>
+      <el-button v-if="!checkStatus || crudLCStatus=='Editing'" icon="el-icon-menu" size="small" @click="attrVisibleHandle">灞炴�у垎缁�</el-button>
 
 
       <!--        鍒嗙被娉ㄥ叆-->
-      <el-button v-if="crudLCStatus=='Editing'" icon="el-icon-magic-stick" size="small" @click="injectBtn">鍒嗙被娉ㄥ叆</el-button>
+      <el-button v-if="!checkStatus || crudLCStatus=='Editing'" icon="el-icon-magic-stick" size="small" @click="injectBtn">鍒嗙被娉ㄥ叆</el-button>
         <!--    缁勫悎瑙勫垯-->
-        <el-button v-if="crudLCStatus=='Editing'" size="small" @click="isShowHandler">缁勫悎瑙勫垯</el-button>
+        <el-button v-if="!checkStatus || crudLCStatus=='Editing'" size="small" @click="isShowHandler">缁勫悎瑙勫垯</el-button>
       <!--        鏋氫妇娉ㄥ叆-->
-      <el-button v-if="crudLCStatus=='Editing'" size="small" @click="enmuVisHandle">鏋氫妇娉ㄥ叆</el-button>
+      <el-button v-if="!checkStatus || crudLCStatus=='Editing'" size="small" @click="enmuVisHandle">鏋氫妇娉ㄥ叆</el-button>
       <!--    绾ц仈灞炴��-->
-      <el-button v-if="crudLCStatus=='Editing'" size="small" @click="CascadeHandle">绾ц仈灞炴��</el-button>
+      <el-button v-if="!checkStatus|| crudLCStatus=='Editing'" size="small" @click="CascadeHandle">绾ц仈灞炴��</el-button>
       <!--    棰勮鎺掑簭-->
         <el-button size="small" @click="orderHandle" icon="el-icon-arrow-down">棰勮鎺掑簭</el-button>
 
 
       <!--    淇濆瓨-->
-      <el-button v-if="crudLCStatus=='Editing'" size="small" @click="addsHandler" icon="el-icon-check">淇濆瓨</el-button>
+      <el-button v-if="!checkStatus|| crudLCStatus=='Editing'" size="small" @click="addsHandler" icon="el-icon-check">淇濆瓨</el-button>
       <!--    鍒犻櫎-->
-      <el-button v-if="crudLCStatus=='Editing'" size="small" @click="CrudRemove" icon="el-icon-delete">鍒犻櫎</el-button>
+      <el-button v-if="!checkStatus || crudLCStatus=='Editing'" size="small" @click="CrudRemove" icon="el-icon-delete">鍒犻櫎</el-button>
       <!--    閲嶇疆-->
       <el-button size="small" @click="reset" icon="el-icon-refresh-right">閲嶇疆</el-button>
       <!--    鍚屾鍒板叾浠栨ā鏉�-->
@@ -240,7 +240,7 @@
     </div>
     <el-table :data="ProData"
               style="width: 100%"
-              height="750"
+              height="400"
               @cell-click="handleCellClicks"
               @select="selectHandle"
               @selection-change="selectionChange"
@@ -313,6 +313,10 @@
     crudOid: {
       type: String,
       default: ''
+    },
+    checkStatus:{
+      type: Boolean,
+      default: false
     },
     crudLCStatus: {
       type: String,
@@ -1456,7 +1460,7 @@
           citem.oid = ''
           this.busineAddList=Object.assign(citem, {
             orderNum: ++ordernum,
-            attributedatatype: citem.attrDataType,
+            attributeDataType: citem.attrDataType,
             attributeDataTypeText: this.vciFieldTypeMap[citem.attrDataType],
             controlLength: citem.attributeLength,
             valueArea: citem.range,
diff --git a/Source/UBCS-WEB/src/components/basic-container/main.vue b/Source/UBCS-WEB/src/components/basic-container/main.vue
index cbe7b61..60b30f3 100644
--- a/Source/UBCS-WEB/src/components/basic-container/main.vue
+++ b/Source/UBCS-WEB/src/components/basic-container/main.vue
@@ -3,6 +3,9 @@
        :style="styleName"
        :class="{'basic-container--block':block}">
     <el-card class="basic-container__card">
+      <div slot="header" v-if="title" class="clearfix">
+        <span>{{title}}</span>
+      </div>
       <slot></slot>
     </el-card>
   </div>
@@ -22,6 +25,9 @@
     block: {
       type: Boolean,
       default: false
+    },
+    title:{
+      type: String
     }
   },
   computed: {
diff --git a/Source/UBCS-WEB/src/components/template/FlowPath.vue b/Source/UBCS-WEB/src/components/template/FlowPath.vue
index 24ccf03..d068154 100644
--- a/Source/UBCS-WEB/src/components/template/FlowPath.vue
+++ b/Source/UBCS-WEB/src/components/template/FlowPath.vue
@@ -11,11 +11,19 @@
 export default {
     name: 'FlowPath',
     props: {
-        code: {
-            typeof: String,
-            required: true,
-            default: ""
-        }
+      checkStatus: {
+        type: Boolean,
+        default: false
+      },
+      crudLCStatus: {
+        type: String,
+        default: 'Editing'
+      },
+      code: {
+        typeof: String,
+        required: true,
+        default: ""
+      }
     },
     data() {
         return {
@@ -31,68 +39,69 @@
             startData: [],
             form: {},
             option: {
-                height: "auto",
-                border: true,
-                align: 'center',
-                menuAlign: 'center',
-                index: true,
-                searchMenuSpan: 8,
-                searchBtn: false,
-                emptyBtn: false,
-                columnBtn: false,
-                defaultSort: {
-                    prop: 'id,name,description,version',
-                    order: 'descending'
+              height: "auto",
+              border: true,
+              align: 'center',
+              menuAlign: 'center',
+              index: true,
+              searchMenuSpan: 8,
+              searchBtn: false,
+              emptyBtn: false,
+              columnBtn: false,
+              addBtn: !this.checkStatus || this.crudLCStatus == 'Editing',
+              defaultSort: {
+                prop: 'id,name,description,version',
+                order: 'descending'
+              },
+              column: [
+                {
+                  label: '妯℃澘key',
+                  prop: 'modelKey',
+                  width: 120,
+                  sortable: true,
+                  type: 'tree',
+                  dicData: [],
+                  props: {
+                    label: "key",
+                    value: "key"
+                  },
+                  rules: [{
+                    required: true,
+                    message: '妯℃澘key涓嶈兘涓虹┖',
+                    trigger: 'blur'
+                  }],
+                  nodeClick: (data) => {
+                    console.log(data)
+                    // 鑺傜偣鐐瑰嚮鐨勬椂鍊欎細鑾峰彇鍒版暟鎹�
+                    this.form.modelName = data.name
+                  }
+                }, {
+                  label: '妯℃澘鍚嶇О',
+                  prop: 'modelName',
+                  sortable: true,
+                  width: 220,
+                  addDisabled: true,
+                  editDisabled: true,
                 },
-                column: [
-                    {
-                        label: '妯℃澘key',
-                        prop: 'modelKey',
-                        width:120,
-                        sortable: true,
-                        type: 'tree',
-                        dicData: [],
-                        props: {
-                            label: "key",
-                            value: "key"
-                        },
-                        rules: [{
-                            required: true,
-                            message: '妯℃澘key涓嶈兘涓虹┖',
-                            trigger: 'blur'
-                        }],
-                        nodeClick: (data) => {
-                            console.log(data)
-                            // 鑺傜偣鐐瑰嚮鐨勬椂鍊欎細鑾峰彇鍒版暟鎹�
-                            this.form.modelName = data.name
-                        }
-                    }, {
-                        label: '妯℃澘鍚嶇О',
-                        prop: 'modelName',
-                        sortable: true,
-                        width:220,
-                        addDisabled: true,
-                        editDisabled: true,
-                    },
-                    {
-                        label: '妯℃澘鐢ㄩ��',
-                        prop: 'buttonTypeKey',
-                        type: 'tree',
-                        width:120,
-                        dicUrl: '/api/ubcs-flow/processTS/tt',
-                        dicMethod: 'post',
-                        props: {
-                            value: "codee",
-                            label: "namee",
-                        },
-                    },
-                    {
-                        label: '妯℃澘鎻忚堪',
-                        prop: 'description',
-                        type:'textarea'
-                    },
-                ]
-            },
+                {
+                  label: '妯℃澘鐢ㄩ��',
+                  prop: 'buttonTypeKey',
+                  type: 'tree',
+                  width: 120,
+                  dicUrl: '/api/ubcs-flow/processTS/tt',
+                  dicMethod: 'post',
+                  props: {
+                    value: "codee",
+                    label: "namee",
+                  },
+                },
+                {
+                  label: '妯℃澘鎻忚堪',
+                  prop: 'description',
+                  type: 'textarea'
+                },
+              ]
+            }
         }
     },
     created() {
@@ -114,18 +123,19 @@
         },
         // 鑾峰彇鍒楄〃
         async getDataList() {
-            this.loading = false
-            console.log(this.search)
+          this.loading = false
+          if(this.code){
             const { pageSize, currentPage } = this.page
             let param = { size: pageSize, current: currentPage }
             const response = await getFlowpathList({ ...param, ...{ templateId: this.code } })
             if (response.status === 200) {
-                console.log(response)
-                this.loading = false
-                const data = response.data.data
-                this.data = data.records
-                this.page.total = data.total
+              this.loading = false
+              const data = response.data.data
+              this.data = data.records
+              this.page.total = data.total
             } else this.loading = false
+          }
+
         },
         // 鏂板
         async handleSave(row, done, loading) {
diff --git a/Source/UBCS-WEB/src/components/template/Stage.vue b/Source/UBCS-WEB/src/components/template/Stage.vue
index 8fe6216..7d01c68 100644
--- a/Source/UBCS-WEB/src/components/template/Stage.vue
+++ b/Source/UBCS-WEB/src/components/template/Stage.vue
@@ -127,17 +127,19 @@
         },
         // 鑾峰彇鍒楄〃
         async getDataList() {
-            this.loading = false
-            const { pageSize, currentPage } = this.page
-            let param = { size: pageSize, current: currentPage }
-            const response = await getFlowpathList({ ...param, ...{ templateId: this.code } })
+          this.loading = false
+          if (this.code) {
+            const {pageSize, currentPage} = this.page
+            let param = {size: pageSize, current: currentPage}
+            const response = await getFlowpathList({...param, ...{templateId: this.code}})
             if (response.status === 200) {
-                console.log(response)
-                this.loading = false
-                const data = response.data.data
-                this.data = data.records
-                this.page.total = data.total
+              console.log(response)
+              this.loading = false
+              const data = response.data.data
+              this.data = data.records
+              this.page.total = data.total
             } else this.loading = false
+          }
         },
         // 鑾峰彇闃舵鍒楄〃
         async getStagelist() {
diff --git a/Source/UBCS-WEB/src/views/wel/Statistic.vue b/Source/UBCS-WEB/src/views/wel/Statistic.vue
new file mode 100644
index 0000000..f95cb3d
--- /dev/null
+++ b/Source/UBCS-WEB/src/views/wel/Statistic.vue
@@ -0,0 +1,150 @@
+<template>
+  <div>
+    <el-row :gutter="20">
+      <el-col :span="3" v-for="item in listMyTask">
+        <div class="box" :style="item.style">
+          {{item.name}}
+          <div><avue-count-up class="value" :end="item.count"></avue-count-up></div>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import {validatenull} from "@/util/validate";
+import {getList} from "@/api/system/statistic";
+
+export default {
+name: "Statistic",
+  data(){
+  return {
+    countByServer:true,
+    listMyTask:[]
+  }
+  },
+  created() {
+  this.getList();
+  },
+  computed(){
+
+  },
+  methods: {
+    getList() {
+      let data = [{
+        "backgroundColor": "#FF5722",
+        "btmname": "hometask",
+        "countUrl": "priceIndexController/countNeedConfirmPlan",
+        "name": "寰呯‘璁よ鍒�",
+        "nameOid": "",
+        "oid": "34aebfde-eb11-4555-87eb-0a779be9aad0",
+        "uiUrl": "USEJS:rpm/wrj/ProductPricePlan",
+      }, {
+        "backgroundColor": "#5FB878",
+        "btmname": "hometask",
+        "countUrl": "priceIndexController/countPricingPlan",
+        "name": "浠婃棩宸茬‘璁よ鍒�",
+        "nameOid": "2C72EA23-8AA5-E5FC-9BC1-DE4AD182EF7B",
+        "oid": "6256ae79-7765-4c66-afc7-f12fad350065",
+        "uiUrl": "USEJS:rpm/wrj/ProductPricePlan",
+      },
+        {
+          "backgroundColor": "#1E9FFF",
+          "btmname": "hometask",
+          "countUrl": "priceIndexController/countNeedFeedbackPlan",
+          "name": "宸茶皥銆佸緟鍙嶉",
+          "nameOid": "2536978C-CD1B-5B56-6529-A8C3456B5260",
+          "oid": "3043cdf1-8479-4c2a-9eab-fc35e9f9d5a7",
+          "uiUrl": "USEJS:rpm/wrj/ProductPricePlan",
+        },
+        {
+          "backgroundColor": "#FF5722",
+          "btmname": "hometask",
+          "countUrl": "priceIndexController/countMyUnCreatePricePlan",
+          "name": "閲囪喘璋堜环-缁忓姙",
+          "nameOid": "",
+          "oid": "529634e7-1854-4f61-b911-a91e3c406757",
+          "uiUrl": "USEJS:rpm/wrj/PurchaseRequstUndo",
+        },
+        {
+          "backgroundColor": "#5FB878",
+          "btmname": "hometask",
+          "countUrl": "priceIndexController/countPricingPlan",
+          "name": "浠婃棩宸茬‘璁よ鍒�--缁忓姙浜�",
+          "nameOid": "",
+          "oid": "a03a6ab2-f87d-4e45-94cb-9ef4d66fbba2",
+          "uiUrl": "USEJS:rpm/wrj/PurchaseRequstUndo?showPlan=true",
+        },
+        {
+          "backgroundColor": "#1E9FFF",
+          "btmname": "hometask",
+          "countUrl": "priceIndexController/countNeedFeedbackPlan",
+          "name": "宸茶皥銆佸緟鍙嶉--缁忓姙浜�",
+          "nameOid": "",
+          "oid": "8e56cce6-c955-4624-99d5-6c5b870a8c09",
+          "uiUrl": "USEJS:rpm/wrj/PurchaseRequstUndo?showPlan=true",
+        },
+        {
+          "backgroundColor": "",
+          "btmname": "",
+          "countUrl": "priceIndexController/countMyWillAuditPlan",
+          "name": "閲囪喘璋堜环-缁忓姙",
+          "nameOid": "",
+          "oid": "f7d5c541-3a3a-4f24-bf76-b1538abb7abd",
+          "uiUrl": "USEJS:rpm/wrj/PurchaseRequstUndo?showPlan=true",
+        },
+        {
+          "backgroundColor": "",
+          "btmname": "hometask",
+          "countUrl": "priceIndexController/countNeedDispatch",
+          "name": "閲囪喘璋堜环-鍒嗘淳",
+          "nameOid": "BAD3108F-6F6B-F287-705C-82D69A5E030A",
+          "oid": "6093b1cb-bd7b-438b-8a76-05ab486ccf63",
+          "uiUrl": "USEJS:rpm/wrj/PurchaseRequstUndo?showPlan=true"
+        }
+      ]
+      this.listMyTask = data.map(record => {
+        record.style=record.style || ''
+        if(record.backgroundColor!=''){
+          record.style = 'background-color:'+record.backgroundColor;
+        }
+        record.count=record.count || 0;
+        if(!this.countByServer){
+          //鏄墠绔煡璇�
+          getList(record.countUrl,{}).then(res=>{
+            if(res.data.data.success){
+              record.count=res.data.data.obj;
+            }else{
+              record.count=0
+            }
+          })
+
+        }
+        return {
+          ...record
+        }
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+.box{
+  text-align: center;
+  background: rgb(235, 238, 245);
+  color: #303133;
+  height: 74px;
+  margin: 10px 0!important;
+  padding: 15px 20px;
+  position: relative;
+  border-radius: 4px;
+  box-sizing: border-box;
+  font-size: 14px;
+}
+.value{
+  font-size: 12px;
+  opacity: .69;
+  line-height: 24px;
+}
+</style>
diff --git a/Source/UBCS-WEB/src/views/wel/index.vue b/Source/UBCS-WEB/src/views/wel/index.vue
index f19499e..234ae9e 100644
--- a/Source/UBCS-WEB/src/views/wel/index.vue
+++ b/Source/UBCS-WEB/src/views/wel/index.vue
@@ -7,144 +7,57 @@
     </el-row>
     <el-row>
       <el-col :span="24">
-        <basic-container>
-          <p style="text-align: center">
-            <img src="https://img.shields.io/badge/Release-V3.0.1-green.svg" alt="Downloads"/>
-            <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">
-              <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> -->
-          </p>
+        <basic-container title="寰呭姙浜嬮」">
+          <Statistic></Statistic>
         </basic-container>
       </el-col>
     </el-row>
     <el-row>
       <el-col :span="16">
-        <basic-container class="aaa">
-          <el-collapse v-model="activeNames" @change="handleChange" class="fontcoll">
-            <el-collapse-item title="娆㈣繋浣跨敤UBCS" name="1">
-              <div style="font-size: 16px">1.UBCS鏄竴娆剧簿蹇冭璁$殑寰湇鍔℃灦鏋勶紝鎻愪緵 SpringCloud 鍏ㄥ瑙e喅鏂规锛屽畬缇庨泦鎴� SpringCloud Alibaba 绯诲垪缁勪欢</div>
-              <div style="font-size: 16px">2.UBCS鏄负浼佷笟鎻愪緵缁熶竴涓氬姟鍗忓悓绯荤粺骞冲彴</div>
-              <div style="font-size: 16px">3.UBCS杩芥眰浼佷笟寮�鍙戞洿鍔犻珮鏁堬紝閮ㄧ讲鏇村姞鏂逛究锛岀敓浜ф洿鍔犵ǔ瀹�</div>
-              <div style="font-size: 16px">4.绯荤粺瀹炵幇涓�濂椾唬鐮佸吋瀹筂ySql銆丱racle銆丳ostgreSQL銆丼qlServer銆佽揪姊︼紝閫傚簲浼佷笟鍚勭涓嶅悓鍦烘櫙鐨勯渶姹�</div>
-              <div style="font-size: 16px">5.闆嗘垚浜嗗緢澶氫紒涓氭�ュ垏鎵�闇�鐨勪緥濡傚绉熸埛銆丱auth2鎺堟潈璁よ瘉銆佸伐浣滄祦銆佸垎甯冨紡浜嬪姟绛夌瓑鍔熻兘</div>
-              <div style="font-size: 16px">5.绯荤粺娣卞害瀹氬埗浜咶lowable宸ヤ綔娴侊紝瀹岀編鏀寔SpringCloud鍒嗗竷寮忔湇鍔$殑鍦烘櫙锛屼互杩滅▼璋冪敤鐨勬柟寮忚繘琛屾搷浣�</div>
-            </el-collapse-item>
-
-          </el-collapse>
+        <basic-container title="寰呭姙娴佺▼浠诲姟">
+          <avue-crud ref="crud" :table-loading="loading" :data="todoData" :option="todoOption"
+                     @on-load="onLoad"
+                     @cell-click="cellHandle"
+                     :page.sync="page">
+            <template #menu="{size,row,index}">
+              <el-button @click="gotodo(row,index)"
+                         icon="el-icon-check"
+                         type="text"
+                         :size="size">鎵ц</el-button>
+            </template>
+          </avue-crud>
         </basic-container>
       </el-col>
       <el-col :span="8">
         <el-row>
-          <basic-container>
+          <basic-container title="娑堟伅鍒楄〃">
             <el-collapse v-model="logActiveNames" @change="handleChange">
-              <el-collapse-item title="3.0.1.RELEASE鍙戝竷锛屼唬鐮佺敓鎴愬姛鑳藉叏闈㈠崌绾�" name="28">
-                <div>1.[鏂板]鏁版嵁妯″瀷鍦ㄧ嚎閰嶇疆</div>
-                <div>2.[鏂板]浠g爜鐢熸垚琛ㄥ崟缁勪欢鍦ㄧ嚎閰嶇疆</div>
-                <div>3.[鏂板]Saber椋庢牸鐨勫崟琛ㄧ敓鎴愭ā鐗�</div>
-                <div>4.[鏂板]Saber椋庢牸鐨勪富瀛愯〃鐢熸垚妯$増</div>
-                <div>5.[鏂板]Saber椋庢牸鐨勬爲琛ㄧ敓鎴愭ā鐗�</div>
-                <div>6.[鏂板]ElementUI椋庢牸鐨勫崟琛ㄧ敓鎴愭ā鐗�</div>
-                <div>7.[鏂板]ElementUI椋庢牸鐨勪富瀛愯〃鐢熸垚妯$増</div>
-                <div>8.[鏂板]ElementUI椋庢牸鐨勬爲琛ㄧ敓鎴愭ā鐗�</div>
-              </el-collapse-item>
-              <el-collapse-item title="3.0.0.RELEASE鍙戝竷锛岀郴缁熸灦鏋勫崌绾ц嚦 SpringCloud 2021" name="27">
-                <div>1.[鍗囩骇]SpringCloud 鑷� 2021.0.3</div>
-                <div>2.[鍗囩骇]SpringBoot 鑷� 2.7.1</div>
-                <div>3.[鍗囩骇]SpringBootAdmin 鑷� 2.7.1</div>
-                <div>4.[鍗囩骇]AlibabaCloud 鑷� 2021.0.1.0</div>
-                <div>5.[鍗囩骇]Mybatis-Plus 鑷� 3.5.2</div>
-                <div>6.[鍗囩骇]Mybatis-Plus-Generator 鑷� 3.5.3</div>
-                <div>7.[鍗囩骇]Nacos 鑷� 2.1.0</div>
-                <div>8.[鍗囩骇]Seata 鑷� 1.5.2</div>
-                <div>9.[鍗囩骇]Log4J 鑷� 2.18.0</div>
-                <div>10.[鍗囩骇]JackSon 鑷� 2.13.3</div>
-                <div>11.[鍗囩骇]FastJson 鑷� 1.2.83</div>
-                <div>12.[鍗囩骇]Avue 鑷� 2.9.12</div>
-                <div>13.[鏂板]鍩轰簬Oauth2鐨勫崟鐐圭櫥褰�</div>
-                <div>14.[鏂板]鐏板害鏈嶅姟鍙戝竷涓庤皟鐢�</div>
-                <div>15.[鏂板]浠g爜鐢熸垚澧炲姞element鍜宖eign妯$増</div>
-                <div>16.[浼樺寲]鑷姩瑁呴厤妯″潡閲囩敤鏂扮増@AutoConfiguration娉ㄨВ</div>
-                <div>17.[浼樺寲]TencentCosTemplate閬垮厤oom鐨勬儏鍐�</div>
-                <div>18.[浼樺寲]TreeNode绫�</div>
-                <div>19.[浼樺寲]Gateway閴存潈閫昏緫</div>
-                <div>20.[淇]BladeRedis incr鏂规硶澶辨晥鐨勯棶棰�</div>
-                <div>21.[淇]绉熸埛浜у搧鍖呮洿鏂板悗缂撳瓨鏈埛鏂扮殑闂</div>
-                <div>22.[淇]缁戝畾绉熸埛浜у搧鍖呭悗鏅�氱鐞嗗憳鏉冮檺閰嶇疆涓㈠け鎸夐挳閫夐」鐨勯棶棰�</div>
-                <div>23.[淇]娴佺▼璁捐鍣ㄧ洃鍚棤娉曞垹闄ょ殑闂</div>
-                <div>24.[淇]鐢ㄦ埛excel瀵煎嚭鏉′欢涓虹┖鐨勫垽鏂�昏緫</div>
-                <div>25.[鍒犻櫎]Hystrix鎺ュ叆浠entinel鍙栦唬</div>
-                <div>26.[鍒犻櫎]Ribbon鎺ュ叆浠oadBalancer鍙栦唬</div>
-                <div>27.[鍒犻櫎]Zipkin鎺ュ叆</div>
-                <div>28.[鍒犻櫎]Turbine鎺ュ叆</div>
-                <div>29.[鏇夸唬]鍚庣画鐗堟湰灏嗗鎺kyWalking鍙栦唬Zipkin涓嶵urbine</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.9.1.RELEASE鍙戝竷锛屾柊澧炶揪姊︽暟鎹簱鏀寔锛岄泦鎴怤utFlow娴佺▼璁捐鍣�" name="26">
-                <div>1.[鍗囩骇]Mybatis-Plus 鑷� 3.5.1</div>
-                <div>2.[鍗囩骇]Mybatis-Plus-Generator 鑷� 3.5.2</div>
-                <div>3.[鍗囩骇]Nacos 鑷� 2.0.4</div>
-                <div>4.[鍗囩骇]Log4j2 鑷� 2.17.2</div>
-                <div>5.[鍗囩骇]FastJson 鑷� 1.2.80</div>
-                <div>6.[鍗囩骇]Sentinel 鑷� 1.8.3</div>
-                <div>7.[鍗囩骇]EasyExcel 鑷� 2.2.11</div>
-                <div>8.[鍗囩骇]JuatAuth 鑷� 1.16.5</div>
-                <div>9.[鍗囩骇]OkHttp 鑷� 4.9.3</div>
-                <div>10.[鍗囩骇]AliyunOss 鑷� 3.14.0</div>
-                <div>11.[鍗囩骇]Minio 鑷� 8.3.7</div>
-                <div>12.[鍗囩骇]Qiniu 鑷� 7.9.4</div>
-                <div>13.[鍗囩骇]TencentCOS 鑷� 5.6.69</div>
-                <div>14.[鍗囩骇]HuaweiOss 鑷� 3.21.12</div>
-                <div>15.[鍗囩骇]Avue 鑷� 2.9.4</div>
-                <div>16.[鍗囩骇]ElementUI 鑷� 2.15.6</div>
-                <div>17.[鏂板]杈炬ⅵ鏁版嵁搴撴敮鎸�</div>
-                <div>18.[鏂板]NutFlow娴佺▼璁捐鍣ㄩ泦鎴�</div>
-                <div>19.[鏂板]Sword鍗囩骇鑷矨ntdV4鐗堟湰</div>
-                <div>20.[浼樺寲]绉熸埛鍏ㄥ眬鏁版嵁婧愭嫤鎴櫒閫昏緫</div>
-                <div>21.[浼樺寲]鍗曚汉鍦ㄧ嚎妯″紡RefreshToken鐨勫鐞嗛�昏緫</div>
-                <div>22.[浼樺寲]鍗曞厓娴嬭瘯鏀寔璇诲彇鏈嶅姟鍚嶄笉鍚岀幆澧冪殑閰嶇疆</div>
-                <div>23.[浼樺寲]绉熸埛浜у搧鍖呮敮鎸侀厤缃竻绌�</div>
-                <div>24.[浼樺寲]閰嶇疆瑙e喅oracle鏇存柊null鍊兼姤閿欑殑闂</div>
-                <div>25.[浼樺寲]閫傞厤oss涓巗ms鎿嶄綔鏍忎笉鎹㈣</div>
-                <div>26.[浼樺寲]鎻愬崌excel瀵煎嚭鍔熻兘鐨勭敤鎴蜂綋楠�</div>
-                <div>27.[浼樺寲]涓婚〉閮ㄩ棬鍒囨崲閫昏緫</div>
-                <div>28.[淇]鐢ㄦ埛瑙e皝澧炲姞绌烘暟鎹垽鏂�昏緫</div>
-                <div>29.[淇]娴佺▼鐢ㄦ埛鏌ヨ澧炲姞绉熸埛ID绛涢��</div>
-                <div>30.[淇]Oauth2鎺堟潈鐮佹ā寮忓け鏁�</div>
-                <div>31.[淇]鐧诲綍閿佸畾閫昏緫</div>
-                <div>32.[淇]閫氱煡鍏憡鏃ユ湡娈垫煡璇㈡姤閿�</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.9.0.RELEASE鍙戝竷锛屾柊澧炵鎴疯彍鍗曚骇鍝佸寘鍔熻兘" name="25">
-                <div>1.[鍗囩骇]SpringCloud 鑷� Hoxton.SR12</div>
-                <div>2.[鍗囩骇]AlibabaCloud 鑷� 2.2.7.RELEASE</div>
-                <div>3.[鍗囩骇]Nacos 鑷� 2.0.3</div>
-                <div>4.[鍗囩骇]Log4j2 鑷� 2.17.0</div>
-                <div>5.[鍗囩骇]Druid 鑷� 1.2.8</div>
-                <div>6.[鍗囩骇]FastJson 鑷� 1.2.78</div>
-                <div>7.[鍗囩骇]Lombok 鑷� 1.18.22</div>
-                <div>8.[鍗囩骇]Avue 鑷� 2.8.25</div>
-                <div>9.[鍗囩骇]闃块噷浜戜粨搴撲负鏈�鏂板湴鍧�</div>
-                <div>10.[鏂板]绉熸埛鑿滃崟浜у搧鍖呭姛鑳�</div>
-                <div>11.[鏂板]閮ㄩ棬瑙掕壊鍦ㄧ嚎鍒囨崲鍔熻兘</div>
-                <div>12.[鏂板]鐧诲綍閿欒娆℃暟鏀寔浠庡弬鏁扮鐞嗚鍙�</div>
-                <div>13.[鏂板]绠$悊绔墜鍔ㄨВ閿佺敤鎴峰姛鑳�</div>
-                <div>14.[鏂板]actuator鎺ュ彛澧炲姞鍐呯綉鏀捐澶栫綉璁よ瘉鍔熻兘</div>
-                <div>15.[鏂板]pg鏁版嵁搴搃nt绫诲瀷鏉′欢鏌ヨ澶勭悊绀轰緥</div>
-                <div>16.[鏂板]Lemon骞冲彴浠g爜鐢熸垚妯℃澘</div>
-                <div>17.[浼樺寲]瑙掕壊鍒犻櫎澧炲姞瀛愯妭鐐瑰垽鏂�</div>
-                <div>18.[浼樺寲]娴佺▼鏉′欢鏌ヨ澧炲姞绉熸埛杩囨护</div>
-                <div>19.[浼樺寲]娴佺▼鍒楄〃澧炲姞鍚嶇О鏌ヨ</div>
-                <div>20.[浼樺寲]鐧诲綍鎴愬姛鏃舵竻闄ら敊璇鏁�</div>
-                <div>21.[浼樺寲]閫傞厤cloud鏈�鏂扮増寮傚父澶勭悊</div>
-                <div>22.[浼樺寲]鏁版嵁鏉冮檺鏂板鎴愬姛鍚庢竻绌鸿〃鍗曟暟鎹�</div>
-                <div>23.[淇]淇鐢ㄦ埛瀵煎叆閮ㄩ棬鏁版嵁涓簄ull鏃朵繚瀛樻姤閿欑殑闂</div>
-                <div>24.[淇]淇鍒锋柊token瀵艰嚧澶氶儴闂╥d琚鐩栫殑闂</div>
-                <div>25.[淇]淇鐧诲綍鐣岄潰澶氶儴闂ㄩ�夋嫨寮规鍑虹幇鍚庣洿鎺ュ埛鏂板氨鑳借繘鍏ヤ富椤电殑闂</div>
-                <div>26.[淇]淇閫氱煡鍏憡鍒嗛〉鏈甫鍏ユ煡璇㈡潯浠剁殑闂</div>
+              <el-collapse-item title="2.8.2.RELEASE鍙戝竷" name="23">
+                <div>1.[鍗囩骇]SpringBoot 鑷� 2.3.12</div>
+                <div>2.[鍗囩骇]SpringBootAdmin 鑷� 2.3.1</div>
+                <div>3.[鍗囩骇]Knife4j 鑷� 2.0.9</div>
+                <div>4.[鍗囩骇]Nacos 鑷� 2.0.2</div>
+                <div>5.[鍗囩骇]Seata 鑷� 1.4.2</div>
+                <div>6.[鍥炴粴]MybatisPlus 鑷� 3.4.2</div>
+                <div>7.[鍗囩骇]DynamicDatasource 鑷� 3.3.6</div>
+                <div>8.[鍗囩骇]Druid 鑷� 1.2.6</div>
+                <div>9.[鍗囩骇]Avue 鑷� 2.8.18</div>
+                <div>10.[鏂板]鐢ㄦ埛鐧诲綍閿欒娆℃暟閿佸畾鍔熻兘</div>
+                <div>11.[鏂板]澶氶儴闂ㄥ瑙掕壊鐢ㄦ埛鍦ㄧ櫥褰曟椂澧炲姞涓嬫媺閫夐」</div>
+                <div>12.[鏂板]鏂板鐢ㄦ埛澶氭潯浠舵煡璇㈡帴鍙�</div>
+                <div>13.[鏂板]Ribbon缁勪欢鏉冮噸璇诲彇閫昏緫</div>
+                <div>14.[鏂板]ExcelUtil鏂板WriteHandler鍙傛暟</div>
+                <div>15.[鏂板]CacheUtil澧炲姞鎸囧畾tenantId娓呯┖鏂规硶</div>
+                <div>16.[浼樺寲]鎵嬫満鐭俊鏍¢獙閫昏緫锛屽鍔犳墜鏈哄彿寮哄埗鍒ゆ柇</div>
+                <div>17.[浼樺寲]鐭俊璋冭瘯鍔熻兘澧炲姞璧勬簮缂栧彿璇诲彇</div>
+                <div>18.[浼樺寲]澶氱鎴峰垏闈㈤�昏緫</div>
+                <div>19.[浼樺寲]澶氱鎴风紦瀛樻竻绌洪�昏緫</div>
+                <div>20.[浼樺寲]ISqlInjector鏀寔鑷畾涔夎鐩�</div>
+                <div>21.[浼樺寲]浼樺寲鏃ュ織瀵逛簬绉熸埛id鐨勫垽鏂�</div>
+                <div>22.[浼樺寲]Menu绫婚噸鍐檋ashCode鏂规硶</div>
+                <div>23.[浼樺寲]MySql鑴氭湰灏唋ong绫诲瀷瀛楁鏀逛负bigint(20)</div>
+                <div>24.[淇]鐢ㄦ埛涓績瀛楁缁戝畾鐩稿弽鐨勯棶棰�</div>
+                <div>25.[淇]鍏抽棴楠岃瘉鐮佹ā寮忓悗棣栭〉浠嶈皟鐢ㄩ獙璇佺爜鎺ュ彛鐨勯棶棰�</div>
               </el-collapse-item>
               <el-collapse-item title="2.8.2.RELEASE鍙戝竷锛屽寮虹敤鎴风櫥褰曟柟妗�" name="24">
                 <div>1.[鍗囩骇]SpringBoot 鑷� 2.3.12</div>
@@ -172,491 +85,6 @@
                 <div>23.[浼樺寲]MySql鑴氭湰灏唋ong绫诲瀷瀛楁鏀逛负bigint(20)</div>
                 <div>24.[淇]鐢ㄦ埛涓績瀛楁缁戝畾鐩稿弽鐨勯棶棰�</div>
                 <div>25.[淇]鍏抽棴楠岃瘉鐮佹ā寮忓悗棣栭〉浠嶈皟鐢ㄩ獙璇佺爜鎺ュ彛鐨勯棶棰�</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.8.1.RELEASE鍙戝竷锛岄�傞厤Nacos2鏀寔闀块摼鎺ョ壒鎬�" name="23">
-                <div>1.[鍗囩骇]SpringCloud 鑷� Hoxton.SR11</div>
-                <div>2.[鍗囩骇]Avue 鑷� 2.8.12</div>
-                <div>3.[鍗囩骇]Lombok 鑷� 1.18.18</div>
-                <div>4.[鍗囩骇]Nacos 鑷� 2.0.1</div>
-                <div>5.[鍗囩骇]JustAuth 鑷� 1.16.1</div>
-                <div>6.[鏂板]JustAuth鏀寔鍩轰簬redis鐨剆tate缂撳瓨</div>
-                <div>7.[鏂板]鏈嶅姟鍐呴儴璋冪敤鏂囦欢涓婁紶鐨勫伐鍏风被</div>
-                <div>8.[鏂板]鎻掍欢甯傚満鐩綍璇存槑</div>
-                <div>9.[鏂板]鍏ㄦ柊甯冨眬鐨勫瓧鍏哥鐞嗘ā鍧�</div>
-                <div>10.[浼樺寲]Dockerfile鍒濆闀滃儚鏀逛负鍥哄寲鐨刼penjdk8-openj9鍚瓧浣撶増鏈�</div>
-                <div>11.[浼樺寲]SmsResponse杩斿洖瀛楁message涓簃sg</div>
-                <div>12.[浼樺寲]Feign鐔旀柇鍔犺浇閫昏緫</div>
-                <div>13.[浼樺寲]Sql鎵撳嵃鎻掍欢澧炲姞java8鏃堕棿澶勭悊</div>
-                <div>14.[浼樺寲]澶氭暟鎹簮鐜涓嬬敓鏁圫ql鎵撳嵃鎻掍欢鐨勯厤缃�</div>
-                <div>15.[浼樺寲]鏍¢獙鐭俊楠岃瘉鐮佹椂涓庢墜鏈哄彿鍏宠仈楠岃瘉</div>
-                <div>16.[浼樺寲]Request鍖呰閫昏緫鏀寔閰嶇疆璺宠繃</div>
-                <div>17.[浼樺寲]Mybatis-plus鐨凷QLServerDialect閫昏緫</div>
-                <div>18.[浼樺寲]ObjectMapper鏀寔鍙厤</div>
-                <div>19.[浼樺寲]澧炲姞璺ㄥ煙璇锋眰澶翠互闃茬嫭绔媠wagger鏈嶅姟鍑虹幇璺ㄥ煙</div>
-                <div>20.[浼樺寲]鏁版嵁鏉冮檺涓庢帴鍙f潈闄愮殑缂撳瓨鏀逛负鍏ㄥ眬</div>
-                <div>21.[浼樺寲]Xss杩囨护閫昏緫</div>
-                <div>22.[浼樺寲]瑙掕壊閰嶇疆閫昏緫</div>
-                <div>23.[浼樺寲]鑿滃崟閰嶇疆閫昏緫</div>
-                <div>24.[淇]ImageUtil瀹介珮鍙嶈浆鐨刡ug</div>
-                <div>25.[淇]鏍戠粍浠舵湭鍏ㄩ�夊鑷寸埗鑺傜偣娌℃湁鍏ュ簱浠庤�屽紩鍙戦《閮ㄨ彍鍗曠敓鎴愮殑bug</div>
-                <div>26.[淇]瀛楀吀閫氱敤鎺ュ彛鏈繑鍥瀒d涓巔arentId浜х敓鐨刡ug</div>
-                <div>27.[鑴氭湰]鍚姩鑴氭湰澧炲姞jvm閰嶇疆</div>
-                <div>28.[鑴氭湰]淇report鑴氭湰閮ㄧ讲閫昏緫</div>
-                <div>29.[绉婚櫎]杩囨椂鐨凚ladeRedisCache锛岃鐢˙ladeRedis鍙栦唬</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.8.0.RELEASE鍙戝竷锛岄泦鎴怭rometheus鍏ㄦ柟浣嶇洃鎺ф柟妗�" name="22">
-                <div>1.[鍗囩骇]SpringCloud 鑷� Hoxton.SR10</div>
-                <div>2.[鍗囩骇]AlibabaCloud 鑷� 2.2.5.RELEASE</div>
-                <div>3.[鍗囩骇]FastJson 鑷� 1.2.75</div>
-                <div>4.[鍗囩骇]Druid 鑷� 1.2.5</div>
-                <div>5.[鍗囩骇]EasyExcel 鑷� 1.2.7</div>
-                <div>6.[鍗囩骇]JustAuth 鑷� 1.15.9</div>
-                <div>7.[鍗囩骇]Avue 鑷� 2.8.1</div>
-                <div>8.[鍗囩骇]ElementUI 鑷� 2.15.1</div>
-                <div>9.[鍗囩骇]Oss涓嶴ms鍗囩骇渚濊禆骞堕�傞厤鏈�鏂扮増</div>
-                <div>10.[鏂板]鍩轰簬瀹濆绯荤粺鐨勯儴缃叉柟妗�</div>
-                <div>11.[鏂板]Prometheus鍏ㄦ柟浣嶇洃鎺ф柟妗�</div>
-                <div>12.[鏂板]ubcs-admin鏈嶅姟鏀寔prometheus瀵筺acos鐨勬湇鍔″彂鐜�</div>
-                <div>13.[鏂板]BladeX瀵规帴Prometheus閮ㄧ讲鑴氭湰</div>
-                <div>14.[鏂板]Saber杩滅▼閮ㄧ讲鎺ㄩ�佽剼鏈�</div>
-                <div>15.[鏂板]鍩轰簬Sentinel鐨勬湇鍔$啍鏂柟妗�</div>
-                <div>16.[鏂板]Mybatis-Plus娣诲姞OptimizeJoin閰嶇疆鍙傛暟</div>
-                <div>17.[浼樺寲]灏唎ss-starter绯诲垪鍚堝苟涓轰竴</div>
-                <div>18.[浼樺寲]灏唖ms-starter绯诲垪鍚堝苟涓轰竴</div>
-                <div>19.[浼樺寲]澧炲己浼樺寲Url閫氶厤绗﹀尮閰嶉�昏緫</div>
-                <div>20.[浼樺寲]鏁版嵁鏉冮檺缂撳瓨閫昏緫</div>
-                <div>21.[浼樺寲]ubcs-auto灏佽</div>
-                <div>22.[浼樺寲]SqlLogInterceptor閰嶇疆</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.7.2.RELEASE鍙戝竷锛岄噸鏋勫崌绾у父鐢ㄥ姛鑳斤紝浼樺寲浣跨敤浣撻獙" name="21">
-                <div>1.[鍗囩骇]SpringBoot 鑷� 2.2.13.RELEASE</div>
-                <div>2.[鍗囩骇]AlibabaCloud 鑷� 2.2.5</div>
-                <div>3.[鍗囩骇]Mybatis-Plus 鑷� 3.4.2</div>
-                <div>4.[鍗囩骇]Dynamic-Datasource 鑷�3.3.1</div>
-                <div>5.[鍗囩骇]Avue 鑷� 2.7.8</div>
-                <div>6.[鍗囩骇]閫傞厤 Knife4j 2.0.8</div>
-                <div>7.[閲嶆瀯]Swagger鑱氬悎缃戝叧杩佺Щ鑷冲叏鏂扮殑blade-swagger鏈嶅姟</div>
-                <div>8.[閲嶆瀯]Sql鏃ュ織鎵撳嵃閲囩敤druid搴曞眰瀹炵幇灞曠ず瀹屾暣甯﹀弬SQL</div>
-                <div>9.[鏂板]LocalFile鐨刣omain瀛楁</div>
-                <div>10.[鏂板]Sign妯″紡閴存潈timestamp鍦�10绉掑唴鐨勫悎娉曟椂闂存鍒ゆ柇</div>
-                <div>11.[鏂板]寮�鍚鎴锋彃浠跺悗浣跨敤@TenantIgnore娉ㄨВ绮惧噯鍏抽棴绉熸埛杩囨护閫昏緫</div>
-                <div>12.[鏂板]Swagger鍏叡淇℃伅閰嶇疆</div>
-                <div>13.[鏂板]Saber鐭㈤噺鍥炬爣绂荤嚎鍖�</div>
-                <div>14.[鏂板]鑿滃崟绠$悊isOpen瀛楁鎺у埗宸︿晶鑿滃崟鏄惁鍙互浣跨敤鏂皌ab鎵撳紑澶栭摼</div>
-                <div>15.[鏂板]Mybatis-Plus鐨凱age鍚堝苟宸ュ叿绫�</div>
-                <div>16.[浼樺寲]闃块噷浜戠煭淇¤繑鍥炴垚鍔熷垽鏂�昏緫</div>
-                <div>17.[浼樺寲]Token杩囨湡鏃堕棿澶勭悊</div>
-                <div>18.[浼樺寲]Redis鍔犺浇閫昏緫</div>
-                <div>19.[浼樺寲]鐢ㄦ埛鐧诲綍閫昏緫</div>
-                <div>20.[浼樺寲]澶氱鎴疯鑹插垱寤洪�昏緫</div>
-                <div>21.[浼樺寲]Dockerfile鍔犻�熷瓧浣撴瀯寤�</div>
-                <div>22.[浼樺寲]Nacos Shared Config閰嶇疆API鏀逛负鏈�鏂扮増</div>
-                <div>23.[浼樺寲]Saber鎺堟潈绫诲瀷瀛楁鏀逛负checkbox</div>
-                <div>24.[淇]RequestLog閬囧埌MultipartFile.[]绫诲瀷搴忓垪鍖栨姤閿欑殑闂</div>
-                <div>25.[淇]椤剁骇瀛楀吀鏇存柊鍚庢湭鍚屾鏇存柊涓嬪睘瀛楀吀鐨勭紪鍙�</div>
-                <div>26.[淇]Saber閫�鍑哄悗鏈埛鏂版祻瑙堝櫒椤堕儴title璺敱鐨勯棶棰�</div>
-                <div>27.[淇]鑿滃崟鏈烘瀯妯″潡鍏抽棴缂栬緫鐣岄潰鍐嶆墦寮�鏂板鐣岄潰鏁版嵁娌℃湁娓呯┖鐨勯棶棰�</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.7.1.RELEASE鍙戝竷锛岄噸鏋勯拤閽夌洃鎺ч�氱煡锛屽崌绾т緷璧栭�傞厤鏈�鏂癆PI" name="20">
-                <div>1.[鍗囩骇]SpringBoot 鑷� 2.2.12.RELEASE</div>
-                <div>2.[鍗囩骇]SpringCloud 鑷� Hoxton.SR9</div>
-                <div>3.[鍗囩骇]Knife4j 鑷� 2.0.8</div>
-                <div>4.[鍗囩骇]Druid 鑷� 1.2.4</div>
-                <div>5.[鍗囩骇]Seata 鑷� 1.4.1</div>
-                <div>6.[鍗囩骇]Jackson 鑷� 2.11.4</div>
-                <div>7.[鍗囩骇]Mybatis-Plus 鑷� 3.4.1</div>
-                <div>8.[鍗囩骇]Dynamic-Datasource 鑷�3.2.1</div>
-                <div>9.[鍗囩骇]Avue 鑷� 2.7.5</div>
-                <div>10.[鏂板]Secure妯″潡鍔ㄦ�佺鍚嶈璇佺壒鎬�</div>
-                <div>11.[鏂板]Redis搴忓垪鍖栨柟寮忕殑閰嶇疆</div>
-                <div>12.[鏂板]鐢ㄦ埛瀵煎叆瀵煎嚭鐨勭敤鎴峰钩鍙板瓧娈�</div>
-                <div>13.[淇敼]鏃ュ織璺緞榛樿浼樺厛绾э紝鏀寔閰嶇疆瑕嗙洊</div>
-                <div>14.[淇敼]Report妯″潡鍖呰矾寰勶紝鏂板Core鐩綍</div>
-                <div>15.[閲嶆瀯]ubcs-admin锛岄拤閽夌洃鎺ч�氱煡瀹炵幇</div>
-                <div>16.[浼樺寲]ubcs-admin锛屽鍔犺处鍙峰瘑鐮佺櫥褰�</div>
-                <div>17.[浼樺寲]RefreshToken鍒锋柊閫昏緫</div>
-                <div>18.[浼樺寲]绉熸埛鏂板閫昏緫锛屼笟鍔″瓧鍏告敮鎸佹棤闄愬眰绾у鍒�</div>
-                <div>19.[浼樺寲]Ribbon缁勪欢锛屾敮鎸丗eign璋冪敤閰嶇疆</div>
-                <div>20.[淇]娴佺▼鍚嶆悳绱㈠け鏁堢殑闂</div>
-                <div>21.[淇]闄勪欢绠$悊绉熸埛闅旂闂</div>
-                <div>22.[淇]鏁版嵁鏉冮檺鍒嗛厤妯″潡鐨剆qlserver鍏煎鎬�</div>
-                <div>23.[淇]绯荤粺瀛楀吀缂撳瓨鍒锋柊閫昏緫</div>
-                <div>24.[淇]Swagger鏂囨。鍑虹幇Locale鍙傛暟鐨勯棶棰�</div>
-                <div>25.[鍒犻櫎]spring-cloud-stream渚濊禆锛屾寜闇�寮曞叆</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.7.0.RELEASE鍙戝竷锛屾洿鏂癏oxton.SR8锛屽叏闈㈠崌绾у簳灞傞┍鍔�" name="19">
-                <div>1.[鍗囩骇]SpringBoot 鑷� 2.2.11.RELEASE</div>
-                <div>2.[鍗囩骇]SpringCloud 鑷� Hoxton.SR8</div>
-                <div>3.[鍗囩骇]AlibabaCloud 鑷� 2.2.3.RELEASE</div>
-                <div>4.[鍗囩骇]SpringBootAdmin 鑷� 2.2.4</div>
-                <div>5.[鍗囩骇]Knife4j 鑷� 2.0.6</div>
-                <div>6.[鍗囩骇]Swagger 鑷� 2.10.5</div>
-                <div>7.[鍗囩骇]SwaggerModel 鑷� 1.6.2</div>
-                <div>8.[鍗囩骇]SpringPlugin 鑷� 2.2.0.RELEASE</div>
-                <div>9.[鍗囩骇]Druid 鑷� 1.2.1</div>
-                <div>10.[鍗囩骇]JustAuth 鑷� 1.15.8</div>
-                <div>11.[鍗囩骇]Dubbo 鑷� 2.7.8</div>
-                <div>12.[鍗囩骇]Guava 鑷� 30.0-jre</div>
-                <div>13.[鍗囩骇]Avue 鑷� 2.7.0</div>
-                <div>14.[浼樺寲]Swagger灏佽浠ユ敮鎸並nife4j鏈�鏂癆PI</div>
-                <div>15.[浼樺寲]寮曞叆Knife4j澧炲己閰嶇疆,鐢熶骇鐜灏嗗畬鍏ㄩ殧绂绘枃妗h闂�</div>
-                <div>16.[淇]鏈紩鍏ョ鎴锋彃浠跺悗,鑷畾涔夌被绌烘寚閽堢殑闂</div>
-                <div>17.[鍒犻櫎]Zipkin妯″潡,鎺ㄨ崘浣跨敤瀹樻柟鐙珛妯″紡杩愯鏈嶅姟</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.6.1.RELEASE鍙戝竷锛屽鍔犲叏灞�涓婁笅鏂囩郴缁燂紝澧炲姞鐢ㄦ埛骞冲彴鎷撳睍妯″潡" name="18">
-                <div>1.[鍗囩骇]SpringBoot 鑷� 2.1.17.RELEASE</div>
-                <div>2.[鍗囩骇]Mybatis-Plus 鑷� 3.4.0</div>
-                <div>3.[鍗囩骇]Knife4j 鑷� 2.0.5</div>
-                <div>4.[鍗囩骇]JJWT 鑷� 0.11.2</div>
-                <div>5.[鍗囩骇]FastJson 鑷� 1.2.74</div>
-                <div>6.[鏂板]涓婁笅鏂囨牳蹇冨寘锛屼紭鍖栧叏灞�涓婁笅鏂囬厤缃�</div>
-                <div>7.[鏂板]secure妯″潡鐨刡asic璁よ瘉鍔熻兘</div>
-                <div>8.[鏂板]鐢ㄦ埛骞冲彴鎷撳睍妯″潡</div>
-                <div>9.[浼樺寲]閲嶆瀯澧炲己cloud妯″潡</div>
-                <div>10.[浼樺寲]request鏍稿績鑷砨oot妯″潡</div>
-                <div>11.[浼樺寲]澧炲己mybatis-plus鐨勫垎椤甸槻娉ㄥ叆鍔熻兘</div>
-                <div>12.[浼樺寲]sms杩斿洖缁撴灉锛屽幓鎺夐獙璇佺爜搴忓垪鍖�</div>
-                <div>13.[浼樺寲]鏁版嵁鏉冮檺鎻掍欢鏀寔鏈�鏂扮増mybatis-plus</div>
-                <div>14.[浼樺寲]澧炲己sql鏃ュ織鎷︽埅鍣�</div>
-                <div>15.[浼樺寲]澧炲己浠ょ墝锛屾柊澧炲鐢ㄦ埛骞冲彴鐨勫垽鏂�昏緫</div>
-                <div>16.[浼樺寲]浠g爜鐢熸垚澧炲姞瀵箂qlserver鐨勬敮鎸�</div>
-                <div>17.[浼樺寲]鑷畾涔塵apper鐨刟pi</div>
-                <div>18.[淇]Kv绫诲厠闅嗗己杞棶棰�</div>
-                <div>19.[淇]elk閰嶇疆鏃犳硶璇诲彇椤圭洰鍚嶇殑闂</div>
-                <div>20.[淇]鍖哄垝瀛楁level涓簉egionLevel浠ラ槻oracle鎶ラ敊</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.6.0.RELEASE鍙戝竷锛岀鎴锋暟鎹簱闅旂銆佹姤琛ㄧ鐞嗐�丼qlServer鍏煎" name="17">
-                <div>1.[鍗囩骇]Avue 鑷� 2.6.15</div>
-                <div>2.[鍗囩骇]SpringBoot 鑷� 2.1.16.RELEASE</div>
-                <div>3.[鍗囩骇]Seata 鑷� 1.3.0</div>
-                <div>4.[鍗囩骇]Nacos 鑷� 1.3.2</div>
-                <div>5.[鍗囩骇]FastJson 鑷� 1.2.73</div>
-                <div>6.[鍗囩骇]Knife4j 鑷� 2.0.4</div>
-                <div>7.[鍗囩骇]EasyExcel 鑷� 2.2.6</div>
-                <div>8.[鍗囩骇]JustAuth 鑷� 1.15.6</div>
-                <div>9.[鏂板]澶氱鎴锋暟鎹簱闅旂銆佸姩鎬佹暟鎹簮鐗规��</div>
-                <div>10.[鏂板]SqlServer鍏煎</div>
-                <div>11.[鏂板]UReport2鎶ヨ〃绠$悊妯″潡</div>
-                <div>12.[鏂板]瀵硅薄瀛樺偍闄勪欢琛ㄥ姛鑳�</div>
-                <div>13.[浼樺寲]LocalFile鏀寔搴忓垪鍖�</div>
-                <div>14.[浼樺寲]MinioTemplate澧炲姞ContentType閰嶇疆</div>
-                <div>15.[浼樺寲]LogBack-Elk鐨勯厤缃�</div>
-                <div>16.[浼樺寲]娴佺▼鐘舵�佸彉鏇寸殑杩斿洖淇℃伅</div>
-                <div>17.[浼樺寲]椤堕儴鑿滃崟閰嶇疆鎺ュ彛锛屾敮鎸佸ぇ瀹归噺鏁版嵁浼犺緭</div>
-                <div>18.[浼樺寲]User瀵嗙爜瀛楁搴忓垪鍖�</div>
-                <div>19.[浼樺寲]搴忓垪鍖朼dditionalInformation锛岃В鍐抽潪null鍊兼姤閿欑殑闂</div>
-                <div>20.[淇]鍚敤Token鏈夌姸鎬佹ā寮忎笅鍒锋柊Token鐨勯棶棰�</div>
-                <div>21.[淇]鏃ュ織琛ㄦ棤娉曞叆搴揟enantId鐨勯棶棰�</div>
-                <div>22.[淇]flowable-oracle鑴氭湰杩愯閿欒鐨勯棶棰�</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.5.1.RELEASE鍙戝竷锛屽鍔犵涓夋柟鐧诲綍銆佽鏀垮尯鍒掋�丄PI鎶ユ枃鍔犲瘑" name="16">
-                <div>1.[鍗囩骇]Avue 鑷� 2.6.1銆丒lementUI 鑷� 2.13.2</div>
-                <div>2.[鍗囩骇]SpringBoot 鑷� 2.1.14.RELEASE</div>
-                <div>3.[鍗囩骇]SpringCloud 鑷� Greenwich.SR6</div>
-                <div>4.[鍗囩骇]SpringCloud Alibaba 鑷� 2.1.2.RELEASE</div>
-                <div>5.[鍗囩骇]Seata 鑷� 1.2.0</div>
-                <div>6.[鍗囩骇]FastJson 鑷� 1.2.70</div>
-                <div>7.[鍗囩骇]Knife4j 鑷� 2.0.3</div>
-                <div>8.[鍗囩骇]MybatisPlus 鑷�3.3.2</div>
-                <div>9.[鍗囩骇]EasyExcel 鑷� 2.2.4</div>
-                <div>10.[鏂板]绗笁鏂圭郴缁熺櫥褰曪紝闆嗘垚鎷撳睍JustAuth</div>
-                <div>11.[鏂板]琛屾斂鍖哄垝鍔熻兘妯″潡</div>
-                <div>12.[鏂板]API鎶ユ枃鍔犲瘑宸ュ叿</div>
-                <div>13.[鏂板]Token閰嶇疆锛屾敮鎸佹湁鐘舵�佹ā寮忥紝鏀寔涓�浜哄湪绾挎垨澶氫汉鍦ㄧ嚎</div>
-                <div>14.[鏂板]Secure閰嶇疆锛屾敮鎸侀厤缃姹傛柟娉曠被鍨嬨�佽姹傝矾寰勩�佽姹傝〃杈惧紡鍖归厤</div>
-                <div>15.[鏂板]Jackson閰嶇疆锛屾敮鎸佸ぇ鏁板瓧杞瓧绗︿覆妯″紡锛屾敮鎸乶ull杞┖鍊兼ā寮�</div>
-                <div>16.[鏂板]绉熸埛璐﹀彿鎺堟潈鐮佷繚鎶ゆ満鍒讹紝闃叉绉佹湁閮ㄧ讲瀹㈡埛绡℃敼鏁版嵁搴撹秺鏉�</div>
-                <div>17.[浼樺寲]瀛楀吀妯″潡锛屽鍔犳爲褰㈢粨鏋�</div>
-                <div>18.[浼樺寲]鏂板绉熸埛閫昏緫锛屾柊澧炴椂鍚屾瓒呯閰嶇疆鐨勯粯璁や笟鍔″瓧鍏告暟鎹�</div>
-                <div>19.[浼樺寲]鐢ㄦ埛瀵煎叆閫昏緫锛屽彧鏈夎秴绠℃墠鍙互瀹氫箟绉熸埛缂栧彿</div>
-                <div>20.[浼樺寲]閮ㄩ棬鍒楄〃閫昏緫锛岄潪瓒呯瑙掕壊鍙彲鐪嬪埌鏈骇鍙婁互涓嬮儴闂ㄦ暟鎹�</div>
-                <div>21.[浼樺寲]瀛楀吀妯″潡锛屽鍔犳灇涓剧被锛岀粺涓�鍏ュ彛</div>
-                <div>22.[浼樺寲]DictCache缂撳瓨鍔犺浇閫昏緫</div>
-                <div>23.[浼樺寲]绉熸埛缂撳瓨鍒锋柊閫昏緫</div>
-                <div>24.[浼樺寲]瑙掕壊閰嶇疆閫昏緫锛屽悓姝ュ彇娑堝瓙瑙掕壊瀵瑰簲鐨勮彍鍗曟潈闄�</div>
-                <div>25.[浼樺寲]椤堕儴鑿滃崟锛屽鍔犳帓搴忓姛鑳�</div>
-                <div>26.[浼樺寲]INode锛屾敮鎸佹硾鍨�</div>
-                <div>27.[浼樺寲]浠g爜缁撴瀯锛屼负bean缁熶竴鍔犱笂final鍏抽敭瀛椾慨楗�</div>
-                <div>28.[浼樺寲]Nacos鍔ㄦ�佸埛鏂伴厤缃�</div>
-                <div>29.[浼樺寲]Dockerfile锛岄噰鐢∣penj9鍩虹闀滃儚锛屽ぇ骞呭害闄嶄綆鍐呭瓨鍗犵敤</div>
-                <div>30.[浼樺寲]宸ョ▼鍚姩閫昏緫锛屽叧闂璅lowable鑷姩寤鸿〃鍔熻兘锛岄渶瑕佹墜鍔ㄥ鍏ユ祦绋媠ql</div>
-                <div>31.[淇]SpringBootAdmin璇诲彇actuator璺緞閰嶇疆</div>
-                <div>32.[淇]鐢ㄦ埛瀵煎叆閫昏緫锛屼慨姝e瘑鐮佸姞瀵嗚鍒�</div>
-                <div>33.[淇]Boot鐗堟湰Xss榛樿閰嶇疆璺緞</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.5.0.RELEASE鍙戝竷锛屽鍔犲矖浣嶇鐞嗭紝澧炲姞鐢ㄦ埛瀵煎叆瀵煎嚭" name="15">
-                <div>1.[鍗囩骇]Avue 鑷� 2.5.0</div>
-                <div>2.[鍗囩骇]SpringBoot 鑷� 2.1.13</div>
-                <div>3.[鍗囩骇]FastJson 鑷� 1.2.68</div>
-                <div>4.[鍗囩骇]Druid 鑷� 1.1.22</div>
-                <div>5.[鍗囩骇]Knife4j 鑷� 2.0.2</div>
-                <div>6.[鍗囩骇]Taobao-Sdk 鑷� 20200415</div>
-                <div>7.[鍗囩骇]docker-maven-plugin 鑷� dockerfile-maven-plugin</div>
-                <div>8.[鏂板]楠岃瘉鐮佸紑鍏�</div>
-                <div>9.[鏂板]鏁版嵁鏉冮檺鍏ㄥ眬寮�鍏�</div>
-                <div>10.[鏂板]宀椾綅绠$悊妯″潡</div>
-                <div>11.[鏂板]鐢ㄦ埛Excel瀵煎叆瀵煎嚭鍔熻兘</div>
-                <div>12.[鏂板]鐢ㄦ埛缁戝畾宀椾綅鍔熻兘</div>
-                <div>13.[鏂板]EasyExcel灏佽宸ュ叿ExcelUtil</div>
-                <div>14.[鏂板]Feign鍐呴儴绾跨▼浼犻��</div>
-                <div>15.[鏂板]Mybatis-Plus閰嶇疆锛屾敮鎸侀厤缃渶澶у垎椤垫暟</div>
-                <div>16.[鏂板]Gateway鍦ㄥ鍥㈤槦鍗忎綔妯″紡鐏垫椿鎸囧悜鏈湴鏈嶅姟鐨勯厤缃�</div>
-                <div>17.[鏂板]Sms妯″潡鐨剆endMessage鎺ュ彛鍙奡msResponse鍝嶅簲绫�</div>
-                <div>18.[鏂板]CacheUtil绉熸埛缂撳瓨闅旂鍔熻兘</div>
-                <div>19.[浼樺寲]CacheUtil缂撳瓨閲嶈浇閫昏緫锛岃繑鍥瀊ean涓嶄负null浣嗘暟鎹叏涓虹┖灏嗕笉鍏ョ紦瀛�</div>
-                <div>20.[浼樺寲]缂撳瓨娓呴櫎閫昏緫锛孈CacheEvict缁熶竴淇敼涓篊acheUtil.clear</div>
-                <div>21.[浼樺寲]鐧诲綍閫昏緫锛屽墠绔瀵嗙爜鍔犲瘑鍚庡啀浼犻�掕嚦閴存潈鎺ュ彛</div>
-                <div>22.[浼樺寲]Oss涓婁紶鎺ュ彛锛岃繑鍥瀌omain瀛楁</div>
-                <div>23.[浼樺寲]BladeRedisCache鍛藉悕涓築ladeRedis</div>
-                <div>24.[浼樺寲]鎺у埗鍙版棩蹇楁墦鍗板姛鑳斤紝瑙勯伩MultipartFile璇诲彇鎶ラ敊</div>
-                <div>25.[浼樺寲]閰嶇疆鍏抽敭瀛梕nable缁熶竴涓篹nabled</div>
-                <div>26.[浼樺寲]keyword鏃ユ湡澶勭悊</div>
-                <div>27.[浼樺寲]浠g爜鐢熸垚sql鑴氭湰榛樿鍦ㄥ伐浣滃彴鑿滃崟涓�</div>
-                <div>28.[浼樺寲]Jwt鑾峰彇Token閫昏緫</div>
-                <div>29.[浼樺寲]Token杩斿洖锛屽鍔犲矖浣岻D</div>
-                <div>30.[浼樺寲]TokenGranter锛岄噰鐢ㄦ洿绠�娲佺殑鎷撳睍鏂瑰紡</div>
-                <div>31.[浼樺寲]鏃ュ織绠$悊灞曠幇鏂瑰紡</div>
-                <div>32.[浼樺寲]鏂板缓绉熸埛閫昏緫锛屽鍔犲弬鏁拌鍙栨潵璁剧疆鏂板缓绉熸埛鐨勯厤缃�</div>
-                <div>33.[浼樺寲]娴佺▼绛炬敹鎺ュ彛锛屾敮鎸佸瑙掕壊鎿嶄綔</div>
-                <div>34.[浼樺寲]鍔ㄦ�佺綉鍏筹紝鏀寔璇诲彇鑷畾涔塶amespace閰嶇疆</div>
-                <div>35.[浼樺寲]鍒犻櫎绉熸埛閫昏緫锛屽悓鏃跺垹闄ゅ搴旂殑鐢ㄦ埛</div>
-                <div>36.[浼樺寲]鏍戝舰鎳掑姞杞斤紝鏀寔灞�閮ㄥ疄鏃跺埛鏂板姛鑳�</div>
-                <div>37.[浼樺寲]澶氱鎴锋彃浠舵柊澧炰慨鏀归�昏緫锛岃嫢鎸囧畾tenantId涓虹┖鍒欎笉杩涜鎿嶄綔</div>
-                <div>38.[浼樺寲]SmsBuilder銆丱ssBuilder</div>
-                <div>39.[浼樺寲]Sentinel閰嶇疆</div>
-                <div>40.[浼樺寲]XssFilter涓哄叏灞�鐨凚ladeRequestFilte</div>
-                <div>41.[浼樺寲]BladeX寮�鍙戞墜鍐孡inux閮ㄧ讲绔犺妭璁茶В</div>
-                <div>42.[浼樺寲]Saber鐩稿叧閰嶇疆锛屼互閫傞厤Avue鏈�鏂扮増API</div>
-                <div>43.[浼樺寲]Saber鐩稿叧閰嶇疆鍐卍one涓巐oading鐨勯『搴�</div>
-                <div>44.[淇]鐢ㄦ埛鍩烘湰淇℃伅淇敼鐨刡ug</div>
-                <div>45.[淇]QiniuTemplate鐨刾utFile寰幆璋冪敤鐨刡ug</div>
-                <div>46.[淇]鏃ュ織妗嗘灦鑾峰彇RequestBody涓虹┖鐨刡ug</div>
-                <div>47.[淇]Saber缁勪欢琚鐢ㄥ鑷存病鏈夊埛鏂扮殑bug</div>
-                <div>48.[鍒犻櫎]杩囨椂鐨凚ladeSecureUrlProperties</div>
-                <div>49.[鍒犻櫎]杩囨椂鐨刋ssUrlProperties</div>
-                <div>50.[鍒犻櫎]杩囨椂鐨凴edisUtil</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.4.0.RELEASE鍙戝竷锛屽鍔犲绉熸埛鐭俊鏈嶅姟锛屽崌绾eata1.1" name="14">
-                <div>1.[鏂板]闆嗘垚涓冪墰銆侀樋閲屼簯銆佽吘璁簯銆佷簯鐗囩瓑鐭俊鏈嶅姟锛屾敮鎸佸绉熸埛閰嶇疆</div>
-                <div>2.[鏂板]瀵硅薄瀛樺偍妯″潡鐨勮祫婧愮紪鍙峰瓧娈碉紝鍙牴鎹紪鍙锋寚瀹歰ss閰嶇疆鐨勬湇鍔�</div>
-                <div>3.[鏂板]瀵硅薄瀛樺偍銆佺煭淇¢厤缃ā鍧楃殑璋冭瘯鍔熻兘锛屽彲鍦ㄧ嚎璋冭瘯閰嶇疆鏄惁鍙敤</div>
-                <div>4.[鏂板]瓒呯鍚敤绉熸埛杩囨护鐨勯厤缃�</div>
-                <div>5.[鍗囩骇]SpringBoot 2.1.12锛孲pringCloud SR5</div>
-                <div>6.[鍗囩骇]鍏煎 Seata 1.1</div>
-                <div>7.[浼樺寲]瀵硅薄瀛樺偍鐨勬ā鍧椾娇鐢ㄤ綋楠�</div>
-                <div>8.[浼樺寲]鍏煎Oracle妯$硦鏌ヨ鐨勫啓娉�</div>
-                <div>9.[浼樺寲]瓒呯鏉冮檺锛屼笉鍙楃鎴疯繃鏈熸椂闂村奖鍝�</div>
-                <div>10.[浼樺寲]mybatis-plus鐩稿叧杩囨湡娉ㄨВ</div>
-                <div>11.[浼樺寲]xxl-job妯″潡鐨勯厤缃枃浠�</div>
-                <div>12.[浼樺寲]INode鏀寔搴忓垪鍖栨帴鍙�</div>
-                <div>13.[浼樺寲]缁熶竴Oss妯″潡鍛藉悕</div>
-                <div>14.[浼樺寲]閮ㄧ讲鑴氭湰锛屽崌绾х浉鍏崇増鏈�</div>
-                <div>15.[淇]鏁版嵁鏉冮檺閮ㄩ棬杩囨护宸插垹闄ゅ璞�</div>
-                <div>16.[淇]涓氬姟瀛楀吀缂撳瓨bug锛屽鍔犵鎴疯繃婊�</div>
-                <div>17.[淇]鍗犱綅绗﹁В鏋愬櫒鐨刡ug</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.3.1.RELEASE鍙戝竷锛屾祦绋嬪鍔犵鎴峰畾鍒讹紝鐧诲綍澧炲姞楠岃瘉鐮�" name="13">
-                <div>1.[鏂板]鐧诲綍楠岃瘉鐮佸姛鑳�</div>
-                <div>2.[鏂板]Oauth2鑷畾涔塗okenGranter</div>
-                <div>3.[鏂板]宸ヤ綔娴佺粦瀹氱鎴峰姛鑳斤紝鏀寔閫氱敤娴佺▼鍜屽畾鍒舵祦绋�</div>
-                <div>4.[鏂板]Condition绫荤殑鑷畾涔夊弬鏁版帓闄ゅ叆鍙�</div>
-                <div>5.[澧炲己]绉熸埛鎻掍欢鍔熻兘锛屾柊澧炴搷浣滃彲鏍规嵁鑷畾涔夌殑tenantId鍊艰繘琛岃鐩�</div>
-                <div>6.[澧炲己]瓒呯鏉冮檺锛屼笉鍙楁暟鎹潈闄愭彃浠跺奖鍝�</div>
-                <div>7.[鍗囩骇]mybatis-plus鑷�3.3.1</div>
-                <div>8.[浼樺寲]mybatis-plus灏佽锛屾彁鍗囧垎椤靛彲鎷撳睍鎬�</div>
-                <div>9.[浼樺寲]lib鍒嗙鎵撳寘閫昏緫</div>
-                <div>10.[浼樺寲]CacheUtil鍒濆鍖栭�昏緫</div>
-                <div>11.[浼樺寲]HttpUtil锛岄噰鐢ㄦ渶鏂板皝瑁呴�昏緫</div>
-                <div>12.[浼樺寲]瑙掕壊淇℃伅鑾峰彇閫昏緫涓哄疄鏃讹紝涓嶅彈寮�婧愮増銆佸崟浣撶増缂撳瓨褰卞搷</div>
-                <div>13.[浼樺寲]鏃ュ織鎵撳嵃宸ュ叿鍒ゆ柇绌洪�昏緫</div>
-                <div>14.[淇]BeanUtil鐨刢lass绫诲瀷鍒ゆ柇閫昏緫</div>
-                <div>15.[鍒犻櫎]鍩轰簬zookeeper浣撻獙涓嶄匠鐨勫垎甯冨紡閿�</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.3.0.RELEASE鍙戝竷锛岀鎴峰寮猴紝搴曞眰鏋舵瀯鎻掍欢鍏ㄩ潰澧炲己" name="12">
-                <div>1.[鏂板]swagger-bootstrap-ui鍏ㄦ柊鍗囩骇涓簁nife4j</div>
-                <div>2.[鏂板]saber鍗囩骇鑷砤vue2.3.7鐗堟湰</div>
-                <div>3.[鏂板]saber鏍戣〃鎳掑姞杞芥ā寮�</div>
-                <div>4.[鏂板]鑵捐浜戝瓨鍌ㄥ皝瑁�</div>
-                <div>5.[鏂板]xxl-job闆嗘垚锛屾敮鎸佸垎甯冨紡浠诲姟璋冨害</div>
-                <div>6.[鏂板]kafka銆乺abbitmq銆乧loudstream闆嗘垚</div>
-                <div>7.[鏂板]redis鍒嗗竷寮忛攣鎻掍欢</div>
-                <div>8.[鏂板]楂樻�ц兘http璋冪敤妯″潡</div>
-                <div>9.[鏂板]PropertySource娉ㄥ唽閫昏緫锛屾彁楂樺畨鍏ㄦ��</div>
-                <div>10.[鏂板]Param鍙傛暟缂撳瓨宸ュ叿绫�</div>
-                <div>11.[鏂板]绉熸埛鎿嶄綔锛屽鍔犲垱寤哄搴旂殑绉熸埛绠$悊鍛樿处鍙枫�佽彍鍗曟潈闄�</div>
-                <div>12.[鏂板]绉熸埛鎻掍欢锛岃秴绠″彲鏌ョ湅鎵�鏈夌鎴锋暟鎹殑閫昏緫</div>
-                <div>13.[鏂板]绉熸埛鍔熻兘锛岀粦瀹氬煙鍚嶃�佺郴缁熻儗鏅�佽处鍙烽搴︺�佽繃鏈熸椂闂�</div>
-                <div>14.[鏂板]鐧诲綍銆佸垱寤虹敤鎴锋搷浣滅粦瀹氱鎴烽厤缃�</div>
-                <div>15.[浼樺寲]绉熸埛鎻掍欢鍒ゆ柇閫昏緫锛屽鍔爁lowable鐩稿叧琛ㄧ殑绉熸埛杩囨护鎺掗櫎</div>
-                <div>16.[浼樺寲]xss杩囨护閫昏緫锛屾彁楂樻�ц兘</div>
-                <div>17.[浼樺寲]鏈湴鏂囦欢涓婁紶閫昏緫</div>
-                <div>18.[浼樺寲]oss閰嶇疆锛屼慨鏀瑰悗鍙婃椂鐢熸晥鏃犻渶鐐瑰嚮鍚敤</div>
-                <div>19.[浼樺寲]璇锋眰鏃ュ織灞曠ず鍔熻兘</div>
-                <div>20.[淇]鍓嶇鍏抽棴绉熸埛妯″紡瀵艰嚧鐨勬柊澧炵敤鎴峰け鏁堥棶棰�</div>
-                <div>21.[淇]OSS鐩稿叧bucket鍛藉悕鐨勯棶棰�</div>
-                <div>22.[淇]ribbon缁勪欢鐢遍檷绾у紩璧风殑闂</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.2.2.RELEASE鍙戝竷锛屽寮哄瓧鍏哥鐞嗭紝鐢ㄦ埛绠$悊澧炲姞宸︽爲鍙宠〃" name="11">
-                <div>1.[浼樺寲]鎷嗗垎鍑虹郴缁熷瓧鍏歌〃涓庝笟鍔″瓧鍏歌〃锛屽瓧鍏搁敭鍊兼敼涓簊tring绫诲瀷</div>
-                <div>2.[浼樺寲]鐢ㄦ埛绠$悊澧炲姞宸︽爲鍙宠〃鍔熻兘</div>
-                <div>3.[浼樺寲]绉熸埛鏂板澧炲姞绉熸埛榛樿绫诲瀷</div>
-                <div>4.[浼樺寲]澶氱鎴疯〃瀵瑰簲瀹炰綋缁ф壙TenantEntity</div>
-                <div>5.[浼樺寲]鐢ㄤ簬鏈湴涓婁紶鐨凚ladeFile绫绘洿鍚嶄负LocalFile闃叉鍐茬獊</div>
-                <div>6.[浼樺寲]鑿滃崟鏂板閫昏緫</div>
-                <div>7.[浼樺寲]mybatis-plus榛樿閰嶇疆鐨勫鐞�</div>
-                <div>8.[浼樺寲]绉熸埛杩囨护鍒ゆ柇閫昏緫锛屽垹闄ゅ浣欑殑绫�</div>
-                <div>9.[浼樺寲]alioss鐢熸垚鍦板潃鐨勯�昏緫</div>
-                <div>10.[浼樺寲]redisTemplate鍔犺浇閫昏緫</div>
-                <div>11.[浼樺寲]绉熸埛澶勭悊锛岀畝鍖栭厤缃紝鑷姩璇嗗埆闇�瑕佽繃婊ょ殑绉熸埛琛�</div>
-                <div>12.[浼樺寲]鏁版嵁鏉冮檺琛ㄥ崟鐢ㄦ埛浣撻獙</div>
-                <div>13.[淇]鏁版嵁鏉冮檺鎻掍欢涓嶅吋瀹圭殑闂</div>
-                <div>14.[淇]鏁版嵁鏉冮檺鏍戝嬀閫夋樉绀洪棶棰�</div>
-                <div>15.[淇]windows骞冲彴elk寮�鍏冲け鏁堢殑闂</div>
-                <div>16.[淇]绉熸埛bean鍔犺浇閫昏緫</div>
-                <div>17.[淇]saber浠g爜鐢熸垚椹煎嘲璺緞瀵艰嚧鐨勯棶棰�</div>
-                <div>18.[淇]docker鑴氭湰nginx绔彛鍖归厤闂</div>
-                <div>19.[淇]鏈烘瀯妯″潡鎻愪氦鏈垹闄ょ紦瀛樼殑闂</div>
-                <div>20.[淇]oss缂撳瓨鑾峰彇鏈姞绉熸埛鍒ゆ柇鐨勯棶棰�</div>
-                <div>21.[淇]ubcs-auth鍦╦ava11涓嬫棤娉曡繍琛岀殑闂</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.2.1.RELEASE鍙戝竷锛岄泦鎴怑LK锛屽鍔犲垎甯冨紡鏃ュ織杩借釜" name="10">
-                <div>1.[鏂板]闆嗘垚鏈�鏂扮増ELK锛屽鍔犲垎甯冨紡鏃ュ織杩借釜鍔熻兘</div>
-                <div>2.[鏂板]澧炲姞ELK涓�閿儴缃瞕ocker鑴氭湰</div>
-                <div>3.[鏂板]鎶借薄灏佽鏃ュ織绠$悊閫昏緫</div>
-                <div>4.[鏂板]BladeX-Biz澧炲姞easypoi鐨刣emo宸ョ▼</div>
-                <div>5.[鏂板]BladeX-Biz澧炲姞websocket鐨刣emo宸ョ▼</div>
-                <div>6.[浼樺寲]minio鏂囦欢绛栫暐</div>
-                <div>7.[鏂板]Sql鏉′欢鏋勫缓绫诲幓闄ゅ垎椤靛瓧娈�</div>
-                <div>8.[浼樺寲]sql鎵撳嵃鍔熻兘</div>
-                <div>9.[浼樺寲]wrapper閫昏緫</div>
-                <div>10.[鏂板]CommonConstant鎷嗗垎鍑篖auncherConstant</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.2.0.RELEASE鍙戝竷锛屽鍔犻泦缇ょ洃鎺э紝閾捐矾杩借釜" name="9">
-                <div>1.[鏂板]turbine闆嗙兢鐩戞帶鏈嶅姟</div>
-                <div>2.[鏂板]zipkin鍒嗗竷寮忛摼璺拷韪�</div>
-                <div>3.[鍗囩骇]seata鐗堟湰鑷�0.9.0锛岃В鍐冲垎甯冨紡浜嬪姟閬囧埌鐨刡ug</div>
-                <div>4.[鏂板]Launcher鐨刵acos閰嶇疆鏀逛负sharedIds锛屾彁鍗囧瓙宸ョ▼閰嶇疆浼樺厛绾�</div>
-                <div>5.[鏂板]澧炲姞changeStatus鏂规硶锛屾柟渚夸慨鏀逛笟鍔$姸鎬佸瓧娈�</div>
-                <div>6.[鏂板]saber浠g爜妯℃澘澧炲姞鍒锋柊浜嬩欢</div>
-                <div>7.[鏂板]saber搴曞眰鏋舵瀯鍗囩骇</div>
-                <div>8.[鏂板]saber鏀寔tab鍒囨崲淇濆瓨椤甸潰鐘舵��</div>
-                <div>9.[鏂板]娣诲姞bom缁熶竴鐗堟湰閰嶇疆</div>
-                <div>10.[鏂板]娣诲姞trace starter</div>
-                <div>11.[鏂板]ubcs-admin鎺掗櫎seata鏈嶅姟</div>
-                <div>12.[鏂板]oss鏁忔劅鎿嶄綔澧炲姞鏉冮檺鏍¢獙</div>
-                <div>13.[鏂板][淇]dict銆乺ole涓嶉�夋嫨鐖惰妭鐐规姤閿�</div>
-                <div>14.[鏂板]鍔ㄦ�佺綉鍏宠缃惎鍔ㄥ姞杞�</div>
-                <div>15.[鏂板]瀛楀吀澧炲姞灏佸瓨鍔熻兘</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.1.0.RELEASE鍙戝竷锛屽叏闈㈠寮哄簳灞傞┍鍔�" name="8">
-                <div>1.[鍗囩骇]springboot 2.1.8銆乻pringcloud greenwich sr3</div>
-                <div>2.[鏂板]闆嗘垚seata锛屾彁渚涙渶绠�闆嗘垚鏂规</div>
-                <div>3.[鏂板]ubcs-admin澧炲姞nacos鍔ㄦ�佺洃鍚�</div>
-                <div>4.[鏂板]澧炲姞alioss闆嗘垚锛屽己鍖杘ss杩斿洖淇℃伅</div>
-                <div>5.[鏂板]鑾峰彇浠ょ墝鎿嶄綔澧炲姞绌哄垽鏂�</div>
-                <div>6.[鏂板]鎷嗗垎鏁版嵁搴撲緷璧栥�佸寮簃ybatis銆佸鍔爕ml鑷畾涔夐厤缃鍙�</div>
-                <div>7.[鏂板]鍚勬ā鍧楀鍔犻粯璁ょ殑yml閰嶇疆锛屼笉鍗犵敤application.yml</div>
-                <div>8.[鏂板]澧炲姞ribbon缁勪欢锛屽彲鑷畾涔塴b浼樺厛閫夋嫨鐨刬p娈碉紝瑙e喅鍥㈤槦缃戝叧璋冭瘯闇�姹�</div>
-                <div>9.[浼樺寲]feign鐨刡ean鍔犺浇閫昏緫</div>
-                <div>10.[澧炲己]condition鏉′欢</div>
-                <div>11.[浼樺寲]鏃ュ織鎵撳嵃鏁堟灉</div>
-                <div>12.[閲嶆瀯]redis妯″潡锛屽鍔爎edis闄愭祦鍔熻兘</div>
-                <div>13.[浼樺寲]beanutil鎬ц兘</div>
-                <div>14.[浼樺寲]鍘绘帀璋冭瘯鐢ㄧ殑RouteEndpoint锛屽寮哄畨鍏ㄦ��</div>
-                <div>15.[浼樺寲]閮ㄩ棬鏂板閫昏緫</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.0.7.RELEASE鍙戝竷锛屽鍔犵綉鍏抽壌鏉冿紝寮哄寲浠g爜鐢熸垚" name="7">
-                <div>1.[鏂板]澧炲姞鍩轰簬Nacos鐨勫姩鎬佺綉鍏抽壌鏉�</div>
-                <div>2.[鏂板]浠g爜鐢熸垚澧炲姞澶氭暟鎹簮閫夋嫨锛屽己鍖栧崟琛ㄤ唬鐮佺敓鎴�</div>
-                <div>3.[鏂板]澧炲姞涓汉淇℃伅淇敼銆佸ご鍍忎笂浼犮�佸瘑鐮佹洿鏂板姛鑳�</div>
-                <div>4.[浼樺寲]鏂板缓瑙掕壊閫昏緫</div>
-                <div>5.[淇]鑻ュ共issue</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.0.6.RELEASE鍙戝竷锛屽吋瀹逛笁澶т富娴佹暟鎹簱" name="6">
-                <div>1.[鏂板]涓�濂椾唬鐮佸吋瀹筂ysql銆丱racle銆丳ostgreSQL涓夊ぇ涓绘祦鏁版嵁搴�</div>
-                <div>2.[鍗囩骇]flowable 6.4.2</div>
-                <div>3.[鏂板]瓒呯榛樿鎷ユ湁鎵�鏈夎彍鍗曟潈闄�</div>
-                <div>4.[淇]鏉冮檺閰嶇疆鏁版嵁闀垮害杩囧ぇ鐨刡ug</div>
-                <div>5.[鏂板]澧炲姞绉熸埛淇℃伅鑾峰彇</div>
-                <div>6.[浼樺寲]鍛戒护琛屽惎鍔ㄩ『搴�</div>
-                <div>7.[鍗囩骇]alibaba cloud姣曚笟鐗堟湰</div>
-                <div>8.[鏂板]鏃ュ織鐩戝惉澧炲姞鑷畾涔夐厤缃�</div>
-                <div>9.[鍗囩骇]swagger-bootstrap-ui鐗堟湰</div>
-                <div>10.[鏂板]saber琛ㄦ牸鑷�傚簲銆佸鍔爈oading</div>
-                <div>11.[鏂板]saber閫氱煡鍏憡妯″潡澧炲姞瀵屾枃鏈紪杈戝櫒</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.0.5.RELEASE鍙戝竷锛屽崌绾у垎甯冨紡鎺ュ彛鏉冮檺绯荤粺" name="5">
-                <div>1.[鍗囩骇]涓哄垎甯冨紡鎺ュ彛鏉冮檺绯荤粺</div>
-                <div>2.[鏂板]澧炲姞澶氱鎴疯嚜瀹氫箟椤堕儴鑿滃崟鍔熻兘</div>
-                <div>3.[鍗囩骇]greenwich SR2锛宮ybatis-plus 3.1.2</div>
-                <div>4.[鏂板]swagger鎺掑簭瑙勫垯閲囩敤鏈�鏂版敞瑙�</div>
-                <div>5.[鏂板]鏁版嵁鏉冮檺澧炲姞鍙瀛楁閰嶇疆</div>
-                <div>6.[鏂板]鏁版嵁鏉冮檺澧炲姞鍒嗗竷寮忔湇鍔℃敮鎸�</div>
-                <div>7.[鏂板]澧炲姞杩滅▼璋冪敤鍒嗛〉鐨勪緥瀛愶紝瑙e喅mybatis-plus浼犻�扞Page鍙嶅簭鍖栧嚭鐜扮殑bug</div>
-                <div>8.[浼樺寲]绉熸埛鎺ュ彛鏉冮檺瑙勫垯</div>
-                <div>9.[鏂板]SqlKeyword澧炲姞鏉′欢鍒ゆ柇</div>
-                <div>10.[淇]閮ㄥ垎妯″潡鍖呭悕鍒嗗眰鐨勯棶棰�</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.0.4.RELEASE鍙戝竷锛屽鍔犲姩鎬佹暟鎹潈闄愮郴缁�" name="4">
-                <div>1.[鏂板]娉ㄨВ+web鍙鍖栭厤缃殑鍔ㄦ�佹暟鎹潈闄愮郴缁�</div>
-                <div>2.[鍗囩骇]閮ㄩ棬绠$悊涓烘満鏋勭鐞嗭紝澧炲姞鏈烘瀯绫诲瀷</div>
-                <div>3.[鏂板]瑙e喅mybatis-plus鎺掑簭瀛楁鐨剆ql娉ㄥ叆闂</div>
-                <div>4.[鏂板]create_dept缁熶竴涓氬姟瀛楁</div>
-                <div>5.[鏂板]swagger ui椤甸潰璁剧疆Authorize 榛樿鍏ㄥ眬鍙傛暟</div>
-                <div>6.[鏂板]jsonutil澧炲姞灏佽鏂规硶,鍘绘帀devtools渚濊禆</div>
-                <div>7.[鏂板]鏁版嵁搴撹繛鎺ラ�傞厤mysql8</div>
-                <div>8.[鏂板]docker-compose鑴氭湰澧炲姞鏃跺尯</div>
-                <div>9.[鏂板]oauth鐢宠token鍙敮鎸佽嚜瀹氫箟琛�</div>
-                <div>10.[淇]浠g爜鐢熸垚sql缂哄け涓婚敭鐨勯棶</div>
-                <div>11.[鏂板]boot鐗堟湰閲嶆瀯鐧诲綍閫昏緫锛屽寮哄彲鎷撳睍鎬�</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.0.3.RELEASE鍙戝竷锛屼紭鍖栧绉熸埛oss绯荤粺锛屼紭鍖栦笟鍔℃灦鏋�" name="3">
-                <div>1.[鏂板]gateway澧炲姞鍔ㄦ�佹枃妗i厤缃紝鍙�氳繃閰嶇疆nacos鍔ㄦ�佸埛鏂�</div>
-                <div>2.[浼樺寲]淇blade_menu浠g爜鐢熸垚妯″潡鍒犻櫎api鐨勫湴鍧�</div>
-                <div>3.[浼樺寲]mysql渚濊禆</div>
-                <div>4.[鏂板]LauncherService澧炲姞鎺掑簭鍔熻兘</div>
-                <div>5.[浼樺寲]hystrixfeign鍔犺浇</div>
-                <div>6.[浼樺寲]澶氱鎴穙ss绯荤粺閫昏緫锛屼娇涔嬫洿鍔犳槗鐢�</div>
-                <div>7.tenant_code瀛楁缁熶竴涓簍enant_id</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.0.2.RELEASE鍙戝竷锛屽鍔犲绉熸埛oss绠$悊绯荤粺" name="2">
-                <div>1.[鏂板]澧炲姞minio灏佽</div>
-                <div>2.[鏂板]澧炲姞qiniu灏佽</div>
-                <div>3.[鏂板]澧炲姞oss缁熶竴鎺ュ彛</div>
-                <div>4.[鏂板]闆嗘垚minio銆乹iniu锛岃繘琛岀粺涓�绠$悊鐨勫绉熸埛oss绯荤粺</div>
-                <div>5.[浼樺寲]ubcs-core-cloud閫昏緫</div>
-                <div>6.[鏂板]badex-biz澧炲姞涓嶅悓鍖呭悕鐨剆wagger銆乵ybatis閰嶇疆demo</div>
-                <div>7.[鏂板]badex-biz澧炲姞nacos鑷畾涔夋敞鍐屾枃浠禿emo</div>
-                <div>8.[鏂板]bladex-biz澧炲姞nacos鍙傛暟鍔ㄦ�佸埛鏂癲emo</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.0.1.RELEASE鍙戝竷锛岀郴缁熶紭鍖栫増鏈�" name="1">
-                <div>1.[鏂板]鍏煎jdk11</div>
-                <div>2.[鏂板]鏀寔refresh_token鍔熻兘</div>
-                <div>3.[鏂板]澧炲姞minio灏佽锛屾敮鎸佸绉熸埛妯″紡鐨刼ss瀵硅薄瀛樺偍</div>
-                <div>4.[鏂板]闆嗘垚dubbo鏈�鏂扮増鏈紝鏀寔rpc杩滅▼璋冪敤</div>
-                <div>5.[鏂板]瀹氬埗鍩轰簬nacos鐨刧ateway鍔ㄦ�佺綉鍏�</div>
-                <div>6.[浼樺寲]鑱氬悎缃戝叧閰嶇疆锛屼娇涔嬫洿鍔犺交宸�</div>
-                <div>7.[鏂板]CacheUtil澧炲姞缂撳瓨娓呴櫎鏂规硶</div>
-                <div>8.[浼樺寲]鏃ュ織鏂囦欢鏍煎紡</div>
-                <div>9.[鏂板]Secure鎷︽埅鍣ㄦ敮鎸佽嚜瀹氫箟鍔犺浇</div>
-              </el-collapse-item>
-              <el-collapse-item title="2.0.0.RELEASE鍙戝竷锛屽畬缇庡畾鍒剁殑寰湇鍔″紑鍙戝钩鍙�" name="0">
-                <div>1.[鏂板]Swagger鎻愪緵list褰㈠紡閰嶇疆鎵弿鍖�</div>
-                <div>2.[鏂板]DictCache銆乁serCache銆丼ysCache缂撳瓨宸ュ叿绫�</div>
-                <div>3.[鏂板]閲嶆柊璁捐EntityWrapper缁撴瀯锛屼娇涔嬫洿鍔犵畝鍗曟槗鐢�</div>
-                <div>4.[鏂板]寮哄寲閮ㄥ垎鏁忔劅鏁版嵁鐨勫垹闄ゆ牎楠�</div>
-                <div>5.[鏂板]Condition绫荤殑sql鏉′欢鏋勯�犲櫒</div>
-                <div>6.[淇]宸ヤ綔娴佸垎椤礲ug</div>
-                <div>7.[浼樺寲]docker閰嶇疆</div>
-                <div>8.[浼樺寲]澶氱鎴烽�昏緫</div>
-                <div>9.[浼樺寲]request鎵撳嵃鏃ュ織閫昏緫</div>
-                <div>10.[淇]getIp鐨刡ug</div>
-                <div>11.[浼樺寲]saber浠g爜鐢熸垚妯℃澘</div>
-                <div>12.[鏂板]saber鏇存柊鑷砮lement-ui 2.8.2鐗堟湰</div>
-                <div>13.[淇]saber鍒嗛〉bug</div>
-                <div>14.[鏂板]crud缁勪欢鎻愪氦鎶ラ敊鍚庢仮澶嶆寜閽姸鎬�</div>
-                <div>15.[鏂板]瀛楀吀绠$悊琛ㄥ崟璋冩暣</div>
-                <div>16.[鍗囩骇]springboot 2.1.5</div>
               </el-collapse-item>
             </el-collapse>
           </basic-container>
@@ -686,21 +114,66 @@
 
 <script>
   import {mapGetters} from "vuex";
-  import  {check} from "@/api/system/user"
-  import {updatePassword} from "@/api/system/user.js"
+  import  {getUndoTaskList,check,updatePassword} from "@/api/system/user"
   import md5 from "js-md5";
   import {removeToken} from "@/util/auth";
+  import Statistic from './Statistic.vue';
+  import {validatenull} from "@/util/validate";
+  import {flowCategory,flowRoute} from "@/util/flow";
 
   export default {
     name: "wel",
+    components: {Statistic},
     data() {
       return {
-        activeNames: ['1', '2', '3', '5'],
+        loading: false,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        // 浠e姙娴佺▼浠诲姟data
+        todoData: [],
+        // 浠e姙娴佺▼浠诲姟option
+        todoOption: {
+          addBtn: false,
+          header: false,
+          align: 'center',
+          index: true,
+          menuWidth: 100,
+          editBtn: false,
+          delBtn: false,
+          column: [{
+            label: '浠诲姟鍚嶇О',
+            prop: 'name',
+            html: true,
+            formatter: (val) => {
+              return '<a name="processname" href="javascript:;" style="color: #66b1ff;">' + val.taskName + '</a>'
+            }
+          },
+            {
+              label: '涓婁竴姝ュ鐞嗘椂闂�',
+              prop: 'createTime'
+            },
+            {
+              label: '鎻忚堪',
+              prop: 'description'
+            },
+            {
+              label: '涓婁竴姝ユ搷浣滀汉',
+              prop: 'creator_name'
+            },
+            {
+              label: '鎵�灞炴祦绋嬫ā鏉�',
+              prop: 'categoryName'
+            }
+          ]
+        },
         logActiveNames: ['28'],
-        userarr:[],
-        userid:'',
-        updataArr:[],
-        dialogFormVisible:false,
+        userarr: [],
+        userid: '',
+        updataArr: [],
+        dialogFormVisible: false,
         form: {
           oldPassword: '',
           newPassword: '',
@@ -708,25 +181,25 @@
         },
         rules: {
           oldPassword: [
-            { required: true, message: '璇疯緭鍏ュ師瀵嗙爜', trigger: 'blur' }
+            {required: true, message: '璇疯緭鍏ュ師瀵嗙爜', trigger: 'blur'}
           ],
-          newPassword:[
-            { required: true, message: '璇疯緭鍏ユ柊瀵嗙爜', trigger: 'blur' }
+          newPassword: [
+            {required: true, message: '璇疯緭鍏ユ柊瀵嗙爜', trigger: 'blur'}
           ],
-          newPassword1:[
-            { required: true, message: '璇疯緭纭瀵嗙爜', trigger: 'blur' }
+          newPassword1: [
+            {required: true, message: '璇疯緭纭瀵嗙爜', trigger: 'blur'}
           ]
         },
       };
     },
     // 鎷垮埌userid璇锋眰鎺ュ彛
     created() {
-      this.updataArr=JSON.parse(localStorage.getItem("updataid"))
-      this.userid=this.$store.state.user.upadatastatus.user_id
+      this.updataArr = JSON.parse(localStorage.getItem("updataid"))
+      this.userid = this.$store.state.user.upadatastatus.user_id
       this.checkhandle()
     },
     computed: {
-      ...mapGetters(["userInfo"]),
+      ...mapGetters(["userInfo", "flowRoutes"]),
     },
     methods: {
       handleChange(val) {
@@ -734,59 +207,80 @@
       },
       //element缁勪欢鍏抽棴寮圭獥鐨勫欢杩熷洖璋冿紝杩欓噷娌℃湁鐢ㄥ叧闂脊绐楃殑鏂规硶锛屽洜涓哄綋鐢ㄦ埛鐐瑰嚮纭涔熸槸鍏抽棴寮圭獥锛屽鏋滅櫥褰曟垚鍔熷脊绐楀叧闂悗涔熸槸浼氭竻闄oken鍥炲埌鐧诲綍椤�
       //Xdelhandle鏄偣鍑籜鍙峰叧闂脊鍞�,delhandle鏄偣鍑诲彇娑堝叧闂脊绐�,鍦ㄨ繖鍒嗕簡涓や釜浜嬩欢
-      Xdelhandle(){
+      Xdelhandle() {
         removeToken()
         this.dialogFormVisible = false
       },
       // 鍏抽棴寮圭獥鍚庢竻闄oken杩斿洖鍒扮櫥褰曢〉闈�
-      delhandle(){
+      delhandle() {
         removeToken()
         this.dialogFormVisible = false
       },
       // 淇敼瀵嗙爜鏂规硶
-      addok(){
+      addok() {
         this.dialogFormVisible = false
-        updatePassword(md5(this.form.oldPassword), this.form.newPassword, this.form.newPassword1).then(res=>{
-          if(res.data.code==200){
+        updatePassword(md5(this.form.oldPassword), this.form.newPassword, this.form.newPassword1).then(res => {
+          if (res.data.code == 200) {
             this.$message({
-              type:"success",
-              message:"淇敼鎴愬姛锛�"
+              type: "success",
+              message: "淇敼鎴愬姛锛�"
             })
           }
-        }).catch(res=>{
+        }).catch(res => {
           console.log(res)
           this.checkhandle()
         })
       },
       // 鎻愰啋鏃堕棿璇锋眰锛屼篃闇�瑕佸垽鏂槸鍚︿负瓒呯韬唤锛岃秴绠¤韩浠戒笉鍒ゆ柇
-      checkhandle(){
-        if(this.updataArr.user_id != '0' && this.updataArr.tenant_id !== '000000'){
-          check(this.userid).then(res=>{
-            if(res.data.data>0){
+      checkhandle() {
+        if (this.updataArr.user_id != '0' && this.updataArr.tenant_id !== '000000') {
+          check(this.userid).then(res => {
+            if (res.data.data > 0) {
               this.$message({
-                type:'warning',
-                message:`浣犺繕鏈�${res.data.data}澶╁氨瑕佷慨鏀瑰瘑鐮佷簡`
+                type: 'warning',
+                message: `浣犺繕鏈�${res.data.data}澶╁氨瑕佷慨鏀瑰瘑鐮佷簡`
               })
-            }else if(res.data.data == -1){
+            } else if (res.data.data == -1) {
               this.$message({
                 type: "warning",
                 message: "瀵嗙爜绛栫暐宸茶淇敼锛岃閲嶆柊淇敼瀵嗙爜锛�"
               })
-              setTimeout(()=>{
-                this.dialogFormVisible=true
-              },1500)
-            }else if(res.data.data == 0){
+              setTimeout(() => {
+                this.dialogFormVisible = true
+              }, 1500)
+            } else if (res.data.data == 0) {
               this.$message({
-                type:'success',
-                message:"鎿嶄綔鎴愬姛"
+                type: 'success',
+                message: "鎿嶄綔鎴愬姛"
               })
             }
-          }).catch(res=>{
+          }).catch(res => {
             console.log(res)
           })
         }
+      },
+      onLoad(page, params = {}) {
+        this.loading = true;
+        getUndoTaskList(page.currentPage, page.pageSize, Object.assign(params)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.todoData = data.records;
+          this.loading = false;
+        }).catch(error => {
+          this.$message.error(error);
+          this.loading = false;
+        })
+      },
+      cellHandle(row, column, cell, event) {
+        if (column.property == 'name') {
+          this.gotodo(row)
+        }
+      },
+      gotodo(row, index) {
+        //this.$router.push({ path: `/work/process/${flowRoute(this.flowRoutes, row.category)}/handle/${row.taskId}/${row.processInstanceId}/${row.businessId}` });
+        this.$router.push({ path: `/work/todo` });
       }
-    },
+    }
   };
 </script>
 

--
Gitblit v1.9.3