| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <!-- |
| | | * @Date: 2025-07-01 20:45:15 |
| | | * @LastEditors: gaoshp |
| | | * @LastEditTime: 2025-08-06 20:40:36 |
| | | * @FilePath: /mdmweb/src/views/flow/components/TodolistLeft.vue |
| | | --> |
| | | <template> |
| | | <basic-container> |
| | | <div class="tool"> |
| | | <avue-form :option="attOption" |
| | | v-model="attForm" |
| | | :upload-after="uploadAfter" class="att-box"></avue-form> |
| | | </div> |
| | | <el-table :data="tableData" border @row-click="showContent" max-height="200"> |
| | | <!-- <el-table-column prop="machineCode" label="å å·¥æºåº"> |
| | | </el-table-column> --> |
| | | <el-table-column prop="name" label="ç¨åºåç§°"> |
| | | </el-table-column> |
| | | <el-table-column fixed="right" label="æä½" width="60" align="center"> |
| | | <template #default="scope" > |
| | | <el-button type="text" size="small" @click.stop="del(scope.$index,scope.row)">å é¤</el-button> |
| | | </template> |
| | | </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,removeAtt} from '@/api/flow/todolist'; |
| | | export default { |
| | | props: { |
| | | row: { |
| | | type: Object, |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | showContentId: '', |
| | | attForm: { |
| | | att: '', |
| | | }, //ç¨åºä¸ä¼ 表å |
| | | attOption: { |
| | | submitBtn: false, |
| | | emptyBtn: false, |
| | | menu: false, |
| | | column: [ |
| | | { |
| | | label: 'æ·»å ç¨åº', |
| | | prop: 'att', |
| | | type: 'upload', |
| | | multiple: true, |
| | | action: '/api/blade-mdm/flow/mgr/ncupload', |
| | | span: 24, |
| | | data: { |
| | | processInstanceId: this.row.processInstanceId |
| | | }, |
| | | } |
| | | ] |
| | | }, //ç¨åºä¸ä¼ |
| | | 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: 'å å·¥æºåº', |
| | | prop: 'machineCode', |
| | | }, |
| | | { |
| | | label: 'ç¨åºåç§°', |
| | | prop: 'name', |
| | | }, |
| | | // { |
| | | // label: 'å·¥åºåç§°', |
| | | // prop: 'processName', |
| | | // }, |
| | | ], |
| | | }, |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getAttList(); |
| | | this.onLoad(this.page); |
| | | }, |
| | | methods: { |
| | | uploadAfter(res, done, loading, column) { |
| | | if (res.code === 200) { |
| | | this.getAttList(); |
| | | this.$message.success('ä¸ä¼ æå'); |
| | | this.attForm.att = ''; |
| | | return done(); |
| | | } else { |
| | | console.log(res) |
| | | this.$message.warning(res.msg || 'ä¸ä¼ 失败'); |
| | | done() |
| | | } |
| | | }, |
| | | getAttList () { |
| | | getSelectedAppList(this.row.processInstanceId).then(res => { |
| | | if (res.data.code !== 200) { |
| | | this.$message.error('è·åå·²éç¨åºå¤±è´¥'); |
| | | return; |
| | | } else { |
| | | this.tableData = res.data.data || []; |
| | | } |
| | | // this.$emit('selection-change',this.tableData) |
| | | }) |
| | | }, |
| | | 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) { |
| | | if(!row?.id) { |
| | | this.showContentId = '' |
| | | return this.appContent = ''; |
| | | } |
| | | this.showContentId = row.id |
| | | getContent(row.id).then(res => { |
| | | if(res.data.code === 200) { |
| | | this.appContent = res.data.data |
| | | } else { |
| | | this.appContent = 'ç¨åºå
容å 载失败' |
| | | } |
| | | }) |
| | | }, |
| | | del (index,row) { |
| | | if(row.id === this.showContentId) { |
| | | this.showContentId = ''; |
| | | this.showContent(null, null, null); |
| | | } |
| | | removeAtt(row.id).then(res => { |
| | | if(res.data.code === 200) { |
| | | this.$message.success('å 餿å'); |
| | | this.getAttList(); |
| | | } else { |
| | | this.$message.error('å é¤å¤±è´¥'); |
| | | } |
| | | }) |
| | | } |
| | | }, |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .tool { |
| | | text-align: right; |
| | | margin-bottom: 10px; |
| | | } |
| | | |
| | | .dialog-footer { |
| | | text-align: center; |
| | | } |
| | | .app-content { |
| | | background-color: #fffee1; |
| | | padding: 10px 30px; |
| | | min-height: 100px; |
| | | overflow: auto; |
| | | max-height: 400px; |
| | | white-space: pre-wrap; |
| | | } |
| | | |
| | | </style> |
| | | <style lang="scss"> |
| | | .att-box { |
| | | .el-form-item--default { |
| | | margin-bottom: 0; |
| | | } |
| | | .avue-form__menu--center { |
| | | display: none; |
| | | } |
| | | } |
| | | </style> |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <!-- |
| | | * @Date: 2025-07-01 20:45:15 |
| | | * @LastEditors: gaoshp |
| | | * @LastEditTime: 2025-08-02 21:54:27 |
| | | * @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.processDefinitionName" placeholder=""></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å建人"> |
| | | <el-input v-model="formInline.startUserName" placeholder=""></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å¾å·ç次"> |
| | | <el-input v-model="formInline.drawingNoEdition" placeholder=""></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å·¥èºç次"> |
| | | <el-input v-model="formInline.craftEdition" placeholder=""></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ä»»å¡è½¦é´"> |
| | | <el-input v-model="formInline.workShop" placeholder=""></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="产ååå·"> |
| | | <el-input v-model="formInline.productModel" placeholder=""></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å·¥åºå·"> |
| | | <el-input v-model="formInline.processNo" placeholder=""></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å·¥åºåç§°"> |
| | | <el-input v-model="formInline.processName" placeholder=""></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å·¥åºç次"> |
| | | <el-input v-model="formInline.processEdition" placeholder=""></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="é¶ç»ä»¶å·"> |
| | | <el-input v-model="formInline.drawingNo" placeholder=""></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å å·¥æºåº"> |
| | | <el-input v-model="formInline.machineCode" placeholder=""></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="è¿ç¨å¡å·"> |
| | | <el-input v-model="formInline.empty" placeholder=""></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å建æ¶é´"> |
| | | <el-input v-model="formInline.createTime" placeholder=""></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="计åå å·¥æ¶é´"> |
| | | <el-input v-model="formInline.planStartTime" placeholder=""></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="ç¨åºå
å"> |
| | | <el-input v-model="formInline.programPackageName" placeholder=""></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="å½åèç¹"> |
| | | <el-input v-model="formInline.taskName" 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, |
| | | // processDefinitionName: this.row.processDefinitionName || '', |
| | | // taskName: this.row.taskName || '', |
| | | // createTime: this.row.createTime || '', |
| | | // startUserName: this.row.startUserName || '', |
| | | // drawingNoEdition: this.row.variables.drawingNoEdition || '', |
| | | // craftEdition: this.row.variables.craftEdition || '', |
| | | // machineCode: this.row.variables.machineCode || '', |
| | | // processName: this.row.variables.processName || '', |
| | | // processNo: this.row.variables.processNo || '', |
| | | // processEdition: this.row.variables.processEdition || '', |
| | | |
| | | // planStartTime: this.row.variables.planStartTime || '', |
| | | // productModel: this.row.variables.productModel || '', |
| | | // programPackageName: this.row.variables.programPackageName || '', |
| | | // workShop: this.row.variables.workShop || '', |
| | | // drawingNo: this.row.variables.drawingNo || '', |
| | | // } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss" scoped></style> |
| | |
| | | </template> --> |
| | | <template #name="{ row }"> |
| | | <span>{{row.name}}</span> |
| | | <el-button :size="size" text v-if="row.nodeType != 70" icon="el-icon-setting" type="primary" placeholder="ä¿®æ¹" @click="showEdit(row)" title="ä¿®æ¹"></el-button> |
| | | <!-- <el-button :size="size" text v-if="row.nodeType != 70" icon="el-icon-setting" type="primary" placeholder="ä¿®æ¹" @click="showEdit(row)" title="ä¿®æ¹"></el-button> |
| | | <el-button :size="size" text v-if="row.nodeType != 10" icon="el-icon-delete" type="primary" @click="showDel(row)" placeholder="å é¤" title="å é¤"></el-button> |
| | | <el-button :size="size" text v-if="row.nodeType != 60 && row.nodeType != 70" icon="el-icon-document-add" type="primary" @click="showAdd(row)" placeholder="æ°å¢å级" title="æ°å¢å级"></el-button> |
| | | <el-button :size="size" text v-if="row.nodeType == 60 || row.nodeType == 50" icon="el-icon-upload" type="primary" @click="showUpload(row)" placeholder="æä»¶ä¸ä¼ " title="æä»¶ä¸ä¼ "></el-button> |
| | | <el-button :size="size" text v-if="row.nodeType == 60 || row.nodeType == 50" icon="el-icon-upload" type="primary" @click="showUpload(row)" placeholder="æä»¶ä¸ä¼ " title="æä»¶ä¸ä¼ "></el-button> --> |
| | | <!-- æ¶å¯ç½ææ --> |
| | | <el-button :size="size" text v-if="row.nodeType == 70 && isSM" icon="el-icon-pie-chart" type="primary" @click="upgrade(row)" placeholder="åç" title="åç"></el-button> |
| | | <!-- <el-button :size="size" text v-if="row.nodeType == 70 && isSM" icon="el-icon-pie-chart" type="primary" @click="upgrade(row)" placeholder="åç" title="åç"></el-button> --> |
| | | <!-- å·¥æ§ç½ææ --> |
| | | <el-button :size="size" text v-if="row.nodeType == 70 && !isSM" icon="el-icon-position" type="primary" @click="downsend(row)" placeholder="ä¸å" title="ä¸å"></el-button> |
| | | <!-- <el-button :size="size" text v-if="row.nodeType == 70 && !isSM" icon="el-icon-position" type="primary" @click="downsend(row)" placeholder="ä¸å" title="ä¸å"></el-button> --> |
| | | <!-- æ¿æ¢ --> |
| | | <el-button :size="size" text v-if="row.nodeType == 60 && isSM" icon="el-icon-switch" type="primary" @click="replacement(row)" placeholder="æ¿æ¢" title="æ¿æ¢"></el-button> |
| | | <!-- <el-icon><Switch /></el-icon> --> |
| | | </template> |
| | | </avue-crud> |
| | | <!-- æ°å¢èç¹ --> |
| | |
| | | <code-diff :old-string="this.content1" :new-string="this.content2" output-format="side-by-side" :hideStat="true" :filename="codeDiffFileName1" :newFilename="codeDiffFileName2"/> |
| | | </div> |
| | | </el-drawer> |
| | | <!-- æ¿æ¢ --> |
| | | <el-drawer title="æ¿æ¢" append-to-body v-model="todolistModel" size="100%" class="code-box"> |
| | | <div class="approve-box"> |
| | | <div class="left"> |
| | | <TodolistLeft :row="row" @selection-change="todoSelectionChange" /> |
| | | </div> |
| | | <div class="right"> |
| | | <TodolistRightTop :row="row" /> |
| | | <avue-form ref="form" :option="optionApprove" v-model="formApprove" @submit="handleSubmit" /> |
| | | </div> |
| | | </div> |
| | | </el-drawer> |
| | | </template> |
| | | |
| | | <script> |
| | | import { ElMessage } from 'element-plus'; |
| | | import TodolistLeft from './components/TodolistLeft.vue'; |
| | | import TodolistRightTop from './components/TodolistRightTop.vue'; |
| | | export default { |
| | | components: { |
| | | TodolistLeft, |
| | | TodolistRightTop |
| | | }, |
| | | data() { |
| | | let rejectText = '驳å';//+this.row.categoryName; |
| | | return { |
| | | replaceDataId: "", |
| | | formApprove: { |
| | | title: '', |
| | | comment: '', |
| | | approve: '', // é»è®¤åæ |
| | | assignee: '' |
| | | }, |
| | | optionApprove: { |
| | | labelWidth: 100, |
| | | column: [ |
| | | { |
| | | label: 'æµç¨æ é¢', |
| | | prop: 'title', |
| | | rules: [{ required: true, message: '请è¾å
¥æµç¨æ é¢', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: 'åéç»', |
| | | prop: 'assignee', |
| | | type: 'select', |
| | | dicUrl: `/api/blade-mdm/flow/flow-user-list?deptId=0`, |
| | | dicFlag: true, |
| | | props: { |
| | | label: 'name', |
| | | value: 'id', |
| | | }, |
| | | filterable: true, |
| | | span: 24, |
| | | disabled: false, |
| | | rules: [{ required: true, message: 'è¯·éæ©', trigger: 'change' }], |
| | | }, |
| | | { |
| | | label: 'å·¥åºç次', |
| | | prop: 'processEdition', |
| | | type: 'input', |
| | | span: 24, |
| | | // disabled: true, |
| | | display: false,// éèæ¾ç¤º |
| | | // rules: [{ required: true, message: 'è¯·éæ©ä¸ä¸å®¡æ¹ç¨æ·', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '夿³¨', |
| | | span: 24, |
| | | prop: 'comment', |
| | | type: 'textarea', |
| | | // rules: [{ required: true, message: '请è¾å
¥å®¡æ¹æè§', trigger: 'blur' }], |
| | | rules: [ |
| | | { |
| | | validator: (rule, value, callback) => { |
| | | console.log('-------',this.formApprove) |
| | | if (value === '' && this.formApprove.approve !== 'Y') { |
| | | callback(new Error('请è¾å
¥å¤æ³¨')); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }, |
| | | trigger: 'blur' |
| | | } |
| | | ] |
| | | }, |
| | | ], |
| | | }, |
| | | applist: [], |
| | | row: {}, |
| | | todolistModel: false, |
| | | diffBox: false, |
| | | content1: "", |
| | | content2: "", |
| | |
| | | menu: false, |
| | | searchBtn: false, |
| | | emptyBtn: false, |
| | | refreshBtn: false, |
| | | columnBtn: false, |
| | | searchShowBtn: false, |
| | | refreshBtn: false, |
| | | copyBtn: false, |
| | | gridBtn: false, |
| | | column: [ |
| | | { |
| | | label: 'ç®å½', |
| | |
| | | } |
| | | }, |
| | | watch: { |
| | | uploadmodalBox(old) { |
| | | //this.onLoad(); |
| | | } |
| | | |
| | | }, |
| | | methods: { |
| | | handleSubmit(form, done) { |
| | | //åèµ·ç¨åºæ¿æ¢æµç¨ |
| | | var obj = { |
| | | title: this.formApprove.title, |
| | | nodeId: this.id, |
| | | tempInstanceId: this.replaceDataId, |
| | | assignee: this.formApprove.assignee |
| | | } |
| | | axios({ |
| | | url: '/blade-mdm/flow/replace/start', |
| | | method: 'post', |
| | | data: obj |
| | | }).then( |
| | | resp => { |
| | | this.$message({ |
| | | type: 'success', |
| | | message: 'æä½æå!', |
| | | }); |
| | | done(); |
| | | this.todolistModel = false; |
| | | }); |
| | | // if(this.row.taskDefinitionKey === 'programmingTask') { |
| | | // // if(this.applist.length !== 1) { |
| | | // // done(); |
| | | // // return this.$message.success('è¯·éæ©1个ç¨åº'); |
| | | // // } |
| | | // } |
| | | // approve({ |
| | | // ...this.formApprove, |
| | | // taskId: this.row.taskId, |
| | | // processInstanceId: this.row.processInstanceId, |
| | | // // programIds: this.row.taskDefinitionKey === 'programmingTask' ? this.applist.map(v => v.id).join(',') : '', |
| | | // }).then(res => { |
| | | // if(res.data.code !== 200) { |
| | | // this.$message.error(res.data.msg); |
| | | // done(); |
| | | // return; |
| | | // } |
| | | // this.$message.success('å®¡æ¹æå'); |
| | | // this.approveBox = false; |
| | | // this.onLoad(this.page, this.query); |
| | | // done(); |
| | | // }).catch(err => { |
| | | // done(); |
| | | // console.error(err); |
| | | // }); |
| | | }, |
| | | todoSelectionChange(applist) { |
| | | this.applist = applist; |
| | | }, |
| | | replacement(row) { //æ¿æ¢ |
| | | this.id = row.id; |
| | | this.formApprove = { |
| | | comment: '', |
| | | approve: 'Y', // é»è®¤å |
| | | } |
| | | //åå¤ç¨åºæ¿æ¢æµç¨ |
| | | axios({ |
| | | url: '/blade-mdm/flow/replace/prestart', |
| | | method: 'post', |
| | | params: {nodeId: row.id} |
| | | }).then( |
| | | resp => { |
| | | this.row = row; |
| | | this.replaceDataId = resp.data.data; |
| | | this.todolistModel = true; |
| | | }); |
| | | }, |
| | | convertToHtml(text) { |
| | | return text.replace(/\r\n/g, '<br>'); |
| | | }, |
| | |
| | | .highlight-row:hover { |
| | | background-color: #e6f0ff !important; |
| | | } |
| | | .approve-box { |
| | | display: flex; |
| | | |
| | | &>div { |
| | | border: 1px solid #ccc; |
| | | } |
| | | |
| | | .left { |
| | | width: 400px; |
| | | } |
| | | |
| | | .right { |
| | | flex: 1; |
| | | } |
| | | } |
| | | </style> |
| | | <style> |
| | | .highlight-row { |
| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <basic-container> |
| | | <avue-crud :option="option" :table-loading="loading" :data="data" v-model:page="page" v-model="form" ref="crud" |
| | | @search-change="searchChange" @search-reset="searchReset" @current-change="currentChange" |
| | | @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad" |
| | | @selection-change="selectionTransferTask"> |
| | | <template #menu-left> |
| | | <el-button type="primary" plain @click="reassign">éæ°ææ´¾ |
| | | </el-button> |
| | | </template> |
| | | <template #menu="scope"> |
| | | <el-button type="primary" text size="default" @click.stop="handleAction(scope.row, scope.index)">å®¡æ¹ |
| | | </el-button> |
| | | </template> |
| | | </avue-crud> |
| | | <el-dialog title="ææ´¾" append-to-body v-model="reassignBox" width="30%"> |
| | | <avue-form ref="reassginform" :option="reassignOption" v-model="reassignForm" @submit="toPerson"></avue-form> |
| | | </el-dialog> |
| | | <el-drawer title="审æ¹" append-to-body v-model="approveBox" size="100%" v-if="approveBox"> |
| | | <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> |
| | | |
| | | <script> |
| | | import { getList, approve, getAssignee,reassgin } 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() { |
| | | let rejectText = '驳å';//+this.row.categoryName; |
| | | console.log(this,'ttt'); |
| | | return { |
| | | |
| | | applist: [], |
| | | assigneeData: [], |
| | | row: {}, |
| | | approveBox: false, |
| | | formApprove: { |
| | | comment: '', |
| | | approve: '', // é»è®¤åæ |
| | | assignee: '' |
| | | }, |
| | | optionApprove: { |
| | | labelWidth: 100, |
| | | column: [ |
| | | |
| | | { |
| | | label: '审æ¹ç»æ', |
| | | prop: 'approve', |
| | | type: 'radio', |
| | | span: 24, |
| | | dicData: [ |
| | | { label: 'éè¿', value: 'Y' }, |
| | | { label: rejectText, value: 'N' }, |
| | | ], |
| | | rules: [{ required: true, message: 'è¯·éæ©å®¡æ¹ç»æ', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: 'åéç»', |
| | | prop: 'assignee', |
| | | type: 'select', |
| | | // dicUrl: `/blade-mdm/flow/flow-user-list?deptId=0`, |
| | | // dicFlag: true, |
| | | props: { |
| | | label: 'name', |
| | | value: 'id', |
| | | }, |
| | | filterable: true, |
| | | span: 24, |
| | | disabled: false, |
| | | dicData: [ |
| | | |
| | | ], |
| | | // rules: [{ required: true, message: 'è¯·éæ©ä¸ä¸å®¡æ¹ç¨æ·', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: 'å·¥åºç次', |
| | | prop: 'processEdition', |
| | | type: 'input', |
| | | span: 24, |
| | | // disabled: true, |
| | | display: false,// éèæ¾ç¤º |
| | | // rules: [{ required: true, message: 'è¯·éæ©ä¸ä¸å®¡æ¹ç¨æ·', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '夿³¨', |
| | | span: 24, |
| | | prop: 'comment', |
| | | type: 'textarea', |
| | | // rules: [{ required: true, message: '请è¾å
¥å®¡æ¹æè§', trigger: 'blur' }], |
| | | rules: [ |
| | | { |
| | | validator: (rule, value, callback) => { |
| | | console.log('-------',this.formApprove) |
| | | if (value === '' && this.formApprove.approve !== 'Y') { |
| | | callback(new Error('请è¾å
¥å¤æ³¨')); |
| | | } else { |
| | | callback(); |
| | | } |
| | | }, |
| | | trigger: 'blur' |
| | | } |
| | | ] |
| | | }, |
| | | ], |
| | | }, |
| | | page: { |
| | | pageSize: 10, |
| | | currentPage: 1, |
| | | total: 0, |
| | | }, |
| | | form: {}, |
| | | query: {}, |
| | | loading: true, |
| | | option: { |
| | | rowKey: "taskId", |
| | | addBtn: false, |
| | | editBtn: false, |
| | | delBtn: false, |
| | | columnBtn: false, |
| | | tip: false, |
| | | // simplePage: true, |
| | | searchShow: true, |
| | | searchMenuSpan: 6, |
| | | dialogWidth: '60%', |
| | | // tree: true, |
| | | border: true, |
| | | index: true, |
| | | selection: true, |
| | | // viewBtn: true, |
| | | menuWidth: 100, |
| | | dialogClickModal: false, |
| | | column: [ |
| | | { |
| | | label: 'å
³é®å', |
| | | prop: 'keyword', |
| | | width: 300, |
| | | search: true, |
| | | searchType: 'input', |
| | | hide: true, |
| | | dicData: [ |
| | | { |
| | | label: 'æ¶å¯ç½ç¨åº', |
| | | value: 1, |
| | | }, |
| | | { |
| | | label: 'å·¥æ§ç½è½¦åºç¨åº', |
| | | value: 2, |
| | | }, |
| | | ], |
| | | }, |
| | | { |
| | | label: 'æ é¢', |
| | | prop: '', |
| | | width: 100, |
| | | render: ({ row }) => { |
| | | return h('p', |
| | | { |
| | | attrs: {}, |
| | | class: {}, |
| | | style: {}, |
| | | }, row?.variables?.title) |
| | | } |
| | | }, |
| | | { |
| | | label: 'æµç¨åç§°', |
| | | prop: 'processDefinitionName', |
| | | width: 100, |
| | | },/* |
| | | { |
| | | label: 'æµç¨ç±»å', |
| | | width: 100, |
| | | prop: 'categoryName', |
| | | },*/ |
| | | |
| | | { |
| | | label: 'æºåº', |
| | | width: 100, |
| | | prop: '', |
| | | formatter: (val, value, label) => { |
| | | return `${val?.variables?.machineCode}`; |
| | | }, |
| | | }, |
| | | { |
| | | label: 'å建人', |
| | | width: 100, |
| | | prop: 'startUserName', |
| | | }, |
| | | { |
| | | label: 'å建æ¶é´', |
| | | width: 200, |
| | | prop: 'processCreateTime', |
| | | type: 'datetime', |
| | | format: 'YYYY-MM-DD HH:mm:ss', |
| | | valueFormat: 'YYYY-MM-DD HH:mm:ss', |
| | | search: true, |
| | | searchRange: true, |
| | | searchSpan: 8, |
| | | // hide: true, |
| | | }, |
| | | { |
| | | label: 'ä¸ä¸æ¥ç¨æ·', |
| | | width: 200, |
| | | prop: '', |
| | | formatter: (val, value, label) => { |
| | | return `${val?.variables?.approveUserNickName || ''}`; |
| | | }, |
| | | }, |
| | | { |
| | | label: 'å½åèç¹', |
| | | width: 200, |
| | | prop: 'taskName', |
| | | }, |
| | | { |
| | | label: 'æä»¶', |
| | | width: 200, |
| | | prop: 'file', |
| | | }, |
| | | { |
| | | label: 'å°è¾¾æ¶é´', |
| | | width: 200, |
| | | prop: 'createTime', |
| | | }, |
| | | { |
| | | label: 'å°è¾¾æè¿°', |
| | | width: 200, |
| | | prop: 'comment', |
| | | }, |
| | | |
| | | ], |
| | | }, |
| | | data: [], |
| | | transferTaskSelection: [], |
| | | reassignBox: false, |
| | | reassignOption: { |
| | | submitBtn: true, |
| | | emptyBtn: false, |
| | | column: [ |
| | | { |
| | | label: 'åéç»', |
| | | prop: 'newAssigneeId', |
| | | type: 'select', |
| | | // dicUrl: `/blade-mdm/flow/flow-user-list?deptId=0`, |
| | | // dicFlag: true, |
| | | props: { |
| | | label: 'name', |
| | | value: 'id', |
| | | }, |
| | | span: 24, |
| | | disabled: false, |
| | | dicData: [ |
| | | |
| | | ], |
| | | rules: [{ required: true, message: '请è¾å
¥éæ©', trigger: 'blur' }], |
| | | }, |
| | | { |
| | | label: '夿³¨', |
| | | span: 24, |
| | | prop: 'comment', |
| | | type: 'textarea', |
| | | rules: [{ required: true, message: '请è¾å
¥å®¡æ¹æè§', trigger: 'blur' }], |
| | | }, |
| | | ], |
| | | }, |
| | | reassignForm: {} |
| | | }; |
| | | }, |
| | | watch: { |
| | | // 'form.category'() { |
| | | // const category = func.toInt(this.form.category); |
| | | // this.$refs.crud.option.column.filter(item => { |
| | | // if (item.prop === 'path') { |
| | | // item.rules[0].required = category === 1; |
| | | // } |
| | | // if (item.prop === 'isOpen') { |
| | | // item.disabled = category === 2; |
| | | // } |
| | | // }); |
| | | // }, |
| | | 'formApprove.approve'(val) { |
| | | if (val === 'Y' && ["approveTask", 'seniorApproveTask'].includes(this.row.taskDefinitionKey)) {// é«å¸ |
| | | this.optionApprove.column[1].disabled = true; |
| | | this.formApprove.assignee = ''; // 妿æ¯éè¿ï¼åé»è®¤ææ´¾ç»èªå·± |
| | | } else if(val === 'Y'){ |
| | | this.setAssignee(this.row); |
| | | } else if(val === 'N') { |
| | | this.formApprove.assignee = '' |
| | | // this.formApprove.assignee = row.variables.senior; |
| | | } |
| | | if(val === 'Y' && ['confirmIsUseableTask'].includes(this.row.taskDefinitionKey) && this.row.variables.isProcessEditionSame=='N') { |
| | | this.optionApprove.column[2].display = true; // æ¾ç¤ºå·¥åºç次 |
| | | } else { |
| | | this.optionApprove.column[2].display = false; // éèå·¥åºç次 |
| | | } |
| | | |
| | | }, |
| | | }, |
| | | computed: { |
| | | ...mapGetters(['userInfo', 'permission']), |
| | | // permissionList() { |
| | | // return { |
| | | // addBtn: this.validData(this.permission.menu_add, false), |
| | | // viewBtn: this.validData(this.permission.menu_view, false), |
| | | // delBtn: this.validData(this.permission.menu_delete, false), |
| | | // editBtn: this.validData(this.permission.menu_edit, false), |
| | | // }; |
| | | // }, |
| | | }, |
| | | mounted() { |
| | | getAssignee().then(res => { |
| | | this.assigneeData = res.data.data; |
| | | this.optionApprove.column[1].dicData = this.assigneeData; |
| | | this.reassignOption.column[0].dicData = this.assigneeData; |
| | | }) |
| | | }, |
| | | methods: { |
| | | selectionTransferTask(list) { |
| | | this.transferTaskSelection = list; |
| | | }, |
| | | reassign() {// éæ°ææ´¾ |
| | | if (this.transferTaskSelection.length === 0) { |
| | | this.$message.warning('è¯·éæ©éè¦éæ°ææ´¾çä»»å¡'); |
| | | return; |
| | | } |
| | | if (this.transferTaskSelection.length > 1) { |
| | | this.$message.warning('è¯·éæ©ä¸æ¡'); |
| | | return; |
| | | } |
| | | this.reassignBox = true; |
| | | }, |
| | | toPerson(form, done) { |
| | | this.$confirm('请确认æ¯å¦ææ´¾', '', { |
| | | confirmButtonText: this.$t('submitText'), |
| | | cancelButtonText: this.$t('cancelText'), |
| | | type: 'warning', |
| | | }).then(() => { |
| | | console.log('toPerson', form); |
| | | reassgin({ |
| | | ...form, |
| | | taskId: this.transferTaskSelection[0].taskId, |
| | | processInstanceId: this.transferTaskSelection[0].processInstanceId, |
| | | }).then(res => { |
| | | this.$message.success('ææ´¾æå'); |
| | | this.reassignBox = false; |
| | | this.$refs?.reassginform?.resetForm(); |
| | | this.onLoad(this.page, this.query); |
| | | done() |
| | | |
| | | }).catch(err => { |
| | | console.error(err); |
| | | done() |
| | | }) |
| | | }); |
| | | done(); |
| | | }, |
| | | setAssignee (row) { |
| | | if (["check", 'cureCheckTask '].includes(row.taskDefinitionKey)) {// æ ¡å¯¹ |
| | | this.formApprove.assignee = row.variables.senior; |
| | | } else if (["programmingTask",'cureProgramTask'].includes(row.taskDefinitionKey)) {// ç¼å¶ï¼æ ¡å¯¹ |
| | | this.formApprove.assignee = row.variables.checker; |
| | | } else if (row.taskDefinitionKey == "teamLeaderTask") { |
| | | this.formApprove.assignee = row.variables.programmer |
| | | } else if (row.taskDefinitionKey == "confirmIsUseableTask") { |
| | | this.formApprove.assignee = row.variables.checker |
| | | } else if (["approveTask", 'seniorApproveTask'].includes(row.taskDefinitionKey)) {// é«å¸å®¡æ ¸ |
| | | |
| | | } |
| | | }, |
| | | handleAction(row, index) { |
| | | this.formApprove = { |
| | | comment: '', |
| | | approve: 'Y', // é»è®¤å |
| | | } |
| | | this.approveBox = true; |
| | | this.row = row |
| | | this.setAssignee(row); |
| | | console.log('handleAction', row, index); |
| | | }, |
| | | handleSubmit(form, done) { |
| | | if(this.row.taskDefinitionKey === 'programmingTask') { |
| | | // if(this.applist.length !== 1) { |
| | | // done(); |
| | | // return this.$message.success('è¯·éæ©1个ç¨åº'); |
| | | // } |
| | | } |
| | | approve({ |
| | | ...this.formApprove, |
| | | taskId: this.row.taskId, |
| | | processInstanceId: this.row.processInstanceId, |
| | | // programIds: this.row.taskDefinitionKey === 'programmingTask' ? this.applist.map(v => v.id).join(',') : '', |
| | | }).then(res => { |
| | | if(res.data.code !== 200) { |
| | | this.$message.error(res.data.msg); |
| | | done(); |
| | | return; |
| | | } |
| | | this.$message.success('å®¡æ¹æå'); |
| | | this.approveBox = false; |
| | | this.onLoad(this.page, this.query); |
| | | done(); |
| | | }).catch(err => { |
| | | done(); |
| | | console.error(err); |
| | | }); |
| | | }, |
| | | searchChange(params, done) { |
| | | let data = {} |
| | | this.query = params; |
| | | this.page.currentPage = 1; |
| | | console.log('searchChange', params); |
| | | params.createTimeBegin = params?.processCreateTime?.[0] || ''; |
| | | params.createTimeEnd = params?.processCreateTime?.[1] || ''; |
| | | console.log(params); |
| | | // data = { |
| | | // createTimeBegin: dayjs(params.createTimeBegin).isValid() ? dayjs(params.createTimeBegin).format('YYYY-MM-DD') : '', |
| | | // createTimeEnd: dayjs(params.createTimeEnd).isValid() ? dayjs(params.createTimeEnd).format('YYYY-MM-DD') : '', |
| | | // keyword: params.keyword || '' |
| | | // } |
| | | data = { |
| | | createTimeBegin: params.createTimeBegin, |
| | | createTimeEnd: params.createTimeEnd, |
| | | keyword: params.keyword || '' |
| | | } |
| | | this.query = data |
| | | this.onLoad(this.page, data); |
| | | done(); |
| | | }, |
| | | searchReset() { |
| | | this.query = {}; |
| | | this.onLoad(this.page); |
| | | }, |
| | | currentChange(currentPage) { |
| | | this.page.currentPage = currentPage; |
| | | }, |
| | | sizeChange(pageSize) { |
| | | this.page.pageSize = pageSize; |
| | | }, |
| | | refreshChange() { |
| | | this.onLoad(this.page, this.query); |
| | | }, |
| | | |
| | | onLoad(page, params = {}) { |
| | | const query = { |
| | | ...this.query, |
| | | // category: params.category ? flowCategory(params.category) : null, |
| | | mode: this.mode, |
| | | }; |
| | | try { |
| | | delete query.processCreateTime; // å é¤ä¸å¿
è¦çæ¥è¯¢æ¡ä»¶ |
| | | } catch (error) { |
| | | console.error('æ¥ææ ¼å¼åé误', error); |
| | | } |
| | | |
| | | this.loading = true; |
| | | getList(page.currentPage, page.pageSize, Object.assign(query, params)).then(res => { |
| | | const data = res.data.data; |
| | | this.page.total = data.total; |
| | | this.data = data.records; |
| | | this.loading = false; |
| | | }); |
| | | }, |
| | | selectionChange(applist) { |
| | | this.applist = applist |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style scoped="scoped" lang="scss"> |
| | | .approve-box { |
| | | display: flex; |
| | | |
| | | &>div { |
| | | border: 1px solid #ccc; |
| | | } |
| | | |
| | | .left { |
| | | width: 400px; |
| | | } |
| | | |
| | | .right { |
| | | flex: 1; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | |
| | | v-code-diff@^1.13.1: |
| | | version "1.13.1" |
| | | resolved "https://registry.npmmirror.com/v-code-diff/-/v-code-diff-1.13.1.tgz" |
| | | resolved "https://registry.yarnpkg.com/v-code-diff/-/v-code-diff-1.13.1.tgz#acead9aeec90ecf0769fdd23dc2e6ca2ecaa631f" |
| | | integrity sha512-9LTV1dZhC1oYTntyB94vfumGgsfIX5u0fEDSI2Txx4vCE5sI5LkgeLJRRy2SsTVZmDcV+R73sBr0GpPn0TJxMw== |
| | | dependencies: |
| | | diff "^5.2.0" |