first commit

This commit is contained in:
2026-09-09 09:14:28 +08:00
commit 5343198112
5199 changed files with 1052895 additions and 0 deletions
@@ -0,0 +1,638 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava>
<el-card shadow="never">
<el-form :model="formData" label-position="right" label-suffix=""
label-width="110px" :rules="rules" ref="addForm">
<el-row gutter="60">
<el-col :span="12">
<el-form-item label="报销类别" prop="reimbursementItemSort">
<el-radio-group v-model="formData.reimbursementItemSort"
@change="reimbursementItemSortChange">
<el-radio label="fy" border>费用报销</el-radio>
<el-radio label="zf" border>领款凭证</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="经费余额" prop="balance">
<el-input type="text" v-model="balance" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="报销项目" prop="reimbursementItemId">
<el-radio-group v-model="formData.reimbursementItemId" @change="reimbursementItemChange">
<el-radio :label="item.key" border
v-for="item in reimbursementItem.filter(v=>v.type==formData.reimbursementItemSort)">
{{item.name}}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="支付方式" prop="paymentMethodId">
<el-radio-group v-model="formData.paymentMethodId" @change="paymentMethodChange">
<el-radio :label="item.key" border v-for="item in paymentMethod">{{item.name}}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="经办人" prop="userName">
<el-input readonly type="text" v-model="formData.userName"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工号" prop="loginName">
<el-input readonly type="text" v-model="formData.loginName"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系方式" prop="mobile">
<el-input type="text" v-model="formData.mobile" placeholder="请填写联系方式"></el-input>
</el-form-item>
</el-col>
<template v-if="formData.paymentMethodId=='zz'">
<el-col :span="12">
<el-form-item label="户名" prop="user_id">
<!-- <el-input type="text" placeholder="请输入户名" v-model="formData.bankUserName"></el-input>-->
<el-select v-model="formData.user_id"
style="width: 100%"
@change="userChangeHm"
filterable
remote
clearable
reserve-keyword
placeholder="请输入工号或姓名查询"
:remote-method="remoteMethod">
<el-option
v-for="item in userList"
:key="item.id"
:label="item.username+'-'+item.loginname+'-'+item.unitname"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="账号" prop="bankCardNumber">
<el-input type="text" placeholder="请输入账号" v-model="formData.bankCardNumber"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="开户行" prop="bankOfDeposit">
<el-input type="text" placeholder="请输入开户行" v-model="formData.bankOfDeposit"></el-input>
</el-form-item>
</el-col>
</template>
</el-row>
<el-row gutter="60" v-if="formData.reimbursementItemId==='fyww'||formData.reimbursementItemId==='zfww'">
<el-col :span="12">
<el-form-item label="慰问对象" prop="be_user">
<el-select
v-model="formData.be_user"
:remote-method="userRemoteMethod"
clearable
filterable
placeholder="请输入姓名或工号查找"
remote
reserve-keyword
style="width: 100%"
@change="userChange">
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.username+''+item.loginname+''"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
<!--<el-col :span="12">
<el-form-item label="性&emsp;&emsp;别" prop="sex">
<el-input v-model="formData.sex" readonly maxlength="30" placeholder="输入慰问对象查询"
type="text"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="生&emsp;&emsp;日" prop="birthday">
<el-input v-model="formData.birthday" readonly maxlength="30" placeholder="输入慰问对象查询"
type="text"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="身份证号" prop="idCard">
<el-input v-model="formData.idCard" maxlength="30" placeholder="输入慰问对象查询"
type="text"></el-input>
</el-form-item>
</el-col>-->
<el-col :span="12">
<el-form-item label="联系方式" prop="conMobile">
<el-input v-model="formData.conMobile" maxlength="30" placeholder="请输入慰问对象联系方式"
type="text"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="慰问类型" prop="type">
<el-select v-model="formData.type" style="width: 100%" @change="typeChange"
placeholder="请选择慰问类型">
<el-option v-for="item in typeOptions2" :label="item.name+' ('+item.code+')'"
:value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<template v-if="formData.typeCode === 'D'">
<el-col :span="12">
<el-form-item label="住院病由">
<el-input v-model="formData.hospital_by" placeholder="请填写住院病由"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="住院时间">
<el-date-picker
v-model="formData.hospital_time"
end-placeholder="结束日期"
range-separator="-"
start-placeholder="开始日期"
style="width: 100%"
type="daterange"
value-format="yyyy-MM-dd" placeholder="请选择住院时间">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="入住医院" prop="the_hospital">
<el-input v-model="formData.the_hospital" placeholder="请填写入住医院"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="当年次数">
<el-input v-model="formData.hospital_yearNum" placeholder="填写当年次数"></el-input>
</el-form-item>
</el-col>
</template>
<el-col :span="12">
<el-form-item label="慰问金额" prop="money">
<el-input v-model="formData.money" :controls="false"
:max="1000000000" :min="0" controls-position="right"
placeholder="请填写慰问金额"
precision="2"
type="number"
style="width: 100%"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="附件张数" prop="files_num">
<el-input-number v-model="formData.files_num" :controls="false"
:max="1000000000" :min="0" controls-position="right"
placeholder="请填写附件张数"
style="width: 100%"></el-input-number>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="慰问时间" prop="occur_time">
<el-date-picker
v-model="formData.occur_time"
clearable
placeholder="慰问时间"
style="width: 100%"
type="date"
value-format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
</el-col>
<template v-if="formData.typeCode==='E'">
<el-col :span="12">
<el-form-item label="去逝时间" prop="dead_time">
<el-date-picker
v-model="formData.dead_time"
clearable
placeholder="去逝时间"
style="width: 100%"
type="date"
value-format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="与被慰问人关系" prop="dead_gx">
<el-select v-model="formData.dead_gx" style="width: 100%" placeholder="请选择与被慰问人关系">
<el-option label="配偶" value="配偶"></el-option>
<el-option label="父亲" value="父亲"></el-option>
<el-option label="母亲" value="母亲"></el-option>
<el-option label="子女" value="子女"></el-option>
</el-select>
</el-form-item>
</el-col>
</template>
<template v-if="formData.typeCode==='A'">
<el-col :span="12">
<el-form-item label="结婚时间" prop="marry_time">
<el-date-picker
v-model="formData.marry_time"
clearable
placeholder="结婚时间"
style="width: 100%"
type="date"
value-format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
</el-col>
</template>
<template v-if="formData.typeCode==='B'">
<el-col :span="12">
<el-form-item label="生育时间" prop="birth_time">
<el-date-picker
v-model="formData.birth_time"
clearable
placeholder="生育时间"
style="width: 100%"
type="date"
value-format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
</el-col>
</template>
</el-row>
<el-row v-else gutter="60">
<el-col :span="12">
<el-form-item label="活动名称" prop="activity_name">
<el-input type="text" v-model="formData.activity_name" placeholder="请输入活动名称"></el-input>
</el-form-item>
</el-col>
<el-col v-if="formData.reimbursementItemId=='fyhd'" :span="12">
<el-form-item label="活动类型" prop="activity_type">
<el-select v-model="formData.activity_type" placeholder="请选择活动类型" style="width: 100%">
<el-option label="分工会活动" value="1"></el-option>
<el-option label="校工会活动" value="2"></el-option>
<el-option label="协会(社团)活动" value="3"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="活动人数" prop="activity_number" v-if="formData.reimbursementItemId=='fyhd'">
<el-input v-model="formData.activity_number" placeholder="请输入活动人数" type="number"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="活动地点" prop="venue">
<el-input v-model="formData.venue" placeholder="请输入活动地点" type="text"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="报销金额" prop="money">
<el-input v-model="formData.money" placeholder="输入报销金额"
type="number"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="活动时间" prop="activity_time">
<el-date-picker v-model="formData.activity_time"
placeholder="活动时间"
style="width: 100%" type="date"
value-format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="附件张数" v-if="formData.reimbursementItemId=='fyhd'" prop="files_num">
<el-input-number v-model="formData.files_num" :controls="false"
:max="1000000000" :min="0" controls-position="right"
placeholder="请填写附件张数"
style="width: 100%"></el-input-number>
</el-form-item>
</el-col>
</el-row>
<!-- <el-col :span="24">
<el-form-item label="参加随行人员" prop="personnel">
<el-input v-model="formData.personnel" :autosize="{ minRows: 4, maxRows: 8}" maxlength="500"
placeholder="请填写参加随行人员" type="textarea"></el-input>
</el-form-item>
</el-col>-->
<el-col :span="24" v-if="formData.reimbursementItemId==='fyww'||formData.reimbursementItemId==='zfww'">
<el-form-item label="慰问原因" prop="cause">
<el-input v-model="formData.cause" :autosize="{ minRows: 4, maxRows: 8}" maxlength="500"
placeholder="请填写慰问原因" type="textarea"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="备注" prop="remark">
<el-input v-model="formData.remark" :autosize="{ minRows: 4, maxRows: 8}" maxlength="500"
placeholder="需要填写: 发票编号、开具方、金额" type="textarea"></el-input>
</el-form-item>
</el-col>
<el-col :span="24">
<el-divider content-position="left" class="dia"><span style="color: #3ea1ec;">购置物品及价格</span>
</el-divider>
<el-form-item label="">
<el-button style="float: right;margin-bottom: 10px" icon="el-icon-plus" size="mini"
@click="formData.goods.push({name:'',price:''})">
添加
</el-button>
<el-table :data="formData.goods" border size="mini" style="width: 100%">
<el-table-column sortable type="index" width="100" label="序号"
align="center" header-align="center">
</el-table-column>
<el-table-column prop="name" label="摘要" align="center"
header-align="center">
<template slot-scope="{row}">
<el-input maxlength="50" placeholder="摘要" v-model="row.name"
type="text"></el-input>
</template>
</el-table-column>
<el-table-column prop="price" label="金额" align="center"
header-align="center">
<template slot-scope="{row}">
<el-input maxlength="50" placeholder="金额" v-model="row.price"
type="number" @input="blur"></el-input>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" align="center" header-align="center"
width="80px"
fixed="right">
<template slot-scope="scope">
<el-button type="danger" icon="el-icon-delete" circle
:disabled="formData.goods.length==0"
@click="delNotesItem(scope)"></el-button>
</template>
</el-table-column>
</el-table>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="附件" prop="files">
<file-upload card :files.sync="formData.files"></file-upload>
</el-form-item>
</el-col>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button type="primary" @click="doAdd()">确 定</el-button>
</div>
</el-card>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
userList: [],
oldMoney: 0,
delNotesList: [],
balance: 0,
formData: {goods: []},
ReimbursementIsSign: false,
typeOptions: [],
typeOptions2: [],
userOptions: [],
reimbursementItem: [
{key: "fyww", name: '慰问', type: "fy"},
{key: "fyhd", name: '活动', type: "fy"},
{key: "fyjj", name: '建家', type: "fy"},
{key: "fyrc", name: '日常', type: "fy"},
{key: "zfww", name: '慰问', type: "zf"},
{key: "zfzj", name: '专家', type: "zf"},
{key: "zflw", name: '劳务', type: "zf"},
],
paymentMethod: [
{key: "zz", name: '转账'},
{key: "xj", name: '现金'},
],
rules: {
be_user: [{required: true, message: '必填', trigger: ['change', 'blur']}],
reimbursementItemSort: [{required: true, message: '请选择报销类别', trigger: ['change', 'blur']}],
reimbursementItemId: [{required: true, message: '请选择报销项目', trigger: ['change', 'blur']}],
paymentMethodId: [{required: true, message: '请输入支付方式', trigger: ['change', 'blur']}],
mobile: [{required: true, message: '请输入联系方式', trigger: ['change', 'blur']}],
conMobile: [{required: true, message: '请输入慰问人联系方式', trigger: ['change', 'blur']}],
type: [{required: true, message: '请选择慰问类型', trigger: ['change', 'blur']}],
occur_time: [{required: true, message: '请输入慰问时间', trigger: ['change', 'blur']}],
money: [{required: true, message: '请输入慰问金额', trigger: ['change', 'blur']}],
personnel: [{required: true, message: '请填写参加随行人员', trigger: ['change', 'blur']}],
cause: [{required: true, message: '请填写支付内容', trigger: ['change', 'blur']}],
remark: [{required: false, message: '必填', trigger: ['change', 'blur']}],
files_num: [{required: true, message: '必填', trigger: ['change', 'blur']}],
bankUserName: [{required: true, message: '必填', trigger: ['change', 'blur']}],
user_id: [{required: true, message: '必填', trigger: ['change', 'blur']}],
bankCardNumber: [{required: true, message: '必填', trigger: ['change', 'blur']}],
bankOfDeposit: [{required: true, message: '必填', trigger: ['change', 'blur']}],
activity_name: [{required: true, message: '必填', trigger: ['change', 'blur']}],
},
}
},
methods: {
userChangeHm(val) {
if (!val) {
this.$set(this.formData, 'bankUserName', null)
this.$set(this.formData, 'bankCardNumber', null)
this.$set(this.formData, 'bankOfDeposit', null)
return
}
const user = this.userList.find(v => v.id === val)
this.$set(this.formData, 'bankUserName', user.username)
this.$set(this.formData, 'bankCardNumber', user.bank_number)
this.$set(this.formData, 'bankOfDeposit', user.bank_number ? bankCardAttribution(user.bank_number).bankName : '')
},
async remoteMethod(query) {
const arr = await searchUser(query, null, null, null, null)
this.userList = arr
},
blur() {
let num = 0
this.formData.goods.forEach(v => {
num += parseFloat(v.price)
})
if (num > this.oldMoney && (this.formData.reimbursementItemId === "fyww" || this.formData.reimbursementItemId === "zfww")) {
this.notifyWarning("您的金额超过报销金额(" + this.oldMoney + "")
this.$set(this.formData, "money", this.oldMoney)
return
}
this.$set(this.formData, "money", num ? num : 0)
},
delNotesItem(scope) {
this.delNotesList.push(scope.row.id)
this.formData.goods.splice(scope.$index, 1)
},
doAdd() {
this.$refs["addForm"].validate(async (valid) => {
if (valid) {
if (this.balance < this.formData.money) {
this.notifyWarning("余额不足,请联系校工会")
return
}
const loading = this.$loading({
lock: true,
text: '正在提交...',
spinner: 'el-icon-loading',
background: COVER_LAYER_COLOR
});
const data = this.formData
data.starting_time = data.hospital_time ? data.hospital_time[0] : ''
data.end_time = data.hospital_time ? data.hospital_time[1] : ''
const resp = await $.post(loc() + (this.formData.id ? "/doEdit" : "/doAdd"), {
data: JSON.stringify(data)
})
if (resp.code === 0) {
this.notifySuccess(resp.msg)
window.location.href = '/activity/reimbursement/list'
} else {
this.notifyWarning(resp.msg)
loading.close()
}
}
}
)
},
reimbursementItemSortChange(val) {
this.$set(this.formData, "type", null)
this.$set(this.formData, "money", null)
this.$set(this.formData, "way", null)
this.$set(this.formData, "typeName", null)
this.$set(this.formData, "typeCode", null)
const type = this.typeOptions
if (val === 'fy') {
this.typeOptions2 = type.filter(v => v.way === '慰问品 (C)')
} else {
this.typeOptions2 = type.filter(v => v.way === '慰问金 (A)')
}
},
paymentMethodChange(val) {
const paymentMethodName = this.paymentMethod.find(v => v.key == val)
this.$set(this.formData, "paymentMethodName", paymentMethodName.name)
},
reimbursementItemChange(val) {
const reimbursementItem = this.reimbursementItem.find(v => v.key == val)
this.$set(this.formData, "reimbursementItemName", reimbursementItem.name)
if (this.$refs["addForm"])
this.$refs["addForm"].clearValidate();
},
async initData() {
this.$set(this.formData, "reimbursementItemSort", "fy")
this.$set(this.formData, "userName", "${@shiro.getPrincipalProperty('username')}")
this.$set(this.formData, "loginName", "${@shiro.getPrincipalProperty('loginname')}")
this.$set(this.formData, "unitName", "${@shiro.getPrincipalProperty('unit').getName()}")
this.$set(this.formData, "unionName", "${@shiro.getPrincipalProperty('union').getUnionname()}")
this.$set(this.formData, "mobile", "${@shiro.getPrincipalProperty('mobile')}")
this.$set(this.formData, "reimbursementItemId", "fyww")
await this.getTypeOptions()
this.reimbursementItemSortChange(this.formData.reimbursementItemSort)
this.reimbursementItemChange(this.formData.reimbursementItemId)
await this.getBalance()
},
async getBalance() {
const {data} = await $.get(loc() + "/getBalance")
this.balance = data
},
async userRemoteMethod(query) {
if (query) {
const {data} = await $.get("/platform/fw/condolence/apply/queryUser", {query})
this.userOptions = data
}
},
async getTypeOptions() {
const {code, data} = await $.get("/platform/condolence/type/getAll")
if (code == 0) {
this.typeOptions = data
}
},
async typeChange(id) {
const {data, code, msg} = await $.get("/platform/condolence/type/findOne", {id})
if (data) {
this.$set(this, "oldMoney", data.money)
this.$set(this.formData, "money", data.money)
this.$set(this.formData, "way", data.way)
this.$set(this.formData, "typeName", data.name)
this.$set(this.formData, "typeCode", data.code)
}
},
async getUserData(userId) {
const {data} = await $.get("/platform/fw/condolence/apply/getUserData", {userId})
return data
},
async userChange() {
const userData = await this.getUserData(this.formData.be_user);
this.$set(this.formData, 'sex', userData.sex)
this.$set(this.formData, 'birthday', userData.birthday)
this.$set(this.formData, 'idcard', userData.idcard)
this.$set(this.formData, 'conMobile', userData.mobile)
this.$set(this.formData, 'job_title', userData.jobtitle)
},
async findData(id) {
const refs = await $.get(loc() + "/findOne", {id})
this.formData = refs.data
const userData = await this.getUserData(this.formData.be_user);
this.userOptions.push(userData)
await this.userChange()
}
},
async created() {
this.initData()
const id = getQueryVariable("id")
if (id) await this.findData(id)
}
})
</script>
<!--#
}
#-->