From c659560c7ee8d8f8278b938421de13bf65d1e1b1 Mon Sep 17 00:00:00 2001
From: ludc <ludc@vci-tech.com>
Date: 星期三, 15 一月 2025 14:28:25 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/businessType/index.vue | 1294 ++++++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 1,061 insertions(+), 233 deletions(-)

diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/businessType/index.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/businessType/index.vue
index b5c03e9..d6f2c2e 100644
--- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/businessType/index.vue
+++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/businessType/index.vue
@@ -1,46 +1,17 @@
 <template>
-  <el-container>
+  <el-container v-loading="createViewLoading">
     <el-aside>
       <basic-container>
-        <div ref="TreeBox" style="height: calc(100vh - 144px);!important;">
-          <div class="headerCon">
-            <el-button icon="el-icon-plus" plain size="small" type="primary" @click="addClickHandler">鍒涘缓
-            </el-button>
-            <el-button icon="el-icon-edit" plain size="small" type="primary" @click="editClickHandler">淇敼
-            </el-button>
-            <el-button icon="el-icon-delete" plain size="small" type="danger" @click="deleteClickHandler">鍒犻櫎
-            </el-button>
-            <el-button icon="el-icon-download" plain size="small" type="primary" @click="exportClickHandler">瀵煎嚭
-            </el-button>
-            <el-button icon="el-icon-upload2" plain size="small" type="primary" @click="upLoadClickHandler">瀵煎叆
-            </el-button>
-            <el-button class="miniBtn" icon="el-icon-circle-plus-outline" plain size="small"
-                       type="primary" @click="createViewClickHandler">鍒涘缓瑙嗗浘
-            </el-button>
-            <el-button class="miniBtn" icon="el-icon-circle-plus-outline" plain size="small"
-                       type="primary" @click="checkClickHandler">鍒涘缓绱㈠紩
-            </el-button>
-            <el-button icon="el-icon-menu" plain size="small" style="width: 82px;text-align: center;padding-left: 1px"
-                       type="primary" @click="checkClickHandler">涓�鑷存�ф鏌�
-            </el-button>
-            <el-button class="miniBtn" icon="el-icon-delete" plain size="small"
-                       type="danger" @click="checkClickHandler">鍒犻櫎鏁版嵁
-            </el-button>
-            <el-button class="smallBtn" plain size="small"
-                       type="danger" @click="checkClickHandler">鍒犻櫎鍏ㄩ儴绫诲瀷
-            </el-button>
-            <el-button class="smallBtn" plain size="small" type="primary">鏌ョ湅浣跨敤鑼冨洿
-            </el-button>
-          </div>
+        <div ref="TreeBox" style="height: calc(100vh - 154px);!important;">
           <!-- 宸︿晶鏍� -->
-          <div style="height:  calc(100vh - 330px);">
-            <avue-tree :data="treeData" :option="treeOption" @node-click="nodeClick">
-          <span slot-scope="{ node, data }" class="el-tree-node__label">
-           <span style="font-size: 15px">
-              <i class="el-icon-s-promotion"></i>
-                {{ (node || {}).label }}
-            </span>
-          </span>
+          <div style="height:  calc(100vh - 190px);">
+            <avue-tree ref="tree" v-loading="treeLoading" :data="treeData" :option="treeOption" @node-click="nodeClick">
+              <span slot-scope="{ node, data }" class="el-tree-node__label">
+               <span>
+                  <icon-show :name="data.icon"></icon-show>
+                    {{ (node || {}).label }}
+                </span>
+              </span>
             </avue-tree>
           </div>
         </div>
@@ -48,11 +19,69 @@
     </el-aside>
     <el-main>
       <basic-container>
-        <div style="display: flex;justify-content: center; height: 230px">
-          <div class="descBox" style="max-height: 100px">
-            <el-descriptions :column="1" border class="margin-top" size="medium" title="灞炴�т俊鎭�">
+        <div>
+          <el-button v-if="permissionList.addBtn" class="button-custom-icon" plain size="small" type="primary"
+                     @click="addClickHandler">
+            <icon-show :name="permissionList.addBtn.source"></icon-show>
+            鍒涘缓
+          </el-button>
+          <el-button v-if="permissionList.editBtn" class="button-custom-icon" plain size="small" type="primary"
+                     @click="editClickHandler">
+            <icon-show :name="permissionList.editBtn.source"></icon-show>
+            淇敼
+          </el-button>
+          <el-button v-if="permissionList.delBtn" class="button-custom-icon" plain size="small" type="danger"
+                     @click="deleteClickHandler">
+            <icon-show :name="permissionList.delBtn.source"></icon-show>
+            鍒犻櫎
+          </el-button>
+          <el-button v-if="permissionList.importBtn" class="button-custom-icon" plain size="small" type="primary"
+                     @click="upLoadClickHandler">
+            <icon-show :name="permissionList.importBtn.source"></icon-show>
+            瀵煎叆
+          </el-button>
+          <el-button v-if="permissionList.exportBtn" class="button-custom-icon" plain size="small" type="primary"
+                     @click="exportClickHandler">
+            <icon-show :name="permissionList.exportBtn.source"></icon-show>
+            瀵煎嚭
+          </el-button>
+          <el-button v-if="permissionList.createViewBtn" class="button-custom-icon" plain size="small"
+                     type="primary" @click="createViewClickHandler">
+            <icon-show :name="permissionList.createViewBtn.source"></icon-show>
+            鍒涘缓瑙嗗浘
+          </el-button>
+          <el-button v-if="permissionList.createIndexBtn" class="button-custom-icon" plain size="small"
+                     type="primary" @click="indexClickHandler">
+            <icon-show :name="permissionList.createIndexBtn.source"></icon-show>
+            鍒涘缓绱㈠紩
+          </el-button>
+          <el-button v-if="permissionList.consistencyCheckBtn" class="button-custom-icon" plain size="small" type="primary"
+                     @click="checkClickHandler">
+            <icon-show :name="permissionList.consistencyCheckBtn.source"></icon-show>
+            涓�鑷存�ф鏌�
+          </el-button>
+          <el-button v-if="permissionList.deleteDataBtn" class="button-custom-icon" plain size="small" type="danger"
+                     @click="checkClickHandler">
+            <icon-show :name="permissionList.deleteDataBtn.source"></icon-show>
+            鍒犻櫎鏁版嵁
+          </el-button>
+          <el-button v-if="permissionList.deleteEveryTypeBtn" class="button-custom-icon" plain size="small" type="danger"
+                     @click="checkClickHandler">
+            <icon-show :name="permissionList.deleteEveryTypeBtn.source"></icon-show>
+            鍒犻櫎鍏ㄩ儴绫诲瀷
+          </el-button>
+          <el-button v-if="permissionList.viewTheScopeBtn" class="button-custom-icon" plain size="small" type="primary"
+                     @click="checkViewClickHandler">
+            <icon-show :name="permissionList.viewTheScopeBtn.source"></icon-show>
+            鏌ョ湅浣跨敤鑼冨洿
+          </el-button>
+        </div>
+        <div style="display: flex;justify-content:left;margin-top: 15px;">
+          <div class="descBox" style="width: 40%">
+            <el-descriptions :column="2" border class="margin-top" size="medium" title="灞炴�т俊鎭�">
               <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
-                                    :labelStyle="descriptionOption.labelStyle">
+                                    :labelStyle="descriptionOption.labelStyle"
+                                    :span="12">
                 <template slot="label">
                   鍚嶇О
                 </template>
@@ -65,19 +94,29 @@
                 </template>
                 <el-tag v-if="nodeRow.name">{{ nodeRow.name }}</el-tag>
               </el-descriptions-item>
-              <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
+              <el-descriptions-item :contentStyle="descriptionOption.contentStyle+';min-width: 100px;'"
                                     :labelStyle="descriptionOption.labelStyle">
+                <template slot="label">
+                  鍥炬爣
+                </template>
+                <span class="avue-icon">
+                  <icon-show :name="nodeRow.imageName"></icon-show>
+                </span>
+              </el-descriptions-item>
+              <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
+                                    :labelStyle="descriptionOption.labelStyle"
+                                    :span="12">
                 <template slot="label">
                   瀹炵幇绫�
                 </template>
                 <el-tooltip v-if="nodeRow.implClass" :content="nodeRow.implClass" class="item" effect="dark"
                             placement="top-start">
-                  <el-tag style="max-width: 250px;overflow: hidden">{{ nodeRow.implClass }}
-                  </el-tag>
+                  <el-tag style="max-width: 100%;overflow: hidden;display: block">{{ nodeRow.implClass }}</el-tag>
                 </el-tooltip>
               </el-descriptions-item>
               <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
-                                    :labelStyle="descriptionOption.labelStyle">
+                                    :labelStyle="descriptionOption.labelStyle"
+                                    :span="12">
                 <template slot="label">
                   鎻忚堪
                 </template>
@@ -85,7 +124,7 @@
               </el-descriptions-item>
             </el-descriptions>
           </div>
-          <div class="descBox">
+          <div class="descBox" style="width: 24%;">
             <el-descriptions :column="1" border class="margin-top" size="medium" title="鐗堟湰瑙勫垯">
               <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
                                     :labelStyle="descriptionOption.labelStyle">
@@ -108,7 +147,7 @@
                 <template slot="label">
                   鐗堟湰鍙疯鍒�
                 </template>
-                <el-tag v-if="nodeRow.revRuleName">{{ nodeRow.revRuleName }}</el-tag>
+                <el-tag v-if="nodeRow.revisionRuleId">{{ nodeRow.revisionRuleId }}</el-tag>
               </el-descriptions-item>
               <el-descriptions-item v-if="nodeRow.revLevel !== '0'" :contentStyle="descriptionOption.contentStyle"
                                     :labelStyle="descriptionOption.labelStyle">
@@ -123,12 +162,12 @@
                 <template slot="label">
                   鐗堟鍙疯鍒�
                 </template>
-                <el-tag v-if="nodeRow.verRuleName"
-                        :type="nodeRow.verRuleName === '0' ? 'warning' : nodeRow.revLevel === '1' ? '' : 'success'">
+                <el-tag v-if="nodeRow.revisionRuleId"
+                        :type="nodeRow.revisionRuleId === '0' ? 'warning' : nodeRow.revisionRuleId === '1' ? '' : 'success'">
                   {{
-                    nodeRow.verRuleName === '0'
+                    nodeRow.versionRule === '0'
                       ? '1.2.3...'
-                      : nodeRow.revLevel === '1'
+                      : nodeRow.versionRule === '1'
                       ? 'a.b.c...'
                       : '0.1.2...'
                   }}
@@ -137,20 +176,30 @@
 
             </el-descriptions>
           </div>
-          <div class="descBox">
+          <div class="descBox" style="width: calc(36% - 40px);margin-right: 0">
             <el-descriptions :column="1" border class="margin-top" size="medium" title="鐢熷懡鍛ㄦ湡">
               <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
                                     :labelStyle="descriptionOption.labelStyle">
                 <template slot="label">
                   鐢熷懡鍛ㄦ湡
                 </template>
-                <el-tag v-if="nodeRow.lifeCycle">{{ nodeRow.lifeCycle }}</el-tag>
+                <el-tag v-if="nodeRow.lifeCycleId">{{ nodeRow.lifeCycleId }}</el-tag>
+              </el-descriptions-item>
+              <el-descriptions-item :contentStyle="descriptionOption.contentStyle"
+                                    :labelStyle="descriptionOption.labelStyle">
+                <template slot="label">
+                  澶囬�夌敓鍛藉懆鏈�
+                </template>
+                <div v-if="nodeRow.lifeCycleIds">
+                  <el-tag v-for="item in nodeRow.lifeCycleIds.split(',')" style="margin-right: 5px;">{{ item }}</el-tag>
+                </div>
+
               </el-descriptions-item>
             </el-descriptions>
           </div>
         </div>
-        <div style="margin-top: 30px">
-          <h3>灞炴�у垪琛�</h3>
+        <div style="margin-top: 25px;position: relative">
+          <h3 style="margin: 0;position: absolute;top:0;z-index: 1000;">灞炴�у垪琛�</h3>
           <avue-crud
             :data="attrData"
             :option="attrOption">
@@ -168,114 +217,114 @@
       class="avue-dialog"
       width="75%"
       @close="addDialogClose">
-      <el-form ref="form" :model="form" :rules="rules" label-width="90px">
+      <el-form ref="form" :model="form" :rules="rules" label-width="95px" size="small">
         <div class="dialogForm">
-          <div class="leftForm">
-            <el-form-item label="绫诲瀷鍚嶇О锛�" prop="name">
+          <div class="leftForm" style="width: 40%">
+            <el-form-item label="绫诲瀷鍚嶇О锛�" prop="id">
               <el-input v-model="form.id" :readOnly="title === 'edit'"></el-input>
             </el-form-item>
-            <el-form-item label="鏍囩锛�">
-              <el-input v-model="form.name"></el-input>
+            <el-row :span="24">
+              <el-col :span="12">
+                <el-form-item label="鏍囩锛�" prop="name">
+                  <el-input v-model="form.name"></el-input>
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="鍥炬爣锛�" prop="imageName">
+                  <input-icon v-model="form.imageName" placeholder="璇烽�夋嫨鍥炬爣"></input-icon>
+                </el-form-item>
+              </el-col>
+            </el-row>
+            <el-form-item label="缁ф壙鑷細" prop="fName">
+              <avue-input-tree v-model="form.fName"
+                               :dic="inheritTreeData"
+                               :disabled="title === 'add'"
+                               :props="{label: 'id', value: 'id',children: 'children'}"
+                               placeholder="璇烽�夋嫨涓氬姟绫诲瀷"></avue-input-tree>
             </el-form-item>
-            <el-form-item label="缁ф壙鑷細">
-              <el-input v-model="form.name" :readOnly="title === 'edit'"></el-input>
-            </el-form-item>
-            <el-form-item label="瀹炵幇绫伙細">
+            <el-form-item label="瀹炵幇绫伙細" prop="implClass">
               <el-input v-model="form.implClass"></el-input>
             </el-form-item>
-            <el-form-item label="鎻忚堪">
+            <el-form-item label="鎻忚堪" prop="description">
               <el-input v-model="form.description" :rows="2" type="textarea"></el-input>
             </el-form-item>
           </div>
-          <div class="centerForm">
-            <el-form-item label="鐗堟湰瑙勫垯锛�" label-width="100px" prop="revLevel">
-              <el-select v-model="form.revLevel">
-                <el-option label="涓嶅彲淇" value="0"></el-option>
-                <el-option label="閲囩敤涓�绾х増鏈鐞�" value="1"></el-option>
-                <el-option label="閲囩敤浜岀骇鐗堟湰绠$悊" value="2"></el-option>
-              </el-select>
+          <div class="centerForm" style="width: 26%">
+            <el-form-item label="鐗堟湰瑙勫垯锛�" label-width="100px" prop="revLevel" style="margin-bottom: 10px;">
+              <el-radio v-model="form.revLevel" label="0" @input="revLevelChange">涓嶅彲淇</el-radio>
+              <br>
+              <el-radio v-model="form.revLevel" label="1" @input="revLevelChange">閲囩敤涓�绾х増鏈鐞�</el-radio>
+              <br>
+              <el-radio v-model="form.revLevel" label="2" @input="revLevelChange">閲囩敤浜岀骇鐗堟湰绠$悊</el-radio>
             </el-form-item>
-            <el-form-item v-if="form.revLevel !== '0'" label="鐗堟湰鍙疯鍒欙細" label-width="100px" prop="revLevel">
-              <div style="display: flex;gap: 5px;align-items: center">
-                <el-input v-model="form.revRuleName" :readOnly="true"></el-input>
-                <el-button plain size="small" style="margin-left: 5px;height: 30px" type="success" @click="versionAddHandler">娣诲姞</el-button>
-              </div>
+            <el-form-item v-if="form.revLevel !== '0'" label="鐗堟湰鍙疯鍒欙細" label-width="100px" prop="revisionRuleId"
+                          style="margin-bottom: 5px;">
+              <avue-select v-model="form.revisionRuleId"
+                           :dic="versionData"
+                           :disabled="form.inputRevisionFlag"
+                           :filterable="true"
+                           :props="{label: 'id', value: 'id'}"
+                           placeholder="璇烽�夋嫨鐗堟湰鍙疯鍒�"></avue-select>
+              <el-switch
+                v-model="form.inputRevisionFlag"
+                active-text="鎵嬪伐杈撳叆"
+                style="width: 300px"
+                @change="form.revisionRuleId = ''">
+              </el-switch>
             </el-form-item>
-            <el-form-item v-if="form.revLevel !== '0'" label="鍒嗛殧绗︼細" label-width="100px" prop="revLevel">
-              <el-select v-model="form.delimiter" clearable>
-                <el-option label="." value="."></el-option>
-                <el-option label="-" value="-"></el-option>
-              </el-select>
+            <el-form-item v-if="form.revLevel !== '0'" label="鍒嗛殧绗︼細" label-width="100px" prop="delimiter"
+                          style="margin-bottom: 5px;">
+              <el-radio v-model="form.delimiter" label="">&nbsp;&nbsp;</el-radio>
+              <el-radio v-model="form.delimiter" label=".">.</el-radio>
+              <el-radio v-model="form.delimiter" label="-">-</el-radio>
             </el-form-item>
             <el-form-item v-if="form.revLevel !== '0' && form.revLevel !== '1'" label="鐗堟鍙疯鍒欙細" label-width="100px"
-                          prop="revLevel">
-              <el-select v-model="form.verRuleName" clearable>
-                <el-option label="1.2.3..." value="1.2.3..."></el-option>
-                <el-option label="a.b.c..." value="a.b.c..."></el-option>
-                <el-option label="0.1.2..." value="0.1.2..."></el-option>
-              </el-select>
+                          prop="versionRule">
+              <el-radio v-model="form.versionRule" label="0">1.2.3...</el-radio>
+              <el-radio v-model="form.versionRule" label="1">a.b.c...</el-radio>
+              <el-radio v-model="form.versionRule" label="2">0.1.2...</el-radio>
             </el-form-item>
           </div>
-          <div class="rightForm">
-            <el-form-item label="鐢熷懡鍛ㄦ湡锛�" label-width="138px" prop="revLevel">
-              <div style="display: flex;gap: 5px;align-items: center">
-                <el-input v-model="form.lifeCycle" :readOnly="true"></el-input>
-                <el-button plain size="small" style="margin-left: 5px;height: 30px" type="success">娣诲姞</el-button>
-              </div>
+          <div class="rightForm" style="width: 25%">
+            <el-form-item label="鐢熷懡鍛ㄦ湡锛�" label-width="138px" prop="lifeCycleId">
+              <avue-select v-model="form.lifeCycleId"
+                           :dic="lifeData"
+                           :filterable="true"
+                           :props="{label: 'id', value: 'id'}"
+                           placeholder="璇烽�夋嫨鐢熷懡鍛ㄦ湡"></avue-select>
             </el-form-item>
-
-            <el-form-item label="澶囬�夌敓鍛藉懆鏈熷垪琛細" label-width="138px">
-              <div style="display: flex; align-items: center">
-                <div style="height: 200px; width: 280px; border: 1px solid #bdbbbb;overflow-y: auto">
-                  <!-- 鍐呭 -->
-                  <el-table
-                    :data="bizFormData"
-                    :show-header="false"
-                    style="width: 100%">
-                    <el-table-column
-                      align="center"
-                      prop="name">
-                    </el-table-column>
-                    <el-table-column
-                      fixed="right"
-                      label="鎿嶄綔"
-                      width="60">
-                      <template slot-scope="scope">
-                        <el-button
-                          size="small"
-                          style="color:#F56C6C;"
-                          type="text"
-                          @click.native.prevent="bizTypeDeleteRow('form',scope.$index)">
-                          绉婚櫎
-                        </el-button>
-                      </template>
-                    </el-table-column>
-                  </el-table>
-                </div>
-                <el-button plain size="mini" style="margin-left: 5px" type="success"
-                           @click="FormItemReferChange('form')">娣诲姞
-                </el-button>
-
-              </div>
+            <el-form-item label="澶囬�夌敓鍛藉懆鏈熷垪琛細" label-width="138px" prop="subLifeCycleIdList">
+              <avue-select v-model="form.subLifeCycleIdList"
+                           :dic="subLifeData"
+                           :filterable="true"
+                           :props="{label: 'id', value: 'id'}"
+                           multiple
+                           placeholder="璇烽�夋嫨鐢熷懡鍛ㄦ湡"
+                           type="tree"
+                           @change="subLifeChange"></avue-select>
             </el-form-item>
           </div>
         </div>
       </el-form>
       <div class="bottomForm">
-        <h3>灞炴�ф睜鍒楄〃</h3>
         <avue-crud
           :data="dialogAttrData"
-          :option="dialogAttrOption">
+          :option="dialogAttrOption"
+          size="mini"
+          @row-del="dialogBottomAttrDel">
           <template slot="menuLeft">
-            <el-button icon="el-icon-plus" size="small" type="primary" @click="addDialogClickHandler">鍒涘缓</el-button>
+            <h3 style="display: inline-block;margin-right: 20px;margin-bottom: 10px;">灞炴�ф睜鍒楄〃</h3>
+            <el-button icon="el-icon-plus" size="mini" type="primary" @click="addDialogClickHandler">鍒涘缓</el-button>
           </template>
         </avue-crud>
       </div>
       <span slot="footer" class="dialog-footer">
-         <el-button @click="addDialogClose">鍙� 娑�</el-button>
-         <el-button type="primary" @click="addDialogSavaHandler">纭� 瀹�</el-button>
+         <el-button size="small" type="primary" @click="addDialogSavaHandler">纭� 瀹�</el-button>
+         <el-button size="small" @click="addDialogClose">鍙� 娑�</el-button>
         </span>
     </el-dialog>
+
+    <!-- 灞炴�ф睜娣诲姞 -->
     <el-dialog
       v-dialogDrag
       :visible.sync="attrPollDialogVisible"
@@ -301,8 +350,117 @@
       >
       </avue-crud>
       <span slot="footer" class="dialog-footer">
-         <el-button @click="dialogAttrClose">鍙� 娑�</el-button>
-         <el-button type="primary" @click="dialogAttrAddClickHandler">纭� 瀹�</el-button>
+         <el-button size="small" type="primary" @click="dialogAttrAddClickHandler">纭� 瀹�</el-button>
+         <el-button size="small" @click="dialogAttrClose">鍙� 娑�</el-button>
+        </span>
+    </el-dialog>
+
+    <!-- 瀵煎叆 -->
+    <upload-file ref="upload" :fileType="upFileType" :fileUrl="fileUrl" :tipList="tipList" title="瀵煎叆"
+                 @updata="getTreeList"></upload-file>
+
+    <!-- 鏌ョ湅浣跨敤鑼冨洿    -->
+    <el-dialog
+      v-dialogDrag
+      :visible.sync="checkViewVisible"
+      append-to-body="true"
+      class="avue-dialog"
+      title="鏌ョ湅浣跨敤鑼冨洿"
+      width="60%"
+    >
+      <avue-crud
+        ref="checkViewCrud"
+        :data="checkViewData"
+        :option="checkViewOption"
+        :table-loading="checkViewLoading"
+        @search-change="checkHandleSearch"
+        @search-reset="checkHandleReset"
+      >
+      </avue-crud>
+    </el-dialog>
+
+    <!-- 涓�鑷存�ф鏌� -->
+    <el-dialog
+      v-dialogDrag
+      :visible.sync="conCheckVisible"
+      append-to-body="true"
+      class="avue-dialog"
+      title="涓�鑷存�ф鏌�"
+      width="60%"
+    >
+      <avue-crud
+        :data="conCheckData"
+        :option="conCheckOption"
+        :table-loading="conCheckLoading">
+      </avue-crud>
+      <span slot="footer" class="dialog-footer">
+         <el-button size="small" type="primary" @click="repairClickHandler">淇� 澶�</el-button>
+         <el-button size="small" @click="conCheckVisible = false">鍙� 娑�</el-button>
+        </span>
+    </el-dialog>
+
+    <!-- 鏌ョ湅绱㈠紩 -->
+    <el-dialog
+      v-dialogDrag
+      :visible.sync="indexVisible"
+      append-to-body="true"
+      class="avue-dialog"
+      title="绱㈠紩淇℃伅"
+      width="60%"
+      @close="indexDialogClose"
+    >
+      <div v-loading="indexLoading" style="display: flex;height: 500px;width: 100%">
+        <basic-container>
+          <div style="height: 390px">
+            <el-button plain size="mini" style="margin-bottom: 5px" type="danger"
+                       @click="deleteIndexLeftTreeClickHandler">鍒犻櫎绱㈠紩
+            </el-button>
+            <avue-tree
+              :data="indexLeftData"
+              :option="indexLeftOption"
+              @node-click="indexLeftNodeClick"></avue-tree>
+          </div>
+        </basic-container>
+        <div style="padding: 20px;width: 75%">
+          <div>
+            <el-form ref="form" :model="indexForm" label-width="90px" size="mini">
+              <el-form-item label="绱㈠紩鍚嶇О锛�">
+                <el-input v-model="indexForm.name" :readOnly="indexFormRead"></el-input>
+              </el-form-item>
+              <el-form-item label="鎻忚堪锛�">
+                <el-input v-model="indexForm.desc"></el-input>
+              </el-form-item>
+            </el-form>
+            <div style="display: flex;justify-content: center">
+              <el-button plain size="mini" type="success" @click="rightIndexAddClick">澧炲姞</el-button>
+              <el-button plain size="mini" type="danger">鍒犻櫎</el-button>
+            </div>
+          </div>
+          <avue-crud
+            :data="indexData"
+            :option="indexOption"></avue-crud>
+        </div>
+      </div>
+      <el-dialog
+        v-dialogDrag
+        :visible.sync="indexAttrVisible"
+        append-to-body="true"
+        class="avue-dialog"
+        title="灞炴�т俊鎭�"
+        width="60%"
+      >
+        <avue-crud
+          :data="indexAttrData"
+          :option="indexAttrOption"
+          @row-click="indexAttrRowClick"></avue-crud>
+        <span slot="footer" class="dialog-footer">
+         <el-button type="primary" @click="indexAttrClickAddHandler">纭� 瀹�</el-button>
+         <el-button @click="indexAttrVisible = false">鍙� 娑�</el-button>
+        </span>
+      </el-dialog>
+      <span slot="footer" class="dialog-footer">
+         <el-button size="small" type="primary" @click="indexClickAddHandler">淇� 瀛�</el-button>
+         <el-button size="small" @click="indexDialogClose">鍙� 娑�</el-button>
         </span>
     </el-dialog>
 
@@ -311,14 +469,177 @@
 
 <script>
 import basicOption from '@/util/basic-option'
-import {getBizTypes} from "@/api/modeling/businessType/api"
+import {
+  getBizTypes,
+  addLifeCycle,
+  updateLifeCycle,
+  deleteBtmType,
+  createView,
+  expData,
+  getUsedBtmLinkList,
+  checkBtmConsistency,
+  executeRepair,
+  getIndexByCondition,
+  delIndex,
+  getAllAttributesByBtmId,
+  addIndex
+} from "@/api/modeling/businessType/api"
 import {gridAttribute} from "@/api/modeling/attributePool/api";
 import func from "@/util/func";
+import {getUsedVersionRuleList, getVersionRuleAllList} from "@/api/modeling/version/api";
+import {gridLifeCycle} from "@/api/modeling/lifeCycle/api";
+import {mapGetters} from "vuex";
 
 export default {
   name: "index",
   data() {
     return {
+      indexLoading: false,
+      indexFormRead: false,
+      indexAttrRow: {},
+      indexAttrOption: {
+        ...basicOption,
+        height: 380,
+        highlightCurrentRow: true,
+        addBtn: false,
+        refreshBtn: false,
+        editBtn: false,
+        delBtn: false,
+        selection: false,
+        menu: false,
+        column: [
+          {
+            label: '灞炴�т俊鎭�',
+            prop: 'id',
+            sortable: true,
+          },
+        ]
+      },
+      indexAttrData: [],
+      indexData: [],
+      indexAttrVisible: false,
+      indexLeftNodeRow: {},
+      indexForm: {
+        name: '',
+        desc: ''
+      },
+      indexLeftData: [],
+      indexLeftOption: {
+        height: 'auto',
+        menu: false,
+        addBtn: false,
+        props: {
+          label: 'name',
+          value: 'id',
+          children: 'children',
+        },
+      },
+      indexOption: {
+        ...basicOption,
+        height: 280,
+        addBtn: false,
+        refreshBtn: false,
+        editBtn: false,
+        delBtn: false,
+        selection: false,
+        menu: false,
+        column: [
+          {
+            label: '涓氬姟绫诲瀷鍚嶇О',
+            prop: 'typeName',
+            sortable: true,
+          },
+          {
+            label: '绱㈠紩鍚嶇О',
+            prop: 'indexName',
+            sortable: true,
+          },
+          {
+            label: '灞炴�у悕绉�',
+            prop: 'attrNames',
+            sortable: true,
+          },
+          {
+            label: '鎻忚堪',
+            prop: 'desc',
+            sortable: true,
+          },
+        ]
+      },
+      indexVisible: false,
+      conDefaultCheckData: [], // 淇濈暀涓婁釜鎺ュ彛杩斿洖鐨勬暟鎹�
+      conCheckLoading: false,
+      conCheckOption: {
+        ...basicOption,
+        menu: false,
+        addBtn: false,
+        index: false,
+        selection: false,
+        refreshBtn: false,
+        header: false,
+        column: [
+          {
+            label: '绫诲瀷鍚�',
+            prop: 'id',
+            width: 250,
+          },
+          {
+            label: '鎿嶄綔',
+            prop: 'methods',
+          },
+          {
+            label: '鐘舵��',
+            prop: 'status',
+            width: 250,
+          }
+        ]
+      },
+      conCheckData: [],
+      conCheckVisible: false,
+      checkViewVisible: false,
+      checkViewData: [],
+      checkViewDataSearch: [],
+      checkViewLoading: false,
+      checkViewOption: {
+        ...basicOption,
+        addBtn: false,
+        menu: false,
+        searchMenuSpan: 8,
+        refreshBtn: false,
+        selection: false,
+        header: false,
+        column: [
+          {
+            label: '鍚嶇О',
+            prop: 'name',
+            sortable: true,
+          },
+          {
+            label: '鏉ユ簮',
+            prop: 'source',
+            sortable: true,
+            search: true
+          },
+          {
+            label: '璇存槑',
+            prop: 'description',
+          }
+        ]
+      },
+      tipList: [
+        "瀵煎叆涓氬姟鍚嶇О涓嶅彲涓虹┖涓旈摼鎺ョ被鍨嬪悕绉板彧鑳戒负鑻辨枃瀛楁瘝",
+        "瀵煎叆鐨勬枃浠跺寘鎷睘鎬с�佷笟鍔$被鍨嬨�佺敓鍛藉懆鏈熺瓑鏂囦欢",
+        "涓婁紶鐨勬枃浠朵负鍘嬬缉鏂囦欢锛屼笖鍘嬬缉鏍煎紡浠呰兘涓簔ip鏍煎紡"
+      ],
+      upFileType: ['zip'],
+      fileUrl: 'api/linkTypeController/impData',
+      createViewLoading: false, // 鍒涘缓瑙嗗浘
+      versionAddFlag: false,
+      inheritTreeData: [],
+      lifeData: [],//鐢熷懡鍛ㄦ湡涓嬫媺鏁版嵁
+      subLifeData: [],//澶囬�夌敓鍛藉懆鏈熶笅鎷夋暟鎹�
+      allLifeData: [],
+      versionData: [],//鐗堟湰瑙勫垯鏁版嵁
       dialogAttrSelectList: [],
       searchAttrParams: {},
       dialogAttrLoading: false,
@@ -331,7 +652,6 @@
       },
       dialogAttrSaveOption: {
         ...basicOption,
-        calcHeight: -60,
         addBtn: false,
         menu: false,
         refreshBtn: false,
@@ -339,22 +659,29 @@
         highlightCurrentRow: true,
         height: 450,
         searchMenuSpan: 8,
+        header: false,
+        selectable: function (row) {
+          return row.selectable;
+        },
         column: [
           {
             label: '灞炴�у悕',
             prop: 'id',
             sortable: true,
             search: true,
+            width: 260
           },
           {
             label: '灞炴�х被鍨�',
             prop: 'attributeDataType',
             sortable: true,
+            width: 150,
           },
           {
             label: '鍒濆鍊�',
             prop: 'defaultValue',
             sortable: true,
+            width: 200
           },
           {
             label: '璇存槑',
@@ -366,31 +693,58 @@
       },
       dialogAttrSaveData: [],
       attrPollDialogVisible: false,
-      rules: [],
+      rules: {
+        id: [
+          {required: true, message: '璇疯緭绫诲瀷鍚嶇О', trigger: 'blur'},
+          {validator: this.validateEnglishOnly, trigger: 'blur'}
+        ],
+        imageName: [
+          {required: true, message: '璇烽�夋嫨鍥炬爣', trigger: 'submit'},
+        ],
+        revLevel: [
+          {required: true, message: '璇烽�夋嫨鐗堟湰瑙勫垯', trigger: 'blur'},
+        ],
+        lifeCycleId: [
+          {required: true, message: '璇烽�夋嫨鐢熷懡鍛ㄦ湡', trigger: 'blur'},
+        ]
+      },
       dialogAttrData: [],
       dialogAttrOption: {
         ...basicOption,
         editBtn: false,
         refreshBtn: false,
         selection: false,
-        height: 210,
+        height: 220,
         addBtn: false,
+        gridBtn: false,
+        columnBtn: false,
+        menuWidth: 100,
         // index:false,
         column: [
           {
             label: '灞炴�у悕',
             prop: 'id',
             sortable: true,
+            width: 260,
+          },
+          {
+
+            prop: 'btmTypeId',
+            label: '涓氬姟绫诲瀷',
+            sortable: true,
+            width: 200
           },
           {
             label: '灞炴�х被鍨�',
             prop: 'attributeDataType',
             sortable: true,
+            width: 150,
           },
           {
             label: '鍒濆鍊�',
             prop: 'defaultValue',
             sortable: true,
+            width: 200,
           },
           {
             label: '璇存槑',
@@ -414,22 +768,26 @@
           {
             prop: 'id',
             label: '灞炴�у悕',
-            sortable: true
+            sortable: true,
+            width: 260
           },
           {
             prop: 'btmTypeId',
             label: '涓氬姟绫诲瀷',
-            sortable: true
+            sortable: true,
+            width: 200
           },
           {
-            prop: 'attrDataType',
+            prop: 'attributeDataType',
             label: '灞炴�х被鍨�',
-            sortable: true
+            sortable: true,
+            width: 150
           },
           {
             prop: 'defaultValue',
             label: '榛樿鍊�',
-            sortable: true
+            sortable: true,
+            width: 200
           },
           {
             prop: 'description',
@@ -438,57 +796,246 @@
           }
         ]
       },
-      form: {},
+      form: {
+        id: '', // 绫诲瀷鍚嶇О
+        name: '', // 鏍囩
+        fName: '', // 缁ф壙鑷�
+        implClass: '', // 瀹炵幇绫�
+        description: '', // 鎻忚堪
+        revLevel: '2', // 鐗堟湰瑙勫垯
+        revisionRuleId: '',// 鐗堟湰鍙疯鍒�
+        inputRevisionFlag: false, // 鎵嬪伐杈撳叆,
+        delimiter: '', // 鍒嗛殧绗�
+        versionRule: '0', // 鐗堟鍙疯鍒�
+        lifeCycleId: '', // 鐢熷懡鍛ㄦ湡
+        subLifeCycleId: '', // 鐢熷懡鍛ㄦ湡澶囬�夊垪琛�,
+        subLifeCycleIdList: [],
+        apNameArray: "", // 灞炴�ф睜鍒楄〃鈥欙紝鈥樺垎闅�
+      },
       nodeRow: {},
       treeOption: {
         height: 'auto',
-        defaultExpandAll: false,
+        defaultExpandedKeys: ['topNode'],
         menu: false,
         addBtn: false,
         props: {
-          label: 'id',
+          label: 'TreeName',
           value: 'id',
-          children: 'children'
+          children: 'children',
+          name: 'name'
         }
       },
-      treeData: [],
+      treeData: [
+        {
+          TreeName: '涓氬姟绫诲瀷鏍�',
+          id: 'topNode',
+          children: []
+        }
+      ],
       descriptionOption: {
-        labelStyle: 'text-align:center;width:100px;',
-        contentStyle: 'max-width:200px;text-align:center;word-break;break-all;'
+        labelStyle: 'text-align:center;width:110px;',
+        contentStyle: 'min-width:200px;text-align:center;word-break:break-all;'
       },
       icons: {
         id: 'el-icon-finished',
         name: 'el-icon-tickets',
         desc: 'el-icon-chat-line-square'
       },
+      treeLoading: false
     }
   },
   created() {
     this.getTreeList();
+    this.getVersionList();
+    this.getLifeCycle();
+  },
+  computed: {
+    ...mapGetters(["permission"]),
+    permissionList() {
+      return {
+        addBtn: this.vaildData(this.permission[this.$route.query.id].ADD, false),
+        delBtn: this.vaildData(this.permission[this.$route.query.id].DELETE, false),
+        editBtn: this.vaildData(this.permission[this.$route.query.id].EDIT, false),
+        exportBtn: this.vaildData(this.permission[this.$route.query.id].EXPORT, false),
+        importBtn: this.vaildData(this.permission[this.$route.query.id].IMPORT, false),
+        consistencyCheckBtn: this.vaildData(this.permission[this.$route.query.id].USE, false),
+        createIndexBtn: this.vaildData(this.permission[this.$route.query.id].DATARIGHT, false),
+        createViewBtn: this.vaildData(this.permission[this.$route.query.id].ATTRRIGHT, false),
+        deleteDataBtn: this.vaildData(this.permission[this.$route.query.id].FREEZE, false),
+        deleteEveryTypeBtn: this.vaildData(this.permission[this.$route.query.id].RESET, false),
+        viewTheScopeBtn: this.vaildData(this.permission[this.$route.query.id].VIRTUALVIEW, false),
+      };
+    },
+  },
+  watch: {
+    'form.lifeCycleId': {
+      handler(newval) {
+        if (this.form.lifeCycleId) {
+          this.subLifeData = this.allLifeData.filter(item => {
+            return item.id != this.form.lifeCycleId
+          });
+        } else {
+          this.subLifeData = this.allLifeData
+        }
+      },
+    }
   },
   methods: {
     //鏍戣〃鏌ヨ
     getTreeList() {
+      this.treeLoading = true;
       getBizTypes().then(res => {
         const data = res.data.data.map(item => {
-          return item.attributes;
+          this.processChildren(item); // 澶勭悊姣忎釜鑺傜偣
+          item.attributes.TreeName = item.attributes.id;
+          item.attributes.icon = item.attributes.imageName;
+          return item.attributes; // 杩斿洖澶勭悊鍚庣殑 attributes
         });
-        this.treeData = data;
-      })
+        this.treeData[0].children = data;
+        this.inheritTreeData = data;
+        this.treeLoading = false;
+      });
+    },
+
+    // 澶勭悊鏍戝舰缁撴瀯
+    processChildren(item) {
+      if (item.children && item.children.length > 0) {
+        item.attributes.children = item.children.map(child => {
+          child.attributes.TreeName = child.attributes.id;
+          child.attributes.icon = child.attributes.imageName;
+          this.processChildren(child); // 閫掑綊澶勭悊姣忎釜瀛愯妭鐐�
+          return child.attributes; // 鍙繑鍥炲瓙鑺傜偣鐨� attributes
+        });
+      }
     },
 
     // 鏍戠偣鍑�
     nodeClick(row) {
-      this.attrData = JSON.parse(row.attributes);
+      this.attrData = row.attributes ? JSON.parse(row.attributes) : [];
       this.nodeRow = row;
     },
-
+    //鑾峰彇鐗堟湰瑙勫垯鏁版嵁
+    getVersionList() {
+      getVersionRuleAllList().then(res => {
+        this.versionData = res.data.data;
+      });
+    },
+    //鑾峰彇鐢熷懡鍛ㄦ湡鏁版嵁
+    getLifeCycle() {
+      gridLifeCycle().then(res => {
+        this.allLifeData = res.data.data;
+      });
+    },
     // 鍒涘缓鎸夐挳
     addClickHandler() {
+      if (func.isEmptyObject(this.nodeRow)) {
+        this.$message.error('璇烽�夋嫨瑕佹坊鍔犵殑鑺傜偣');
+        return;
+      }
       this.title = 'add';
+      this.form.fName = this.nodeRow.id === 'topNode' ? "" : this.nodeRow.id;
+      this.lifeData = this.allLifeData;
+      this.subLifeData = this.allLifeData;
+      this.form.inputRevisionFlag = JSON.parse(this.form.inputRevisionFlag); // 瀛楃涓瞗alse杞崲涓哄竷灏斿��
       this.visible = true;
     },
 
+    // 鏂板缂栬緫淇濆瓨
+    addDialogSavaHandler() {
+      if (this.form.revLevel !== '0' && !this.form.inputRevisionFlag && (!this.form.revisionRuleId || this.form.revisionRuleId === "")) {
+        this.$message.error('璇锋鏌ョ増鏈彿瑙勫垯涓嶈兘涓虹┖');
+        return;
+      }
+      this.form.lifeCycleIds = this.form.subLifeCycleIdList.join(',');
+      this.form.subLifeCycleId = this.form.subLifeCycleIdList.join(',');
+      this.form.apNameArray = this.dialogAttrData ? this.dialogAttrData.map(item => item.id).join(',') : "";
+      this.$refs.form.validate((valid) => {
+        const saveFunction = this.title === 'add' ? addLifeCycle : updateLifeCycle;
+        if (valid) {
+          if (this.form.revLevel === 0) {
+            this.form.versionRule = "";
+          }
+          saveFunction(this.form).then(res => {
+            if (res.data.code === 200) {
+              this.$message.success(res.data.obj);
+              this.getTreeList();
+              this.resetForm();
+              this.visible = false;
+            }
+          })
+        } else {
+          return false;
+        }
+      });
+    },
+
+    // 缂栬緫鎸夐挳鐐瑰嚮浜嬩欢
+    editClickHandler() {
+      /**
+       * id 鍚嶇О
+       * name 鏍囩
+       * implClass 瀹炵幇绫�
+       * fName 缁ф壙鑷�
+       * description 鎻忚堪
+       * revLevel 鐗堟湰瑙勫垯
+       * revisionRuleId 鐗堟湰鍙疯鍒�
+       * inputRevisionFlag 鎵嬪伐杈撳叆
+       * delimiter 鍒嗛殧绗�
+       * versionRule 鐗堟鍙疯鍒�
+       * lifeCycleId 鐢熷懡鍛ㄦ湡
+       * lifeCycleIds 鐢熷懡鍛ㄦ湡鍒楄〃
+       * attributes 灞炴�ф睜鍒楄〃
+       */
+      if (func.isEmptyObject(this.nodeRow)) {
+        this.$message.error('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�');
+        return;
+      }
+      if (this.nodeRow.id === 'topNode') {
+        this.$message.error('璇烽�夋嫨瀛愯妭鐐硅繘琛屼慨鏀�')
+        return;
+      }
+      this.form = {...this.nodeRow};
+      this.form.inputRevisionFlag = JSON.parse(this.form.inputRevisionFlag); // 瀛楃涓瞗alse杞崲涓哄竷灏斿��
+      // this.form.fName = this.nodeRow.id === 'topNode' ? "" : this.nodeRow.id;
+      this.form.subLifeCycleIdList = this.nodeRow.lifeCycleIds ? this.nodeRow.lifeCycleIds.split(',') : [];
+      this.dialogAttrData = this.nodeRow.attributes ? JSON.parse(this.nodeRow.attributes) : [];
+
+      function processChildren(item, fName) {
+        if (item.children && item.children.length > 0) {
+          item.children = item.children.map(child => {
+            processChildren(child, fName); // 閫掑綊澶勭悊姣忎釜瀛愯妭鐐�
+            if (fName == child.id) {
+              child.disabled = true;
+            } else {
+              child.disabled = false;
+            }
+            return child;
+          });
+        }
+      };
+      const inheritTreeData = this.inheritTreeData.map(item => {
+        processChildren(item, this.form.id); // 澶勭悊姣忎釜鑺傜偣
+        if (this.form.id == item.id) {
+          item.disabled = true;
+        } else {
+          item.disabled = false;
+        }
+        return item;
+      });
+      this.inheritTreeData = inheritTreeData
+      this.title = 'edit';
+      this.visible = true;
+    },
+
+    subLifeChange(data) {
+      if (data.value.length == 0) {
+        this.lifeData = this.allLifeData
+      } else {
+        this.lifeData = this.allLifeData.filter(item => {
+          return !data.value.includes(item.id)
+        });
+      }
+    },
     // 瀵硅瘽妗� 灞炴�ф睜鍒楄〃澧炲姞鎸夐挳
     addDialogClickHandler() {
       this.dialogAttrLoading = true;
@@ -500,7 +1047,10 @@
     // 鏌ヨ灞炴�ф睜鍒楄〃鏁版嵁
     getAttrDialogDta() {
       gridAttribute(this.attrPage.currentPage, this.attrPage.pageSize, this.searchAttrParams).then(res => {
-        const data = res.data.data;
+        const data = res.data.data.map(item => {
+          item.selectable = !this.dialogAttrData.some(existingItem => existingItem.id === item.id);
+          return item;
+        });
         this.dialogAttrSaveData = data;
         this.attrPage.total = res.data.total;
         this.dialogAttrLoading = false;
@@ -522,7 +1072,9 @@
 
     // 娣诲姞灞炴�ф睜 琛岀偣鍑�
     dialogAttrRowClickHandler(row) {
-
+      if (!row.selectable) {
+        return;
+      }
       func.rowClickHandler(
         row,
         this.$refs.dialogAttrCrud,
@@ -531,7 +1083,7 @@
           this.attrLastIndex = newIndex;
         },
         () => {
-          this.selectList = [];
+          this.dialogAttrSelectList = [row];
         }
       );
     },
@@ -570,40 +1122,352 @@
 
     // 娣诲姞灞炴�ф睜 淇濆瓨
     dialogAttrAddClickHandler() {
-      let hasDuplicate = false;
-
-      // 鍏堝垱寤轰竴涓复鏃舵暟缁勬潵瀛樺偍涓嶉噸澶嶇殑椤�
-      const newItems = [];
-
       this.dialogAttrSelectList.forEach(item => {
-        const exists = this.dialogAttrData.some(existingItem => existingItem.id === item.id);
-
-        if (exists) {
-          hasDuplicate = true;
-          return;
-        }
-
-        // 濡傛灉娌℃湁閲嶅椤癸紝鍒欏皢璇ラ」娣诲姞鍒颁复鏃舵暟缁勪腑
-        newItems.push({
+        this.dialogAttrData.push({
           id: item.id,
           attributeDataType: item.attributeDataType,
           defaultValue: item.defaultValue,
           description: item.description
         });
       });
-
-      if (hasDuplicate) {
-        this.$message.error('璇锋鏌ユ槸鍚︽湁娣诲姞閲嶅椤癸紒');
-      } else {
-        // 濡傛灉娌℃湁閲嶅椤癸紝灏嗘柊椤规坊鍔犲埌 dialogAttrData
-        this.dialogAttrData.push(...newItems);
-        this.attrPollDialogVisible = false;
-      }
+      this.attrPollDialogVisible = false;
     },
 
-    // 鐗堟湰瑙勫垯绠$悊娣诲姞
-    versionAddHandler(){
+    // 灞炴�ф睜鍒犻櫎
+    dialogBottomAttrDel(form, index) {
+      this.dialogAttrData.splice(index, 1);
+    },
 
+    // 鍙兘杈撳叆鑻辨枃姝e垯鏍¢獙
+    validateEnglishOnly(rule, value, callback) {
+      if (!value) {
+        return callback(new Error('璇疯緭鍏ョ被鍨嬪悕绉�'));
+      }
+      if (!/^[A-Za-z]+$/.test(value)) {
+        return callback(new Error('鍙兘杈撳叆鑻辨枃瀛楁瘝'));
+      }
+      callback(); // 楠岃瘉閫氳繃
+    },
+
+    // 娓呯┖琛ㄥ崟
+    resetForm() {
+      const form = {
+        id: '', // 绫诲瀷鍚嶇О
+        name: '', // 鏍囩
+        fName: '', // 缁ф壙鑷�
+        implClass: '', // 瀹炵幇绫�
+        description: '', // 鎻忚堪
+        revLevel: '2', // 鐗堟湰瑙勫垯
+        revisionRuleId: '',// 鐗堟湰鍙疯鍒�
+        inputRevisionFlag: 'false', // 鎵嬪伐杈撳叆
+        delimiter: '', // 鍒嗛殧绗�
+        versionRule: '0', // 鐗堟鍙疯鍒�
+        lifeCycleId: '', // 鐢熷懡鍛ㄦ湡
+        subLifeCycleId: '', // 鐢熷懡鍛ㄦ湡澶囬�夊垪琛�,
+        subLifeCycleIdList: [],
+        lifeCycleIds: '',
+        apNameArray: "", // 灞炴�ф睜鍒楄〃鈥欙紝鈥樺垎闅�
+      };
+      this.dialogAttrData = []; // 灏嗗睘鎬ф睜琛ㄦ牸缃┖
+      this.form = {...form};
+      this.$refs.form.clearValidate();
+    },
+
+    // 鏂板缂栬緫瀵硅瘽妗嗗彇娑�
+    addDialogClose() {
+      this.resetForm();
+      this.visible = false;
+    },
+
+    // 鐗堟湰瑙勫垯鍒囨崲 缃┖鍏朵粬鏉′欢
+    revLevelChange() {
+      this.form.inputRevisionFlag = false;
+      this.form.delimiter = "";
+      this.form.versionRule = "0";
+      this.form.revisionRuleId = "";
+    },
+
+    // 鍒犻櫎鎸夐挳
+    deleteClickHandler() {
+      if (func.isEmptyObject(this.nodeRow)) {
+        this.$message.error('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�');
+        return;
+      }
+
+      this.$confirm('鎮ㄧ‘瀹氳鍒犻櫎鎵�閫夋嫨鐨勬暟鎹悧锛�', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        const {id, oid, ts} = this.nodeRow;
+        const obj = {id, oid, ts};
+        deleteBtmType(obj).then(res => {
+          if (res.data.code === 200) {
+            this.$message.success(res.data.obj);
+            this.getTreeList();
+          }
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+
+    // 鍒涘缓瑙嗗浘
+    createViewClickHandler() {
+      this.createViewLoading = true;
+      createView().then(res => {
+        if (res.data.code === 200) {
+          this.createViewLoading = false;
+          this.$message.success(res.data.obj);
+        }
+      }).catch(err => {
+        this.createViewLoading = false;
+      })
+    },
+
+    // 瀵煎嚭
+    exportClickHandler() {
+      if (func.isEmptyObject(this.nodeRow)) {
+        this.$message.error('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�');
+        return;
+      }
+      let name = this.nodeRow.id;
+      expData({name: name}).then(res => {
+        func.downloadFileByBlobHandler(res);
+        this.$message.success('瀵煎嚭鎴愬姛');
+      }).catch(err => {
+        this.$message.error(err);
+      });
+    },
+
+    // 瀵煎叆
+    upLoadClickHandler() {
+      this.$refs.upload.visible = true;
+    },
+
+    // 鏌ョ湅浣跨敤鑼冨洿鎸夐挳
+    checkViewClickHandler() {
+      if (func.isEmptyObject(this.nodeRow)) {
+        this.$message.error('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹紒');
+        return;
+      }
+      getUsedBtmLinkList({btmName: this.nodeRow.id}).then(res => {
+        if (res.data.code === 200) {
+          this.checkViewVisible = true;
+          const data = res.data.data.map(item => {
+            return {
+              name: this.nodeRow.id,
+              source: item
+            }
+          });
+          this.checkViewData = data;
+          this.checkViewDataSearch = data;
+        }
+      })
+    },
+
+    // 鏌ョ湅浣跨敤鑼冨洿鏌ヨ
+    checkHandleSearch(params, done) {
+      const {source} = params;
+
+      if (!params.source) {
+        this.checkViewData = this.checkViewDataSearch;
+        return done();
+      }
+
+      this.checkViewData = this.checkViewDataSearch.filter(item => {
+        return item.source && item.source.includes(source);
+      });
+
+      done();
+
+    },
+
+    // 鏌ョ湅浣跨敤鑼冨洿閲嶇疆
+    checkHandleReset() {
+      this.checkViewData = this.checkViewDataSearch;
+    },
+
+    // 涓�鑷存�ф鏌ユ寜閽偣鍑�
+    checkClickHandler() {
+      this.createViewLoading = true;
+      checkBtmConsistency().then(res => {
+        this.createViewLoading = false;
+        if (res && res.data && res.data.data) {
+          this.conCheckVisible = true;
+          this.conCheckLoading = true;
+          if (res.data.code === 200) {
+            const data = res.data.data[0];
+            this.conDefaultCheckData = data; // 淇濈暀涓�浠藉師濮嬫暟鎹�
+            this.conCheckLoading = false;
+            const outputData = [];
+            Object.entries(data).forEach(([id, methods]) => {
+              let action;
+
+              if (methods.includes('_CREATE')) {
+                action = methods.replace('_CREATE', '鍒涘缓琛�');
+              } else if (methods.includes('_ADD')) {
+                action = methods.replace('_ADD', '澧炲姞鍒�');
+              } else if (methods.includes('_DROP')) {
+                action = methods.replace('_DROP', '绉婚櫎鍒�');
+              } else {
+                action = '鏈煡';
+              }
+              outputData.push({
+                id: id,
+                methods: action,
+                status: '鏈慨澶�'
+              })
+            })
+            this.conCheckData = outputData;
+          }
+        } else {
+          this.$message.success(res.data.msg);
+        }
+      })
+    },
+
+    // 淇涓�鑷存�ф鏌�
+    repairClickHandler() {
+      const params = this.conDefaultCheckData;
+      executeRepair(params).then(res => {
+        if (res.data.obj) {
+          this.$message.success('淇鎴愬姛');
+          this.conCheckData = [];
+        } else {
+          this.$message.error('淇澶辫触锛岃閲嶆柊灏濊瘯锛�');
+        }
+        this.conCheckVisible = false;
+      })
+    },
+
+    // 鍒涘缓绱㈠紩鎸夐挳鐐瑰嚮
+    indexClickHandler() {
+      if (func.isEmptyObject(this.nodeRow)) {
+        this.$message.error('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�');
+        return;
+      }
+      this.getLeftIndex();
+      this.indexVisible = true;
+    },
+
+    // 宸︿晶鏍戞洿鏂�
+    getLeftIndex() {
+      const params = {
+        "conditionMap[typename]": this.nodeRow.id
+      }
+      getIndexByCondition(params).then(res => {
+        if (res.data.code === 200) {
+          const data = res.data.data.map(item => {
+            return {
+              indexName: item.indexName,
+              name: `${item.indexName} ${item.attrNames}`,
+              id: item.oid
+            }
+          })
+          this.indexLeftData = data;
+        }
+      })
+    },
+
+    // 绱㈠紩宸︿晶鏍戠偣鍑�
+    indexLeftNodeClick(row) {
+      this.indexLeftNodeRow = row;
+    },
+
+    // 鍒犻櫎宸︿晶鏍戠储寮�
+    deleteIndexLeftTreeClickHandler() {
+      if (func.isEmptyObject(this.indexLeftNodeRow)) {
+        this.$message.error('璇烽�夋嫨涓�鏉℃暟鎹繘琛屽垹闄�');
+        return;
+      }
+      const params = {
+        btmName: this.nodeRow.id,
+        indexName: this.indexLeftNodeRow.indexName
+      };
+      delIndex(params).then(res => {
+        if (res.data.code === 200) {
+          this.$message.success('鍒犻櫎绱㈠紩鎴愬姛');
+          this.getLeftIndex();
+        }
+      })
+    },
+
+    //鍙充晶琛ㄦ牸娣诲姞灞炴��
+    indexAttrClickAddHandler() {
+      if (func.isEmptyObject(this.indexAttrRow)) {
+        this.$message.error('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�');
+        return;
+      }
+      this.indexData.push(
+        {
+          typeName: this.nodeRow.id,
+          attrNames: this.indexAttrRow.id,
+          indexName: this.indexForm.name,
+          desc: this.indexForm.desc
+        }
+      )
+      this.indexFormRead = true;
+      this.indexAttrVisible = false;
+    },
+
+    // 鍙充晶灞炴�ц〃鏍艰鐐瑰嚮
+    indexAttrRowClick(row) {
+      this.indexAttrRow = row;
+    },
+
+    // 鍙充晶琛ㄦ牸澧炲姞
+    rightIndexAddClick() {
+      if (!this.indexForm.name) {
+        this.$message.error('璇疯緭鍏ョ储寮曞悕绉�');
+        return;
+      }
+
+      // 妫�鏌ユ槸鍚︿负鑻辨枃瀛楃
+      const englishRegex = /^[A-Za-z]+$/;
+      if (!englishRegex.test(this.indexForm.name)) {
+        this.$message.error('绱㈠紩鍚嶇О鍙兘鍖呭惈鑻辨枃瀛楃');
+        return;
+      }
+      this.indexLoading = true;
+      getAllAttributesByBtmId({btmId: this.nodeRow.id}).then(res => {
+        if (res.data.code === 200) {
+          const data = res.data.data.map(item => {
+            return {
+              id: item.id
+            }
+          })
+          this.indexAttrData = data;
+        }
+        this.indexLoading = false;
+        this.indexAttrVisible = true;
+      })
+    },
+
+    // 鍒涘缓淇濆瓨绱㈠紩
+    indexClickAddHandler() {
+      const params = {
+        typeName: this.nodeRow.id,
+        attrNames: this.indexData.map(item => item.attrNames).join(','),
+        indexName: this.indexForm.name,
+      }
+      addIndex([params]).then(res => {
+        this.$message.success('鍒涘缓鎴愬姛');
+        this.indexDialogClose();
+      }).catch(err => {
+        this.indexDialogClose();
+      })
+    },
+
+    // 绱㈠紩瀵硅瘽妗嗗彇娑�
+    indexDialogClose() {
+      this.indexFormRead = false;
+      this.indexForm = {};
+      this.indexData = [];
+      this.indexVisible = false;
     }
   }
 }
@@ -611,7 +1475,7 @@
 
 <style lang="scss" scoped>
 ::v-deep {
-  .avue-dialog .el-dialog__body{
+  .avue-dialog .el-dialog__body {
     padding: 20px 20px 0px 20px; // 涓婂彸涓嬪乏
     margin-bottom: 10px !important;
   }
@@ -624,66 +1488,30 @@
     width: 100%;
   }
 
-  .headerCon {
-    .el-button {
-      width: 82px;
-    }
-  }
-}
-
-.headerCon {
-  display: flex;
-  flex-wrap: wrap;
-  margin-bottom: 5px;
-
-  .el-button + .el-button {
-    margin-left: 5px;
+  .el-tag {
+    line-height: 22px;
+    height: 24px;
   }
 
-  .el-button {
-    margin-top: 5px;
+  .el-radio {
+    margin-right: 20px;
   }
-}
-
-.headerCon > .el-button:nth-child(4) {
-  margin-left: 0;
-}
-
-.headerCon > .el-button:nth-child(7) {
-  margin-left: 0;
-}
-
-.headerCon > .el-button:nth-child(10) {
-  margin-left: 0;
-}
-
-.miniBtn {
-  width: 82px;
-  text-align: center;
-  padding-left: 7px;
-}
-
-.smallBtn {
-  width: 82px;
-  text-align: center;
-  padding-left: 4.5px;
 }
 
 .descBox {
-  width: 32%;
-  margin-left: 20px;
+  margin-right: 20px;
 }
 
 .dialogForm {
   display: flex;
-  justify-content: space-around;
+  justify-content: space-between;
 }
 
 .dialogForm > div {
-  width: 29%;
-  border: 1px solid #eee;
-  padding: 25px 20px 5px 10px; /* 涓� 鍙� 涓� 宸� */
-  box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2); /* 娣诲姞闃村奖鏁堟灉 */
+  border: 1px solid #EBEEF5;
+  border-radius: 2px;
+  padding: 15px 20px 0 10px; /* 涓� 鍙� 涓� 宸� */
+  box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1); /* 娣诲姞闃村奖鏁堟灉 */
 }
 
 

--
Gitblit v1.9.3