zty 432a83c643 1.周报填报返回列表增加字段id,方便新增/编辑
2.新增项目预算执行率监控周报 页面/路由/方法
2024-07-08 16:47:03 +08:00

377 lines
13 KiB
Vue

<template>
<div id="content-container" :class="{'expand-right': expandRight}">
<!--Page Title-->
<div id="page-title">
<h1 class="page-header text-overflow">添加周报填报</h1>
</div>
<!--End page title-->
<!--Breadcrumb-->
<!--<ol class="breadcrumb">-->
<!--<li><a href="#">Home</a></li>-->
<!--<li><a href="#">Layouts</a></li>-->
<!--<li class="active">Demo</li>-->
<!--</ol>-->
<!--End breadcrumb-->
<!--Page content-->
<div class="page-content">
<div class="panel">
<div class="panel-body">
<el-form :model="formModel" label-width="100px" ref="formName">
<el-form-item label="部门" prop="deptId">
<el-select class="form-input" filterable placeholder="请选择" v-model="formModel.deptId" :disabled="true">
<el-option
v-for="subItem in orgOptions"
:key="subItem.model"
:label="subItem.label"
:value="subItem.model"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="姓名" prop="userId">
<el-select class="form-input" filterable placeholder="请选择" :disabled="true"
v-model="formModel.userInfoId">
<el-option
v-for="subItem in userInfoOption"
:key="subItem.model"
:label="subItem.label"
:value="subItem.model"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="项目编号" prop="projectNo">
<el-input
class="form-input"
placeholder="请输入内容"
v-model="formModel.projectNo"
>
</el-input>
</el-form-item>
<!-- :rules="[-->
<!-- {projectName: true, message: '项目名称不能为空'}]"-->
<el-form-item label="项目名称" prop="projectName">
<el-input
class="form-input"
placeholder="请输入内容"
v-model="formModel.projectName"
>
</el-input>
</el-form-item>
<!-- <el-form-item label="证明人" prop="witness" :rules="[-->
<!-- {required: true, message: '证明人不能为空'}]" v-if="formModel.reimburseCategory !== 'medical'">-->
<!-- <el-select class="form-input" filterable placeholder="请选择" v-model="formModel.witness">-->
<!-- <el-option-->
<!-- v-for="subItem in formWitnessData"-->
<!-- :key="subItem.model"-->
<!-- :label="subItem.label"-->
<!-- :value="subItem.model"-->
<!-- :disabled="subItem.disabled"-->
<!-- >-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="预算种类" prop="selectBudgetCategoryId" :rules="[-->
<!-- {required: true, message: '预算种类不能为空'}]">-->
<!-- <el-cascader-->
<!-- :options="budgetCategory"-->
<!-- v-model="formModel.selectBudgetCategoryId"-->
<!-- class="form-input"-->
<!-- ></el-cascader>-->
<!-- </el-form-item>-->
<!-- <el-form-item label="报销事由" prop="reason" :rules="[-->
<!-- {required: true, message: '报销事由不能为空'}]">-->
<!-- <el-input-->
<!-- class="form-input"-->
<!-- placeholder="请输入内容"-->
<!-- v-model="formModel.reason"-->
<!-- >-->
<!-- </el-input>-->
<!-- </el-form-item>-->
<!--明细-->
<!-- <div class="form-item-border" v-for="(item, index) in formModel.reimburseDetail" @click="reimburseClick(index)">-->
<!-- :rules="[-->
<!-- {required: true, message: '工作量不能为空'}, { type: 'number', message: '工作量必须为数字值'}]"-->
<el-form-item label="工作量(人日)" prop="workload">
<el-input
class="form-input"
placeholder="请输入内容"
v-model.number="formModel.workload"
@change="moneyChange"
>
</el-input>
</el-form-item>
<el-form-item label="本周进展" prop="thisWeek">
<el-input
class="form-input"
placeholder="请输入内容"
v-model="formModel.thisWeek"
>
</el-input>
</el-form-item>
<el-form-item label="下周计划" prop="nextWeek">
<el-input
class="form-input"
placeholder="请输入内容"
v-model="formModel.nextWeek"
>
</el-input>
</el-form-item>
<!-- </div>-->
<el-form-item>
<div style="float: right">
<el-button @click="cancel()" type="default">取消</el-button>
<el-button @click="save('formName')" type="primary" :disabled="!isSave">保存</el-button>
</div>
</el-form-item>
</el-form>
</div>
</div>
</div>
<!--End Page content-->
</div>
</template>
<script>
import DataForm from '../../../components/form/DataForm.vue'
import DataTable from '../../../components/DataTable.vue'
import Api from '../../../server/index.js'
import app from '../../../assets/js/common/app.js'
import {getItem} from '../../../config/mUtils.js'
import {baseUrl} from '../../../config/env.js'
export default {
beforeRouteEnter (to, from, next) {
next(function (vm) {
global.getMenuIndex(vm)
})
},
data () {
return {
ext: {},
thisWeek: '',
nextWeek: '',
userId: '',
workload: '',
projectName: '',
money: '',
projectNo: '',
expandRight: false,
app: app,
actionUrl: `${baseUrl}/api/common/file-upload`, // 上传路径
baseUrl: baseUrl,
formModel: {
userInfoId: '',
witness: '',
deptId: '',
reimburseCategory: '', // 报销种类
reason: '', // 报销事由
selectBudgetCategoryId: [], // 预算种类
total: 0,
reimburseDetail: [
{
time: '',
money: '',
moneyDetail: '',
hasBill: '', // 是否有发票
fileList: [], // 文件列表
}
] // 报销详情
},
formWitnessData: [], // 证明人数据源
orgOptions: [],
userInfoOption: [],
isSave: true,
budgetCategory: [], // 预算种类层级
reimburseIndex: 0 // 点击哪个报销明细做个标记
}
},
created () {
this.init()
this.getBudgetCategory()
this.getAllPeople()
},
computed: {},
methods: {
init () {
let orgIdArr = JSON.parse(getItem('orgIdData'))
this.formModel.deptId = orgIdArr[orgIdArr.length - 1]
this.formModel.userInfoId = getItem('userInfoId')
let orgName = getItem('orgNameStr')
this.orgOptions.push({
label: orgName,
model: this.formModel.deptId
})
this.userInfoOption.push({
label: getItem('userName'),
model: getItem('userInfoId')
})
},
getBudgetCategory () {
Api.Common.getBudgetCategory().then(result => {
if (result.status === 0) {
console.log(result)
this.budgetCategory = this.assembleOrgData(result.data)
} else {
this.$message.error(`${result.msg}`)
}
})
},
//请求所有人员
getAllPeople () {
Api.PersonnelManagement.personListNew(1, 10000).then((result) => {
if (result.status === 0) {
for (let i = 0; i < result.data.ls.length; i++) {
let people = result.data.ls[i]
this.formWitnessData.push({
model: people.id,
label: people.personName,
disabled: people.id === getItem('userInfoId')
})
}
} else {
this.$message.error(`${result.msg}`)
}
})
},
//递归组装部门级联选择器数据源
assembleOrgData (source) {
let dest = []
for (let i = 0; i < source.length; i++) {
let org = {
value: source[i].id,
parentId: source[i].parentId,
label: source[i].name,
depth: source[i].depth
}
if (source[i].childList && source[i].childList.length > 0) {
org['children'] = this.assembleOrgData(source[i].childList)
}
dest.push(org)
}
return dest
},
addFile () {
this.formModel.reimburseDetail.push({
time: '',
money: '',
moneyDetail: '',
hasBill: '', // 是否有发票
fileList: [] // 文件列表
})
},
deleteFile (index) {
if (this.formModel.reimburseDetail.length === 1) {
this.$message.warning('报销明细不能为空!')
return false
}
this.formModel.reimburseDetail.splice(index, 1)
},
// 上传附件
handleFileRemove (file, fileList) {
console.log(fileList)
setTimeout(() => {
this.formModel.reimburseDetail[this.reimburseIndex].fileList = []
for (let i = 0; i < fileList.length; i++) {
this.formModel.reimburseDetail[this.reimburseIndex].fileList.push({
name: fileList[i].name,
url: fileList[i].url
})
}
}, 10)
},
handleFileSuccess (res, file, fileList) {
if (res.status === 0) {
this.formModel.reimburseDetail[this.reimburseIndex].fileList.push({
name: file.name,
url: file.response.data.url
})
} else {
this.$message.error(`${res.msg}`)
}
console.log(this.formModel.reimburseDetail[this.reimburseIndex].fileList)
},
reimburseClick (index) {
this.reimburseIndex = index
console.log(index)
},
cancel () {
this.$router.go(-1)
},
save (formName) {
console.log('formName', formName)
this.$refs[formName].validate((valid) => {
if (valid) {
let data = {
projectWeeklyAddReq: {
projectWeekly: {
userId: this.formModel.userInfoId,
thisWeek: this.formModel.thisWeek,
nextWeek: this.formModel.nextWeek,
workload: this.formModel.workload,
deptId: this.formModel.deptId
},
ext: {
projectName: this.formModel.projectName,
projectNo: this.formModel.projectNo,
deptName: this.orgOptions[0].label,
userName: this.userInfoOption[0].label
}
}
}
this.isSave = false
Api.ProjectManagements.addWeekly(data.projectWeeklyAddReq).then(result => {
this.isSave = true
if (result.status === 0) {
this.$message.success('添加成功!')
this.$router.push({name: 'WeeklyClaimApply'})
} else {
this.$message.error(result.data)
}
})
console.log(data)
} else {
console.log('error submit!!')
return false
}
})
},
moneyChange () {
let total = 0
for (let i = 0; i < this.formModel.reimburseDetail.length; i++) {
if (this.formModel.reimburseDetail[i].money === '' || !this.formModel.reimburseDetail[i].money) {
total += 0
} else {
total += Number(this.formModel.reimburseDetail[i].money)
}
}
this.formModel.total = total.toFixed(2)
}
},
components: {
DataTable, DataForm
}
}
</script>
<style scoped lang="less" rel="stylesheet/less">
.expand-right {
@media (min-width: 768px) {
padding-left: 0 !important;
}
}
.page-content {
padding: 15px;
}
</style>