瀏覽代碼

feat: 退回联调 100%,审批状态不同按钮显示控制 100%

luoyali 1 年之前
父節點
當前提交
f70e654201

+ 23 - 2
src/api/flow/processTask.ts

@@ -16,7 +16,9 @@ const api = {
 	appendNode: '/v1/process-task/append-node', // 加签审批
 	transfer: '/v1/process-task/transfer', // 转交任务
 	claimProcess: '/v1/process-task/claim', // 认领任务
-	withDrawProcess: '/v1/process-task/withdraw' // 撤回任务
+	withDrawProcess: '/v1/process-task/withdraw', // 撤回任务
+	previousNodeName: '/v1/process-task/previous-node-names', // 以前节点名称列表
+	processTaskJump: '/v1/process-task/jump' // 跳到指定节点任务
 }
 
 // 待认领任务分页列表
@@ -149,6 +151,23 @@ export function processWithDrawTaskApi(taskId: string): AxiosPromise {
 	})
 }
 
+// 以前节点名称列表
+export function processPreviousNodeNameApi(taskId: string): AxiosPromise {
+	return request({
+		url: `${api.previousNodeName}/${taskId}`,
+		method: 'post'
+	})
+}
+
+// 跳到指定节点任务
+export function processTaskJumpApi(data: string): AxiosPromise {
+	return request({
+		url: `${api.processTaskJump}`,
+		method: 'post',
+		data
+	})
+}
+
 export default {
 	processTaskPageMyApplicationApi,
 	processTaskPageApprovedApi,
@@ -161,5 +180,7 @@ export default {
 	processAppendNodeApi,
 	processTransferApi,
 	processClaimTaskApi,
-	processWithDrawTaskApi
+	processWithDrawTaskApi,
+	processPreviousNodeNameApi,
+	processTaskJumpApi
 }

+ 62 - 28
src/views/approve/components/approvedContent.vue

@@ -67,35 +67,55 @@
 				</div>
 
 				<!-- 3、底部操作按钮 -->
+				<!--
+        1、已审批的任务不显示操作按钮
+        2、我的申请显示撤回按钮
+        3、认领任务显示认领按钮
+        4、我收到的任务显示评论
+        -->
 				<div class="flow-actions">
 					<el-button :icon="ChatLineSquare" @click="openComment('reviewVisible')">评论</el-button>
-					<el-button :icon="Check" type="success" @click="openComment('consentOrRefuseVisible', 'agree')">同意</el-button>
-					<el-button :icon="Close" type="danger" @click="openComment('consentOrRefuseVisible', 'reject')">拒绝</el-button>
-					<el-button :icon="Close" @click="withDrawTaskEv">撤回</el-button>
-					<el-button :icon="Close" @click="claimTaskEv">认领</el-button>
-					<el-dropdown style="margin-left: 12px">
-						<el-button :icon="More">更多</el-button>
-						<template #dropdown>
-							<el-dropdown-menu>
-								<el-dropdown-item @click.native="openComment('deliverToReviewVisible')">
-									<el-icon><DArrowLeft /></el-icon>
-									转交
-								</el-dropdown-item>
-								<el-dropdown-item @click.native="openComment('rollbackVisible')">
-									<el-icon><Switch /></el-icon>
-									回退
-								</el-dropdown-item>
-								<el-dropdown-item @click.native="openComment('addSignVisible')">
-									<el-icon><Plus /></el-icon>
-									加签
-								</el-dropdown-item>
-								<el-dropdown-item @click.native="openComment('loseSignVisible')">
-									<el-icon><Minus /></el-icon>
-									减签
-								</el-dropdown-item>
-							</el-dropdown-menu>
-						</template>
-					</el-dropdown>
+					<template v-if="currentTaskType !== 'myReceived' || currentTaskType !== 'approved'">
+						<el-button
+							v-if="currentTaskType === 'pendingApproval'"
+							:icon="Check"
+							type="primary"
+							@click="openComment('consentOrRefuseVisible', 'agree')"
+							>同意</el-button
+						>
+						<el-button
+							v-if="currentTaskType === 'pendingApproval'"
+							:icon="Close"
+							type="danger"
+							@click="openComment('consentOrRefuseVisible', 'reject')"
+							>拒绝</el-button
+						>
+						<el-button v-if="currentTaskType === 'myApplication'" :icon="Close" @click="withDrawTaskEv">撤回</el-button>
+						<el-button v-if="currentTaskType === 'pendingClaim'" :icon="Close" @click="claimTaskEv">认领</el-button>
+						<el-dropdown v-if="currentTaskType === 'pendingApproval'" style="margin-left: 12px">
+							<el-button :icon="More">更多</el-button>
+							<template #dropdown>
+								<el-dropdown-menu>
+									<el-dropdown-item @click.native="openComment('deliverToReviewVisible')">
+										<el-icon><DArrowLeft /></el-icon>
+										转交
+									</el-dropdown-item>
+									<el-dropdown-item @click.native="openComment('rollbackVisible')">
+										<el-icon><Switch /></el-icon>
+										回退
+									</el-dropdown-item>
+									<el-dropdown-item @click.native="openComment('addSignVisible')">
+										<el-icon><Plus /></el-icon>
+										加签
+									</el-dropdown-item>
+									<el-dropdown-item @click.native="openComment('loseSignVisible')">
+										<el-icon><Minus /></el-icon>
+										减签
+									</el-dropdown-item>
+								</el-dropdown-menu>
+							</template>
+						</el-dropdown>
+					</template>
 				</div>
 			</template>
 		</div>
@@ -151,6 +171,20 @@ import RollbackDialog from './rollbackDialog'
 import viewForm from '@/utils/form'
 import { storeToRefs } from 'pinia'
 
+const props = defineProps({
+	/**
+	 * pendingApproval 待审批
+	 * myApplication 我的申请
+	 * myReceived 我收到的
+	 * pendingClaim 认领任务
+	 * approved 已审批
+	 */
+	currentTaskType: {
+		type: String,
+		default: ''
+	}
+})
+
 // store值
 const taskProcessInfo = useTaskProcessStore()
 const { currentTaskRow } = storeToRefs(taskProcessInfo)
@@ -212,7 +246,7 @@ const openComment = async (visibleType, item) => {
 				const api = validateForm.value.api
 				bool = await api.validate((valid, fail) => {
 					if (valid) {
-            // 表单验证通过
+						// 表单验证通过
 						const values = api.formData()
 						const processForm = JSON.parse(cur_processForm_str)
 						processForm.forEach(v => {

+ 27 - 36
src/views/approve/components/rollbackDialog.vue

@@ -2,15 +2,15 @@
 	<!-- 回退审批弹窗 -->
 	<el-dialog v-model="reviewVisibleDialog" title="回退审批" width="700" destroy-on-close>
 		<el-form ref="formRef" v-loading="uploadLoading" label-position="top" element-loading-text="图片上传中..." :model="form" label-width="80px">
-			<el-form-item label="回退到" prop="review" :rules="[{ required: true, message: '请选择回退节点' }]">
-				<el-select v-model="form.deliverTo" placeholder="请选择回退节点">
-					<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
+			<el-form-item label="回退到" prop="nodeName" :rules="[{ required: true, message: '请选择回退节点' }]">
+				<el-select v-model="form.nodeName" placeholder="请选择回退节点">
+					<el-option v-for="item in rollbackOptions" :key="item" :label="item" :value="item" />
 				</el-select>
 			</el-form-item>
-			<el-form-item label="回退原因" prop="review">
-				<el-input v-model="form.review" type="textarea" placeholder="请输入回退原因" maxlength="64" show-word-limit> </el-input>
+			<el-form-item label="回退原因" prop="content">
+				<el-input v-model="form.content" type="textarea" placeholder="请输入回退原因" maxlength="64" show-word-limit> </el-input>
 			</el-form-item>
-			<el-form-item prop="attachment" label="附件" class="example-img-box">
+			<el-form-item v-if="false" prop="attachment" label="附件" class="example-img-box">
 				<!--'.docx', '.doc', '.pptx', '.ppt', '.xlsx', '.xls', '.zip', '.csv', '.pdf', '.png', '.jpg'  因前端不支持图片以外格式,所以注释 -->
 				<FileUpload
 					v-model="form.attachment"
@@ -33,8 +33,9 @@
 </template>
 
 <script setup>
-import { computed, reactive, ref } from 'vue'
+import { computed, onMounted, reactive, ref } from 'vue'
 import FileUpload from '@/components/FileUpload.vue'
+import { processPreviousNodeNameApi, processTaskJumpApi } from '@/api/flow/processTask'
 
 const props = defineProps({
 	modelValue: {
@@ -48,49 +49,35 @@ const props = defineProps({
 })
 const btnDisabled = ref(false)
 const form = reactive({
-	deliverTo: '',
-	review: '',
-	attachment: []
+	nodeName: '',
+	content: ''
+	// attachment: []
 })
 const formRef = ref(null)
 const uploadLoading = ref(false)
-const options = [
-	{
-		value: 'Option1',
-		label: 'Option1'
-	},
-	{
-		value: 'Option2',
-		label: 'Option2'
-	},
-	{
-		value: 'Option3',
-		label: 'Option3'
-	},
-	{
-		value: 'Option4',
-		label: 'Option4'
-	},
-	{
-		value: 'Option5',
-		label: 'Option5'
-	}
-]
+const rollbackOptions = ref([])
 
 const $myEmit = defineEmits(['update:modelValue', 'successCb'])
 
+// 回退节点列表
+const getProcessPreviousNodeNameApi = async () => {
+	const res = await processPreviousNodeNameApi(props.taskId)
+	rollbackOptions.value = res || []
+}
+
 const submitForm = () => {
 	btnDisabled.value = true
-	const formData = { ...form }
+	const formData = { ...form, taskId: props.taskId }
 	formRef.value
 		.validate()
-		.then(valid => {
+		.then(async valid => {
 			if (valid) {
+				await processTaskJumpApi(formData)
+				closeDialog()
 				btnDisabled.value = false
 			}
 		})
 		.catch(err => {
-			console.error('挂起订单表单拦截', err)
 			btnDisabled.value = false
 		})
 }
@@ -100,6 +87,8 @@ const closeDialog = () => {
 	$myEmit('update:modelValue', false)
 }
 
+const clearValidate = () => {}
+
 const reviewVisibleDialog = computed({
 	get() {
 		return props.modelValue
@@ -109,7 +98,9 @@ const reviewVisibleDialog = computed({
 	}
 })
 
-const clearValidate = () => {}
+onMounted(() => {
+	getProcessPreviousNodeNameApi()
+})
 </script>
 
 <style scoped>

+ 1 - 0
src/views/approve/pendingApproval/detail.vue

@@ -1,3 +1,4 @@
+<!-- todo 无用页面 可以删除了-->
 <template>
 	<div>
 		<el-drawer v-model="visibleDialog" class="custom-adrawer" direction="rtl" size="900" @close="handleCancel">

+ 11 - 1
src/views/approve/pendingApproval/index.vue

@@ -5,7 +5,7 @@
 		</div>
 
 		<div class="warp-right">
-			<ApprovedContent />
+			<ApprovedContent :current-task-type="taskType" />
 		</div>
 	</div>
 </template>
@@ -13,6 +13,16 @@
 <script setup>
 import ApprovedItem from '../components/approvedItem.vue'
 import ApprovedContent from '../components/approvedContent.vue'
+import { ref } from 'vue'
+
+/**
+ * pendingApproval 待审批
+ * myApplication 我的申请
+ * myReceived 我收到的
+ * pendingClaim 认领任务
+ * approved 已审批
+ */
+const taskType = ref('pendingApproval')
 </script>
 
 <style scoped lang="scss">