From 7d960355fd82a106ae8e15f6f83d4324145e7b24 Mon Sep 17 00:00:00 2001
From: Fixiaobai <fixiaobai@163.com>
Date: 星期五, 10 十一月 2023 09:51:46 +0800
Subject: [PATCH] 	modified:   src/views/common/param-mergeTemplate.vue 	modified:   src/views/technology/routing/routing-form.vue

---
 src/views/common/param-mergeTemplate.vue |  419 +++++++++++++++++++++++++++++++++++------------------------
 1 files changed, 247 insertions(+), 172 deletions(-)

diff --git a/src/views/common/param-mergeTemplate.vue b/src/views/common/param-mergeTemplate.vue
index 511206f..2e7a21f 100644
--- a/src/views/common/param-mergeTemplate.vue
+++ b/src/views/common/param-mergeTemplate.vue
@@ -1,166 +1,241 @@
 <template>
-  <div>
-        <avue-crud
-        ref="crud"
-        class="l-mes"
-        rowKey="oneId"
-        :data="tableData"
-        :option="option"
-        :span-method="spanMethod" 
-        :page="page" 
-        :table-loading="loading" 
-        >
-        <template slot="code" slot-scope="scope">
-            <avue-text-ellipsis use-tooltip :text="scope.row.code" :height="40" :width="100">
-                <small slot="more">...</small>
-            </avue-text-ellipsis>
-        </template>
+    <div>
+        <avue-crud ref="crud" class="l-mes" rowKey="oneId" :data="tableData" :option="option" :span-method="spanMethod"
+            :page="page" :table-loading="loading">
+            <template slot="code" slot-scope="scope">
+                <avue-text-ellipsis use-tooltip :text="scope.row.code" :height="40" :width="100">
+                    <small slot="more">...</small>
+                </avue-text-ellipsis>
+            </template>
             <template slot="paramValue" slot-scope="scope">
-                <el-input @blur="checkType(scope.row)" :readonly="routingTemplateId!=null" :placeholder="'璇疯緭鍏�'+scope.row.paramType" v-model="scope.row.paramValue"/>
+                <el-input @blur="checkType(scope.row)" :readonly="routingTemplateId != null"
+                    :placeholder="'璇疯緭鍏�' + scope.row.paramType" v-model="scope.row.paramValue" />
             </template>
         </avue-crud>
-  </div>
+        <!-- <el-table :data="tableData" ref="commonTree" :span-method="objectSpanMethod" border row-key="id" style="width: 100%">
+            <el-table-column prop="code" label="缂栫爜"></el-table-column>
+            <el-table-column prop="paramItem" label="涓�绾�"></el-table-column>
+            <el-table-column prop="paramItemTwo" label="浜岀骇"></el-table-column>
+            <el-table-column prop="paramItemThree" label="涓夌骇"></el-table-column>
+            <el-table-column prop="paramType" label="绫诲瀷"></el-table-column>
+            <el-table-column prop="paramValue" label="鍊�"></el-table-column>
+            <el-table-column prop="unit" label="鍗曚綅"></el-table-column>
+        </el-table> -->
+    </div>
 </template>
 
 <script>
 export default {
-    props:{
-       option:{
-         type: Object,
-         default: ()=>{
-            return {
-            height: 600,
-            loadingText: "鍔犺浇涓�...",
-            columnBtn: false,
-            index: true,
-            indexLabel: '搴忓彿',
-            menu: false,
-            menuAlign: 'center',
-            editBtn: false,
-            delBtn: false,
-            addBtn: false,
-            border: true,
-            size: 'small',
-            refreshBtn: false,
-            align: 'center',
-            column: [
-            {
-                label: '鍙傛暟缂栧彿',
-                prop: 'code',
-                slot: true
-            },
-            {
-                label: '鍙傛暟椤�',
-                prop: 'paramItem',
-            },
-            {
-                label: '浜岀骇鍙傛暟',
-                prop: 'paramItemTwo',
-            },
-            {
-                label: '涓夌骇鍙傛暟',
-                prop: 'paramItemThree',
-            },
-            {
-                label: '鍙傛暟绫诲瀷',
-                prop: 'paramType',
-                formslot: true,
-                rules: [{
-                required: true,
-                message: "璇烽�夋嫨鍙傛暟绫诲瀷",
-                trigger: "change"
-                }]
-            },
-            {
-                label: '鍊�',
-                prop: 'paramValue',
-                slot: true,
-                formslot: true,
-                labelslot: true
-            }, {
-                label: '鍗曚綅',
-                prop: 'unit',
-                rules: [{
-                required: true,
-                message: "鍗曚綅涓嶈兘涓虹┖",
-                trigger: "blur"
-                }]
-            },]
-         }
-         }
-       },
-       tableData:{
-         type: Array,
-         default: () => {
-            return []
-         },
-         required: true
-       },
-       loading:{
-        type: Boolean,
-        default: false
-       },
-       page:{
-         type: Object,
-         default:()=>{
-            return {
-                total: 10,
-                currentPage: 1,
-                pageSize: 10
-            }
-         }
-       },
-       spanArr:{
-         type: Array,
-         default: ()=>{
-            return [{
-                prop: 'code',
-                span: []
-            }, {
-                prop: 'paramItem',
-                span: []
-            }, {
-                prop: 'paramItemTwo',
-                span: []
-            }]
-         }
-       },
-       routingTemplateId:{
-         type: String,
-         default: ()=>{
-            return ''
-         }
-       }
-    },
-    created(){
-        // this.rowSort()
-        // this.rowCalc()
-    },
-    beforeMount(){
-        this.rowSort()
-        this.rowCalc()
-    },
-    mounted(){
-    },
-    data(){
+    // props: ["tableTreeData"],
+    data() {
         return {
-            checkType(row){
-                if(row.paramType == '鏁板�兼牸寮�'){
+            checkType(row) {
+                if (row.paramType == '鏁板�兼牸寮�') {
                     let val = row.paramValue
                     const reg = /^[0-9]*$/
-                    if(!reg.test(val)){
+                    if (!reg.test(val)) {
                         row.paramValue = ''
                         this.$message.warning("璇疯緭鍏ユ暟鍊兼牸寮忕殑鏁版嵁锛�")
                     }
                 }
+            },
+            mergeObj: {},
+            mergeArr: ['code','paramItem', 'paramItemTwo',],
+            tableData: [],
+            // routingTemplateId: null
+        }
+    },
+    props: {
+        option: {
+            type: Object,
+            default: () => {
+                return {
+                    height: 600,
+                    loadingText: "鍔犺浇涓�...",
+                    columnBtn: false,
+                    index: true,
+                    indexLabel: '搴忓彿',
+                    menu: false,
+                    menuAlign: 'center',
+                    editBtn: false,
+                    delBtn: false,
+                    addBtn: false,
+                    border: true,
+                    size: 'small',
+                    refreshBtn: false,
+                    align: 'center',
+                    column: [
+                        {
+                            label: '鍙傛暟缂栧彿',
+                            prop: 'code',
+                            slot: true
+                        },
+                        {
+                            label: '鍙傛暟椤�',
+                            prop: 'paramItem',
+                        },
+                        {
+                            label: '浜岀骇鍙傛暟',
+                            prop: 'paramItemTwo',
+                        },
+                        {
+                            label: '涓夌骇鍙傛暟',
+                            prop: 'paramItemThree',
+                        },
+                        {
+                            label: '鍙傛暟绫诲瀷',
+                            prop: 'paramType',
+                            formslot: true,
+                            rules: [{
+                                required: true,
+                                message: "璇烽�夋嫨鍙傛暟绫诲瀷",
+                                trigger: "change"
+                            }]
+                        },
+                        {
+                            label: '鍊�',
+                            prop: 'paramValue',
+                            slot: true,
+                            formslot: true,
+                            labelslot: true
+                        }, {
+                            label: '鍗曚綅',
+                            prop: 'unit',
+                            rules: [{
+                                required: true,
+                                message: "鍗曚綅涓嶈兘涓虹┖",
+                                trigger: "blur"
+                            }]
+                        },]
+                }
+            }
+        },
+        tableTreeData: {
+            type: Array,
+            default: () => {
+                return []
+            },
+            required: true
+        },
+        loading: {
+            type: Boolean,
+            default: false
+        },
+        page: {
+            type: Object,
+            default: () => {
+                return {
+                    total: 10,
+                    currentPage: 1,
+                    pageSize: 10
+                }
+            }
+        },
+        spanArr: {
+            type: Array,
+            default: () => {
+                return [{
+                    prop: 'code',
+                    span: []
+                }, {
+                    prop: 'paramItem',
+                    span: []
+                }, {
+                    prop: 'paramItemTwo',
+                    span: []
+                }]
+            }
+        },
+        routingTemplateId: {
+            type: String,
+            default: () => {
+                return ''
             }
         }
     },
-    methods:{
+    watch:{
+        tableTreeData:{
+            handler(old,newval){
+            console.log(this.tableTreeData);    
+            this.tableData=JSON.parse(JSON.stringify(this.tableTreeData))
+            // this.getSpanArr(this.tableData);
+            this.rowSort()
+            this.rowCalc()
+            },
+            deep: true
+        }
+    },
+    created() {
+        // this.$nextTick(() => {
+        //     this.$refs.crud.doLayout()
+        // })
+        this.tableData=JSON.parse(JSON.stringify(this.tableTreeData))
+        this.rowSort()
+        this.rowCalc()
+    },
+    beforeMount() {
+        // this.rowSort()
+        // this.rowCalc()
+        // this.$nextTick(()=>{
+
+
+        // })
+    },
+    beforeDestroy() {
+
+    },
+    mounted() {
+        
+    },
+    activated(){
+        this.doLayout()
+    },
+    methods: {
+        doLayout(){
+            let that=this
+            this.$nextTick(()=>{
+                that.$refs.commonTree.dolayout()
+            })
+        },
+            getSpanArr(data) {
+            this.mergeArr.forEach((key, index1) => {
+                let count = 0; // 鐢ㄦ潵璁板綍闇�瑕佸悎骞惰鐨勮捣濮嬩綅缃�
+                this.mergeObj[key] = []; // 璁板綍姣忎竴鍒楃殑鍚堝苟淇℃伅
+                data.forEach((item, index) => {
+                    // index == 0琛ㄧず鏁版嵁涓虹涓�琛岋紝鐩存帴 push 涓�涓� 1
+                    if(index === 0) {
+                        this.mergeObj[key].push(1); 
+                    } else {
+                        // 鍒ゆ柇褰撳墠琛屾槸鍚︿笌涓婁竴琛屽叾鍊肩浉绛� 濡傛灉鐩哥瓑 鍦� count 璁板綍鐨勪綅缃叾鍊� +1 琛ㄧず褰撳墠琛岄渶瑕佸悎骞� 骞秔ush 涓�涓� 0 浣滀负鍗犱綅
+                        if(item[key] === data[index - 1][key]) { 
+                            this.mergeObj[key][count] += 1;
+                            this.mergeObj[key].push(0);
+                        } else {
+                            // 濡傛灉褰撳墠琛屽拰涓婁竴琛屽叾鍊间笉鐩哥瓑 
+                            count = index; // 璁板綍褰撳墠浣嶇疆 
+                            this.mergeObj[key].push(1); // 閲嶆柊push 涓�涓� 1
+                        }
+                    }
+                })
+            })
+        },
+        // 榛樿鎺ュ彈鍥涗釜鍊� { 褰撳墠琛岀殑鍊�, 褰撳墠鍒楃殑鍊�, 琛岀殑涓嬫爣, 鍒楃殑涓嬫爣 }
+        objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+            // 鍒ゆ柇鍒楃殑灞炴��
+            if(this.mergeArr.indexOf(column.property) !== -1) { 
+                // 鍒ゆ柇鍏跺�兼槸涓嶆槸涓�0 
+                if(this.mergeObj[column.property][rowIndex]) { 
+                    return [this.mergeObj[column.property][rowIndex], 1]
+                } else {
+                    // 濡傛灉涓�0鍒欎负闇�瑕佸悎骞剁殑琛�
+                    return [0, 0]; 
+                }
+            }
+        },
         //鍔ㄦ�佸悎骞舵柟娉�
         rowCalc() {
             this.spanArr.forEach((ele, index) => {
-                let parent
+                let parent = null
                 if (index !== 0) parent = this.spanArr[ele.parent || index - 1].span
                 ele.span = this.rowSpan(ele.prop, parent)
             })
@@ -170,17 +245,17 @@
             this.spanArr.forEach((ele, index) => {
                 let key = ele.prop
                 this.tableData = this.tableData.sort((a, b) => {
-                let flag = true;
-                for (let i = 0; i < index; i++) {
-                    let prop = this.spanArr[i].prop
-                    flag = flag && a[prop] == b[prop]
-                }
-                if (flag) {
-                    if (a[key] < b[key]) { return 1; }
-                    else if (a[key] > b[key]) { return -1; }
+                    let flag = true;
+                    for (let i = 0; i < index; i++) {
+                        let prop = this.spanArr[i].prop
+                        flag = flag && a[prop] == b[prop]
+                    }
+                    if (flag) {
+                        if (a[key] < b[key]) { return 1; }
+                        else if (a[key] > b[key]) { return -1; }
+                        return 0;
+                    }
                     return 0;
-                }
-                return 0;
                 })
             })
         },
@@ -189,21 +264,21 @@
             let position = 0;
             this.tableData.forEach((item, index) => {
                 if (index === 0) {
-                list.push(1)
-                let position = 0;
-                } else {
-                if (this.tableData[index][key] === this.tableData[index - 1][key]) {
-                    if (parent && parent[index] !== 0) {
                     list.push(1)
-                    position = index
+                    let position = 0;
+                } else {
+                    if (this.tableData[index][key] === this.tableData[index - 1][key]) {
+                        if (parent && parent[index] !== 0) {
+                            list.push(1)
+                            position = index
+                        } else {
+                            list[position] += 1;
+                            list.push(0)
+                        }
                     } else {
-                    list[position] += 1;
-                    list.push(0)
+                        list.push(1)
+                        position = index
                     }
-                } else {
-                    list.push(1)
-                    position = index
-                }
                 }
             })
             return list
@@ -212,12 +287,12 @@
             for (let i = 0; i < this.spanArr.length; i++) {
                 const ele = this.spanArr[i]
                 if (column.property == ele.prop) {
-                const _row = ele.span[rowIndex];
-                const _col = _row > 0 ? 1 : 0;
-                return {
-                    rowspan: _row,
-                    colspan: _col
-                }
+                    const _row = ele.span[rowIndex];
+                    const _col = _row > 0 ? 1 : 0;
+                    return {
+                        rowspan: _row,
+                        colspan: _col
+                    }
                 }
             }
         }
@@ -226,7 +301,7 @@
 </script>
 
 <style>
- .avue-crud__menu{
+.avue-crud__menu {
     display: none;
- }
+}
 </style>
\ No newline at end of file

--
Gitblit v1.9.3