Explorar o código

feat: 发起审批快捷入口

luoyali hai 1 ano
pai
achega
5080b867b6

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

@@ -17,7 +17,8 @@ const api = {
 	claimProcess: '/v1/process-task/claim', // 认领任务
 	revokeProcess: '/v1/process-task/revoke', // 撤回任务
 	previousNodeName: '/v1/process-task/previous-node-names', // 以前节点名称列表
-	processTaskJump: '/v1/process-task/jump' // 跳到指定节点任务
+	processTaskJump: '/v1/process-task/jump', // 跳到指定节点任务
+	countTask: '/v1/process-task/count-pending-approval' // 我的待办数量
 }
 
 // 待认领任务分页列表
@@ -161,6 +162,14 @@ export function processTaskJumpApi(data: any): AxiosPromise {
 	})
 }
 
+// 待办数量
+export function countTaskApi(): AxiosPromise {
+	return request({
+		url: api.countTask,
+		method: 'post'
+	})
+}
+
 export default {
 	processTaskPageMyApplicationApi,
 	processTaskPageApprovedApi,
@@ -174,5 +183,6 @@ export default {
 	processClaimTaskApi,
 	processRevokeTaskApi,
 	processPreviousNodeNameApi,
-	processTaskJumpApi
+	processTaskJumpApi,
+	countTaskApi
 }

+ 1 - 0
src/assets/icons/processInfo/horn.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="16px" height="16.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#1890ff" d="M511.219 58.483l-227.213 227.313h-161.038c-41.846 0-75.781 33.935-75.781 75.781v303.097c0 41.882 33.935 75.782 75.781 75.782h161.037l227.213 227.377c41.845 0 75.748-33.934 75.748-75.78v-757.789c0.001-41.846-33.901-75.781-75.746-75.781zM511.219 889.427l-198.83-219.372h-189.421v-303.093h189.421l198.83-219.402v741.868z"  /><path fill="#1890ff" d="M960.31 546.395c7.483 0 13.534-14.892 13.534-33.239s-6.051-33.239-13.534-33.239h-94.755c-7.482 0-13.533 14.889-13.533 33.239 0 18.347 6.051 33.239 13.533 33.239h94.755z"  /><path fill="#1890ff" d="M970.582 116.844c6.484-3.743 4.277-19.663-4.897-35.552s-21.858-25.759-28.341-22.017l-82.059 47.376c-6.483 3.743-4.277 19.663 4.897 35.552s21.859 25.758 28.342 22.016l82.058-47.375z"  /><path fill="#1890ff" d="M970.582 909.47c6.484 3.743 4.277 19.662-4.897 35.553-9.174 15.888-21.858 25.759-28.341 22.016l-82.059-47.376c-6.483-3.743-4.277-19.662 4.897-35.552 9.174-15.889 21.859-25.758 28.342-22.016l82.058 47.375z"  /><path fill="#1890ff" d="M640.286 683.412c-6.756-18.186-4.889-35.436 13.299-42.194 45.93-21.204 67.853-62.464 73.459-114.215 6.541-60.379-22.355-115.869-72.24-138.725-16.317-10.496-23.073-28.677-12.579-44.995 10.497-16.316 28.683-23.073 44.995-12.579 73.893 42.911 118.17 117.522 108.828 203.777-7.477 69.002-49.452 134.269-113.569 162.23-14.983 8.481-35.070 2.914-42.193-13.294z"  /></svg>

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
src/assets/icons/processInfo/lingdang.svg


+ 1 - 0
src/assets/icons/processInfo/lingqu.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="16px" height="16.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#1890ff" d="M900.608 962.56H121.856c-14.336 0-25.6-11.264-25.6-25.6V308.736c0-14.336 11.264-25.6 25.6-25.6h778.752c14.336 0 25.6 11.264 25.6 25.6V936.96c0 14.336-11.264 25.6-25.6 25.6z m-753.152-51.2h727.552V334.336H147.456V911.36z"  /><path fill="#1890ff" d="M985.6 334.336H37.888c-14.336 0-25.6-11.264-25.6-25.6V107.52c0-14.336 11.264-25.6 25.6-25.6H985.6c14.336 0 25.6 11.264 25.6 25.6v201.216c0 14.336-11.264 25.6-25.6 25.6z m-922.112-51.2H960V133.12H63.488v150.016z m656.896 223.232H301.056c-14.336 0-25.6-11.264-25.6-25.6s11.264-25.6 25.6-25.6h419.328c14.336 0 25.6 11.264 25.6 25.6s-11.264 25.6-25.6 25.6zM274.432 733.696a43.008 43.008 0 1 0 86.016 0 43.008 43.008 0 1 0-86.016 0zM469.504 733.696a43.008 43.008 0 1 0 86.016 0 43.008 43.008 0 1 0-86.016 0zM665.088 733.696a43.008 43.008 0 1 0 86.016 0 43.008 43.008 0 1 0-86.016 0z"  /></svg>

+ 1 - 0
src/assets/icons/processInfo/tuiguangzhong.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="16px" height="15.63px" viewBox="0 0 1048 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#1890ff" d="M359.966106 800.470016 816.001126 543.319962l35.088998-22.936986-35.725005-21.89097L359.509197 239.925043l0.380006 71.140045 0 442.83L359.966106 800.470016zM414.601114 335.592038 733.773107 521.152 414.601114 706.715034 414.601114 335.592zM524.2752 0.018022C241.516134 0.018022 12.288102 229.245952 12.288102 512.005018c0 112.735027 36.439962 216.958976 98.182042 301.539021l38.667981-40.257024C97.458176 699.231027 67.143168 609.159987 67.143168 512.005018c0-252.46505 204.668006-457.132032 457.132032-457.132032 252.45399 0 457.120973 204.668006 457.120973 457.132032 0 252.460954-204.668006 457.118003-457.120973 457.118003-96.240026 0-185.530982-29.744026-259.189965-80.534016l-34.539008 42.797978c83.15095 58.344038 184.438989 92.594995 293.728973 92.594995 282.755994 0 511.984026-229.220966 511.984026-511.976038C1036.258202 229.245952 807.03017 0.018022 524.2752 0.018022z" /></svg>

+ 1 - 0
src/assets/icons/processInfo/wanjie.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="16px" height="16.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path fill="#1890ff" d="M800.032 137.552H684.824a57.608 57.608 0 0 0-57.608-57.608H396.784a57.608 57.608 0 0 0-57.608 57.608H223.968c-63.632 0-115.216 51.584-115.216 115.216v576.072c0 63.632 51.584 115.216 115.216 115.216h576.072c63.632 0 115.216-51.584 115.216-115.216V252.768c-0.008-63.632-51.584-115.216-115.224-115.216z m-374.44 0h172.824a28.8 28.8 0 0 1 0 57.6H425.592a28.8 28.8 0 0 1 0-57.6z m432.048 691.288a57.608 57.608 0 0 1-57.608 57.608H223.968a57.608 57.608 0 0 1-57.608-57.608V252.768a57.608 57.608 0 0 1 57.608-57.608h115.216a57.608 57.608 0 0 0 57.608 57.608h230.432a57.608 57.608 0 0 0 57.608-57.608h115.216a57.608 57.608 0 0 1 57.608 57.608v576.072zM694.088 432.552L472.648 645.92 331.728 510.136c-11.12-10.712-29.144-10.712-40.264 0a26.72 26.72 0 0 0 0 38.792l161.048 155.176c11.12 10.712 29.144 10.712 40.264 0l241.576-232.768c11.12-10.712 11.12-28.08 0-38.792s-29.144-10.712-40.264 0.008z"  /></svg>

+ 125 - 2
src/views/approve/launch/index.vue

@@ -1,7 +1,67 @@
 <template>
 	<div class="flex-column-page-wrap pageWrap">
 		<div style="padding: 10px">
-			<el-card class="box-card">
+			<!-- 快捷入口 -->
+			<el-row :gutter="10" style="margin-bottom: 10px">
+				<el-col :span="6">
+					<div class="left-item-box box">
+						<div class="launch-todo" @click="jumpOtherPage('待审批')">
+							<el-row :gutter="5">
+								<el-col :span="12" class="mt-icon">
+									<img style="width: 45px; height: 45px" src="@/assets/icons/processInfo/lingdang.svg" />
+								</el-col>
+								<el-col :span="12">
+									<div class="flex flex-v">
+										<div class="mt-title">待审批的</div>
+										<div class="mt-value">{{ countNum }}</div>
+									</div>
+								</el-col>
+							</el-row>
+						</div>
+					</div>
+				</el-col>
+				<el-col :span="18">
+					<div class="right-item-box box">
+						<el-row>
+							<el-col :span="6">
+								<div class="app-task" @click="jumpOtherPage('我的申请')">
+									<div class="app-task-icon">
+										<img style="width: 30px; height: 30px" src="@/assets/icons/processInfo/tuiguangzhong.svg" />
+									</div>
+									<div class="app-task-title">我申请的</div>
+								</div>
+							</el-col>
+							<el-col :span="6">
+								<div class="app-task" @click="jumpOtherPage('我收到的')">
+									<div class="app-task-icon">
+										<img style="width: 30px; height: 30px" src="@/assets/icons/processInfo/horn.svg" />
+									</div>
+									<div class="app-task-title">我收到的</div>
+								</div>
+							</el-col>
+							<el-col :span="6">
+								<div class="app-task" @click="jumpOtherPage('认领任务')">
+									<div class="app-task-icon">
+										<img style="width: 30px; height: 30px" src="@/assets/icons/processInfo/lingqu.svg" />
+									</div>
+									<div class="app-task-title">认领任务</div>
+								</div>
+							</el-col>
+							<el-col :span="6">
+								<div class="app-task" @click="jumpOtherPage('已审批')">
+									<div class="app-task-icon">
+										<img style="width: 30px; height: 30px" src="@/assets/icons/processInfo/wanjie.svg" />
+									</div>
+									<div class="app-task-title">已审批的</div>
+								</div>
+							</el-col>
+						</el-row>
+					</div>
+				</el-col>
+			</el-row>
+
+			<!-- 审批列表 -->
+			<el-card class="box-card" shadow="never">
 				<el-collapse v-model="activeNames" @change="handleChange">
 					<el-collapse-item v-for="item in startList" :key="item.categoryId" :title="item.categoryName" :name="item.categoryName">
 						<el-row>
@@ -41,15 +101,18 @@
 </template>
 
 <script setup name="flow_modal">
+import router from '@/router'
 import { ref, onMounted } from 'vue'
 import ItemDrawer from './ItemDrawer.vue'
 const input = ref('')
 const activeNames = ref(['1'])
 import model from '@/api/flow/process'
+import { countTaskApi } from '@/api/flow/processTask'
 import { flowIconPrefix /*, getAssetsFile*/ } from '@/utils/index'
 const startList = ref([])
 const drawerVisible = ref(false)
 const record = ref({})
+const countNum = ref(0)
 const handleChange = val => {
 	console.log(val)
 }
@@ -61,12 +124,31 @@ const listEv = async () => {
 	activeNames.value = startList.value.map(v => v.categoryName)
 }
 
+// 我的待办数量
+const getCountTask = async () => {
+	const count = await countTaskApi()
+	countNum.value = count
+}
+
+// 跳转页面
+const jumpOtherPage = item => {
+	const obj = {
+		待审批: '/approve/pending-approval',
+		我的申请: '/approve/my-application',
+		我收到的: '/approve/my-received',
+		认领任务: '/approve/pending-claim',
+		已审批: '/approve/approved'
+	}
+	router.push(obj[item])
+}
+
 const testEv = process => {
 	record.value = process
 	drawerVisible.value = true
 }
 onMounted(() => {
 	listEv()
+	getCountTask()
 })
 </script>
 
@@ -74,7 +156,11 @@ onMounted(() => {
 .pageWrap {
 	//height: 100%;
 	//overflow-x: scroll;
-	//background: #fff;
+	background: var(--el-bg-color-page);
+	.box {
+		padding: 15px;
+		background: var(--el-bg-color);
+	}
 }
 .card-in {
 	height: 100px;
@@ -132,4 +218,41 @@ onMounted(() => {
 		align-items: center;
 	}
 }
+
+.mt-icon {
+	text-align: center;
+	line-height: 80px;
+	font-size: 42px;
+}
+.launch-todo {
+	cursor: pointer;
+	border-radius: 4px;
+	&:hover {
+		background-color: #f5f4f3;
+	}
+	.mt-title {
+		font-size: 18px;
+		padding: 10px 0 0;
+	}
+	.mt-value {
+		font-size: 32px;
+		font-weight: 700;
+	}
+}
+.app-task {
+	cursor: pointer;
+	border-radius: 10px;
+	text-align: center;
+	padding: 0 0 15px;
+	&:hover {
+		background-color: #f5f4f3;
+	}
+	&-icon {
+		font-size: 32px;
+		margin-bottom: 4px;
+	}
+	&-title {
+		font-size: 16px;
+	}
+}
 </style>

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio