Files
UNION_NSI/target/classes/views/platform/zgfw/condolence/apply.html
T
2026-09-08 19:49:21 +08:00

659 lines
36 KiB
HTML
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.
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.el-input-number input {
text-align: left !important;
}
</style>
<div id="app" v-cloak>
<guava>
<el-card class="box-card" shadow="never">
<template #header>
<h3 style="color: #1867b0">慰问申请</h3>
</template>
<div>
<el-form :model="formData" ref="form" :rules="formRules" label-width="150px" label-position="right"
label-suffix="">
<el-row gutter="60">
<!--#if(@shiro.hasRole('sysadmin')){#-->
<el-col :span="24">
<el-form-item prop="serious" label="校工会直接慰问">
<span slot="label">
校工会直接慰问
<el-tooltip class="item" effect="dark"
content="直接慰问,由校工会直接慰问,无需经过分工会审核,直接由校工会主席审核。"
placement="top-start">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-radio-group v-model="formData.serious" size="small">
<el-radio :label="true" border></el-radio>
<el-radio :label="false" border></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<!--#}#-->
<el-col :span="12">
<el-form-item prop="manager_name" label="申请人">
<el-input disabled v-model="formData.manager_name" type="text"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="apply_time" label="申请时间">
<el-input disabled v-model="formData.apply_time" type="text"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<!--#if(@shiro.hasRole('sysadmin') || @shiro.hasRole('ghzl') ){#-->
<el-form-item prop="be_user" label="慰问对象">
<el-select
style="width: 100%"
v-model="formData.be_user"
filterable
clearable
remote
reserve-keyword
placeholder="请输入姓名或工号查找"
:remote-method="userRemoteMethod"
:loading="userLoading"
@change="userChange">
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.username+''+item.loginname+''+'('+item.unitname+')'"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<!--#}else{#-->
<el-form-item prop="be_user" label="慰问对象">
<el-select
style="width: 100%"
v-model="formData.be_user"
filterable
clearable
remote
reserve-keyword
placeholder="请输入姓名或工号查找"
:remote-method="userRemoteMethod"
:loading="userLoading"
disabled
@change="userChange">
<el-option
v-for="item in userOptions"
: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 prop="mobile" label="慰问对象联系电话">
<el-input v-model="formData.mobile" placeholder="输入慰问对象后自动获取"
maxlength="11" type="text"></el-input>
</el-form-item>
</el-col>
<!-- <el-row gutter="60">-->
<el-col :span="12">
<el-form-item prop="payee" label="收款人">
<el-select
style="width: 100%"
v-model="formData.payee"
filterable
clearable
remote
reserve-keyword
placeholder="请输入姓名或工号查找"
:remote-method="userPayee"
:loading="userLoading"
@change="payeeChange">
<el-option
v-for="item in userPayees"
: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 prop="payee_bank_number" label="收款人银行卡">
<el-input placeholder="请填写银行卡号" v-model="formData.payee_bank_number"
maxlength="30"
type="text"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="payee_bank_name" label="收款人开户行">
<el-input placeholder="请填写开户行" v-model="formData.payee_bank_name" maxlength="30"
type="text"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row gutter="60">
<el-col :span="12">
<el-form-item label="慰问类型" prop="type">
<el-select v-model="formData.type" @change="typeChange" style="width: 100%">
<el-option v-for="item in typeOptions"
:value="item.id"
:disabled="item.isDisabled"
:label="item.name"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="money" label="慰问金额">
<el-input style="width: 100%" v-model="formData.money"
:placeholder="moneyTitle"
controls-position="right"
:controls="false"
precision="2"
readonly
placeholder="选择慰问类型自动匹配金额"
:min="0"
:max="1000000000"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row gutter="60"
v-if="['c7175af55693441e8233be4552cef9d5','0872ea0b95aa463fb8d98c46bdf72537'].includes(formData.type)">
<el-col :span="12">
<el-form-item prop="hospital_stay" label="住院时间"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-date-picker type="daterange" style="width: 100%" range-separator="——"
v-model="formData.hospital_stay"
value-format="yyyy-MM-dd" format="yyyy-MM-dd"
start-placeholder="开始日期"
end-placeholder="结束日期"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="the_hospital" label="所在医院"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input placeholder="请填写所在医院" v-model="formData.the_hospital" maxlength="30"
type="text"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row gutter="60">
<el-col :span="12">
<el-form-item prop="way" label="慰问方式">
<el-select v-model="formData.way"
placeholder="选择慰问类型自动匹配慰问方式"
style="width: 100%"
clearable
disabled>
<el-option
v-for="(v,k) in condolence.way"
:key="k"
:label="v"
:value="v">
</el-option>
</el-select>
</el-form-item>
</el-col>
<!--慰问时间对应对应原发生时间字段-->
<el-col :span="12">
<el-form-item label="慰问时间" prop="occur_time">
<el-date-picker
clearable
style="width: 100%"
v-model="formData.occur_time"
type="date"
value-format="yyyy-MM-dd"
placeholder="慰问时间">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row gutter="60"
v-if="formData.way === '慰问品 (C)' && formData.type !== '29cf78eea88d40128f639b9ae7b6aaaa'">
<el-col :span="12">
<el-form-item label="慰问品" prop="goods_desc">
<el-input v-model="formData.goods_desc" placeholder="请输入选择的慰问品的名称、编号、规格等">
<el-button slot="append" type="primary"
@click="previewGoodsAlbum">预览</el-button>
</el-input>
</el-form-item>
</el-col>
</el-row>
<!--生育(孩次)-->
<el-row :gutter="60" v-if="formData.type==='29cf78eea88d40128f639b9ae7b6aaaa'">
<el-col :span="12" v-if="formData.way === '慰问品 (C)'">
<el-form-item label="慰问品" prop="goods_desc">
<el-input v-model="formData.goods_desc" placeholder="请输入选择的慰问品的名称、编号、规格等">
<el-button slot="append" type="primary"
@click="previewGoodsAlbum">预览</el-button>
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="birth_child_num" label="孩次">
<el-select v-model="formData.birth_child_num" placeholder="请选择孩次"
style="width: 100%"
clearable>
<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>
</el-row>
<!--住院(手术)-->
<el-row :gutter="60" v-if="['0872ea0b95aa463fb8d98c46bdf72537'].includes(formData.type)">
<el-col :span="12">
<el-form-item prop="inpatientSurgicalName" label="手术名称"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input v-model="formData.inpatientSurgicalName" maxlength="50"></el-input>
</el-form-item>
</el-col>
</el-row>
<!--直系亲属去世-->
<el-row :gutter="60" v-if="['925020dd63754aaea985c5672982a7f4'].includes(formData.type)">
<el-col :span="12">
<el-form-item prop="deadImmediateFamily" label="直系亲属"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-input v-model="formData.deadImmediateFamily" maxlength="20"
placeholder="配偶、父亲、母亲、子女"></el-input>
</el-form-item>
</el-col>
</el-row>
<!--申请事由原对应备注字段-->
<el-row gutter="60">
<el-col :span="24">
<el-form-item prop="remark" label="申请事由">
<el-input maxlength="500" v-model="formData.remark" placeholder="请填写申请事由"
type="textarea" :autosize="{ minRows: 4, maxRows: 8}"></el-input>
</el-form-item>
</el-col>
</el-row>
<!-- <template v-if="formData.way==='慰问品 (C)'">-->
<!-- <el-divider content-position="left" class="dia"><span style="color: #3ea1ec;">购置物品及价格</span>-->
<!-- </el-divider>-->
<!-- <el-form-item class="int_input border_table">-->
<!-- <el-button style="float: right;margin-bottom: 10px" icon="el-icon-plus" size="mini"-->
<!-- type="primary"-->
<!-- @click="formData.goods.push({name:'',price:''})">-->
<!-- 添加-->
<!-- </el-button>-->
<!-- <el-table :data="formData.goods" border size="mini">-->
<!-- <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="text" @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>-->
<!-- </template>-->
<el-col :span="24" v-if="isUploadFile === true">
<el-form-item prop="files" label="附&emsp;&emsp;件">
<file-upload :files.sync="formData.files" card></file-upload>
<div v-if="isUploadFile && uploadFileDesc" class="text-danger">上传附件说明:{{uploadFileDesc}}
</div>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item prop="sign" label="签&emsp;&emsp;字">
<sign prefix="condolence" :qz.sync="formData.sign"></sign>
</el-form-item>
</el-col>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button @click="saveDraft()">保存</el-button>
<el-button type="primary" @click="doAdd()">提交</el-button>
</div>
</div>
</el-card>
</guava>
<el-dialog
title=""
:visible.sync="dialogVisible"
width="40%">
<el-form>
<el-form-item label="&emsp;&emsp;申请须知" class="view-header">
</el-form-item>
</el-form>
<span style="line-height: 24px">
&emsp;&emsp;1、“六必访”是根据省教育科技工会的要求,对在职工会会员当年的病、婚、育、丧、退休、特殊情况进行慰问的活动,原则上每位会员每项事由每年限慰问一次,需在当年提出申请。婚、育事项双职工都可以申请。<br/>
&emsp;&emsp;2、“六必访”慰问品是指不超过400元(2019年开始执行)的食品水果等。如遇在职工会会员去世,院级工会可购置同等价值的花圈花篮等物品代表工会进行慰问。另可申请1000元在职工会会员去世慰问金,由校工会另行支付。<br/>
&emsp;&emsp;3、请在报销时附购置物品的发票和清单,发票和清单要求以财务规定为准。<br/>
&emsp;&emsp;4、系统全部审核完成后,可打印出报销凭证和纸质审批表,由本部门审核人员及本人签字并盖章后,同发票一起,以院级工会为单位送交工会。为减少院级工会工作量,院级工会可于每月10号、20号(遇周末节假日可顺延)集中审核盖章后送交工会纸质材料。
</span>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="dialogVisible = false;">同意</el-button>
</span>
</el-dialog>
</div>
<script>
var vue = new Vue({
el: '#app',
data() {
return {
money: 0,
moneyTitle: "",
dialogVisible: false,
delNotesList: [],
formData: {
serious: false,
goodsAlbum: [],
goods_desc: ''
},
formRules: {
serious: [{required: true, message: '必填', trigger: ['blur', 'change']}],
be_user: [{required: true, message: '必填', trigger: ['blur', 'change']}],
type: [{required: true, message: '必填', trigger: ['blur', 'change']}],
disease_type: [{required: true, message: '必填', trigger: ['blur', 'change']}],
way: [{required: true, message: '必填', trigger: ['blur', 'change']}],
money: [{required: true, message: '必填', trigger: ['blur', 'change']}],
bank_card: [{required: true, message: '必填', trigger: ['blur', 'change']}],
personnel: [{required: true, message: '必填', trigger: ['blur', 'change']}],
remark: [{required: true, message: '必填', trigger: ['blur', 'change']}],
occur_time: [{required: true, message: '必填', trigger: ['blur', 'change']}],
jtzz: [{required: true, message: '必填', trigger: ['blur', 'change']}],
poszdw: [{required: true, message: '必填', trigger: ['blur', 'change']}],
files: [{required: true, message: '必填', trigger: ['blur', 'change']}],
goods_desc: [{required: true, message: '请输入慰问品名称、编号、规格等', trigger: ['blur', 'change']}],
mobile: [
{required: true, message: '请输入慰问对象联系电话', trigger: ['blur', 'change']},
{pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号码', trigger: ['blur', 'change']}
],
birthday: [{required: true, message: '必填', trigger: ['blur', 'change']}],
// job_title: [{required: true, message: '必填', trigger: ['blur', 'change']}],
birth_child_num: [{required: true, message: '必填', trigger: ['blur', 'change']}],
sign: [{required: true, message: '请扫码签字', trigger: ['blur', 'change']}],
payee: [{required: true, message: '请选择收款人', trigger: ['blur', 'change']}],
payee_bank_number: [{required: true, message: '请填写收款人银行卡', trigger: ['blur', 'change']}],
payee_bank_name: [{required: true, message: '请填写收款人开户行', trigger: ['blur', 'change']}],
},
userLoading: false,
userOptions: [],
userPayees: [],
typeOptions: [],
isUploadFile: true,
uploadFileDesc: null
}
},
watch: {
'formData.type'(val) {
const conType = this.typeOptions.find(o => o.id === val)
this.isUploadFile = conType.isUploadFile
this.uploadFileDesc = conType.uploadFileDesc
}
/* "formData.money"(val) {
if (val > this.money) {
this.$notify({
title: '警告',
message: '金额超过规定金额' + this.money + "(元)",
type: 'warning'
});
this.$set(this.formData, "money", this.money)
}
}*/
},
computed: {
goodsAlbumFile() {
const goodsAlbum = this.formData.goodsAlbum
return goodsAlbum && goodsAlbum.length ? goodsAlbum[0] : null
}
},
components: {
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
},
methods: {
async typeChange(id) {
const conType = this.typeOptions.find(o => o.id === id)
this.isUploadFile = conType.isUploadFile
this.uploadFileDesc = conType.uploadFileDesc
const {data, code, msg} = await $.get("/platform/condolence/type/findOne", {id})
if (data) {
/* this.$set(this, "moneyTitle", "慰问金额不超过" + data.money + "(元)")
this.$set(this, "money", data.money)
if (this.formData.money != null) {
this.$set(this.formData, "money", null)
}*/
this.$set(this.formData, "money", data.money)
this.$set(this.formData, "way", data.way)
this.$set(this.formData, "goodsAlbum", data.goodsAlbum || [])
}
},
previewGoodsAlbum() {
const goodsAlbum = this.goodsAlbumFile
if (!goodsAlbum) {
this.$message.warning('暂无慰问品画册')
return
}
preview(goodsAlbum.filename, goodsAlbum.id)
},
async getUserData(userId) {
if (userId) {
const {data} = await $.get(loc() + "/getUserData", {userId})
return data
}
return {}
},
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, 'mobile', userData.mobile)
this.$set(this.formData, 'job_title', userData.job_title)
},
async payeeChange() {
const payeeData = await this.getUserData(this.formData.payee);
this.$set(this.formData, 'payee_bank_number', payeeData.bank_number)
},
blur() {
let num = 0
this.formData.goods.forEach(v => {
num += parseFloat(v.price)
})
this.$set(this.formData, "money", num)
},
delNotesItem(scope) {
this.delNotesList.push(scope.row.id)
this.formData.goods.splice(scope.$index, 1)
},
async userPayee(query) {
if (query) {
this.userLoading = true
const arr = await this.queryUser(query)
this.userPayees = arr
this.userLoading = false
}
},
async userRemoteMethod(query) {
if (query) {
this.userLoading = true
// const arr = await queryUserById(query)
const arr = await this.queryUser(query)
this.userOptions = arr
this.userLoading = false
}
},
async queryUser(query) {
const {data} = await $.get(loc() + "/queryUser", {query})
return data
},
async flush() {
await this.userRemoteMethod("${@shiro.getPrincipalProperty('id')}")
this.delNotesList = []
this.formData = {
goods: [],
goodsAlbum: [],
goods_desc: '',
manager_name: "${@shiro.getPrincipalProperty('username')}",
be_user: this.userOptions?.[0]?.id,
/* bank_card: "${@shiro.getPrincipalProperty('bank_number')}",*/
apply_time: moment().format('YYYY-MM-DD'),
isSerious: false
}
await this.userChange()
/* if (this.$refs['form']) {
this.$refs['form'].resetFields()
}*/
},
async doAdd() {
// 签字由自定义组件回写,提交前单独判断,避免 Element 表单漏过空签字。
if (!this.formData.sign) {
this.$message.warning('请扫码签字')
return
}
this.$refs["form"].validate(async (valid) => {
if (valid) {
const formData = JSON.parse(JSON.stringify(this.formData))
if (formData.serious == null) {
formData.serious = false
}
formData.files = JSON.stringify(formData.files)
formData.sign = ''
if (formData.hospital_stay) {
formData.hospital_stay_1 = formData.hospital_stay[0]
formData.hospital_stay_2 = formData.hospital_stay[1]
}
const loading = this.$loading({
lock: true,
text: '正在提交...',
spinner: 'el-icon-loading',
background: COVER_LAYER_COLOR
});
const resp = await $.post(loc() + (formData.id ? "/doEdit" : "/doAdd"), {
data: JSON.stringify(formData),
hospital_stay_1: formData.hospital_stay_1,
hospital_stay_2: formData.hospital_stay_2,
sign: this.formData.sign
})
loading.close()
if (resp.code === 0) {
this.$notify.success(resp.msg)
sublime.jumpPagePjax('/platform/fw/condolence/myList')
} else {
this.$notify.warning(resp.msg)
}
}
})
},
async saveDraft() {
const formData = JSON.parse(JSON.stringify(this.formData))
if (formData.files == null) {
formData.files = []
}
formData.files = JSON.stringify(formData.files)
if (formData.hospital_stay) {
formData.hospital_stay_1 = formData.hospital_stay[0]
formData.hospital_stay_2 = formData.hospital_stay[1]
}
const loading = this.$loading({
lock: true,
text: '正在保存...',
spinner: 'el-icon-loading',
background: COVER_LAYER_COLOR
});
const resp = await $.post(loc() + "/doSave", {
data: JSON.stringify(formData),
hospital_stay_1: formData.hospital_stay_1,
hospital_stay_2: formData.hospital_stay_2,
sign: this.formData.sign || ''
})
loading.close()
if (resp.code === 0) {
this.$notify.success('保存成功')
sublime.jumpPagePjax('/platform/fw/condolence/myList')
} else {
this.$notify.warning(resp.msg)
}
},
async getTypeOptions() {
const {code, data} = await $.get("/platform/condolence/type/getAll")
if (code == 0) {
this.typeOptions = data
}
},
async openEdit(id) {
const resp = await $.get("/platform/fw/condolence/myList/findOne", {id})
const v = resp.data
condolence.toFormData(v)
// 编辑时回填后端保存的签字内容,供 PC 签字组件通过 formData.sign 显示。
this.$set(v, 'sign', v.manager_sign_data || '')
if (v.starting_time) {
v.hospital_stay = [v.starting_time, v.end_time]
}
this.formData = v
const typeResp = await $.get("/platform/condolence/type/findOne", {id: v.type})
if (typeResp.data) {
this.$set(this.formData, "goodsAlbum", typeResp.data.goodsAlbum || [])
}
await this.userRemoteMethod(v.be_user)
await this.userPayee(v.payee_loginname)
}
},
async created() {
this.getTypeOptions()
let id = getQueryVariable("id")
id ? this.openEdit(id) : this.flush()
}
})
</script>
<!--#
}
#-->