From e5748ecbc12ea91d702e61af9a19667d19d19510 Mon Sep 17 00:00:00 2001
From: 田源 <lastanimals@163.com>
Date: 星期一, 29 五月 2023 17:55:16 +0800
Subject: [PATCH] 动态表格组件更新

---
 Source/UBCS-WEB/src/views/modeling/originalAdd.vue |  456 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 456 insertions(+), 0 deletions(-)

diff --git a/Source/UBCS-WEB/src/views/modeling/originalAdd.vue b/Source/UBCS-WEB/src/views/modeling/originalAdd.vue
new file mode 100644
index 0000000..fc2bae1
--- /dev/null
+++ b/Source/UBCS-WEB/src/views/modeling/originalAdd.vue
@@ -0,0 +1,456 @@
+<template>
+    <el-container>
+        <el-dialog title="鍏冩暟鎹�" :visible.sync="showSubmitDialog" append-to-body @close="closeSubmitDialog" width="700px"
+            style="height: 115vh;">
+            <!-- 鍏冩暟鎹殑澧炴敼寮圭獥 -->
+            <el-form ref="form" :model="attribute" show-message="true" inline size="medium" label-suffix=":"
+                class="attributeForm" :rules="rules" @resetFields="resetAttributeForm" status-icon="true">
+                <el-form-item label="灞炴�х紪鍙�" label-width="100px" prop="id">
+                    <el-input v-model="attribute.id" maxlength="15" show-word-limit type="text"></el-input>
+                </el-form-item>
+                <el-form-item label="灞炴�у悕绉�" label-width="100px" prop="name">
+                    <el-input v-model="attribute.name"></el-input>
+                </el-form-item>
+                <el-form-item label="灞炴�х被鍨�" label-width="100px" prop="typeValue">
+                    <el-select v-model="attribute.typeValue" placeholder="璇烽�夋嫨灞炴�х被鍨�" @change="typeSelectChange">
+                        <el-option v-for="item in typeList" :key="item.value" :label="item.label" :value="item.value">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="鏍囩" label-width="100px">
+                    <el-input v-model="attribute.hashtag"></el-input>
+                </el-form-item>
+                <el-form-item label="榛樿鍊�" label-width="100px">
+                    <el-input v-model="attribute.defaultValue"></el-input>
+                </el-form-item>
+                <el-form-item label="鍏佽涓虹┖" label-width="100px">
+                    <el-switch v-model="attribute.nullable" active-text="鍏佽" inactive-text="涓嶅厑璁�"></el-switch>
+                </el-form-item>
+                <el-form-item label="闀垮害" label-width="100px" prop="maxLength">
+                    <el-input-number v-model="attribute.maxLength" :min="1" :max="4000" :step="1" controls-position="right"></el-input-number>
+                </el-form-item>
+                <el-form-item label="绮惧害" label-width="100px" v-if="attribute.typeValue == 'VTDouble'">
+                    <el-input-number v-model="attribute.precision" :min="1" :max="20" :step="1" controls-position="right" @change="changeNumber"></el-input-number>
+                </el-form-item>
+                <el-form-item label="鎻忚堪" label-width="100px">
+                    <el-input v-model="attribute.description" type="text"></el-input>
+                </el-form-item>
+
+                <el-tabs v-model="activeName" @tab-click="handleClick" stretch="true">
+                    <el-tab-pane label="鍙傜収" name="referTab">
+                        <el-form-item label="鍙傜収绫诲瀷" label-width="100px">
+                            <el-select v-model="attribute.referTypeKey" @change="referTypeSelectChange">
+                                <el-option v-for="item in btmRefer.referTypeList" :key="item.value" :label="item.label"
+                                    :value="item.value">
+                                </el-option>
+                            </el-select>
+                        </el-form-item>
+                        <el-form-item label="鍙傜収鍚嶇О" label-width="100px">
+                            <el-input v-model="attribute.referToName" @focus="openReferConfig" clearable="true"
+                                :disabled="referToFlag" @clear="clearReferTo">
+                                <i slot="suffix" class="el-input__icon el-icon-search"></i>
+                            </el-input>
+                        </el-form-item>
+                    </el-tab-pane>
+                    <el-tab-pane label="鏋氫妇" name="enumTab">
+                        <el-form-item label="鏋氫妇" label-width="100px">
+                            <el-input v-model="attribute.dictValue" @focus="openEnumConfig" clearable="true">
+                                <i slot="suffix" class="el-input__icon el-icon-search"></i>
+                            </el-input>
+                        </el-form-item>
+                        <el-form-item label="鏋氫妇椤�" label-width="100px">
+                            
+                        </el-form-item>
+                    </el-tab-pane>
+                </el-tabs>
+            </el-form>
+            <div slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="submitAttribute">纭畾</el-button>
+                <el-button @click="cancleSubmit">鍙栨秷</el-button>
+            </div>
+            <!-- 閫夋嫨鍙傜収鏃剁殑寮圭獥 -->
+            <el-dialog title="鍙傜収鍒楄〃" :visible.sync="btmRefer.show" append-to-body @close="closeReferDialog" width="80%"
+                style="height: 115vh;">
+                <el-container>
+                    <el-aside>
+                        <basic-container>
+                           <span class="el-dialog__title"> {{ domain.treeOption.title }} </span>
+                            <div style="height:20px;"></div>
+                            <avue-tree id="domain" :data="domain.data" :option="domain.treeOption" @node-click="nodeClick"
+                                class="businessTree" style="height: 418px">
+                                <span class="el-tree-node__label" slot-scope="{ node, data }">
+                                    <span>
+                                        <i class="el-icon-star-on"></i>
+                                        {{ (node || {}).label }}
+                                    </span>
+                                </span>
+                            </avue-tree>
+                        </basic-container>
+                    </el-aside>
+                    <el-main>
+                        <basic-container>
+                            <avue-crud ref="btmTable" :option="btmRefer.option" :data="btmRefer.data" class="btmTable" @row-click="btmReferClick">
+                                <template slot="radio" slot-scope="{row}">
+                                    <el-radio v-model="btmRefer.selectRow" :label="row.$index">&nbsp;
+                                    </el-radio>
+                                </template>
+                            </avue-crud>
+                        </basic-container>
+                    </el-main>
+
+                </el-container>
+                <div slot="footer" class="dialog-footer">
+                    <el-button type="primary" @click="confirmBtm" size="small">纭畾</el-button>
+                    <el-button @click="cancleBtm" size="small">鍙栨秷</el-button>
+                </div>
+            </el-dialog>
+            <!-- 閫夋嫨鏋氫妇鏃剁殑寮圭獥 -->
+            <el-dialog title="鏋氫妇鍒楄〃" :visible.sync="enumRefer.show" append-to-body @close="closeEnumDialog" width="70%" 
+                style="height: 115vh;">
+                <avue-crud ref="eunmTable" :option="enumRefer.option" :data="enumRefer.data" class="enumTable" @row-click="enumReferClick" :page.sync="enumRefer.enumPage">
+                    <template slot="radio" slot-scope="{row}">
+                        <el-radio v-model="enumRefer.selectRow" :label="row.$index">&nbsp;
+                        </el-radio>
+                    </template>
+                </avue-crud>
+                <div slot="footer" class="dialog-footer">
+                    <el-button type="primary" @click="confirmEnum" size="small">纭畾</el-button>
+                    <el-button @click="cancleEnum" size="small">鍙栨秷</el-button>
+                </div>
+            </el-dialog>
+        </el-dialog>
+
+    </el-container>
+</template>
+
+<script>
+import { getDictionary,getParentList } from '@/api/omd/enum'
+import { initTree,btmPage } from '@/api/omd/btmType'
+import { add} from '@/api/omd/OmdAttribute'
+export default {
+    name: 'originalAdd',
+    props: {
+        attribute: {
+            type: Object
+        },
+    },
+    data() {
+        return {
+            showSubmitDialog: false,
+            // 榛樿鐨勯〉绛�
+            activeName: 'referTab',
+            // 灞炴�х被鍨嬩笅鎷夋鏁版嵁
+            typeList: [],
+            // 鍙傜収涓嬫媺妗嗘槸鍚﹀彲鐢�
+            referToFlag: true,
+            // 琛ㄥ崟鏍¢獙瑙勫垯
+            rules: {
+                id: [
+                    { required: true, message: '璇疯緭鍏ュ睘鎬х紪鍙�', trigger: 'blur' },
+                    { pattern: /^[A-Za-z]+$/, message: '灞炴�х紪鍙峰彧鑳戒负鑻辨枃', trigger: 'blur' },
+                    { min: 2, max: 15, message: '闀垮害鍦�2鍒�15涓瓧绗�', trigger: 'blur' }
+                ],
+                name: [
+                    { required: true, message: '璇疯緭鍏ュ睘鎬у悕绉�', trigger: 'blur' }
+                ],
+                typeValue: [
+                    { required: true, message: '璇烽�夋嫨灞炴�х被鍨�', trigger: 'change' }
+                ],
+                maxLength: [
+                    { required: true, message: '闇�瑕佹寚瀹氶暱搴�', trigger: 'blur' }
+                ]
+            },
+            // 鍙傜収椤甸潰琛ㄦ牸閰嶇疆
+            btmRefer: {
+                show: false,
+                btmPage: {
+                    pageSize: 10,
+                    currentPage: 1,
+                    total: 100
+                },
+                option: {
+                    height: 405,
+                    addBtn: false,
+                    refreshBtn: false,
+                    columnBtn: false,
+                    menu: false,
+                    border: true,
+                    reserveSelection: true,
+                    searchMenuSpan: 32,
+                    searchShowBtn: false,
+                    highlightCurrentRow: true,
+                    column: [
+                        {
+                        label: '',
+                        prop: 'radio',
+                        width: 60,
+                        hide: false
+                    },
+                    {
+                        label: '鑻辨枃鍚嶇О',
+                        prop: 'id',
+                        align: 'center',
+                        searchSpan:8,
+                        search: true,
+                    }, {
+                        label: '涓枃鍚嶇О',
+                        prop: 'name',
+                        align: 'center',
+                        searchSpan:8,
+                        search: true,
+                    }]
+                },
+                // 鍙傜収椤甸潰琛ㄦ牸鏁版嵁
+                data: [],
+                selectRow: '',
+                selectItem: {},
+                referTypeList: []
+            },
+            // 鏋氫妇鍙傜収琛ㄦ牸閰嶇疆
+            enumRefer: {
+                show: false,
+                enumPage: {
+                    pageSize: 10,
+                    currentPage: 1,
+                    total: 100
+                },
+                option: {
+                    height: 360,
+                    addBtn: false,
+                    refreshBtn: false,
+                    columnBtn: false,
+                    selection: true,
+                    menu: false,
+                    border: true,
+                    reserveSelection: true,
+                    searchMenuSpan: 32,
+                    searchShowBtn: false,
+                    highlightCurrentRow: true,
+                    column: [{
+                        label: '',
+                        prop: 'radio',
+                        width: 60,
+                        hide: false
+                    },{
+                        label: '鏋氫妇浠e彿',
+                        prop: 'name',
+                        align: 'center',
+                        searchSpan:8,
+                        search: true,
+                    }, {
+                        label: '鏋氫妇鍚嶇О',
+                        prop: 'label',
+                        align: 'center',
+                        searchSpan:8,
+                        search: true,
+                    }]
+                },
+                // 鏋氫妇鍙傜収琛ㄦ牸鏁版嵁
+                data: [],
+                enumDictionary: [],
+                // 閫夊畾琛�
+                selectRow: '',
+                selectItem: {}
+            },
+            domain: {
+                data: [],
+                treeOption: {
+                    defaultExpandAll: true,
+                    title: '棰嗗煙鏈嶅姟鏍�',
+                    props: {
+                        labelText: '',
+                        label: 'name',
+                        value: 'oid',
+                    }
+                }
+            }
+        }
+    },
+    created() {
+        this.initAttributeTypeList();
+        this.initAttributeReferTypeList();
+    },
+    methods: {
+        closeSubmitDialog() {
+            this.resetAttributeForm();
+            this.showSubmitDialog = false;
+        },
+        resetAttributeForm() {
+            this.attribute = {
+                nullable: true,
+                referTypeKey: '',
+            };
+            this.referToFlag = true;
+            this.$refs.form.resetFields();
+        },
+        submitAttribute() { 
+            add(this.attribute).then(res => {
+                this.$message.success("淇濆瓨鎴愬姛");
+                this.showSubmitDialog = false;
+                this.attribute = {};
+                this.$emit('refreshTable');
+            });
+            
+        },
+        cancleSubmit() {
+            this.closeSubmitDialog();
+        },
+        closeEnumDialog() {
+            this.cancleEnum();
+         },
+        closeReferDialog() { 
+            this.cancleBtm();
+        },
+        confirmBtm() { 
+            this.attribute.referToId = this.btmRefer.selectItem.oid;
+            this.attribute.referToName = this.btmRefer.selectItem.name;
+            this.btmRefer.show = false;
+        },
+        cancleBtm() { 
+            this.btmRefer.selectItem = {};
+            this.btmRefer.show = false;
+            this.btmRefer.selectRow = '';
+        },
+        confirmEnum() {
+            this.attribute.usingDict = true;
+            this.attribute.dictCode = this.enumRefer.selectItem.name;
+            this.attribute.dictValue = this.enumRefer.selectItem.label;
+            this.enumRefer.show = false;
+         },
+        cancleEnum() { 
+            this.enumRefer.selectItem = {};
+            this.enumRefer.show = false;
+            this.enumRefer.selectRow = '';
+        },
+        // 鍙傜収鍚嶇О杈撳叆妗嗚幏鍙栫劍鐐规椂鐨勪簨浠�
+        openReferConfig() {
+            if (!this.attribute.referTypeKey) {
+                this.$message.warning('璇峰厛閫夋嫨鍙傜収鐨勭被鍨�');
+                this.referToFlag = true;
+                return;
+            }
+            this.domain.data = [];
+            this.btmRefer.data = [];
+            initTree().then(res => {
+                this.domain.data = res.data.data;
+            })
+            this.btmRefer.show = true;
+
+        },
+        // 鍙傜収绫诲瀷鏍戠殑鐐瑰嚮浜嬩欢
+        nodeClick(data) {
+            // 鍖哄垎涓氬姟绫诲瀷鐨勬煡璇㈠拰閾炬帴绫诲瀷鐨勬煡璇�
+            if(this.attribute.referTypeKey == 'btmType'){
+                btmPage(this.btmRefer.btmPage.currentPage,this.btmRefer.btmPage.pageSize,{domain:data.id}).then(res => {
+                    this.btmRefer.data = res.data.data.records;
+                    this.btmRefer.btmPage.total = res.data.data.total;
+                })
+            }
+            if(this.attribute.referTypeKey == 'linkType'){
+
+            }
+        },
+        // 鏋氫妇绫诲瀷杈撳叆妗嗚幏寰楃劍鐐规椂鐨勪簨浠�
+        openEnumConfig() {
+            getParentList(this.enumRefer.enumPage.currentPage,this.enumRefer.enumPage.pageSize).then(res => {
+                this.enumRefer.enumPage.total = res.data.data.total;
+                this.enumRefer.data = res.data.data.records;
+            })
+            this.enumRefer.show = true;
+        },
+        // 灞炴�х被鍨嬩笅鎷夋閫夋嫨浜嬩欢
+        typeSelectChange(value) {
+            if (value == 'VTString') {
+                this.$set(this.attribute,"maxLength",150)
+            } else if (value == 'VTInteger') {
+                this.$set(this.attribute,"maxLength",50)
+            } else if (value == 'VTBoolean') {
+                this.$set(this.attribute,"maxLength",5)
+            } else if (value == 'VTDouble') {
+                this.$set(this.attribute,"maxLength",26)
+                this.$set(this.attribute,"precision",8)
+            } else if (value == 'VTLong') {
+                this.$set(this.attribute,"maxLength",150)
+            } else if (value == 'VTDate' || value == 'VTTime' || value == 'VTDateTime') {
+                this.$set(this.attribute,"maxLength",6)
+            } else {
+                this.$set(this.attribute,"maxLength",50)
+            }
+            this.attribute.typeCode = 'attributeType';
+            this.attribute.typeKey = value;
+        },
+        referTypeSelectChange(value) {
+            this.attribute.referTypeCode = 'attributeReferType';
+            this.attribute.referTypeKey = value;
+            this.referToFlag = false;
+        },
+        initAttributeTypeList() {
+            getDictionary({ code: 'attributeType' }).then(res => {
+                res.data.data.forEach(element => {
+                    this.typeList.push(
+                        { value: element.itemValue, label: element.itemName }
+                    )
+                });
+            }).catch(() => {
+                this.$message.error('灞炴�х被鍨嬫病鎵惧埌鎴栬�呮湭瀹氫箟')
+            })
+        },
+        initAttributeReferTypeList(){
+            getDictionary({ code: 'attributeReferType' }).then(res => {
+                res.data.data.forEach(element => {
+                    this.btmRefer.referTypeList.push(
+                        { value: element.itemValue, label: element.itemName }
+                    )
+                });
+            }).catch(() => {
+                this.$message.error('鍙傜収绫诲瀷娌℃壘鍒版垨鑰呮湭瀹氫箟')
+            })
+        },
+        btmReferClick(row){
+            this.btmRefer.selectItem = row;
+            this.btmRefer.selectRow = row.$index;
+        },
+        enumReferClick(row){
+            this.enumRefer.selectItem = row;
+            this.enumRefer.selectRow = row.$index;
+        },
+        // 鍙傜収鍚嶇О鐐瑰嚮娓呴櫎鏁版嵁
+        clearReferTo(){
+            this.$delete(this.attribute,'referToId');
+            this.$delete(this.attribute,'referToName');
+            this.btmRefer.selectItem = {};
+            this.btmRefer.selectRow = '';
+        },
+        handleClick(tab){
+            // 鍥犱负鍙兘鍙傜収鍜屾灇涓句簩閫変竴銆傛墍浠ュ湪鍒囨崲鐨勬椂鍊欐妸灞炴�х粰娓呯┖銆�
+            this.$delete(this.attribute,'referTypeCode');
+            this.$delete(this.attribute,'referTypeKey');
+            this.$delete(this.attribute,'referTypeValue');
+            this.$delete(this.attribute,'referToId');
+            this.$delete(this.attribute,'referToName');
+            this.$delete(this.attribute,'dictCode');
+            this.$delete(this.attribute,'dictKey');
+            this.$delete(this.attribute,'dictValue');
+            this.$delete(this.attribute,'usingDict');
+        }
+    }
+}
+</script>
+
+<style>
+.btmTable>.el-card:nth-of-type(2)>.el-card__body>.avue-crud__menu {
+    display: none !important;
+}
+
+.enumTable>.el-card:nth-of-type(2)>.el-card__body>.avue-crud__menu {
+    display: none !important;
+}
+
+.attributeForm>.el-form-item>.el-form-item__content>.el-input>.el-input__inner {
+    width: 200px;
+}
+
+.attributeForm>.el-form-item>.el-form-item__content> .el-select>.el-input>.el-input__inner {
+    width: 200px;
+}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3