| | |
| | | /* |
| | | * @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'; |
| | |
| | | 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 |
| | | }, |
| | | }) |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <!-- |
| | | * @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> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <!-- |
| | | * @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> |
| | |
| | | </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> |
| | | |
| | |
| | | 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, |
| | |
| | | ...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; |
| | |
| | | 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> |