Files
fad_oa/ruoyi-ui/src/views/oa/claim/add.vue

315 lines
10 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="main" v-loading="loading">
<div class="">
<div class="">
<el-card style="">
<el-row>
<div>
<h1>差旅费报销申请单</h1>
</div>
<el-button type="primary">
<i class="el-icon-check" @click="addTripClaim">提交</i>
</el-button>
</el-row>
</el-card>
<el-card>
<div class="header">
基本信息
</div>
<el-divider></el-divider>
<div>
<el-form :form="form" label-width="100px" :rules="rules">
<el-form-item label="报销描述:" prop="remark">
<el-input type="textarea" v-model="form.remark" :rows="5"></el-input>
</el-form-item>
<el-row>
<el-col :span="8">
<el-form-item label="开始时间:" prop="startTime">
<el-date-picker
v-model="form.startTime"
align="right"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd"
>
</el-date-picker>
</el-form-item>
<el-form-item label="出差天数:" prop="tripDays">
<el-input type="number" v-model="form.tripDays"placeholder="请输入出差天数" ></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="结束时间:" prop="endTime" >
<el-date-picker
v-model="form.endTime"
align="right"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd"
>
</el-date-picker>
</el-form-item>
<el-form-item label="报销总额:" prop="cost">
<el-input v-model="form.cost" placeholder="请输入报销总额">
<template slot="append"></template>
</el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="关联项目:" prop="projectId">
<el-select v-model="form.projectId" filterable placeholder="请选择">
<el-option
v-for="item in projectList"
:key="item.projectId"
:label="item.projectName"
:value="item.projectId">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="票据总数:" prop="detailNumber">
<el-input v-model="form.detailNumber" placeholder="请输入票据总数">
<template slot="append"></template>
</el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-divider></el-divider>
<div style="font-weight: 900;display: flex;">
<div style="width: 50%">
最终报销金额
<span style="color: red">{{form.cost===""?'请输入金额':form.cost}}</span>
</div>
<div>
大写<span style="color: red">{{numberToCNY(form.cost)}}</span>
</div>
</div>
</div>
</el-card>
<el-card>
报销明细补充
<el-divider></el-divider>
<div>
<div style="margin-bottom: 10px">
<el-button @click="addRow" type="primary">添加</el-button>
<el-button @click="deleteRows" type="danger" :disabled="selectedRows.length === 0">删除</el-button>
<el-button @click="co" type="danger">打印</el-button>
</div>
<el-table
:data="form.claimDetailList"
style="width: 100%"
border
stripe
v-loading="loading"
highlight-current-row
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column label="序号" width="80" type="index"></el-table-column>
<el-table-column label="报销类型">
<template slot-scope="scope">
<el-select v-model="scope.row.claimType" placeholder="请选择报销类型">
<el-option
v-for="dict in dict.type.claim_detail_type"
:key="dict.value"
:label="dict.label"
:value="parseInt(dict.value)"
></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="开始时间">
<template slot-scope="scope">
<el-date-picker
v-model="scope.row.beginTime"
align="right"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd"
>
</el-date-picker>
</template>
</el-table-column>
<el-table-column label="结束时间">
<template slot-scope="scope">
<el-date-picker
v-model="scope.row.endTime"
align="right"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd"
>
</el-date-picker>
</template>
</el-table-column>
<el-table-column label="入住地点">
<template slot-scope="scope">
<el-input v-model="scope.row.lodgingAddress" placeholder="请输入入住地点" :disabled="scope.row.claimType!==1"></el-input>
</template>
</el-table-column>
<el-table-column label="款项金额">
<template slot-scope="scope">
<el-input v-model="scope.row.cost" size="small" placeholder="请输入" >
<template slot="append"></template>
</el-input>
</template>
</el-table-column>
</el-table>
</div>
</el-card>
<el-card>
票据留存
<el-divider></el-divider>
<div style="display: flex">
<div style="margin-right: 20px">
上传票据:
</div>
<div>
<fileUpload v-model="files"/>
</div>
</div>
</el-card>
</div>
</div>
</div>
</template>
<script>
import {addUser, deptTreeSelect, listUser} from "@/api/system/user";
import {addOnboarding} from "@/api/oa/onboarding";
import {listProject} from "../../../api/oa/project";
import {numberToCNY} from "../../../utils/currencyFormatter";
import {startClaim} from "../../../api/workflow/process";
import {addOaClaim} from "../../../api/oa/claim";
export default {
dicts: ['claim_detail_type'],
data() {
return {
loading: false,
// 表单参数
form: {
claimDetailList: [],
fileList:[]
},
// 表单校验
rules: {
startTime: [
{ required: true, message: "开始时间不能为空", trigger: "blur" }
],
endTime: [
{ required: true, message: "结束时间不能为空", trigger: "blur" }
],
tripDays: [
{ required: true, message: "出差天数不能为空", trigger: "blur" }
],
cost: [
{ required: true, message: "报销金额不能为空", trigger: "blur" }
],
detailNumber: [
{ required: true, message: "票据总数不能为空", trigger: "blur" }
]
},
// 项目列表
projectList: [],
selectedRows: [],
files:[]
};
},
created() {
this.getProjectList();
},
methods: {
// 提交报销表单
addTripClaim(){
this.loading = true
// 将文件列表进行处理
this.form.fileList = this.files.split(',').map(file=>({fileUrl:file.trim()}))
startClaim().then(res=>{
this.form.procInsId = res.data
addOaClaim(this.form).then(res => {
this.loading = false
this.$modal.msgSuccess("新增成功");
this.goBack()
})
})
},
co(){
console.log(this.files)
},
// 添加新的一行
addRow() {
this.form.claimDetailList.push({
claimType: '',
beginTime: '',
endTime: '',
cost: '',
lodgingAddress:''
});
},
// 删除勾选的行
deleteRows() {
this.form.claimDetailList = this.form.claimDetailList.filter(row => !this.selectedRows.includes(row));
this.selectedRows = []; // 清空选中的行
},
// 处理表格头部的序号显示
renderHeader(h, { column }) {
return h('span', column.label);
},
getProjectList(){
let query = {
pageSize:9999,
pageNum:1,
}
listProject(query).then(res => {
this.projectList = res.rows
})
},
/** 返回页面 */
goBack() {
// 关闭当前标签页并返回上个页面
this.$tab.closePage(this.$route)
this.$router.back()
},
numberToCNY,
// 处理表格选择变化,更新选中的行
handleSelectionChange(val) {
this.selectedRows = val;
}
},
};
</script>
<style scoped>
.main {
padding: 10px;
background-color: #f6f6f6;
}
.container {
margin: 10px;
padding: 10px;
background-color: white;
border-radius: 10px;
}
</style>