财务条
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

140 lines
3.8 KiB

<template>
<div v-if="data.info.list && data.info.list.length">
<div class="w-full overflow-x-scroll">
<table class="text-gray-500 mt-4 text-xs">
<tr class="bg-gray-100">
<td width="15%">申请人</td>
<td width="16%">金额(元)</td>
<td width="20%">时间</td>
<td width="10%">操作</td>
</tr>
<tr v-for="item in data.info.list">
<td>{{item.submitName}}</td>
<td>{{item.money}}</td>
<td>{{dayjs(item.submitTime - 0).format('YYYY-MM-DD')}}</td>
<td>
<div v-if="!item.applyType" class="flex flex-row justify-between">
<van-button type="success" size="mini" class="rounded" @click="showRemark(item.financeCheckId, 1)">通过</van-button>
<van-button type="danger" size="mini" class="rounded" @click="showRemark(item.financeCheckId, 2)">驳回</van-button>
</div>
<div class="text-center" v-else :class="item.applyType === 1 ? 'text-blue-500' : 'text-red-500'">{{ item.applyType === 1 ? '已完成' : '已驳回' }}</div>
</td>
</tr>
</table>
</div>
<div class="w-1/2 mt-4 ml-48">
<van-pagination v-model="data.pageNum" :items-per-page="data.pageSize" :page-count="data.pages" mode="simple" />
</div>
</div>
<van-empty v-else description="暂无数据" />
<van-dialog v-model:show="data.show" title="备注" show-cancel-button @confirm="handleAudit">
<van-field :border="data.border" v-model="data.remark" type="textarea" class="remark" placeholder="请输入备注" />
</van-dialog>
</template>
<script setup>
import dayjs from "dayjs";
import {ref, reactive, onMounted, nextTick} from'vue';
import { audit } from 'apis/finance';
import { queryNeedCheckByMe } from 'apis/projectFinance';
import { Toast } from 'vant';
const data = reactive({
info: {},
pageNum: 1,
pageSize: 10,
pages: 0,
show: false,
remark: '',
auditInfo: {},
border: true
})
const taskId = useTaskId()
/**
* 查看项目下的所有任务对应的财务信息
* @param { Number } pageNum
* @param { Number } pageSize
* @param { String } taskDetailId 任务详情id
*/
async function handleFinanceOfProject(){
try {
const params = {
param:{
pageNum: data.pageNum,
pageSize: data.pageSize,
taskDetailId: taskId.value
}
}
const res = await queryNeedCheckByMe(params)
data.info = res
data.pageNum = res && res.pageNum ? +res.pageNum : 1
data.pageSize = res && res.pageSize ? +res.pageSize : 10
data.pages = res && res.pages ? +res.pages : 0
} catch (error) {
console.error('error: ', error);
}
}
onMounted(() => {
nextTick(() => {
handleFinanceOfProject()
})
})
// 填写备注
function showRemark(financeCheckId, checkStatus){
data.show = true
data.auditInfo = { financeCheckId, checkStatus }
}
/**
* 审批
* @param { Number } checkStatus 审核状态 1已通过 2驳回
* @param { String } financeCheckId 审核id
* @param { String } remark 备注
*/
async function handleAudit(financeCheckId, checkStatus){
try {
const { auditInfo, remark } = data
const { financeCheckId, checkStatus } = data.auditInfo
const params = {
param:{
financeCheckId,
checkStatus,
remark: data.remark
}
}
await audit(params)
Toast('审批成功');
handleFinanceOfProject()
data.remark = ''
} catch (error) {
console.error('error: ', error);
}
}
</script>
<style scoped lang="less">
table{
width: 120%;
td{
border: 0.5px solid #ccc;
padding: 0.5rem;
}
}
.input-box{
padding: 0!important;
border-bottom: 1px solid #ccc
}
.remark{
border: 1px solid #ccc;
border-radius: 4px;
margin: 5%;
width: 90%;
}
</style>