From 2bea732496b4f5051233ed94e206160992351596 Mon Sep 17 00:00:00 2001 From: yuxc <yuxc@vci-tech.com> Date: 星期三, 15 一月 2025 11:02:06 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/linkType/index.vue | 1049 ++++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 830 insertions(+), 219 deletions(-) diff --git a/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/linkType/index.vue b/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/linkType/index.vue index 4aee662..285f5bc 100644 --- a/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/linkType/index.vue +++ b/Source/plt-web/plt-web-ui/src/views/modelingMenu/modeling/linkType/index.vue @@ -2,32 +2,12 @@ <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">淇敼 - </el-button> - <el-button icon="el-icon-delete" plain size="small" type="danger">鍒犻櫎 - </el-button> - <el-button icon="el-icon-view" plain size="small" type="primary">鏌ョ湅 - </el-button> - <el-button icon="el-icon-download" plain size="small" type="primary">瀵煎嚭 - </el-button> - <el-button icon="el-icon-upload2" plain size="small" type="primary">瀵煎叆 - </el-button> - <el-button icon="el-icon-circle-plus-outline" plain size="small" - type="primary" @click="createViewClickHandler">鍒涘缓瑙嗗浘 - </el-button> - <el-button icon="el-icon-menu" plain size="small" - type="primary" @click="checkClickHandler">涓�鑷存�ф鏌� - </el-button> - </div> - <!-- 宸︿晶鏍� --> - <div style="height: calc(100vh - 300px);"> + <div ref="TreeBox" style="height: calc(100vh - 154px);!important;"> + <!-- 宸︿晶鏍� --> + <div style="height: calc(100vh - 190px);"> <avue-tree :data="treeData" :option="treeOption" @node-click="nodeClick"> <span slot-scope="{ node, data }" class="el-tree-node__label"> - <span style="font-size: 15px"> + <span> <i class="el-icon-s-promotion"></i> {{ (node || {}).label }} </span> @@ -41,121 +21,144 @@ <el-main> <basic-container> <div> - <el-descriptions :column="2" border class="margin-top" size="medium"> - <el-descriptions-item :contentStyle="descriptionOption.contentStyle" - :labelStyle="descriptionOption.labelStyle"> - <template slot="label"> - <i :class="icons.id"></i> - 鍚嶇О - </template> - {{ nodeRow.name }} - </el-descriptions-item> - <el-descriptions-item :contentStyle="descriptionOption.contentStyle" - :labelStyle="descriptionOption.labelStyle"> - <template slot="label"> - <i :class="icons.name"></i> - 鏍囩 - </template> - {{ nodeRow.tag }} - </el-descriptions-item> - <el-descriptions-item :contentStyle="descriptionOption.contentStyle" - :labelStyle="descriptionOption.labelStyle"> - <template slot="label"> - <i :class="icons.tableName"></i> - 瀹炵幇绫� - </template> - {{ nodeRow.implClass }} - </el-descriptions-item> - <el-descriptions-item :contentStyle="descriptionOption.contentStyle" - :labelStyle="descriptionOption.labelStyle"> - <template slot="label"> - <i :class="icons.domain"></i> - 褰㈢姸 - </template> - <el-tag v-if="nodeRow.shape"> - {{ nodeRow.shape }} - </el-tag> - </el-descriptions-item> - <el-descriptions-item :contentStyle="descriptionOption.contentStyle" - :labelStyle="descriptionOption.labelStyle"> - <template slot="label"> - <i :class="icons.desc"></i> - 鎻忚堪 - </template> - {{ nodeRow.description }} - </el-descriptions-item> - </el-descriptions> - - <el-descriptions :column="3" border class="margin-top" direction="vertical"> - <el-descriptions-item :contentStyle="descriptionOption.contentStyle" - :labelStyle="descriptionOption.labelStyle"> - <template slot="label"> - <i :class="icons.from"></i> - From绔被鍨� - </template> - <span v-for="item in nodeRow.btmItemsFrom" style="margin-left:2px;"> - <el-tag effect="plain" style="margin-top: 2px;"> - {{ item }} - </el-tag> - </span> - </el-descriptions-item> - <el-descriptions-item :contentStyle="descriptionOption.contentStyle" - :labelStyle="descriptionOption.labelStyle"> - <template slot="label"> - <i :class="icons.from"></i> - Form绔富绫诲瀷 - </template> - <el-tag v-if="nodeRow.primitivesFrom" effect="plain"> - {{ nodeRow.primitivesFrom === '璇烽�夋嫨' ? nodeRow.btmItemsFrom[0] : nodeRow.primitivesFrom }} - </el-tag> - </el-descriptions-item> - <el-descriptions-item :contentStyle="descriptionOption.contentStyle" - :labelStyle="descriptionOption.labelStyle"> - <template slot="label"> - <i :class="icons.from"></i> - From绔搴斿叧绯� - </template> - <el-tag v-if="nodeRow.relationFrom" effect="plain">{{ nodeRow.relationFrom }}</el-tag> - </el-descriptions-item> - - </el-descriptions> - - <el-descriptions :column="3" border class="margin-top" direction="vertical"> - <el-descriptions-item :contentStyle="descriptionOption.contentStyle" - :labelStyle="descriptionOption.labelStyle"> - <template slot="label"> - <i :class="icons.to"></i> - To绔被鍨� - </template> - <span v-for="item in nodeRow.btmItemsTo" style="margin-left:2px;"> - <el-tag effect="plain" style="margin-top: 2px;"> - {{ item }} - </el-tag> - </span> - </el-descriptions-item> - <el-descriptions-item :contentStyle="descriptionOption.contentStyle" - :labelStyle="descriptionOption.labelStyle"> - <template slot="label"> - <i :class="icons.to"></i> - To绔富绫诲瀷 - </template> - <el-tag v-if="nodeRow.primitivesTo" effect="plain"> - {{ nodeRow.primitivesTo === '璇烽�夋嫨' ? nodeRow.btmItemsTo[0] : nodeRow.primitivesTo }} - </el-tag> - </el-descriptions-item> - <el-descriptions-item :contentStyle="descriptionOption.contentStyle" - :labelStyle="descriptionOption.labelStyle"> - <template slot="label"> - <i :class="icons.to"></i> - To绔搴斿叧绯� - </template> - <el-tag v-if="nodeRow.relationTo" effect="plain">{{ nodeRow.relationTo }}</el-tag> - </el-descriptions-item> - - </el-descriptions> + <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.consistencyCheckBtn" class="button-custom-icon" plain size="small" type="primary" @click="checkClickHandler"> + <icon-show :name="permissionList.consistencyCheckBtn.source"></icon-show> + 涓�鑷存�ф鏌� + </el-button> </div> - <div style="margin-top: 20px"> - <h3>灞炴�ф睜鍒楄〃</h3> + <el-descriptions style="margin: 10px 0 20px" :column="2" border class="margin-top" size="medium"> + <el-descriptions-item :contentStyle="descriptionOption.contentStyle" + :labelStyle="descriptionOption.labelStyle"> + <template slot="label"> + <i :class="icons.id"></i> + 鍚嶇О + </template> + {{ nodeRow.name }} + </el-descriptions-item> + <el-descriptions-item :contentStyle="descriptionOption.contentStyle" + :labelStyle="descriptionOption.labelStyle"> + <template slot="label"> + <i :class="icons.name"></i> + 鏍囩 + </template> + {{ nodeRow.tag }} + </el-descriptions-item> + <el-descriptions-item :contentStyle="descriptionOption.contentStyle" + :labelStyle="descriptionOption.labelStyle"> + <template slot="label"> + <i :class="icons.tableName"></i> + 瀹炵幇绫� + </template> + <el-tooltip v-if="nodeRow.implClass" :content="nodeRow.implClass" class="item" effect="dark" + placement="top-start"> + <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"> + <template slot="label"> + <i :class="icons.domain"></i> + 褰㈢姸 + </template> + <el-tag v-if="nodeRow.shape"> + {{ nodeRow.shape }} + </el-tag> + </el-descriptions-item> + <el-descriptions-item :span="2" :contentStyle="descriptionOption.contentStyle" + :labelStyle="descriptionOption.labelStyle"> + <template slot="label"> + <i :class="icons.desc"></i> + 鎻忚堪 + </template> + {{ nodeRow.description }} + </el-descriptions-item> + <el-descriptions-item :span="2" contentStyle="word-break:break-all;" + :labelStyle="descriptionOption.labelStyle"> + <template slot="label"> + <i :class="icons.from"></i>From绔被鍨� + </template> + <span v-for="item in nodeRow.btmItemsFrom"> + <el-tag effect="plain" style="margin:2px 5px 2px 0;"> + {{ item }} + </el-tag> + </span> + </el-descriptions-item> + <el-descriptions-item :contentStyle="descriptionOption.contentStyle" + :labelStyle="descriptionOption.labelStyle"> + <template slot="label"> + <i :class="icons.from"></i> + Form绔富绫诲瀷 + </template> + <el-tag v-if="nodeRow.primitivesFrom" effect="plain"> + {{ nodeRow.primitivesFrom === '璇烽�夋嫨' ? nodeRow.btmItemsFrom[0] : nodeRow.primitivesFrom }} + </el-tag> + </el-descriptions-item> + <el-descriptions-item :contentStyle="descriptionOption.contentStyle" + :labelStyle="descriptionOption.labelStyle"> + <template slot="label"> + <i :class="icons.from"></i> + From绔搴斿叧绯� + </template> + <el-tag v-if="nodeRow.relationFrom" effect="plain">{{ nodeRow.relationFrom }}</el-tag> + </el-descriptions-item> + <el-descriptions-item :span="2" contentStyle="word-break:break-all;" + :labelStyle="descriptionOption.labelStyle"> + <template slot="label"> + <i :class="icons.to"></i> + To绔被鍨� + </template> + <span v-for="item in nodeRow.btmItemsTo"> + <el-tag effect="plain" style="margin:2px 5px 2px 0;"> + {{ item }} + </el-tag> + </span> + </el-descriptions-item> + <el-descriptions-item :contentStyle="descriptionOption.contentStyle" + :labelStyle="descriptionOption.labelStyle"> + <template slot="label"> + <i :class="icons.to"></i> + To绔富绫诲瀷 + </template> + <el-tag v-if="nodeRow.primitivesTo" effect="plain"> + {{ nodeRow.primitivesTo === '璇烽�夋嫨' ? nodeRow.btmItemsTo[0] : nodeRow.primitivesTo }} + </el-tag> + </el-descriptions-item> + <el-descriptions-item :contentStyle="descriptionOption.contentStyle" + :labelStyle="descriptionOption.labelStyle"> + <template slot="label"> + <i :class="icons.to"></i> + To绔搴斿叧绯� + </template> + <el-tag v-if="nodeRow.relationTo" effect="plain">{{ nodeRow.relationTo }}</el-tag> + </el-descriptions-item> + </el-descriptions> + <div style="position: relative"> + <h3 style="margin: 0;position: absolute;top:0;z-index: 1000;">灞炴�у垪琛�</h3> <avue-crud :data="tableData" :option="tableOption" @@ -164,83 +167,136 @@ </basic-container> </el-main> - <!-- 鍒涘缓 && 缂栬緫 --> + <!-- 鍒涘缓 && 缂栬緫 --> <el-dialog v-dialogDrag + :title="title === 'add' ? '鍒涘缓' : '淇敼'" :visible.sync="visible" append-to-body="true" class="avue-dialog" - title="鍒涘缓" width="70%" + @close="addDialogClose" > - <el-form ref="form" :model="form" :rules="rules" label-width="90px"> + <el-form ref="form" :model="form" :rules="rules" label-width="85px" size="small"> <div class="dialogForm"> <div class="leftForm"> <el-form-item label="鍚嶇О锛�" prop="name"> - <el-input v-model="form.name"></el-input> + <el-input v-model="form.name" :readOnly="title === 'edit'"></el-input> </el-form-item> <el-form-item label="鏍囩锛�"> <el-input v-model="form.tag"></el-input> </el-form-item> <el-form-item label="瀹炵幇绫伙細"> - <el-input v-model="form.impClass"></el-input> + <el-input v-model="form.implClass"></el-input> </el-form-item> <el-form-item label="褰㈢姸"> <el-input v-model="form.shape"></el-input> </el-form-item> <el-form-item label="鎻忚堪"> - <el-input v-model="form.description" :rows="2" type="textarea"></el-input> + <el-input v-model="form.description" :rows="3" type="textarea"></el-input> </el-form-item> </div> <div class="centerForm"> - <el-form-item label="Form绔被鍨嬶細" label-width="110px"> - <el-input v-model="form.btmItemsFrom"></el-input> + <el-form-item label-width="110px" style="margin-bottom: 5px;"> + <div slot="label"> + <span>Form绔被鍨嬶細</span> + <el-button plain size="mini" style="margin-right: 10px" type="success" @click="FormItemReferChange('form')">娣诲姞</el-button> + </div> + <div style="height: 190px;border: 1px solid #EBEEF5;overflow-y: auto"> + <el-table :data="bizFormData" :show-header="false" style="width: 100%" size="mini"> + <el-table-column + align="center" + prop="name"> + </el-table-column> + <el-table-column + label="鎿嶄綔" + width="60"> + <template slot-scope="scope"> + <el-button + size="mini" + style="color:#F56C6C;" + type="text" + @click.native.prevent="bizTypeDeleteRow('form',scope.$index)"> + 绉婚櫎 + </el-button> + </template> + </el-table-column> + </el-table> + </div> </el-form-item> - <el-form-item label="瀵瑰簲鍏崇郴锛�" label-width="110px"> - <el-select v-model="form.relationFrom"> - <el-option label="N" value="N"></el-option> - <el-option label="1" value="1"></el-option> - </el-select> + <el-form-item label="瀵瑰簲鍏崇郴锛�" label-width="110px" style="margin-bottom: 5px;"> + <el-radio v-model="form.relationFrom" label="N">N</el-radio> + <el-radio v-model="form.relationFrom" label="1">1</el-radio> </el-form-item> <el-form-item label="涓荤被鍨嬶細" label-width="110px"> - <el-input v-model="form.primitivesFrom"></el-input> + <el-select v-model="form.primitivesFrom"> + <el-option v-for="(item,index) in bizFormData" :key="index" :label="item.name" + :value="item.name"></el-option> + </el-select> </el-form-item> </div> <div class="rightForm"> - <el-form-item label="To绔被鍨嬶細" label-width="110px"> - <el-input v-model="form.btmItemsTo"></el-input> + <el-form-item label-width="100px" style="margin-bottom: 5px;"> + <div slot="label"> + <span>To绔被鍨嬶細</span> + <el-button plain size="mini" style="margin-right: 10px" type="success" @click="FormItemReferChange('to')">娣诲姞</el-button> + </div> + <div style="height: 190px;border: 1px solid #EBEEF5;overflow-y: auto"> + <el-table :data="bizToData" :show-header="false" style="width: 100%" size="mini"> + <el-table-column + align="center" + prop="name"> + </el-table-column> + <el-table-column + label="鎿嶄綔" + width="60"> + <template slot-scope="scope"> + <el-button + size="mini" + style="color:#F56C6C;" + type="text" + @click.native.prevent="bizTypeDeleteRow('to',scope.$index)"> + 绉婚櫎 + </el-button> + </template> + </el-table-column> + </el-table> + </div> </el-form-item> - <el-form-item label="瀵瑰簲鍏崇郴锛�" label-width="110px"> - <el-select v-model="form.relationTo"> - <el-option label="N" value="N"></el-option> - <el-option label="1" value="1"></el-option> - </el-select> + <el-form-item label="瀵瑰簲鍏崇郴锛�" label-width="110px" style="margin-bottom: 5px;"> + <el-radio v-model="form.relationTo" label="N">N</el-radio> + <el-radio v-model="form.relationTo" label="1">1</el-radio> </el-form-item> <el-form-item label="涓荤被鍨嬶細" label-width="110px"> - <el-input v-model="form.primitivesTo"></el-input> + <el-select v-model="form.primitivesTo"> + <el-option v-for="(item,index) in bizToData" :key="index" :label="item.name" + :value="item.name"></el-option> + </el-select> </el-form-item> </div> </div> </el-form> - <div class="bottomForm"> - <h3>灞炴�ф睜鍒楄〃</h3> + <div class="bottomForm" style="margin-top: 10px;"> <avue-crud + size="mini" :data="dialogBottomData" :option="dialogBottomOption" + @row-del="dialogBottomAttrDel" > <template slot="menuLeft" slot-scope="scope"> - <el-button icon="el-icon-plus" plain size="small" type="primary" @click="dialogAddClickHandler">澧� 鍔� + <h3 style="display: inline-block;margin-right: 20px;margin-bottom: 10px;">灞炴�ф睜鍒楄〃</h3> + <el-button icon="el-icon-plus" plain size="mini" type="primary" @click="dialogAddClickHandler">澧� 鍔� </el-button> </template> </avue-crud> </div> <span slot="footer" class="dialog-footer"> - <el-button>鍙� 娑�</el-button> - <el-button type="primary">纭� 瀹�</el-button> - </span> + <el-button size="small" type="primary" @click="addDialogSavaHandler">纭� 瀹�</el-button> + <el-button size="small" @click="addDialogClose">鍙� 娑�</el-button> + </span> <!-- 灞炴�ф睜鍒楄〃 --> <el-dialog @@ -253,18 +309,23 @@ @close="dialogAttrClose" > <avue-crud - ref="dialogAttrCrud" :key="dialogAttrReload" + ref="dialogAttrCrud" :data="dialogAttrData" :option="dialogAttrOption" + :page.sync="attrPage" :table-loading="dialogAttrLoading" @selection-change="dialogAttrSelectChange" @row-click="dialogAttrRowClickHandler" + @size-change="attrSizeChange" + @current-change="attrCurrentChange" + @search-change="attrHandleSearch" + @search-reset="attrHandleReset" > </avue-crud> <span slot="footer" class="dialog-footer"> - <el-button @click="dialogAttrClose">鍙� 娑�</el-button> - <el-button type="primary">纭� 瀹�</el-button> + <el-button size="small" type="primary" @click="dialogAttrAddClickHandler">纭� 瀹�</el-button> + <el-button size="small" @click="dialogAttrClose">鍙� 娑�</el-button> </span> </el-dialog> </el-dialog> @@ -272,58 +333,210 @@ <!-- 涓�鑷存�ф鏌� --> <el-dialog v-dialogDrag - :visible.sync="checkVisible" + :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" @click="conCheckVisible = false">鍙� 娑�</el-button> + <el-button size="small" type="primary" @click="repairClickHandler">淇� 澶�</el-button> + </span> </el-dialog> + + <!-- form to 绔被鍨嬪璇濇琛ㄦ牸 --> + <el-dialog + v-dialogDrag + :title="bizTypeTitle === 'form' ? 'Form绔被鍨�' : 'To绔被鍨�'" + :visible.sync="bizTypeVisible" + append-to-body="true" + class="avue-dialog" + width="70%" + > + <avue-crud + :key="bizTypeReload" + ref="bizTypeCrud" + :data="bizTypeData" + :option="bizTypeOption" + :table-loading="bizTypeLoading" + @search-change="bizTypeHandleSearch" + @search-reset="bizTypeHandleReset" + @selection-change="bizTypeSelection" + @row-click="bizTypeRowClick"> + </avue-crud> + + <span slot="footer" class="dialog-footer"> + <el-button size="small" type="primary" @click="bizTypeAddHandler">纭� 瀹�</el-button> + <el-button size="small" @click="bizTypeVisible = false">鍙� 娑�</el-button> + </span> + </el-dialog> + + <!-- 瀵煎叆 --> + <upload-file ref="upload" :fileType="upFileType" :fileUrl="fileUrl" :tipList="tipList" title="瀵煎叆" + @updata="getTreeList"></upload-file> </el-container> </template> <script> -import {gridLink, getByAttributeNames, checkLinkType, createView} from "@/api/modeling/linkType/api"; +import { + gridLink, + getByAttributeNames, + checkLinkType, + createView, + getBizTypes, + addAndEditLink, + expData, + repairTable, + deleteLink +} from "@/api/modeling/linkType/api"; import basicOption from '@/util/basic-option' import {gridAttribute} from "@/api/modeling/attributePool/api"; +import func from "@/util/func"; +import {mapGetters} from "vuex"; export default { name: "index", data() { return { + tipList: [ + "瀵煎叆閾炬帴鍚嶇О涓嶅彲涓虹┖涓旈摼鎺ョ被鍨嬪悕绉板彧鑳戒负鑻辨枃瀛楁瘝", + "瀵煎叆鐨勬枃浠跺寘鎷睘鎬с�佷笟鍔$被鍨嬨�佺敓鍛藉懆鏈熺瓑鏂囦欢", + "涓婁紶鐨勬枃浠朵负鍘嬬缉鏂囦欢锛屼笖鍘嬬缉鏍煎紡浠呰兘涓簔ip鏍煎紡" + ], + upFileType: ['zip'], + fileUrl: 'api/linkTypeController/impData', + title: '', + bizTypeReload: null, + bizToData: [], + bizFormData: [], + bizTypeList: [], + bizTypeLoading: false, + bizTypeData: [], + bizTypeOption: { + ...basicOption, + menu: false, + addBtn: false, + index: false, + refreshBtn: false, + highlightCurrentRow: true, + searchMenuSpan: 8, + searchLabelWidth: 100, + calcHeight: 30, + header: false, + column: [ + { + label: '涓氬姟绫诲瀷鍚�', + prop: 'name', + sortable: true, + search: true, + }, + { + label: '鏍囩', + prop: 'label', + sortable: true, + }, + { + label: '鐖剁被', + prop: 'fName', + sortable: true, + }, + { + label: '鐗堟湰瑙勫垯', + prop: 'revRuleName', + sortable: true, + }, + { + label: '鐢熷懡鍛ㄦ湡', + prop: 'lifeCycle', + sortable: true, + }, + ] + }, + bizTypeVisible: false, + bizTypeTitle: "", + conDefaultCheckData: [], // 淇濈暀涓婁釜鎺ュ彛杩斿洖鐨勬暟鎹� + conCheckLoading: false, + conCheckOption: { + ...basicOption, + menu: false, + addBtn: false, + index: false, + selection: false, + refreshBtn: false, + header:false, + column: [ + { + label: '绫诲瀷鍚�', + prop: 'id', + }, + { + label: '鎿嶄綔', + prop: 'methods', + }, + { + label: '鐘舵��', + prop: 'status', + } + ] + }, + conCheckData: [], + conCheckVisible: false, + attrPage: { + currentPage: 1, + pageSize: 30, + total: 0, + pageSizes: [30, 50, 100, 200], + }, + searchAttrParams: {}, dialogAttrReload: Math.random(), dialogAttrSelectList: [], dialogAttrLoading: false, - dialogAttrData: [], // 灞炴�ф睜鏂板琛ㄦ牸 + dialogAttrData: [], // 灞炴�ф睜寮圭獥琛ㄦ牸 dialogAttrOption: { ...basicOption, + calcHeight: -60, addBtn: false, menu: false, refreshBtn: false, - index:false, + index: false, highlightCurrentRow: true, - height:450, + 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: '璇存槑', prop: 'description', sortable: true, - overHidden:true + overHidden: true } ] }, @@ -338,7 +551,7 @@ form: { name: '', // 鍚嶇О tag: '', // 鏍囩 - impClass: '', // 瀹炵幇绫� + implClass: '', // 瀹炵幇绫� shape: '', // 褰㈢姸 description: '', // 鎻忚堪 btmItemsFrom: '', // From绔被鍨嬪垪琛� @@ -346,36 +559,43 @@ primitivesFrom: '', // form绔富绫诲瀷 btmItemsTo: '', // to绔被鍨嬪垪琛� relationTo: 'N', // to绔搴斿叧绯� - primitivesTo: '', // to绔富绫诲瀷 + primitivesTo: '', // to绔富绫诲瀷, + attributes: [] }, dialogBottomOption: { ...basicOption, editBtn: false, refreshBtn: false, selection: false, - height: 300, + height: 220, + menuWidth:100, addBtn: false, - delBtn: false, + gridBtn:false, + columnBtn:false, // index:false, column: [ { label: '灞炴�у悕', prop: 'id', sortable: true, + width:260, }, { label: '灞炴�х被鍨�', prop: 'attributeDataType', sortable: true, + width:150, }, { label: '鍒濆鍊�', prop: 'defaultValue', sortable: true, + width:200, }, { label: '璇存槑', prop: 'description', + overHidden: true } ] }, @@ -402,32 +622,37 @@ // index:false, addBtn: false, menu: false, + calcHeight: -30, column: [ { label: '灞炴�у悕', prop: 'id', sortable: true, + width:260, }, { label: '灞炴�х被鍨�', prop: 'attributeDataType', sortable: true, + width:150, }, { label: '鍒濆鍊�', prop: 'defaultValue', sortable: true, + width:200, }, { label: '璇存槑', prop: 'description', + overHidden: true } ] }, nodeRow: {}, descriptionOption: { labelStyle: 'text-align:center;width:120px', - contentStyle: 'width:240px;text-align:center;word-break;break-all;' + contentStyle: 'width:240px;text-align:center;word-break:break-all;' }, icons: { id: 'el-icon-finished', @@ -439,13 +664,26 @@ main: 'el-icon-warning-outline', desc: 'el-icon-chat-line-square' }, + bizLastIndex: null, + attrLastIndex: null } }, created() { this.getTreeList(); }, - mounted() { - + 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), + createViewBtn: this.vaildData(this.permission[this.$route.query.id].ATTRRIGHT, false), + }; + }, }, methods: { // 鏍憃nLoad璇锋眰 @@ -454,13 +692,17 @@ const data = res.data.data; this.treeData = data; this.tableLoading = false; - }).catch(err => { - this.$message.error(err) - }); + }) + }, + + // 瀵煎叆 + upLoadClickHandler() { + this.$refs.upload.visible = true; }, // 鏍戠偣鍑讳簨浠� nodeClick(row) { + console.log(row); this.nodeRow = row; this.getAttrPollData(row); // 鑾峰彇灞炴�ф睜鍒楄〃 }, @@ -475,18 +717,145 @@ }) }, + // 鍒犻櫎鎸夐挳 + deleteClickHandler() { + if (func.isEmptyObject(this.nodeRow)) { + this.$message.error('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�'); + return; + } + ; + this.$confirm('鎮ㄧ‘瀹氳鍒犻櫎鎵�閫夋嫨鐨勬暟鎹悧锛�', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + deleteLink(this.nodeRow).then(res => { + if (res.data.code === 200) { + this.$message.success('鍒犻櫎鎴愬姛'); + this.getTreeList(); + } + }) + }).catch(() => { + this.$message({ + type: 'info', + message: '宸插彇娑堝垹闄�' + }); + }); + }, + // 鍒涘缓鎸夐挳 addClickHandler() { + this.visible = true; + this.title = 'add'; + }, + + // 缂栬緫鎸夐挳 + editClickHandler() { + this.title = 'edit'; + if (func.isEmptyObject(this.nodeRow)) { + this.$message.error('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�'); + return; + } + this.form = {...this.nodeRow}; // 娴呮嫹璐� 瑙e喅寮曠敤澶嶅埗 + console.log(this.nodeRow); + this.bizFormData = this.form.btmItemsFrom.length > 0 && this.form.btmItemsFrom.map(item => { + return { + name: item + }; + }); + + this.bizToData = this.form.btmItemsTo.length > 0 && this.form.btmItemsTo.map(item => { + return { + name: item + }; + }); + + if (this.form.attributes.length > 0) { + let value = this.form.attributes.join(','); + getByAttributeNames({attrNames: value}).then(res => { + if (res.data.code === 200) { + this.dialogBottomData = res.data.data; + } + }) + } this.visible = true; }, // 涓�鑷存�ф鏌� checkClickHandler() { - this.checkVisible = true; checkLinkType().then(res => { + if (res && res.data && res.data.data) { + this.conCheckVisible = true; + this.conCheckLoading = true; + if (res.data.code === 200) { + const data = res.data.data; + this.conDefaultCheckData = data; // 淇濈暀涓�浠藉師濮嬫暟鎹� + this.conCheckLoading = false; + const outputData = []; + + data.forEach(item => { + Object.entries(item.btmCheckMap).forEach(([id, methodsArray]) => { + methodsArray.forEach(methods => { + // 鍒ゆ柇鍓嶇紑 + const action = methods.startsWith('F_') ? '绉婚櫎form绔笟鍔$被鍨�' : '绉婚櫎to绔笟鍔$被鍨�'; + const detail = methods.split('_')[1]; // 鑾峰彇 _ 鍚庨潰鐨勫唴瀹� + outputData.push({ + id: id, + methods: `${action}:${detail}`, + status: '鏈慨澶�' + }); + }); + }); + + // 澶勭悊 dbCheckMap + Object.entries(item.dbCheckMap).forEach(([id, methods]) => { + const splitMethods = methods.split('('); + // 鍒ゆ柇绗竴涓鍙峰墠闈㈢殑鍊� + if (splitMethods[0].startsWith('_ADD')) { + outputData.push({ + id: id, + methods: '澧炲姞鍒�(' + splitMethods[0].slice(0, -1) + ')', // 缁撴潫浣嶇疆鍑忓幓)鐨勫瓧绗� + status: '鏈慨澶�' + }); + } else if (splitMethods[0].startsWith('_CREATE')) { + outputData.push({ + id: id, + methods: '鍒涘缓琛�(' + splitMethods[0].slice(0, -1) + ')', + status: '鏈慨澶�' + }); + } else if (splitMethods[0].startsWith('_DROP')) { + outputData.push({ + id: id, + methods: '绉婚櫎鍒�(' + splitMethods[0].slice(0, -1) + ')', + status: '鏈慨澶�' + }); + } else { + this.$message.error("涓嶆敮鎸佺殑 dbCheckMap 绫诲瀷锛� " + methods) + } + }); + }); + this.conCheckData = outputData; + } + } else { + this.$message.success(res.data.msg); + } }).catch(err => { - this.$message.error(err) + this.$message.error(err); + }) + }, + + // 淇涓�鑷存�ф鏌� + repairClickHandler() { + const params = this.conDefaultCheckData[0]; + repairTable(params).then(res => { + if (func.isEmptyObject(res.data.obj[0])) { + this.$message.success('淇鎴愬姛'); + this.conCheckData = []; + } else { + this.$message.error('淇澶辫触锛岃閲嶆柊灏濊瘯锛�'); + } + this.conCheckVisible = false; }) }, @@ -496,8 +865,10 @@ createView().then(res => { if (res.data.code === 200) { this.createViewLoading = false; - this.$message.success(res.data.obj) + this.$message.success(res.data.obj); } + }).catch(err => { + this.createViewLoading = false; }) }, @@ -506,12 +877,21 @@ this.dialogAttrLoading = true; this.attrPollDialogVisible = true; this.dialogAttrReload = Math.random(); // 寮哄埗鍒锋柊琛ㄦ牸 瑙e喅琛ㄦ牸閿欒 - gridAttribute(1, -1, this.searchParams).then(res => { - const data = res.data.data; + this.getAttrDialogDta(); + }, + + // 鏌ヨ灞炴�ф睜鍒楄〃鏁版嵁 + getAttrDialogDta() { + gridAttribute(this.attrPage.currentPage, this.attrPage.pageSize, this.searchAttrParams).then(res => { + const data = res.data.data.map(item=>{ + item.selectable=!this.dialogBottomData.some(existingItem => existingItem.id === item.id); + return item; + }); this.dialogAttrData = data; + this.attrPage.total = res.data.total; this.dialogAttrLoading = false; }).catch(err => { - this.$message.error(err) + this.$message.error(err); }); }, @@ -522,12 +902,250 @@ // 娣诲姞灞炴�ф睜 琛岀偣鍑� dialogAttrRowClickHandler(row) { - this.$refs.dialogAttrCrud.toggleRowSelection(row); + if(!row.selectable){ + return; + } + func.rowClickHandler( + row, + this.$refs.dialogAttrCrud, + this.attrLastIndex, + (newIndex) => { + this.attrLastIndex = newIndex; + }, + () => { + this.dialogAttrSelectList = [row]; + } + ); }, // 娣诲姞灞炴�ф睜 鍏抽棴瀵硅瘽妗� - dialogAttrClose(){ + dialogAttrClose() { this.attrPollDialogVisible = false; + this.searchAttrParams = {}; + }, + + // 娓呯┖form琛ㄥ崟 + resetForm() { + const form = { + name: '', // 鍚嶇О + tag: '', // 鏍囩 + implClass: '', // 瀹炵幇绫� + shape: '', // 褰㈢姸 + description: '', // 鎻忚堪 + btmItemsFrom: '', // From绔被鍨嬪垪琛� + relationFrom: 'N', // form绔搴斿叧绯� + primitivesFrom: '', // form绔富绫诲瀷 + btmItemsTo: '', // to绔被鍨嬪垪琛� + relationTo: 'N', // to绔搴斿叧绯� + primitivesTo: '', // to绔富绫诲瀷 + }; + this.form = form; + this.$refs.form.resetFields(); + this.bizFormData = []; + this.bizToData = []; + this.dialogBottomData = []; + }, + + // 娣诲姞灞炴�ф睜 淇濆瓨 + dialogAttrAddClickHandler() { + this.dialogAttrSelectList.forEach(item => { + this.dialogBottomData.push({ + id: item.id, + attributeDataType: item.attributeDataType, + defaultValue: item.defaultValue, + description: item.description + }); + }); + this.attrPollDialogVisible = false; + }, + + //娣诲姞灞炴�ф睜 鏉℃暟 + attrSizeChange(val) { + this.attrPage.pageSize = val; + this.getAttrDialogDta() + }, + + //娣诲姞灞炴�ф睜 椤电爜 + attrCurrentChange(val) { + this.attrPage.currentPage = val; + this.getAttrDialogDta(); + }, + + //娣诲姞灞炴�ф睜 鎼滅储 + attrHandleSearch(params, done) { + if (func.isEmptyObject(params)) { + this.searchAttrParams = {}; + } else { + this.searchAttrParams = { + "conditionMap[id]": "*" + params.id + "*" + }; + } + this.getAttrDialogDta(); + done(); + }, + + //娣诲姞灞炴�ф睜 娓呯┖鎼滅储 + attrHandleReset() { + this.searchAttrParams = {}; + this.getAttrDialogDta(); + }, + + // 灞炴�ф睜鍒犻櫎 + dialogBottomAttrDel(form, index) { + this.dialogBottomData.splice(index, 1); + }, + + // 鍒涘缓 缂栬緫 瀵硅瘽妗嗗叧闂� + addDialogClose() { + this.visible = false; + this.dialogBottomData = []; + this.resetForm(); + }, + + // form to 绫诲瀷blur鍙傜収瀵硅瘽妗� + FormItemReferChange(val) { + this.bizTypeTitle = val; + this.bizTypeLoading = true; + this.getBizTypeHandler(); + this.bizTypeVisible = true; + this.bizTypeReload = Math.random(); // 寮哄埗鍒锋柊琛ㄦ牸 瑙e喅琛ㄦ牸閿欒 + }, + + // form to 绫诲瀷琛ㄦ牸鏌ヨ + getBizTypeHandler(params) { + getBizTypes(params).then(res => { + if (res.data.code === 200) { + const data = res.data.data; + this.bizTypeData = data; + this.bizTypeLoading = false; + } + }) + }, + + // form to 绫诲瀷閫夋嫨妗� + bizTypeSelection(row) { + this.bizTypeList = row; + }, + + // form to 绫诲瀷琛岀偣鍑� + bizTypeRowClick(row) { + func.rowClickHandler( + row, + this.$refs.bizTypeCrud, + this.bizLastIndex, + (newIndex) => { + this.bizLastIndex = newIndex; + }, + () => { + this.bizTypeList = [row]; + } + ); + }, + + // form to 绫诲瀷淇濆瓨 + bizTypeAddHandler() { + if (this.bizTypeList.length === 0) { + this.$message.error('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�'); + return; + } + + const data = this.bizTypeList.map(item => ({name: item.name})); + + const dataName = this.bizTypeTitle === 'form' ? 'bizFormData' : 'bizToData'; + + let hasDuplicate = false; + // 鍏堝垱寤轰竴涓复鏃舵暟缁勬潵瀛樺偍涓嶉噸澶嶇殑椤� + const newItems = []; + this.bizTypeList.forEach(item => { + const exists = this[dataName].some(existingItem => existingItem.name === item.name); + + if (exists) { + hasDuplicate = true; + return; + } + + // 濡傛灉娌℃湁閲嶅椤癸紝鍒欏皢璇ラ」娣诲姞鍒颁复鏃舵暟缁勪腑 + newItems.push({ + name: item.name, + }); + }); + + if (hasDuplicate) { + this.$message.error('璇锋鏌ユ槸鍚︽湁娣诲姞閲嶅椤癸紒'); + } else { + // 濡傛灉娌℃湁閲嶅椤癸紝灏嗘柊椤规坊鍔犲埌 dialogBottomData + this[dataName].push(...newItems); + this.bizTypeVisible = false; + } + }, + + // form to 绫诲瀷鎼滅储 + bizTypeHandleSearch(params, done) { + console.log(params); + let obj = { + btmName: params.name + }; + this.getBizTypeHandler(obj); + + done(); + }, + + // form to 绫诲瀷閲嶇疆 + bizTypeHandleReset() { + this.getBizTypeHandler(); + }, + + // form to 绔〃鏍肩Щ闄� + bizTypeDeleteRow(val, index) { + const dataName = val === 'form' ? 'bizFormData' : 'bizToData'; + const primitivesName = val === 'form' ? 'primitivesFrom' : 'primitivesTo'; + + this[dataName].splice(index, 1); + + if (this[dataName].length === 0) { + this.form[primitivesName] = ""; + } + }, + + // 鍒涘缓缂栬緫 淇濆瓨 + addDialogSavaHandler() { + if (this.bizFormData.length <= 0 || this.bizToData.length <= 0) { + this.$message.error('form绔笟鍔$被鍨嬪拰to绔被鍨嬪潎涓嶈兘涓虹┖锛�') + return; + } + this.$refs.form.validate((valid) => { + if (valid) { + this.form.btmItemsFrom = this.bizFormData.map(item => item.name); + this.form.btmItemsTo = this.bizToData.map(item => item.name); + this.form.attributes = this.dialogBottomData.map(item => item.id); + let flag = this.title === 'add' ? true : false; + addAndEditLink(flag, this.form).then(res => { + if (res.data.code === 200) { + this.visible = false; + this.$message.success(res.data.msg); + this.resetForm(); + this.getTreeList(); + } + }); + } else { + return false; + } + }); + }, + + // 瀵煎嚭 + exportClickHandler() { + if (func.isEmptyObject(this.nodeRow)) { + this.$message.error('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�'); + return; + } + let name = this.nodeRow.name; + expData({name: name}).then(res => { + func.downloadFileByBlobHandler(res); + this.$message.success('瀵煎嚭鎴愬姛'); + }).catch(err => { + this.$message.error(err); + }); } } } @@ -542,39 +1160,32 @@ .el-form-item .el-select { width: 100%; } -} - -.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; - } -} - -.headerCon > .el-button:nth-child(4) { - margin-left: 0; -} - -.headerCon > .el-button:nth-child(7) { - margin-left: 0; } .dialogForm { display: flex; - justify-content: space-around; + justify-content: space-between; } .dialogForm > div { - width: 28%; - border: 1px solid #eee; - padding: 25px 20px 5px 10px; /* 涓� 鍙� 涓� 宸� */ - box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2); /* 娣诲姞闃村奖鏁堟灉 */ + width: 31%; + border: 1px solid #EBEEF5; + border-radius: 2px; + padding: 15px 20px 0 10px; /* 涓� 鍙� 涓� 宸� */ + box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1); /* 娣诲姞闃村奖鏁堟灉 */ +} + +.leftForm { + width: 28% !important; +} + +.smallBtn { + width: 82px !important; + text-align: center !important; + padding-left: 0px !important; } </style> -- Gitblit v1.9.3