From 3e25f86345d869ed6c1485ab2c1f5fbc27b26dc5 Mon Sep 17 00:00:00 2001 From: gaoshp <291585735@qq.com> Date: 星期五, 04 七月 2025 19:12:19 +0800 Subject: [PATCH] 添加程序 --- src/api/flow/todolist.js | 31 +++++ src/views/flow/components/TodolistRightTop.vue | 86 ++++++++++++++ src/views/flow/components/TodolistLeft.vue | 162 +++++++++++++++++++++++++++ src/views/flow/todolist.vue | 57 +++++++- 4 files changed, 325 insertions(+), 11 deletions(-) diff --git a/src/api/flow/todolist.js b/src/api/flow/todolist.js index 9b8a7d3..bc743b3 100644 --- a/src/api/flow/todolist.js +++ b/src/api/flow/todolist.js @@ -1,7 +1,7 @@ /* * @Date: 2025-06-12 22:38:05 * @LastEditors: gaoshp - * @LastEditTime: 2025-06-17 21:22:59 + * @LastEditTime: 2025-07-01 23:38:48 * @FilePath: /mdmweb/src/api/flow/todolist.js */ import request from '@/axios'; @@ -29,4 +29,33 @@ method: 'get', params, }); +} +export const getAppList = (current, size, params) => { + return request({ + url: '/blade-mdm/program/ncfile/programpickpage', + method: 'get', + params: { + ...params, + current, + size, + }, + }) +} +export const getSelectedAppList = processInstanceId => { + return request({ + url: '/blade-mdm/program/ncfile/list-by-process', + method: 'get', + params: { + processInstanceId + }, + }) +} +export const getContent = id => { + return request({ + url: '/blade-mdm/program/ncfile/content', + method: 'get', + params: { + id + }, + }) } \ No newline at end of file diff --git a/src/views/flow/components/TodolistLeft.vue b/src/views/flow/components/TodolistLeft.vue new file mode 100644 index 0000000..9201af8 --- /dev/null +++ b/src/views/flow/components/TodolistLeft.vue @@ -0,0 +1,162 @@ +<!-- + * @Date: 2025-07-01 20:45:15 + * @LastEditors: gaoshp + * @LastEditTime: 2025-07-01 23:50:05 + * @FilePath: /mdmweb/src/views/flow/components/TodolistLeft.vue +--> +<template> + <basic-container> + <div class="tool" v-show="row.taskDefinitionKey === 'programmingTask'"> + <el-button type="primary" @click="addApp">娣诲姞绋嬪簭</el-button> + </div> + <el-table :data="tableData" border @row-click="showContent"> + <el-table-column prop="code" label="缂栧彿"> + </el-table-column> + <el-table-column prop="name" label="绋嬪簭鍚嶇О"> + </el-table-column> + <el-table-column prop="name" label="宸ュ簭鍚嶇О"> + </el-table-column> + </el-table> + <h4>绋嬪簭鍐呭</h4> + <div v-html="appContent" class="app-content"> + </div> + <el-dialog title="绋嬪簭閫夋嫨" v-model="appDialog" width="50%" v-if="appDialog"> + <avue-crud :option="optionApp" v-model="form" v-model:page="page" ref="crud" :data="appData" + @current-change="currentChange" @size-change="sizeChange" + @on-load="onLoad" @selection-change="selectionChange"> + <template #search="{ }"></template> + <template #search-menu="{ }"></template> + </avue-crud> + <div slot="footer" class="dialog-footer"> + <el-button @click="appDialog = false">鍙� 娑�</el-button> + <el-button type="primary" @click="add">纭� 瀹�</el-button> + </div> + </el-dialog> + </basic-container> +</template> + +<script> +import { getAppList,getSelectedAppList,getContent } from '@/api/flow/todolist'; +export default { + props: { + row: { + type: Object, + } + }, + data() { + return { + tableData: [],//宸查�夌▼搴� + appContent: '',//绋嬪簭鍐呭 + appDialog: false, + form: {}, + page: { + page: 1, + size: 10, + total: 0, + }, + appData: [], + selectionList: [], + optionApp: { + menu: false, + gridBtn: false, + addBtn: false, + editBtn: false, + delBtn: false, + columnBtn: false, + refreshBtn: false, + searchShowBtn: false, + tip: false, + searchShow: false, + dialogWidth: '60%', + border: true, + index: true, + selection: true, + menuWidth: 100, + dialogClickModal: false, + column: [ + { + label: 'machineCode', + prop: '璁惧缂栧彿', + }, + { + label: '绋嬪簭鍚嶇О', + prop: 'name', + }, + { + label: '宸ュ簭鍚嶇О', + prop: 'processName', + }, + ], + }, + } + }, + mounted() { + console.log(this.row,'row') + getSelectedAppList(this.row.processInstanceId).then(res => { + if (res.data.code !== 200) { + this.$message.error('鑾峰彇宸查�夌▼搴忓け璐�'); + return; + } else { + this.appData = res.data + } + this.$emit('selection-change',this.tableData) + }) + this.onLoad(this.page); + }, + methods: { + addApp() { + this.appDialog = true; + }, + currentChange(currentPage) { + this.page.currentPage = currentPage; + }, + sizeChange(pageSize) { + this.page.pageSize = pageSize; + }, + selectionChange(list) { + this.selectionList = list; + }, + onLoad(page, params = {}) { + const query = {} + getAppList(page.currentPage, page.pageSize, Object.assign(query, params)).then(res => { + const data = res.data.data; + this.page.total = data.total; + this.appData = data.records; + }); + }, + add () { + console.log('add') + this.tableData = this.tableData.concat(this.selectionList.filter(item => { + return !this.tableData.some(existingItem => existingItem.id === item.id); + })); + this.appDialog = false; + this.$emit('selection-change',this.tableData) + }, + showContent (row, column, event) { + getContent(row.id).then(res => { + if(res.data.code === 200) { + this.appContent = res.data.data + } else { + this.appContent = '绋嬪簭鍐呭鍔犺浇澶辫触' + } + }) + } + }, +} +</script> + +<style lang="scss" scoped> +.tool { + text-align: right; + margin-bottom: 10px; +} + +.dialog-footer { + text-align: center; +} +.app-content { + background-color: #fffee1; + padding: 10px; + min-height: 100px; +} +</style> \ No newline at end of file diff --git a/src/views/flow/components/TodolistRightTop.vue b/src/views/flow/components/TodolistRightTop.vue new file mode 100644 index 0000000..4c45f2e --- /dev/null +++ b/src/views/flow/components/TodolistRightTop.vue @@ -0,0 +1,86 @@ +<!-- + * @Date: 2025-07-01 20:45:15 + * @LastEditors: gaoshp + * @LastEditTime: 2025-07-01 23:54:33 + * @FilePath: /mdmweb/src/views/flow/components/TodolistRightTop.vue +--> +<template> + <basic-container> + <el-form :inline="true" :model="formInline" class="demo-form-inline" label-width="120px" disabled> + <el-form-item label="娴佺▼鏍囬"> + <el-input v-model="formInline.user" placeholder=""></el-input> + </el-form-item> + <el-form-item label="鍒涘缓浜�"> + <el-input v-model="formInline.user" placeholder=""></el-input> + </el-form-item> + <el-form-item label="璁捐鐗堟"> + <el-input v-model="formInline.user" placeholder=""></el-input> + </el-form-item> + <el-form-item label="宸ヨ壓鐗堟"> + <el-input v-model="formInline.user" placeholder=""></el-input> + </el-form-item> + <el-form-item label="浠诲姟杞﹂棿"> + <el-input v-model="formInline.user" placeholder=""></el-input> + </el-form-item> + <el-form-item label="浜у搧鍨嬪彿"> + <el-input v-model="formInline.user" placeholder=""></el-input> + </el-form-item> + <el-form-item label="宸ュ簭鍙�"> + <el-input v-model="formInline.user" placeholder=""></el-input> + </el-form-item> + <el-form-item label="宸ュ簭鍚嶇О"> + <el-input v-model="formInline.user" placeholder=""></el-input> + </el-form-item> + <el-form-item label="闆剁粍浠跺彿"> + <el-input v-model="formInline.user" placeholder=""></el-input> + </el-form-item> + <el-form-item label="闆剁粍浠跺悕绉�"> + <el-input v-model="formInline.user" placeholder=""></el-input> + </el-form-item> + <el-form-item label="鍔犲伐鏈哄簥"> + <el-input v-model="formInline.user" placeholder=""></el-input> + </el-form-item> + <el-form-item label="杩囩▼鍗″彿"> + <el-input v-model="formInline.user" placeholder=""></el-input> + </el-form-item> + <el-form-item label="鍒涘缓鏃堕棿"> + <el-input v-model="formInline.user" placeholder=""></el-input> + </el-form-item> + <el-form-item label="璁″垝鍔犲伐鏃堕棿"> + <el-input v-model="formInline.user" placeholder=""></el-input> + </el-form-item> + <el-form-item label="鎻忚堪"> + <el-input v-model="formInline.user" placeholder=""></el-input> + </el-form-item> + <el-form-item label="绋嬪簭鍖呭悕"> + <el-input v-model="formInline.user" placeholder=""></el-input> + </el-form-item> + <el-form-item label="褰撳墠鑺傜偣"> + <el-input v-model="formInline.user" placeholder=""></el-input> + </el-form-item> + </el-form> + </basic-container> +</template> + +<script> +export default { + props: { + row: { + type: Object, + } + }, + data() { + return { + formInline: {} + } + }, + mounted() { + // Initialize formInline with row data + this.formInline = { + ...this.row + } + } +} +</script> + +<style lang="scss" scoped></style> \ No newline at end of file diff --git a/src/views/flow/todolist.vue b/src/views/flow/todolist.vue index 6587758..848f1c1 100644 --- a/src/views/flow/todolist.vue +++ b/src/views/flow/todolist.vue @@ -13,15 +13,28 @@ </el-button> </template> </avue-crud> - <el-dialog title="瀹℃壒" append-to-body v-model="approveBox" width="30%"> - <avue-form ref="form" :option="optionApprove" v-model="formApprove" @submit="handleSubmit" /> - <!-- <template #footer> - <span class="dialog-footer"> - <el-button @click="deployBox = false">鍙� 娑�</el-button> - <el-button type="primary" @click="handleDoDeploy" :loading="deployLoading">纭� 瀹�</el-button> - </span> - </template> --> - </el-dialog> + <!-- <el-dialog title="瀹℃壒" append-to-body v-model="approveBox" width="100%"> + <div class="approve-box"> + <div class="left"> + <TodolistLeft :row="row"/> + </div> + <div class="right"> + <TodolistRightTop :row="row" /> + <avue-form ref="form" :option="optionApprove" v-model="formApprove" @submit="handleSubmit" /> + </div> + </div> + </el-dialog> --> + <el-drawer title="瀹℃壒" append-to-body v-model="approveBox" size="100%"> + <div class="approve-box"> + <div class="left"> + <TodolistLeft :row="row" @selection-change="selectionChange"/> + </div> + <div class="right"> + <TodolistRightTop :row="row" /> + <avue-form ref="form" :option="optionApprove" v-model="formApprove" @submit="handleSubmit" /> + </div> + </div> + </el-drawer> </basic-container> </template> @@ -29,9 +42,16 @@ import { getList, approve,getAssignee } from '@/api/flow/todolist'; import { mapGetters } from 'vuex'; import dayjs from 'dayjs'; +import TodolistLeft from './components/TodolistLeft.vue'; +import TodolistRightTop from './components/TodolistRightTop.vue'; export default { + components: { + TodolistLeft, + TodolistRightTop + }, data() { return { + applist: [], assigneeData: [], row: {}, approveBox: false, @@ -258,6 +278,7 @@ ...this.formApprove, taskId: this.row.taskId, processInstanceId: this.row.processInstanceId, + programIds: this.applist.map(v => v.id).join(','), }).then(res => { this.$message.success('瀹℃壒鎴愬姛'); this.approveBox = false; @@ -326,8 +347,24 @@ this.loading = false; }); }, + selectionChange (applist) { + this.applist = applist + }, }, }; </script> -<style></style> +<style scoped="scoped" lang="scss"> +.approve-box { + display: flex; + & > div { + border: 1px solid #ccc; + } + .left { + width: 400px; + } + .right { + flex:1; + } +} +</style> -- Gitblit v1.9.3