approval.vue 6.15 KB
<template>
	<view>
		<view class="text-center whitebg" v-if="userType=='2'">
			<view class="cardNav">
				<view class="active">审核</view>
				<view @click="goMerge">合并</view>
				<view @click="goMergeUp">提交</view>
			</view>
		</view>
		<uni-segmented-control class="whitebg" :current="current" :values="navs" @clickItem="onClickItem"
			styleType="text" activeColor="#AD181F"></uni-segmented-control>
		
		<view class="appList">
			<view class="appItem" v-for="(item,index) in infoList" :key="index">
				<view class="status" @click="goDetail(item)">
					<text :class="{
                'text-primary':item.auditStatus=='0',
                'text-success':item.auditStatus=='1',
                'text-danger':item.auditStatus=='2',
                'text-warning':item.auditStatus=='3'
				}">{{ item.statusStr }}</text>
				</view>

				<view class="date" v-if="item.status!='0'&&item.submitTime">提交时间:{{item.submitTime}}</view>
				<view class="text-primary" v-if="item.examCode">{{item.examCode}}</view>
				<view class="name mt0" @click="goDetail(item)">{{item.name}}</view>
				<view class="pp esp">申请日期:{{item.applyTime.substring(0,10)}}</view>
				<view class="pp esp">考级日期:{{item.startTime.substring(0,16)}}{{item.endTime.substring(0,16)}}</view>
				<view class="flexbox" @click="goDetail(item)">
					<view v-if="userType!='1'">
						考级考官
						<view>{{item.examinerNames}}</view>
					</view>
					<view>
						考级考生数
						<view>{{item.totalNum}}</view>
					</view>
					<view v-if="userType=='1'||userType=='2'">
						总金额
						<view>¥{{item.totalAmount}}</view>
					</view>
				</view>
				<view class="func" v-if="item.auditStatus=='0'">
					<button @click="audit(item,'2')">拒绝</button>
					<button @click="audit(item,'1')">同意</button>
				</view>
				<view class="func" v-if="item.auditStatus=='1'&&item.isView=='1'">
					<button @click="handleBack(item)">撤回</button>
				</view>
			</view>
		</view>
		
		<view class="nodata" v-if="infoList.length==0">
			<image mode="aspectFit" src="/static/nodata.png"></image>
			<text>暂无数据</text>
		</view>
	</view>
</template>

<script setup>
	import * as api from '@/common/api.js'
	import config from '@/config.js'
		import _ from 'underscore'
	import {
		onMounted,
		ref
	} from 'vue'
	import {
		onLoad,
		onShow
	} from '@dcloudio/uni-app'
	const app = getApp();
	const queryParams = ref({
		// pageNum: 1,
		// pageSize: 10
		status: '0',
		type: '1'
	})
	const navs = ref(['审核中', '审核通过', '审核拒绝', '审批撤回'])
	const statusArr = ['审批中', '审批通过', '审批拒绝', '审批撤回']
	const current = ref()
	const infoList = ref([])
	const total = ref(0)
	const deptType = ref('')
	const userType = ref('')
	onLoad(() => {

	})
	onShow(() => {
		if (app.globalData.isLogin) {
			init()
		} else {

			app.firstLoadCallback = () => {
				init()
			};
		}
	})

	function init() {
		deptType.value = app.globalData.deptType
		userType.value = app.globalData.userType
		getList()
	}


	function getList() {
		uni.showLoading({
			title: '加载中',
			mask: true
		})
		api.getVerityList(queryParams.value).then(res => {
			uni.hideLoading()
			    const list = []
			    _.each(res.rows, r => {
			      const item = JSON.parse(r.content)
			      item.recordId = r.recordId
			      item.auditStatus = r.auditStatus
			      item.submitStatus = r.submitStatus
			      item.distributeTime = r.distributeTime
			      item.statusStr = statusArr[r.auditStatus]
			      item.remark = r.remark
			      item.isView = r.isView
			      item.sourceData = r
			      item.auditProcess = r.auditProcess
			      list.push(item)
			    })
			    infoList.value = list
			    total.value = res.total
		})
	}

	function onClickItem(e) {
		console.log(e)
		queryParams.value.status = e.currentIndex
		getList()
	}

	function goDetail(item) {
		console.log(item)
		const form = encodeURIComponent(JSON.stringify(item))
		if(item.status!='0'){
			if(userType.value == '2'){
				// 省
				let path = `/level/applyDetail?examId=${item.examId}&form=${form}`
				uni.navigateTo({
					url: path
				});
			}else{
				let path = `/level/applyDetail?examId=${item.examId}`
				uni.navigateTo({
					url: path
				});
			}

		} else {
			return
		}
	}
	function goMerge(){
		let path = `/level/merge`
		uni.redirectTo({
			url: path
		});
	}
	function goMergeUp(){
		let path = `/level/mergeUp`
		uni.redirectTo({
			url: path
		});
	}
	function audit(item, flag) {
		console.log(item.sourceData)
		    var obj = {
		      flag: flag,
		      reason: null,
		      body: [JSON.stringify(item.sourceData)]
		    }
		
		if (flag == '2') {
			// 拒绝
			// 弹出框填写理由
			uni.showModal({
				title: '请输入拒绝理由',
				editable: true,
				success: function(res) {
					if (res.confirm) {
						if (!res.content) {
							uni.showToast({
								title: '请输入拒绝理由',
								icon: 'none'
							})
						} else {
							obj.reason = res.content
							doApproval(obj)
						}
					}
				}
			})
		} else if (flag == '1') {
			// 二次确认
			uni.showModal({
				title: '提示',
				content: `确定审批通过吗`,
				success: function(res) {
					if (res.confirm) {
						doApproval(obj)
					}
				}
			})
		}
	}
	function handleBack(row){
		uni.showModal({
			title: '请输入撤回理由',
			editable: true,
			success: function(res) {
				if (res.confirm) {
					if (!res.content) {
						uni.showToast({
							title: '请输入撤回理由',
							icon: 'none'
						})
					} else {
						var obj = {
						        flag: '2',
						        reason: res.content,
						        recordId: row.recordId
						}
						api.doVerityBack(obj).then(rr=>{
							uni.showToast({
								title: '操作成功',
								icon: 'none'
							})
							getList()
						})
					}
				}
			}
		})
	}
	function doApproval(obj) {
		uni.showLoading({
			title: '加载中'
		})
		console.log(obj)
		api.doVerity(obj).then((res) => {
			uni.hideLoading()
			uni.showToast({
				title: '操作成功',
				icon: 'none'
			})
			getList()
		})
	}
</script>


<style scoped lang="scss">
	.mt0 {
		margin-top: 0 !important;
	}

	.appList .appItem .name {
		width: 80%;
		word-break: break-all;
	}

</style>