From 1ff08f6631a855c22f5355334c8c4540397f013e Mon Sep 17 00:00:00 2001
From: zhangxp <zhangxp@chicecm.com>
Date: 星期二, 13 六月 2023 18:13:21 +0800
Subject: [PATCH] 模板阶段

---
 Source/UBCS-WEB/src/components/template/FlowPath.vue      |   58 +--
 Source/UBCS-WEB/src/components/template/Stage.vue         |  259 ++++++++++++++++++
 Source/UBCS-WEB/src/api/template/flowpath.js              |   80 ++++-
 Source/UBCS-WEB/src/views/flow/flowPath.vue               |   67 ++++
 Source/UBCS-WEB/vue.config.js                             |    8 
 Source/UBCS-WEB/src/components/template/TableTransfer.vue |  322 +++++++++++++++++++++++
 6 files changed, 725 insertions(+), 69 deletions(-)

diff --git a/Source/UBCS-WEB/src/api/template/flowpath.js b/Source/UBCS-WEB/src/api/template/flowpath.js
index dc276c5..d1fef57 100644
--- a/Source/UBCS-WEB/src/api/template/flowpath.js
+++ b/Source/UBCS-WEB/src/api/template/flowpath.js
@@ -2,25 +2,65 @@
 
 // 妯℃澘娴佺▼鍒楄〃
 export const getFlowpathList = (params) => {
-    return request({
-      url: '/api/ubcs-flow/processTS/tlist',
-      method: 'get',
-      params: params
-    })
-  }
-  // 妯℃澘娴佺▼鑾峰彇閫夐」
+  return request({
+    url: '/api/ubcs-flow/processTS/tlist',
+    method: 'get',
+    params: params
+  })
+}
+// 妯℃澘娴佺▼鑾峰彇閫夐」
 export const getStartList = () => {
-    return request({
-      url: '/api/ubcs-flow/work/start-list',
-      method: 'get',
-      params: {mode:'1',current:1,size:100}
-    })
-  }
-    // 妯℃澘娴佺▼鏂板
+  return request({
+    url: '/api/ubcs-flow/work/start-list',
+    method: 'get',
+    params: { mode: '1', current: 1, size: 100 }
+  })
+}
+// 妯℃澘娴佺▼鏂板
 export const flowpathSave = (params) => {
-    return request({
-      url: '/api/ubcs-flow/processTS/tsou',
-      method: 'post',
-      data: params
-    })
-  }
+  return request({
+    url: '/api/ubcs-flow/processTS/tsou',
+    method: 'post',
+    data: params
+  })
+}
+// 妯℃澘娴佺▼鍒犻櫎
+export const flowpathDelete = (params) => {
+  return request({
+    url: '/api/ubcs-flow/processTS/dt',
+    method: 'delete',
+    params: params
+  })
+}
+// 妯℃澘闃舵鍒楄〃
+export const stagelist = (params) => {
+  return request({
+    url: '/api/ubcs-flow/processTS/sslist',
+    method: 'get',
+    params: params
+  })
+}
+// 灞炴�у垪琛�
+export const attributeList = (params) => {
+  return request({
+    url: '/api/ubcs-code/codeTempPhaseController/gridUnUsedAttribute',
+    method: 'get',
+    params: params
+  })
+}
+// 灞炴�у垪琛ㄥ乏渚�
+export const attributeListRight = (params) => {
+  return request({
+    url: '/api/ubcs-flow/processTS/ssslist',
+    method: 'get',
+    params: params
+  })
+}
+// 妯℃澘闃舵鍒楄〃
+export const attributeSave = (params) => {
+  return request({
+    url: '/api/ubcs-flow/processTS/sasou',
+    method: 'post',
+    data: params
+  })
+}
diff --git a/Source/UBCS-WEB/src/components/template/FlowPath.vue b/Source/UBCS-WEB/src/components/template/FlowPath.vue
index 28885d6..290afc3 100644
--- a/Source/UBCS-WEB/src/components/template/FlowPath.vue
+++ b/Source/UBCS-WEB/src/components/template/FlowPath.vue
@@ -3,22 +3,13 @@
         <avue-crud ref="crud" :table-loading="loading" :data="data" v-model="form" :option="option" :page.sync="page"
             :search.sync="search" @on-load="getDataList" @row-save="handleSave" @row-del="handleDelete"
             @row-update="handleEdit" @refresh-change="handleRefresh" @size-change="handleSizePage"
-            @current-change="handleCurrentPage" @selection-change="selectionChange" @row-click="handleRowClick">
-            <template slot="menuLeft">
-                <el-button icon="el-icon-delete" size="small" type="danger" @click="handleDeleteByIds">鍒� 闄�
-                </el-button>
-            </template>
-            <template slot="search" slot-scope="{row,size}">
-                <el-input :placeholder="`璇疯緭鍏�${selectValue === 'id' ? '绯荤粺缂栧彿' : '绯荤粺鍚嶇О'}骞舵寜鍥炶溅鏌ヨ`" :size="size"
-                    style="width:300px;margin-left: 10px;" v-model="search[selectValue]" clearable
-                    @keyup.enter.native="handleEnter" @clear="handleClear"></el-input>
-            </template>
+            @current-change="handleCurrentPage">
         </avue-crud>
     </el-dialog>
 </template>
 
 <script>
-import { getFlowpathList, getStartList, flowpathSave } from '@/api/template/flowpath.js'
+import { getFlowpathList, getStartList, flowpathSave, flowpathDelete } from '@/api/template/flowpath.js'
 export default {
     name: 'FlowPath',
     props: {
@@ -69,7 +60,6 @@
                     prop: 'id,name,description,version',
                     order: 'descending'
                 },
-                selection: true,
                 column: [
                     {
                         label: '妯℃澘key',
@@ -89,7 +79,7 @@
                         nodeClick: (data) => {
                             console.log(data)
                             // 鑺傜偣鐐瑰嚮鐨勬椂鍊欎細鑾峰彇鍒版暟鎹�
-                            this.form.modeName = data.name
+                            this.form.modelName = data.name
                         }
                     }, {
                         label: '妯℃澘鍚嶇О',
@@ -136,20 +126,20 @@
             console.log(this.search)
             const { pageSize, currentPage } = this.page
             let param = { size: pageSize, current: currentPage }
-            const response = await getFlowpathList({ ...param, ...this.search })
+            const response = await getFlowpathList({ ...param, ...{ templateId: this.code } })
             if (response.status === 200) {
                 console.log(response)
                 this.loading = false
                 const data = response.data.data
                 this.data = data.records
                 this.page.total = data.total
-            }else this.loading = false
+            } else this.loading = false
         },
         // 鏂板
         async handleSave(row, done, loading) {
             console.log(row)
-            const response = await flowpathSave({...row,...{templateId:this.code}})
-            if(response.status ===200){
+            const response = await flowpathSave({ ...row, ...{ templateId: this.code } })
+            if (response.status === 200) {
                 loading()
                 console.log(response)
                 this.$message({
@@ -164,9 +154,9 @@
         // 缂栬緫
         async handleEdit(row, index, done, loading) {
             console.log(row)
-            const {modelName,modelKey,buttonTypeKey,id} = row
-            let param = {modelName,modelKey,buttonTypeKey,id}
-            const response = await flowpathSave({...param,...{templateId:this.code}})
+            const { modelName, modelKey, buttonTypeKey, id } = row
+            let param = { modelName, modelKey, buttonTypeKey, id }
+            const response = await flowpathSave({ ...param, ...{ templateId: this.code } })
             if (response.status === 200) {
                 loading()
                 this.$message({
@@ -180,20 +170,27 @@
         },
         // 鍒犻櫎鍗曟潯
         handleDelete(row) {
-            const { oid } = row
-        },
-        // 澶氭潯鏁版嵁鍒犻櫎
-        handleDeleteByIds() {
-
+            console.log(row)
+            const { id } = row
+            this.deleteSysInfo({ id: id })
         },
         // 鍒犻櫎鎺ュ彛
         deleteSysInfo(param) {
-            this.$confirm('鏄惁纭畾鍒犻櫎閫夋嫨鐨勯泦鎴愮郴缁�?', '鎻愮ず', {
+            this.$confirm('鏄惁纭畾鍒犻櫎閫夋嫨鐨勬ā鏉挎祦绋�?', '鎻愮ず', {
                 confirmButtonText: '纭畾',
                 cancelButtonText: '鍙栨秷',
                 type: 'warning'
             }).then(async () => {
                 // 鎺ュ彛
+                const response = await flowpathDelete(param)
+                if (response.status === 200) {
+                    console.log(response)
+                    this.$message({
+                        type: 'success',
+                        message: '鍒犻櫎鎴愬姛!'
+                    });
+                    this.getDataList()
+                }
             })
         },
         // enter鎼滅储
@@ -214,15 +211,6 @@
         },
         handleCurrentPage(event) {
             this.page.currentPage = event
-        },
-        // 鐐瑰嚮閫夋嫨
-        handleRowClick(row) {
-            this.$refs.crud.toggleRowSelection(row, true)
-        },
-        // 澶氶��
-        selectionChange(list) {
-            console.log(list)
-
         },
     }
 }
diff --git a/Source/UBCS-WEB/src/components/template/Stage.vue b/Source/UBCS-WEB/src/components/template/Stage.vue
new file mode 100644
index 0000000..0d92984
--- /dev/null
+++ b/Source/UBCS-WEB/src/components/template/Stage.vue
@@ -0,0 +1,259 @@
+<template>
+    <el-dialog title="妯℃澘闃舵" width="90%" append-to-body="true" :visible.sync="dialogVisible">
+        <avue-crud ref="crud" :table-loading="loading" :data="data" :option="option" :page.sync="page"
+            @on-load="getDataList" @size-change="handleSizePage" @current-change="handleCurrentPage"
+            @row-click="handleRowClick">
+            <template slot-scope="{type,size,row,index}" slot="menu">
+                <el-button icon="el-icon-check" :size="size" :type="type"
+                    @click="handleMaintenance(row, index)">缁存姢</el-button>
+            </template>
+        </avue-crud>
+        <el-dialog title="妯℃澘闃舵" width="50%" append-to-body="true" :visible.sync="dialogNode">
+            <avue-crud ref="crud" :table-loading="loading" :data="stageData" :option="stageOption" @on-load="getStagelist"
+                @row-click="handleRowStageClick">
+                <template slot-scope="{type,size,row,index}" slot="menu">
+                    <el-button icon="el-icon-check" :size="size" :type="type"
+                        @click="handleMaintenanceTransfer(row, index)">缁存姢</el-button>
+                </template>
+            </avue-crud>
+        </el-dialog>
+        <table-transfer :visible.sync="dialogTransfer" v-model="listVal" :dataList="tableData" :columns="columns"
+            keyName="oid" @save="handleSave"></table-transfer>
+    </el-dialog>
+</template>
+
+<script>
+import { getFlowpathList, stagelist, attributeListRight, attributeList, attributeSave } from '@/api/template/flowpath.js'
+import TableTransfer from '@/components/template/TableTransfer'
+export default {
+    name: 'Stage',
+    components: {
+        TableTransfer
+    },
+    props: {
+        // 鏄惁鎵撳紑
+        visible: {
+            typeof: Boolean,
+            default: false
+        },
+        code: {
+            typeof: String,
+            required: true,
+            default: ""
+        }
+    },
+    watch: {
+        visible(n) {
+            this.dialogVisible = n;
+        },
+        dialogVisible(n) {
+            this.$emit('update:visible', n)
+        },
+    },
+    computed: {
+        tableData() {
+            return this.setTable()
+        },
+        listVal() {
+            let data = this.setTable()
+            let newdata = data.map(item => {
+                return item.checked ? item.oid : undefined
+            })
+            console.log(newdata.filter(item => item))
+            return newdata.filter(item => item)
+        }
+    },
+    data() {
+        const options = {
+            height: "auto",
+            border: true,
+            addBtn: false,
+            align: 'center',
+            menuAlign: 'center',
+            index: true,
+            searchMenuSpan: 8,
+            searchBtn: false,
+            emptyBtn: false,
+            columnBtn: false,
+            delBtn: false,
+            refreshBtn: false,
+            header: false,
+            editBtn: false,
+        }
+        return {
+            list: [],
+            listRight: [],
+            dialogVisible: this.visible,
+            dialogTransfer: false,
+            dialogNode: false,
+            visibleTable: false,
+            loading: false,
+            page: {
+                currentPage: 1,
+                pageSize: 10,
+                total: 0
+            },
+            modelKey: '',
+            data: [],
+            stageData: [],
+            saveParam: {},
+            columns: [
+                {
+                    key: "oid",
+                    label: "oid",
+                    visible: false,
+                },
+                {
+                    key: "id",
+                    label: "灞炴�х紪鍙�",
+                    visible: true,
+                },
+                {
+                    key: "name",
+                    label: "灞炴�у悕绉�",
+                    visible: true,
+                },
+                {
+                    key: "attributeGroup",
+                    label: "灞炴�у垎缁�",
+                    visible: true,
+                },
+            ],
+            option: {
+                ...options,
+                column: [
+                    { label: '妯℃澘缂栧彿', prop: 'modelKey' },
+                    { label: '妯℃澘鍚嶇О', prop: 'modelName' },
+                    { label: '鎻忚堪', prop: 'buttonTypeValue' },
+                ]
+            },
+            stageOption: {
+                ...options,
+                column: [
+                    { label: '闃舵缂栧彿', prop: 'taskId' },
+                    { label: '闃舵鍚嶇О', prop: 'taskName' },
+                ]
+            },
+        }
+    },
+    mounted() {
+        this.getAttributeList()
+    },
+    methods: {
+        setTable() {
+            return this.list.map(item => {
+                if (this.listRight.length !== 0) {
+                    this.listRight.forEach(element => {
+                        if (item.id === element.attrId) item.checked = true
+                    });
+                }
+                return item
+            })
+        },
+        // 鑾峰彇鍒楄〃
+        async getDataList() {
+            this.loading = false
+            const { pageSize, currentPage } = this.page
+            let param = { size: pageSize, current: currentPage }
+            const response = await getFlowpathList({ ...param, ...{ templateId: this.code } })
+            if (response.status === 200) {
+                console.log(response)
+                this.loading = false
+                const data = response.data.data
+                this.data = data.records
+                this.page.total = data.total
+            } else this.loading = false
+        },
+        // 鑾峰彇闃舵鍒楄〃
+        async getStagelist() {
+            this.loading = false
+            console.log(this.modelKey)
+            const response = await stagelist({ modelKey: this.modelKey })
+            if (response.status === 200) {
+                this.loading = false
+                console.log(response.data)
+                this.stageData = response.data.data
+            } else this.loading = false
+        },
+        // 鑾峰彇鍏ㄩ儴灞炴��
+        async getAttributeList() {
+            const response = await attributeList({ 'conditionMap[classifyTemplateOid]': this.code })
+            if (response.status === 200) {
+                const data = response.data.data
+                this.list = data.records.map(item => {
+                    const { oid, id, name, attributeGroup } = item
+                    return { oid, id, name, attributeGroup, ...{ checked: false } }
+                })
+            }
+        },
+        // 鑾峰彇宸蹭繚瀛樺睘鎬�
+        async getAttributeListRight() {
+            const response = await attributeListRight({ templateId: this.code, modelKey: this.modelKey, taskId: this.saveParam.taskId })
+            if (response.status === 200) {
+                let data = response.data.data
+                data = data.map(item => {
+                    const { attrId, attrName, attrGroup } = item
+                    return { attrId, attrName, attrGroup }
+                })
+                this.listRight = data
+            }
+        },
+        // 缁存姢
+        handleMaintenance(row) {
+            console.log(row)
+            this.dialogNode = true
+            this.saveParam.modelKey = row.modelKey
+        },
+        handleMaintenanceTransfer(row) {
+            console.log(row)
+            this.dialogTransfer = true
+            this.saveParam.taskId = row.taskId
+            this.saveParam.taskName = row.taskName
+            this.getAttributeListRight()
+        },
+        handleSizePage(event) {
+            this.page.pageSize = event
+        },
+        handleCurrentPage(event) {
+            this.page.currentPage = event
+        },
+        handleRowClick(row) {
+            console.log(row)
+            this.modelKey = row.modelKey
+            this.saveParam.modelKey = row.modelKey
+            this.dialogNode = true
+        },
+        handleRowStageClick(row) {
+            this.dialogTransfer = true
+            this.saveParam.taskId = row.taskId
+            this.saveParam.taskName = row.taskName
+            this.getAttributeListRight()
+        },
+        async handleSave(event) {
+            console.log(event)
+            const data = event.map(item => {
+                const { id, name, attributeGroup } = item
+                return { attrId: id, attrName: name, attrGroup: attributeGroup }
+            })
+            let param = {
+                templateId: this.code,
+                processStageAttr: data,
+                ...this.saveParam
+            }
+            console.log(this.saveParam)
+            console.log(data)
+            const response = await attributeSave(param)
+            if (response.status === 200) {
+                // loading()
+                console.log(response)
+                this.$message({
+                    type: 'success',
+                    message: '鏂板鏁版嵁鎴愬姛锛�'
+                })
+                // done()
+                // this.getDataList()
+            }
+        }
+    }
+}
+</script>
\ No newline at end of file
diff --git a/Source/UBCS-WEB/src/components/template/TableTransfer.vue b/Source/UBCS-WEB/src/components/template/TableTransfer.vue
new file mode 100644
index 0000000..488fb95
--- /dev/null
+++ b/Source/UBCS-WEB/src/components/template/TableTransfer.vue
@@ -0,0 +1,322 @@
+<template>
+    <el-dialog :title="title" width="70%" append-to-body="true" :visible.sync="dialogVisible">
+        <el-row :gutter="20">
+            <el-col :span="11">
+                <el-card class="box-card">
+                    <div slot="header" class="clearfix">
+                        <span>鍒濆鏁版嵁</span>
+                        <el-input class="input" v-if="showSearch" v-model="searchLeft" placeholder="璇疯緭鍏ユ悳绱㈠唴瀹�"
+                            @keyup.enter.native="handleEnter"></el-input>
+                    </div>
+                    <el-table ref="transferLeftTable" :data="leftData" height="500" highlight-current-row
+                        tooltip-effect="dark" @selection-change="handleLeftSelectionChange" @row-click="handleLeftRowClick">
+                        <el-table-column type="selection" width="50" align="center" fixed="left" :selectable="selectable" />
+                        <div v-for="(item, index) in columns" :key="index">
+                            <el-table-column v-if="item.visible" :label="item.label" align="center" :prop="item.key" />
+                        </div>
+                    </el-table>
+                </el-card>
+            </el-col>
+            <el-col :span="2" class="btns" :style="{ height: '500px' }">
+                <el-button class="btn" :disabled="leftMultiple" type="primary" icon="el-icon-arrow-right"
+                    @click="moveToRight" circle></el-button>
+                <el-button class="btn" :disabled="rightMultiple" type="primary" @click="moveToLeft"
+                    icon="el-icon-arrow-left" circle></el-button>
+            </el-col>
+            <el-col :span="11">
+                <el-card class="box-card">
+                    <div slot="header" class="clearfix">
+                        <span>鏀瑰彉鏁版嵁</span>
+                        <el-input class="input" v-if="showSearch" v-model="searchRight" placeholder="璇疯緭鍏ユ悳绱㈠唴瀹�"></el-input>
+                    </div>
+                    <el-table ref="transferRightTable" :data="rightData" height="500" highlight-current-row
+                        tooltip-effect="dark" @selection-change="handleRightSelectionChange"
+                        @row-click="handleRightRowClick">
+                        <el-table-column type="selection" width="50" align="center" fixed="left" />
+                        <div v-for="(item, index) in columns" :key="index">
+                            <el-table-column v-if="item.visible" :label="item.label" align="center" :prop="item.key" />
+                        </div>
+                    </el-table>
+                </el-card>
+            </el-col>
+        </el-row>
+        <div slot="footer" class="dialog-footer">
+            <el-button @click="dialogVisible = false">鍙� 娑�</el-button>
+            <el-button type="primary" @click="tableTransferSave">淇濆瓨</el-button>
+        </div>
+    </el-dialog>
+</template>
+
+<script>
+export default {
+    name: 'TableTransfer',
+    model: {
+        prop: "value",
+        event: "change",
+    },
+    props: {
+        // 鏄惁鎵撳紑
+        visible: {
+            typeof: Boolean,
+            default: false
+        },
+        title: {
+            typeof: String,
+            default: '妯℃澘闃舵缁存姢'
+        },
+        //缁戝畾鏁版嵁
+        value: {
+            type: Array,
+            default: () => {
+                return [];
+            },
+        },
+        //涓婚敭key鍊�
+        keyName: {
+            type: String,
+            default: "id",
+        },
+        columns: {
+            type: Array,
+            default: () => {
+                return [];
+            },
+        },
+        dataList: {
+            type: Array,
+            default: () => {
+                return [];
+            },
+        },
+        /**
+         * 鏄惁鏄剧ず鎼滅储妗�
+         */
+        showSearch: {
+            type: Boolean,
+            default: true,
+        },
+    },
+
+    watch: {
+        visible(n) {
+            this.dialogVisible = n;
+        },
+        dialogVisible(n) {
+            this.$emit('update:visible', n)
+        },
+        searchLeft: {
+            handler: function () {
+                this.handleQueryLeft();
+            },
+            deep: true,
+        },
+        searchRight: {
+            handler: function () {
+                this.handleQueryRight();
+            },
+            deep: true,
+        },
+        dataList: {
+            handler(data) {
+                console.log(data)
+
+            },
+            deep: true,
+        }
+    },
+    data() {
+        return {
+            dialogVisible: this.visible,
+            searchLeft: "",
+            leftIds: [],
+            leftMultiple: true,
+            leftDataList: [],
+            leftData: [],
+            searchRight: "",
+            rightIds: [],
+            rightMultiple: true,
+            rightDataList: [],
+            rightData: [],
+        }
+    },
+    mounted() {
+        this.init();
+    },
+    methods: {
+        selectable(row, index) {
+            console.log(row)
+            return row.checked === false //涓簍rue鐨勬椂鍊欏彲浠ラ�夛紝涓篺alse鍒欎笉鍙�夋嫨
+        },
+        init() {
+            this.rightIds = this.value;
+            console.log(this.rightIds)
+            for (let i = 0; i < this.dataList.length; i++) {
+                if (this.value.some((item) => item == this.dataList[i][this.keyName])) {
+                    this.rightDataList.push(this.dataList[i]);
+                } else {
+                    this.leftDataList.push(this.dataList[i]);
+                }
+            }
+            this.leftData = [...this.leftDataList];
+            this.rightData = [...this.rightDataList];
+        },
+        // left澶氶�夋閫変腑鏁版嵁
+        handleLeftSelectionChange(selection) {
+            this.leftIds = selection.map((item) => item[this.keyName]);
+            this.leftMultiple = !selection.length;
+        },
+        // right澶氶�夋閫変腑鏁版嵁
+        handleRightSelectionChange(selection) {
+            this.rightIds = selection.map((item) => item[this.keyName]);
+            this.rightMultiple = !selection.length;
+        },
+        // 鎸夐挳鐐瑰嚮
+        moveToRight() {
+            for (let i = 0; i < this.leftDataList.length; i++) {
+                let a = this.leftIds.findIndex(
+                    (item) => item == this.leftDataList[i][this.keyName]
+                );
+                console.log(a)
+                if (a !== -1) {
+                    this.rightDataList.push(this.leftDataList[i]);
+                    // this.leftDataList[i].checked = true
+                    // this.$refs.transferLeftTable.toggleRowSelection(this.leftDataList[i],true)
+                    this.$delete(this.leftDataList, i);
+                    i--;
+                }
+            }
+            // let obj = {}
+            // let filterright = this.rightDataList.reduce((cur, next) => {
+            //     obj[next.id] ? "" : obj[next.id] = true && cur.push(next);
+            //     return cur;
+            // }, [])
+            // console.log('filterright', filterright)
+            this.leftData = this.setData(this.leftDataList, this.searchLeft);
+            this.rightData = this.setData(this.rightDataList, this.searchRight);
+            this.$emit(
+                "change",
+                this.rightDataList.map((item) => item[this.keyName])
+            );
+        },
+        // 鎸夐挳鐐瑰嚮
+        moveToLeft() {
+            for (let i = 0; i < this.rightDataList.length; i++) {
+                let a = this.rightIds.findIndex(
+                    (item) => item == this.rightDataList[i][this.keyName]
+                );
+                if (a !== -1) {
+                    this.leftDataList.push(this.rightDataList[i]);
+                    this.$delete(this.rightDataList, i);
+                    i--;
+                }
+            }
+            // let obj = {}
+            // let filterleft = this.leftDataList.reduce((cur, next) => {
+            //     obj[next.id] ? "" : obj[next.id] = true && cur.push(next);
+            //     return cur;
+            // }, [])
+            // console.log('filterright', filterleft)
+            this.leftData = this.setData(this.leftDataList, this.searchLeft);
+            this.rightData = this.setData(this.rightDataList, this.searchRight);
+            this.$emit(
+                "change",
+                this.rightDataList.map((item) => item[this.keyName])
+            );
+        },
+
+        handleQueryLeft() {
+            this.leftData = this.setData(this.leftDataList, this.searchLeft);
+        },
+        handleQueryRight() {
+            this.rightData = this.setData(this.rightDataList, this.searchRight);
+        },
+        // 鍗曢��
+        handleLeftRowClick(row) {
+            if (this.leftData) {
+                this.$refs.transferLeftTable.toggleRowSelection(row)
+            } else {
+                this.$refs.transferLeftTable.clearSelection()
+            }
+        },
+        // 鍗曢��
+        handleRightRowClick(row) {
+            if (this.rightData) {
+                this.$refs.transferRightTable.toggleRowSelection(row)
+            } else {
+                this.$refs.transferRightTable.clearSelection()
+            }
+        },
+        setData(dataList, search) {
+            if (search != null || search != "") {
+                let list = [];
+                for (let i = 0; i < dataList.length; i++) {
+                    if (
+                        this.columns.some((item) =>
+                            dataList[i][item.key].toLowerCase().includes(search.toLowerCase())
+                        )
+                    ) {
+                        list.push(dataList[i]);
+                    }
+                }
+                return list;
+            } else {
+                return dataList;
+            }
+        },
+        change(val) {
+            console.log(val);
+            console.log(this.value)
+        },
+        done() {
+            this.dialogVisible = false
+        },
+        tableTransferSave() {
+            this.$emit('save', this.rightData)
+            this.leftData = [...this.rightData, ...this.leftData]
+            this.leftDataList = [...this.rightDataList, ...this.leftDataList]
+            this.rightDataList = []
+            this.rightData = []
+
+        }
+    },
+}
+</script>
+
+<style lang="scss" scoped>
+::v-deep(.el-col>.el-card >.el-card__header) {
+    background: #fff
+}
+
+.box-card {
+    background: #fff;
+}
+
+.clearfix {
+    display: -webkit-box;
+    display: flex;
+    display: -ms-flexbox;
+    -webkit-box-pack: justify;
+    -ms-flex-pack: justify;
+    justify-content: space-between;
+    -webkit-box-align: center;
+    -ms-flex-align: center;
+    align-items: center;
+}
+
+.input {
+    float: right;
+    padding: 3px 0;
+    max-width: 400px;
+}
+
+.btns {
+    display: flex;
+    align-items: center;
+    flex-direction: column;
+    justify-content: center;
+
+    .btn {
+        margin: 20px 0;
+    }
+}
+</style>
diff --git a/Source/UBCS-WEB/src/views/flow/flowPath.vue b/Source/UBCS-WEB/src/views/flow/flowPath.vue
index ef76289..2040668 100644
--- a/Source/UBCS-WEB/src/views/flow/flowPath.vue
+++ b/Source/UBCS-WEB/src/views/flow/flowPath.vue
@@ -2,31 +2,82 @@
     <div>
         <el-button @click="outerVisible = true">娴佺▼娴嬭瘯</el-button>
         <el-button @click="visibleFlow = true">妯℃澘娴佺▼</el-button>
+        <el-button @click="visibleStage = true">妯℃澘闃舵</el-button>
+        <el-button @click="visibleTable = true">table绌挎妗�</el-button>
         <flow-business :visible.sync="outerVisible"></flow-business>
-        <flow-path :visible.sync="visibleFlow" code="A12826E4-2B66-6D56-DE30-92BB1D7F607F"></flow-path>
+        <flow-path :visible.sync="visibleFlow" code="8b5e2017-990f-454a-9c39-4c4eeeb57553"></flow-path>
+        <stage :visible.sync="visibleStage" code="8b5e2017-990f-454a-9c39-4c4eeeb57553"></stage>
+        <table-transfer :visible.sync="visibleTable" v-model="value" :dataList="list" :columns="columns" keyName="id"
+            @change="change"></table-transfer>
     </div>
 </template>
 
 <script>
 import FlowBusiness from '@/components/template/Business'
 import FlowPath from '@/components/template/FlowPath'
+import Stage from '@/components/template/Stage'
+import TableTransfer from '@/components/template/TableTransfer'
 export default {
-    components:{
+    components: {
         FlowBusiness,
-        FlowPath
+        FlowPath,
+        Stage,
+        TableTransfer
     },
     data() {
+        const getTables = () => {
+            let data = []
+            for (let i = 0; i < 5; i++) {
+                let item = {
+                    id: `${i+1}`,
+                    name: 'name',
+                    address: '闆嗗洟鐮�',
+                    data:'',
+                    checked:false,
+                }
+                data.push(item)
+            }
+            return data
+        }
         return {
+            list: getTables(),
+            value: [],
             outerVisible: false,
             visibleFlow: false,
-           
+            visibleStage: false,
+            visibleTable: false,
+
+            columns: [
+                {
+                    key: "id",
+                    label: "id",
+                    visible: false,
+                },
+                {
+                    key: "name",
+                    label: "灞炴�х紪鍙�",
+                    visible: true,
+                },
+                {
+                    key: "address",
+                    label: "灞炴�у悕绉�",
+                    visible: true,
+                },
+                {
+                    key: "address",
+                    label: "灞炴�у垎缁�",
+                    visible: true,
+                },
+            ],
+
         }
     },
     methods: {
-        
+        change(val) {
+            console.log(val);
+            console.log(this.value)
+        },
     }
 }
 </script>
-<style lang="scss" scoped>
-
-</style>
\ No newline at end of file
+<style lang="scss" scoped></style>
\ No newline at end of file
diff --git a/Source/UBCS-WEB/vue.config.js b/Source/UBCS-WEB/vue.config.js
index 1e8bbca..7589fbf 100644
--- a/Source/UBCS-WEB/vue.config.js
+++ b/Source/UBCS-WEB/vue.config.js
@@ -26,13 +26,9 @@
     proxy: {
       '/api': {
         //鏈湴鏈嶅姟鎺ュ彛鍦板潃
-        target: 'http://localhost:37000',
-        //  target: 'http://localhost:37000',
-        // target: 'http://192.168.1.51:37000',
-        // target: 'http://192.168.3.7:37000',
-        // target: 'http://dev.vci-tech.com:37000',
-        // target: 'http://192.168.1.51:37000/',
         // target: 'http://localhost:37000',
+        // target: 'http://192.168.1.51:37000',
+        target: 'http://192.168.1.104:37000',
         // target: 'http://192.168.1.63:37000',
         // target: 'http://192.168.3.7:37000',
         // target: 'http://dev.vci-tech.com:37000',

--
Gitblit v1.9.3