From fdb0ed498f295b50c072c4b3652c08e2d60a747a Mon Sep 17 00:00:00 2001
From: yangys <y_ys79@sina.com>
Date: 星期三, 03 十二月 2025 16:29:57 +0800
Subject: [PATCH] 增加pdf,xlsx,docx文件预览功能
---
src/views/flow/todolist.vue | 255 +++++++++++++++++++++++++++++++++++++++++---------
1 files changed, 209 insertions(+), 46 deletions(-)
diff --git a/src/views/flow/todolist.vue b/src/views/flow/todolist.vue
index e3e2262..158a86e 100644
--- a/src/views/flow/todolist.vue
+++ b/src/views/flow/todolist.vue
@@ -1,6 +1,7 @@
<template>
<basic-container>
<avue-crud :option="option" :table-loading="loading" :data="data" v-model:page="page" v-model="form" ref="crud"
+ :search="query"
@search-change="searchChange" @search-reset="searchReset" @current-change="currentChange"
@size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad"
@selection-change="selectionTransferTask">
@@ -10,23 +11,31 @@
</el-button>
<el-button type="primary" :disabled="this.transferTaskSelection.length==0" v-if="permission.manual_dispatch" plain @click="reassign(1)">鎵嬪姩娲惧伐
</el-button>
- <el-button type="primary" :disabled="this.transferTaskSelection.length==0" plain @click="reassign(0)">閲嶆柊鎸囨淳</el-button>
+ <el-button type="primary" :disabled="this.transferTaskSelection.length==0" plain @click="reassign(0)">杞淳</el-button>
<el-button type="primary" :disabled="this.transferTaskSelection.length==0" v-if="permission.batch_approve" plain @click="reassign(3)">鎵归噺瀹℃壒
+ </el-button>
+
+ <el-button type="primary" :disabled="this.transferTaskSelection.length==0" v-if="permission.batch_on_machine" plain @click="showBatchOnMachine()">鐜板満缂栧埗
</el-button>
</template>
<template #menu="scope">
<el-button type="primary" text size="default" @click.stop="handleAction(scope.row, scope.index)">
- {{scope.row.taskDefinitionKey === 'teamLeaderTask' ? '娲惧伐' : '瀹℃壒'}}
+ {{approveButtonText(scope.row.taskDefinitionKey)}}
</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">
+ <el-dialog title="鐜板満缂栧埗" append-to-body v-model="onMachineBox" width="30%">
+ <avue-form :option="onMachineOption" v-model="onMachineForm" @submit="batchOnMachine"></avue-form>
+ </el-dialog>
+ <div class="box-drawer">
+ <el-drawer title="瀹℃壒" append-to-body v-model="approveBox" size="100%" v-if="approveBox" class="remark-drawer">
<div class="approve-box">
<div class="left">
- <TodolistLeft :row="row" @selection-change="selectionChange" />
+ <TodolistLeft ref="todolistLeft" :row="row" @selection-change="selectionChange" />
</div>
<div class="right">
<TodolistRightTop :row="row" />
@@ -48,10 +57,11 @@
</div>
</div>
</el-drawer>
+ </div>
</basic-container>
</template>
<script>
-import { getList, approve, getAssignee,getAssigneeTree,reassgin,manualDispatch,autoDispatch,todoChangeNotify,batchApprove } from '@/api/flow/todolist';
+import { getList, approve, getAssignee,getAssigneeTree,reassgin,manualDispatch,autoDispatch,todoChangeNotify,batchApprove, batchApproveOnMachine } from '@/api/flow/todolist';
import { mapGetters } from 'vuex';
import dayjs from 'dayjs';
import TodolistLeft from './components/TodolistLeft.vue';
@@ -97,24 +107,7 @@
{ label: '椹冲洖', value: 'N' },
],
rules: [{ required: true, message: '璇烽�夋嫨瀹℃壒缁撴灉', trigger: 'blur' }],
- },/*
- {
- label: '鍙戦�佺粰',
- prop: 'assignee',
- type: 'select',
- props: {
- label: 'name',
- value: 'id',
- },
- display: true,
- filterable: true,
- span: 24,
- disabled: false,
- dicData: [
-
- ],
-
- },*/
+ },
{
label: '鍙戦�佺粰',
prop: 'assignee',
@@ -137,7 +130,6 @@
span: 24,
prop: 'comment',
type: 'textarea',
- // rules: [{ required: true, message: '璇疯緭鍏ュ鎵规剰瑙�', trigger: 'blur' }],
rules: [
{
validator: (rule, value, callback) => {
@@ -161,7 +153,12 @@
total: 0,
},
form: {},
- query: {},
+ query: {
+ machineSpec: ['1','2']
+ },
+ defaultQuery: {
+ machineSpec: ['1','2']
+ },
loading: true,
option: {
rowKey: "taskId",
@@ -172,7 +169,7 @@
tip: false,
searchEnter:true,
searchShow: true,
- searchMenuSpan: 6,
+ searchMenuSpan: 4,
dialogWidth: '60%',
border: true,
index: true,
@@ -184,7 +181,7 @@
{
label: '鍏抽敭瀛�',
prop: 'keyword',
- width: 300,
+ width: 200,
search: true,
searchType: 'input',
hide: true,
@@ -196,6 +193,27 @@
{
label: '宸ユ帶缃戣溅搴婄▼搴�',
value: 2,
+ },
+ ],
+ },
+ {
+ label: '鏈哄簥绫诲瀷',
+ prop: 'machineSpec',
+ width: 200,
+ search: true,
+ searchType: 'select',
+ multiple:true,
+ clearable:false,
+ hide: true,
+ emptyValues :["1",'2'],
+ dicData: [
+ {
+ label: '鏁版帶杞﹀簥',
+ value: '1',
+ },
+ {
+ label: '鍔犲伐涓績',
+ value: '2',
},
],
},
@@ -251,6 +269,9 @@
width: 70,
overHidden:true,
prop: 'startUserName',
+ formatter: (val, value, label) => {
+ return value=='' || value==null ?"MES":value;
+ },
},
{
label: '鍒涘缓鏃堕棿',
@@ -365,7 +386,52 @@
},
],
},
- reassignForm: {}
+ reassignForm: {},
+
+ onMachineBox: false,//鐜板満缂栧埗妗�
+ onMachineForm: {},
+ onMachineOption: {
+ submitBtn: true,
+ emptyBtn: false,
+ column: [
+ {
+ label: '瀹℃壒缁撴灉',
+ prop: 'approve',
+ type: 'radio',
+ span: 24,
+ display: false,
+ dicData: [
+ { label: '閫氳繃', value: 'Y' },
+ { label: '椹冲洖', value: 'N' },
+ ],
+ rules: [{ required: true, message: '璇烽�夋嫨瀹℃壒缁撴灉', trigger: 'blur' }],
+ },
+ {
+ label: '鍙戦�佺粰',
+ prop: 'assignee',
+ component: 'elTreeSelect',
+ params: {
+ props:{
+ label: 'name',
+ value:'id',
+ disabled: (data) => data.nodeType==='dept',
+ isLeaf: (data) => data.children==null || data.children.length==0,
+ },
+ },
+ display: true,
+ filterable: true,
+ span: 24,
+ disabled: false,
+ rules: [{ required: true, message: '璇疯緭鍏ラ�夋嫨', trigger: 'blur' }],
+ },
+ {
+ label: '澶囨敞',
+ span: 24,
+ prop: 'comment',
+ type: 'textarea',
+ },
+ ],
+ },
};
},
watch: {
@@ -425,10 +491,30 @@
this.optionApprove.column[1].data = this.assigneeData;
this.reassignOption.column[1].data = this.assigneeData;
+ this.onMachineOption.column[1].data = this.assigneeData;
});
},
methods: {
-
+ approveButtonText(taskDefinitionKey){
+ let lower = taskDefinitionKey.toLowerCase();
+ if(taskDefinitionKey === 'teamLeaderTask') {
+ return '娲惧伐'
+ }else if(taskDefinitionKey == 'unlockProgramConfirm') {
+ //瑙i攣锛岀紪鍒跺鏍�
+ return '澶嶆牳'
+ }else if(taskDefinitionKey == 'programMgrConfirm') {
+ //鍥哄寲锛岀▼搴忕鐞嗗憳纭
+ return '纭'
+ }else if(lower.indexOf('program')>-1) {
+ return '缂栧埗'
+ }else if(lower.indexOf('check')>-1) {
+ return '鏍″'
+ }else if(lower.indexOf('useable')>-1) {
+ return '妫�鏌�'
+ }else{
+ return '瀹℃壒'
+ }
+ },
setApproveBtn (row) { // 璁剧疆瀹℃壒缁撴灉鐨勭姸鎬�
// 1.瀹℃壒鐣岄潰radio鏂囨湰淇敼锛屾櫘閫氳妭鐐圭殑2涓猺adio鏂囨湰 閫氳繃锛坅pprove=Y),涓嶉�氳繃(鐜板湪鐨勯┏鍥�)(approve=N)
@@ -500,7 +586,7 @@
this.optionApprove.column[1].disabled = false;
if (["check", 'cureCheckTask','repalceCheckTask','appendCheckTask'].includes(row.taskDefinitionKey)) {// 鏍″鑺傜偣
this.formApprove.assignee = row.variables.senior;
- } else if (["programmingTask",'cureProgramTask','repalceProgrammingTask','appendProgrammingTask'].includes(row.taskDefinitionKey)) {// 缂栧埗鑺傜偣
+ } else if (["programmingTask",'cureProgramTask','replaceProgrammingTask','appendProgrammingTask'].includes(row.taskDefinitionKey)) {// 缂栧埗鑺傜偣
this.formApprove.assignee = row.variables.checker;
} else if (row.taskDefinitionKey == "teamLeaderTask") {// 浠诲姟娲惧伐(缁勯暱)
this.optionApprove.column[1].disabled = false;
@@ -519,10 +605,16 @@
//鏍规嵁鍦ㄧ嚎鏂囨。34琛岋紝'鍙戦�佺粰'鏄鐢紝浣嗘湁榛樿閫夐」
this.optionApprove.column[1].disabled = true;
- if (["approveTask", 'seniorApproveTask','replaceApprove','unlockApproveTask','appendApproveTask'].includes(row.taskDefinitionKey)) {
+ if (["approveTask", 'seniorApproveTask','replaceApprove','appendApproveTask'].includes(row.taskDefinitionKey)) {
//瀹℃壒鑺傜偣锛屼笉閫氳繃缁欑紪鍒讹細缂栧埗鏄矗浠讳汉锛岀粰瀹為檯缂栫▼鍛�
- //this.formApprove.assignee = row.variables.programmer;
- this.formApprove.assignee = row.variables.actProgrammer;//缁欏疄闄呯紪绋嬪憳
+ if(row.variables.actProgrammer){
+ this.formApprove.assignee = row.variables.actProgrammer;//缁欏疄闄呯紪绋嬪憳
+ }else{
+ this.formApprove.assignee = row.variables.programmer;//鏃犵紪绋嬪憳缁欎富绠″伐鑹�
+ }
+ }else if(['unlockApproveTask'].includes(row.taskDefinitionKey)){
+ //瑙i攣楂樺笀瀹℃壒鑺傜偣,涓婁竴姝ユ槸缂栫▼
+ this.formApprove.assignee = row.variables.programmer;//缁欎富绠″伐鑹�
} else if(["check", 'cureCheckTask','repalceCheckTask','appendCheckTask'].includes(row.taskDefinitionKey)){
//鏍″鑺傜偣,涓婁竴姝ユ槸缂栫▼
//this.formApprove.assignee = row.variables.programmer;
@@ -541,7 +633,7 @@
}else if(["confirmIsUseableTask"].includes(row.taskDefinitionKey)) {
//鍒ゆ柇鏄惁鍙敤鑺傜偣锛屼笉鍙敤锛岀粰缂栧埗
this.formApprove.assignee = row.variables.programmer;
- }if(['teamLeaderTask','repalceProgrammingTask','unlockProgramConfirm'].includes(row.taskDefinitionKey)){
+ }if(['teamLeaderTask','replaceProgrammingTask','unlockProgramConfirm'].includes(row.taskDefinitionKey)){
//鍒濆鑺傜偣涓嶉�氳繃灏辨槸缁撴潫娴佺▼锛屽鐞嗕汉涓虹┖
this.formApprove.assignee = '';
}
@@ -622,8 +714,41 @@
}
}
-
},
+ showBatchOnMachine(){//鏄剧ず鐜板満缂栧埗瀵硅瘽妗�
+ this.onMachineBox = true;
+ this.onMachineForm.assignee = this.transferTaskSelection[0].variables.checker;
+
+ },
+ batchOnMachine() {//缂栧埗鎵归噺澶勭悊锛堢幇鍦虹紪鍒讹級
+
+ this.$confirm('璇风‘璁ゆ槸鍚﹀皢閫夊畾浠诲姟璁剧疆涓虹幇鍦虹紪鍒讹紵', '', {
+ confirmButtonText: this.$t('submitText'),
+ cancelButtonText: this.$t('cancelText'),
+ type: 'warning',
+ }).then(() => {
+ batchApproveOnMachine({
+ taskIds: this.transferTaskSelection.map(v => v.taskId),
+ processInstanceIds: this.transferTaskSelection.map(v => v.processInstanceId),
+ assignee: this.onMachineForm.assignee,
+ }).then(res => {
+ if(res.data.code !== 200) {
+ this.$message.error(res.data.msg);
+ return;
+ }
+ this.$message.success('鎿嶄綔鎴愬姛');
+ this.onMachineBox = false;
+ this.onLoad(this.page, this.query);
+ todoChangeNotify();
+ }).catch(err => {
+ this.$message.success('鎿嶄綔澶辫触');
+ })
+ }).catch(() => {
+ // this.$message.info('宸插彇娑堟搷浣�');
+ });
+
+ },
+
toPerson(form, done) {
let tip = ''
this.reassignType === 1 ? tip = '璇风‘璁ゆ槸鍚︽墜鍔ㄦ淳宸�' : this.reassignType === 2 ? tip = '璇风‘璁ゆ槸鍚﹁嚜鍔ㄦ淳宸�' : tip = '璇风‘璁ゆ槸鍚﹂噸鏂版寚娲�';
@@ -761,18 +886,41 @@
this.setApproveBtn(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涓▼搴�');
- // }
+ async handleSubmit(form, done) {
+
+ let programOnMachine = 'N'
+ let goApprove = true;
+ if(this.row.taskDefinitionKey==='programmingTask' || this.row.taskDefinitionKey==='cureProgramTask'){
+ programOnMachine = this.$refs.todolistLeft.programOnMachine?'Y':'N';
+
+ let atts = this.$refs.todolistLeft.tableData;
+ console.error('atts',atts);
+ let otherFileCOunt = atts.filter(att => att.program === false).length;
+ if(otherFileCOunt == 0 && programOnMachine != 'Y'){
+ let confirResult = await this.$confirm('鏂囦欢鍒楄〃涓棤鍏朵粬鏂囦欢锛岀‘璁よ鎻愪氦鍚楋紵', '', {
+ confirmButtonText: this.$t('submitText'),
+ cancelButtonText: this.$t('cancelText'),
+ type: 'warning',
+ }).then(()=>{
+ goApprove = true;
+ }).catch(action => {
+ //鍙栨秷鎿嶄綔
+ goApprove = false;
+ });
+
+ }
+
}
+ if(goApprove == false){
+ done();
+ return;
+ }
+
approve({
...this.formApprove,
taskId: this.row.taskId,
processInstanceId: this.row.processInstanceId,
- // programIds: this.row.taskDefinitionKey === 'programmingTask' ? this.applist.map(v => v.id).join(',') : '',
+ programOnMachine: programOnMachine
}).then(res => {
if(res.data.code !== 200) {
this.$message.error(res.data.msg);
@@ -794,6 +942,7 @@
let data = {}
this.query = params;
this.page.currentPage = 1;
+ /*
console.log('searchChange', params);
params.createTimeBegin = params?.processCreateTime?.[0] || '';
params.createTimeEnd = params?.processCreateTime?.[1] || '';
@@ -803,11 +952,12 @@
keyword: params.keyword || ''
}
this.query = data
- this.onLoad(this.page, data);
+ */
+ this.onLoad(this.page, {});
done();
},
searchReset() {
- this.query = {};
+ this.query = this.defaultQuery;
this.onLoad(this.page);
},
currentChange(currentPage) {
@@ -823,7 +973,6 @@
onLoad(page, params = {}) {
const query = {
...this.query,
- // category: params.category ? flowCategory(params.category) : null,
mode: this.mode,
};
try {
@@ -831,7 +980,9 @@
} catch (error) {
console.error('鏃ユ湡鏍煎紡鍖栭敊璇�', error);
}
-
+ console.log('params',params);
+ console.log('q',query);
+ console.log('thisq',this.query);
this.loading = true;
getList(page.currentPage, page.pageSize, Object.assign(query, params)).then(res => {
const data = res.data.data;
@@ -847,7 +998,19 @@
};
</script>
+<style lang="scss">
+.remark-drawer {
+ .el-drawer__header {
+ padding-top:5px;
+ margin-bottom: 0px !important;
+ }
+ .el-drawer__body{
+ padding-top:5px;
+ }
+}
+</style>
<style scoped="scoped" lang="scss">
+
.approve-box {
display: flex;
--
Gitblit v1.9.3