This commit is contained in:
2026-09-09 16:16:22 +08:00
parent ebffbab428
commit ba3a985c40
3749 changed files with 29 additions and 608551 deletions
@@ -1,413 +0,0 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.el-input-number input {
text-align: left !important;
}
.el-input-number__decrease, .el-input-number__increase {
display: none;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;度:</div>
<div class="search-item-option">
<el-date-picker
placeholder="选择年"
style="width: 100%"
type="year" v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">&emsp13;&emsp13;人:</div>
<div class="search-item-option">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
v-model="pageForm.searchKeyword">
<el-select placeholder="查询类型" slot="prepend" style="width: 100px;"
v-model="pageForm.searchName">
<el-option label="姓名" value="rei.userName"></el-option>
<el-option label="工号" value="rei.loginName"></el-option>
</el-select>
</el-input>
</div>
</div>
<div class="search-item">
<div class="search-item-label">所属工会:</div>
<div class="search-item-option">
<el-select @change="flushUnits" @clear="flushUnits" clearable="true"
filterable="true"
placeholder="所属工会" style="width: 100%;"
v-model="pageForm.unionId">
<el-option :label="item.unionname" :value="item.id"
v-for="item in unions"></el-option>
</el-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">所属单位:</div>
<div class="search-item-option">
<el-select clearable="true" filterable="true" placeholder="所属单位"
style="width: 100%;"
v-model="pageForm.unitId">
<el-option :label="item.name" :value="item.id"
v-for="item in units"></el-option>
</el-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">报销项目:</div>
<div class="search-item-option">
<el-select clearable style="width: 100%" v-model="pageForm.reiItemId">
<el-option value="ww" label="慰问"></el-option>
<el-option value="fyhd" label="活动"></el-option>
<el-option value="fyjj" label="建家"></el-option>
<el-option value="fyrc" label="日常"></el-option>
<el-option value="zflw" label="劳务"></el-option>
<el-option value="zfzj" label="专家"></el-option>
</el-select>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="报销列表">
<template #func>
<div class="pull-right offscreen-right mt5">
<el-radio-group @change="doSearch" size="medium" v-model="pageForm.isAudit">
<el-radio-button :label="null">全部</el-radio-button>
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</div>
</template>
</table-tool>
<el-row class="el-table-container">
<el-table :data="tableData" @sort-change="pageOrder" row-key="id"
style="width: 100%"
v-loading="tabLoading">
<el-table-column :index="indexMethod" align="center" header-align="center"
label="序号"
type="index"
width="80px"></el-table-column>
<el-table-column
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
align="center"
header-align="center"
v-for="column in tableColumns">
<template scope="{row}" v-if="column.prop==='stateId'">
<span :style="'color:'+row.stateColor">{{row.stateName}}</span>
</template>
<template scope="{row}" v-else-if="column.prop==='unitName'">
{{isDisPlayCode?''+row.unitcode+'':null}}{{row.unitName}}
</template>
<template scope="{row}" v-else-if="column.prop==='unionname'">
{{isDisPlayCode?''+row.unioncode+'':null}}{{row.unionname}}
</template>
<template scope="{row}" v-else-if="column.prop=='reimbursementItemSort'">
{{row.reimbursementItemSort==='fy'?'费用报销':'支付报销'}}
</template>
<template scope="{row}" v-else-if="column.prop=='description'">
<span>{{row.activity_name!=null?'活动名称:'+row.activity_name:'被慰问人:'+row.be_username}}</span>
</template>
</el-table-column>
<el-table-column align="center" fixed="right" header-align="center" label="操作"
width="150px">
<template scope="{row}">
<el-dropdown @command="dropdownCommand">
<el-button :loading="row.loading" size="mini">
<i class="ti-settings"></i>
<span class="ti-angle-down"></span>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item :command="{type:'view',data:row}">
查看
</el-dropdown-item>
<el-dropdown-item :command="{type:'doRecall',data:row}"
:disabled="row.State<=3043">
撤回
</el-dropdown-item>
<el-dropdown-item :command="{type:'Review',data:row}"
:disabled="row.State!=3043">
审核
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
</el-row>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #edit>
<reimbursement-new ref="rei_info2" handle label="审核">
<template #handle>
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
style="padding: 20px 0"
label-width="120px">
<el-form-item label="审核信息&emsp;" label-width="135px" class="view-header">
</el-form-item>
<el-row gutter="20">
<el-col :span="12">
<el-form-item prop="username" label="审核人员">
<el-input v-model="formData.username"
disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="auditTime" label="审核时间">
<el-input v-model="formData.auditTime" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item prop="auditOpinion" label="审核意见">
<el-input type="textarea" v-model="formData.auditOpinion" rows="4"
maxlength="500"
placeholder="请填写您的审核意见"></el-input>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button type="danger" @click="doReview(1)">
</el-button>
<el-button type="warning" @click="doReview(2)">退回
</el-button>
<el-button type="success" @click="doReview(3)">
</el-button>
</div>
</template>
</reimbursement-new>
</template>
<template #view>
<!--<activity-bx-info ref="act_info" v-show="reimbursementItemId!=4"></activity-bx-info>
<info ref="info" v-show="reimbursementItemId==4"></info>-->
<reimbursement-new ref="rei_info"></reimbursement-new>
</template>
</guava>
</div>
<script>
var vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
ReimbursementIsSign: false,
reimbursementItemId: "",
unions: [],
units: [],
tabLoading: false,
userOptions: [],
formData: {},
tableData: [],
typeOptions: [],
pageForm: {
searchName: "rei.userName",
isAudit: false,
year: new Date().getFullYear() + ""
},
formRules: {
/* auditOpinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],
opinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],*/
},
tableColumns: [
{prop: 'loginName', label: '经办人工号'},
{prop: 'userName', label: '经办人'},
{prop: 'unionName', label: '所在工会'},
{prop: 'unitName', label: '所在单位', sortable: true},
{prop: 'mobile', label: '联系方式'},
{prop: 'reimbursementItemSort', label: '报销类别', sortable: true},
{prop: 'reimbursementItemName', label: '报销项目', sortable: true},
{prop: 'applyTime', label: '申请时间', sortable: true},
{prop: 'stateId', label: '申请状态'},
{prop: 'description', label: '备注'},
],
subDis: false,
subLoading1: false,
subLoading2: false,
subLoading3: false,
}
},
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'info': httpVueLoader('/components/condolence/Info.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue'),
'reimbursement-new': httpVueLoader('/components/reimbursement/reimbursementNew.vue?v=4.0.0'),
},
methods: {
dropdownCommand(command) {
const {type, data} = command
if (type == 'view') {
this.openView(data)
} else if (type == 'doRecall') {
this.doRecall(data)
} else if (type == 'Review') {
this.openReview(data)
}
},
async doRecall(row) {
const confirm = await this.$confirm('您确定要撤回吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
});
if ("confirm" === confirm) {
const loading = this.$loading({
lock: true,
text: '正在提交...',
spinner: 'el-icon-loading',
background: COVER_LAYER_COLOR
});
const resp = await $.post(loc() + "/doRecall", {
id: row.id
});
if (resp.code === 0) {
this.doSearch()
this.notifySuccess(resp.msg)
} else {
this.notifyWarning(resp.msg)
}
loading.close()
}
},
async doReview(flag) {
const confirm = await this.$confirm('您确定要审核吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
});
if ("confirm" === confirm) {//确认后再执行
const loading = this.$loading({
lock: true,
text: '正在提交...',
spinner: 'el-icon-loading',
background: COVER_LAYER_COLOR
});
const resp = await $.post(loc() + "/doSubmit", {
id: this.formData.id,
flag: flag,
auditOpinion: this.formData.auditOpinion
});
if (resp.code === 0) {
this.doSearch()
this.notifySuccess(resp.msg)
this.$refs.guava.index()
} else {
this.notifyWarning(resp.msg)
}
loading.close()
}
},
openReview(row) {
this.formData = {
id: row.id,
username: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD')
}
this.$refs.rei_info2.getInfo(row.id)
this.$refs.guava.edit()
if (this.$refs['form']) {
this.$refs['form'].resetFields()
}
},
openView(row) {
this.$refs.rei_info.getInfo(row.id)
this.$refs.guava.view()
},
async getTypeOptions() {
const {code, data} = await $.get("/platform/condolence/type/getAll")
if (code == 0) {
this.typeOptions = data
}
},
async flushUnits() {
this.$set(this.pageForm, "unitId", "")
this.units = await getUnits(this.pageForm.unionId)
},
async pageData() {
let form = clone(this.pageForm)
if (form.isAudit === null) {
delete form.isAudit
}
const resp = await $.post(loc() + "/pageData", form)
if (resp.code === 0) {
this.tableData = resp.data.list;
this.pageForm.totalCount = resp.data.totalCount;
} else {
this.$message.error(resp.msg);
}
},
},
async created() {
this.getTypeOptions()
if ("${@shiro.hasAnyRoles('sysadmin','A06','xghkj')}" === 'true') {
this.unions = await getUnionList(null)
} else {
this.unions = await getUnionList("${@shiro.getPrincipalProperty('unit').getUnionid()}")
this.pageForm.unionId = this.unions[0].id
}
this.flushUnits()
this.pageData();
const aa = await getDictState("ReimbursementIsSign")
this.ReimbursementIsSign = aa.disabled
}
})
</script>
<!--#
}
#-->
@@ -1,454 +0,0 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div class="platform" id="app" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;度:</div>
<div class="search-item-option">
<el-date-picker
@change="doSearch"
placeholder="选择年"
style="width: 100%"
type="year" v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">工会名称:</div>
<div class="search-item-option">
<el-select @change="flushUnits" @clear="flushUnits" clearable filterable
placeholder="请选择工会" style="width: 100%"
v-model="pageForm.unionId">
<el-option
:key="item.id"
:label="item.unionname"
:value="item.id"
v-for="item in unionList">
</el-option>
</el-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">单位名称:</div>
<div class="search-item-option">
<el-select @change="doSearch" clearable="true" filterable="true"
placeholder="所属单位"
style="width: 100%;"
v-model="pageForm.unitId">
<el-option :label="item.name" :value="item.id"
v-for="item in unitList"></el-option>
</el-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">报销项目:</div>
<div class="search-item-option">
<el-select @change="doSearch" clearable
style="width: 100%" v-model="pageForm.reiItemId">
<el-option value="ww" label="慰问"></el-option>
<el-option value="fyhd" label="活动"></el-option>
<el-option value="fyjj" label="建家"></el-option>
<el-option value="fyrc" label="日常"></el-option>
<el-option value="zflw" label="劳务"></el-option>
<el-option value="zfzj" label="专家"></el-option>
</el-select>
</div>
</div>
<div class="search-item"
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}">
<div class="search-item-label">&ensp;&ensp;人:</div>
<div class="search-item-option">
<el-input v-model="pageForm.person"
placeholder="请输入经办人工号或姓名查询" clearable></el-input>
</div>
</div>
<div class="search-query">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索
</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="报销列表">
<template #func>
<el-button :disabled="selectRows.length!==1" @click="printPdf" size="mini"
type="primary">打印
</el-button>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize"
@selection-change="(val)=>{this.selectRows = val}"
@sort-change="pageOrder"
class="vi-table" row-key="id" style="width: 100%;margin-bottom: 20px"
v-loading="tableLoading">
<el-table-column align="center" header-align="center"
type="selection"></el-table-column>
<el-table-column :index="indexMethod" align="center" header-align="center"
label="序号" type="index"
width="80px"></el-table-column>
<el-table-column
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
align="center"
header-align="center"
show-overflow-tooltip
v-for="column in tableColumns">
<template scope="{row}" v-if="column.prop=='shrname'">
{{row.shrname!=null?row.shrname:'暂无'}}
</template>
<template scope="{row}" v-else-if="column.prop=='stateId'">
<span :style="'color:'+row.stateColor">{{row.stateName}}</span>
</template>
<template scope="{row}" v-else-if="column.prop=='reimbursementItemSort'">
{{row.reimbursementItemSort==='fy'?'费用报销':'支付报销'}}
</template>
<template scope="{row}" v-else-if="column.prop=='description'">
<span>{{row.activity_name!=null?'活动名称:'+row.activity_name:'被慰问人:'+row.be_username}}</span>
</template>
<template scope="{row}" v-else-if="column.prop==='unitname'">
{{isDisPlayCode?''+row.unitcode+'':null}}{{row.unitName}}
</template>
<template scope="{row}" v-else-if="column.prop==='unionname'">
{{isDisPlayCode?''+row.unioncode+'':null}}{{row.unionName}}
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作"
prop="userOnline" width="150px">
<template scope="{row}">
<el-dropdown @command="dropdownCommand">
<el-button :loading="row.loading" size="mini">
<i class="ti-settings"></i>
<span class="ti-angle-down"></span>
</el-button>
<el-dropdown-menu slot="dropdown">
<!-- <el-dropdown-item :disabled="row.stateId!=3040"
:command="{type:'submit',data:row}">
提交
</el-dropdown-item>-->
<el-dropdown-item :command="{type:'view',data:row}">
查看
</el-dropdown-item>
<el-dropdown-item
:command="{type:'edit',data:row}"
:disabled="row.State>3043">
修改
</el-dropdown-item>
<el-dropdown-item
:disabled="row.State>3043"
:command="{type:'delete',data:row}">
删除
</el-dropdown-item>
<el-dropdown-item
:disabled="row.State<3100"
:command="{type:'export',data:row}">
导出报销表
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #view>
<reimbursement-new ref="rei_info"></reimbursement-new>
<!--<activity-bx-info ref="act_info" v-show="reimbursementItemId!=4"></activity-bx-info>
<info ref="info" v-show="reimbursementItemId==4"></info>-->
</template>
</guava>
</div>
<script>
var vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
selectRows: [],
typeOptions: [],
reimbursementItemId: "",
unionList: [],
unitList: [],
formData: {
hospital_time: []
},
pageForm: {
year: new Date().getFullYear() + ''
},
tableColumns: [
{prop: 'loginName', label: '经办人工号', sortable: true},
{prop: 'userName', label: '姓名', sortable: true},
{prop: 'unionName', label: '所属工会', sortable: true},
{prop: 'unitName', label: '所属单位', sortable: true},
{prop: 'applyTime', label: '申请时间', sortable: true},
{prop: 'reimbursementItemSort', label: '报销类别', sortable: true},
{prop: 'reimbursementItemName', label: '报销项目', sortable: true},
{prop: 'description', label: '备注'},
{prop: 'money', label: '金额'},
{prop: 'stateId', label: '申请状态', sortable: true}
],
formRules: {
activity_number: [{
required: false,
message: '必填',
trigger: ['blur', 'change']
}],
venue: [{required: true, message: '必填', trigger: ['blur', 'change']}],
activity_money: [{required: true, message: '必填', trigger: ['blur', 'change']}],
activity_card_number: [{
required: true,
message: '必填',
trigger: ['blur', 'change']
}],
activity_time: [{required: false, message: '必填', trigger: ['blur', 'change']}],
}
}
},
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'info': httpVueLoader('/components/condolence/Info.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue'),
'reimbursement-new': httpVueLoader('/components/reimbursement/reimbursementNew.vue?v=4.0.0'),
},
methods: {
printPdf() {
window.open("/platform/reimbursement/Summary/reiExport?id=" + this.selectRows[0].id + "&Print=true")
},
dropdownCommand(command) {
const {type, data} = command
if (type == 'view') {
this.openView(data)
} else if (type == 'submit') {
this.doSubmit(data)
} else if (type == 'edit') {
this.openEdit(data)
} else if (type == 'delete') {
this.doDelete(data)
} else if (type == 'export') {
this.export(data)
}
},
export(data) {
window.open("/platform/reimbursement/Summary/reiExport?id=" + data.id + "&Print=false")
},
doSubmit(row) {
const {reimbursementId} = row
this.$confirm('确定要提交吗?提交后將不能刪除', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: async (a, b) => {
if ("confirm" == a) {//确认后再执行
this.$set(row, "delLoading", true)
const resp = await $.post(loc() + "/doSubmit", {id: reimbursementId});
if (resp.code === 0) {
this.pageData()
this.notifySuccess(resp.msg)
}else{
this.notifyError(resp.msg)
}
this.$set(row, "delLoading", false)
}
}
});
},
doDelete(row) {
const {id} = row
this.$confirm('确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: async (a, b) => {
if ("confirm" == a) {//确认后再执行
this.$set(row, "delLoading", true)
const resp = await $.post(loc() + "/doDelete", {id: id});
if (resp.code === 0) {
this.pageData()
this.notifySuccess(resp.msg)
}else{
this.notifyError(resp.msg)
}
this.$set(row, "delLoading", false)
}
}
});
},
openView(row) {
/* const {reimbursementId, reimbursementItemId} = row
this.reimbursementItemId = reimbursementItemId
if (reimbursementItemId != 4) {
this.$refs.act_info.getActInfo(reimbursementId)
} else {
this.$refs.info.getInfo(reimbursementId)
}*/
this.$refs.rei_info.getInfo(row.id)
this.$refs.guava.view()
},
openEdit(row) {
window.location.href = "/platform/reimbursement/applyNew?id=" + row.id
/* const {bxId, reimbursementId, reimbursementItemId} = row
this.reimbursementItemId = reimbursementItemId
this.formData = {}
this.$set(row, "editLoading", true)
if (reimbursementItemId != 4) {
this.actOpenEdit(row, bxId)
} else {
this.conOpenEdit(row, reimbursementId)
}
this.$refs.guava.edit()*/
},
async conOpenEdit(row, id) {
const resp = await $.get("/platform/fw/condolence/info/findOne", {id})
if (resp.code === 0) {
const v = resp.data
condolence.toFormData(v)
v.bankUserName = row.bankUserName
v.bankCardNumber = row.bankCardNumber
v.bankOfDeposit = row.bankOfDeposit
this.formData = v
this.$set(this.formData, 'hospital_stay', [v.starting_time, v.end_time])
this.$set(this.formData, 'hospital_time', [v.starting_time, v.end_time])
this.formData.sign = v.manager_sign
await this.userChange(v.be_user)
}
},
async getUserData(userId) {
const {data} = await $.get("/platform/fw/condolence/apply/getUserData", {userId})
return data
},
async userChange(be_user) {
const userData = await this.getUserData(be_user);
this.$set(this.formData, 'sex', userData.sex)
this.$set(this.formData, 'birthday', userData.birthday)
this.$set(this.formData, 'idcard', userData.idcard)
},
async actOpenEdit(row, id) {
const resp = await $.get(loc() + "/findOne", {id})
if (resp.code === 0) {
const v = resp.data
v.bankUserName = row.bankUserName
v.bankCardNumber = row.bankCardNumber
v.bankOfDeposit = row.bankOfDeposit
this.formData = v
this.formData.files = JSON.parse(v.files)
}
},
doEdit() {
this.$refs["form"].validate(async (valid) => {
if (valid) {
let resp = ""
const loading = this.$loading({
lock: true,
text: '正在提交...',
spinner: 'el-icon-loading',
background: COVER_LAYER_COLOR
});
const formData = clone(this.formData)
if (this.reimbursementItemId == 4) {
formData.files = JSON.stringify(formData.files)
if (formData.hospital_stay) {
formData.hospital_stay_1 = formData.hospital_time[0]
formData.hospital_stay_2 = formData.hospital_time[1]
}
resp = await $.post("/platform/fw/condolence/info/doEdit", {
data: JSON.stringify(formData),
sign: this.formData.sign,
hospital_stay_1: formData.hospital_stay_1,
hospital_stay_2: formData.hospital_stay_2,
bankCardNumber: formData.bankCardNumber,
bankOfDeposit: formData.bankOfDeposit
})
} else {
resp = await $.post(loc() + "/doEdit", {data: JSON.stringify(formData)})
}
closeLoadingFunc(loading, resp, async () => {
this.pageData()
this.$refs.guava.index()
}, (data, msg) => {
this.$message.error(msg);
})
}
})
},
async typeChange(id) {
const {data, code, msg} = await $.get("/platform/condolence/type/findOne", {id})
if (data) {
this.$set(this.formData, "money", data.money)
this.$set(this.formData, "way", data.way)
}
},
async getTypeOptions() {
const {code, data} = await $.get("/platform/condolence/type/getAll")
if (code == 0) {
this.typeOptions = data
}
},
async flushUnits() {
this.$set(this.pageForm, "unitId", "")
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') {
this.unitList = await getUnits(this.pageForm.unionId)
} else {
this.unitList = await getUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
}
this.doSearch()
},
},
async created() {
this.unionList = await getUnionList("${@shiro.getPrincipalProperty('union').getId()}")
this.getTypeOptions()
this.flushUnits()
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -1,346 +0,0 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div class="platform" id="app" v-cloak>
<guava padding="0% 5%" ref="guava">
<template>
<el-card shadow="never">
<search>
<search-item label="年&emsp;&emsp;度:">
<el-date-picker
placeholder="选择年"
style="width: 150px"
style="width: 100%"
type="year" v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</search-item>
<search-item label="所属工会:">
<el-select @change="flushUnits" @clear="flushUnits" clearable="true"
filterable="true"
placeholder="所属工会" style="width: 100%;"
v-model="pageForm.unionId">
<el-option :label="item.unionname" :value="item.id" v-for="item in unions"></el-option>
</el-select>
</search-item>
<search-item label="所属单位:">
<el-select clearable="true" filterable="true" placeholder="所属单位"
style="width: 100%;"
v-model="pageForm.unitId">
<el-option :label="item.name" :value="item.id" v-for="item in units"></el-option>
</el-select>
</search-item>
<template v-if="searchMore">
<search-item label="报销项目">
<el-select clearable style="width: 100%" v-model="pageForm.reiItemId">
<el-option :value="4" label="慰问"></el-option>
<el-option :value="1" label="文体活动"></el-option>
<el-option :value="2" label="日常活动"></el-option>
<el-option :value="3" label="其它活动"></el-option>
</el-select>
</search-item>
</template>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
<more v-model="searchMore"></more>
</div>
</search>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="报销列表">
<template #func>
<div class="pull-right offscreen-right mt5">
<el-radio-group @change="doSearch" size="medium" v-model="pageForm.isAudit">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</div>
</template>
</table-tool>
<el-row class="el-table-container">
<el-table :data="tableData" @sort-change="pageOrder" row-key="id" style="width: 100%"
v-loading="tabLoading">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号"
type="index"
width="80px"></el-table-column>
<el-table-column
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
align="center"
header-align="center"
v-for="column in tableColumns">
<template scope="{row}" v-if="column.prop=='stateId'">
<span :style="'color:'+row.stateColor">{{row.stateName}}</span>
</template>
</el-table-column>
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="150px">
<template scope="{row}">
<el-dropdown @command="dropdownCommand">
<el-button :loading="row.loading" size="mini">
<i class="ti-settings"></i>
<span class="ti-angle-down"></span>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item :command="{type:'view',data:row}">
查看
</el-dropdown-item>
<el-dropdown-item :command="{type:'Review',data:row}"
:disabled="row.State!=3090">
审核
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
</el-row>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #edit>
<activity-bx-info handle label="常务副主席审核" ref="act_info2" v-show="reimbursementItemId!=4">
<template #handle>
<el-form :model="formData" :rules="formRules" label-position="right" label-width="120px"
ref="form"
style="padding: 20px 0">
<el-form-item class="view-header" label="审核信息&emsp;" label-width="135px">
</el-form-item>
<el-row gutter="20">
<el-col :span="12">
<el-form-item label="审核人员" prop="username">
<el-input disabled
v-model="formData.username"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核时间" prop="time">
<el-input disabled v-model="formData.time"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="审核意见" prop="auditOpinion">
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4" type="textarea"
v-model="formData.auditOpinion"></el-input>
</el-form-item>
<el-form-item label="签&emsp;&emsp;字" prop="auditSign" v-if="!ReimbursementIsSign">
<sign :qz.sync="formData.auditSign" prefix="condolence"></sign>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button :disabled="subDis" :loading="subLoading1" @click="doReview(false)" type="danger">
</el-button>
<el-button :disabled="subDis" :loading="subLoading2" @click="doReview(true)" type="success">
</el-button>
</div>
</template>
</activity-bx-info>
<info handle label="常务副主席审核" ref="info2" v-show="reimbursementItemId==4">
<template #handle>
<el-form :model="formData" :rules="formRules" label-position="right" label-width="120px"
ref="form"
style="padding: 20px 0">
<el-form-item class="view-header" label="审核信息&emsp;" label-width="135px">
</el-form-item>
<el-row gutter="20">
<el-col :span="12">
<el-form-item label="审核人员" prop="username">
<el-input disabled
v-model="formData.username"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核时间" prop="time">
<el-input disabled v-model="formData.time"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="审核意见" prop="opinion">
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4" type="textarea"
v-model="formData.opinion"></el-input>
</el-form-item>
<el-form-item label="签&emsp;&emsp;字" prop="sign" v-if="!ReimbursementIsSign">
<sign :qz.sync="formData.sign" prefix="condolence"></sign>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button :disabled="subDis" :loading="subLoading1" @click="doReview(false)" type="danger">
</el-button>
<el-button :disabled="subDis" :loading="subLoading2" @click="doReview(true)" type="success">
</el-button>
</div>
</template>
</info>
</template>
<template #view>
<activity-bx-info ref="act_info" v-show="reimbursementItemId!=4"></activity-bx-info>
<info ref="info" v-show="reimbursementItemId==4"></info>
</template>
</guava>
</div>
<script>
var vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
ReimbursementIsSign: false,
reimbursementItemId: "",
unions: [],
units: [],
tabLoading: false,
userOptions: [],
formData: {},
tableData: [],
typeOptions: [],
pageForm: {
isAudit: false,
year: new Date().getFullYear() + ""
},
formRules: {
/*auditOpinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],
opinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],*/
},
tableColumns: [
{prop: 'userName', label: '经办人'},
{prop: 'unionname', label: '所在工会'},
{prop: 'unitName', label: '所在单位', sortable: true},
{prop: 'mobile', label: '联系方式'},
{prop: 'reimbursementItemName', label: '报销项目', sortable: true},
{prop: 'applyTime', label: '申请时间', sortable: true},
{prop: 'stateId', label: '申请状态'},
],
subDis: false,
subLoading1: false,
subLoading2: false,
subLoading3: false,
}
},
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'info': httpVueLoader('/components/condolence/Info.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue'),
},
methods: {
dropdownCommand(command) {
const {type, data} = command
if (type == 'view') {
this.openView(data)
} else if (type == 'Review') {
this.openReview(data)
}
},
openView(row) {
const {reimbursementId, reimbursementItemId} = row
this.reimbursementItemId = reimbursementItemId
if (reimbursementItemId != 4) {
this.$refs.act_info.getActInfo(reimbursementId)
} else {
this.$refs.info.getInfo(reimbursementId)
}
this.$refs.guava.view()
},
openReview(row) {
const {reimbursementId, reimbursementItemId} = row
this.reimbursementItemId = reimbursementItemId
this.formData = {
id: reimbursementId,
username: "${@shiro.getPrincipalProperty('username')}",
time: moment().format('YYYY-MM-DD'),
reimbursementItemId: reimbursementItemId,
}
this.subLoading1 = false
this.subLoading2 = false
this.subLoading3 = false
if (reimbursementItemId != 4) {
this.$refs.act_info2.getActInfo(reimbursementId)
} else {
this.$refs.info2.getInfo(reimbursementId)
}
this.$refs.guava.edit()
if (this.$refs['form']) {
this.$refs['form'].resetFields()
}
},
doReview(flag) {
this.$refs["form"].validate(async (valid) => {
const conMoney = this.$refs.info2.viewData.money
const actMoney = this.$refs.act_info2.viewData.activity_money
this.formData.money = this.formData.reimbursementItemId != 4 ? actMoney : conMoney
if (valid) {
this.formData.flag = flag
this.subDis = true
flag ? this.subLoading2 = true : this.subLoading1 = true
const resp = await $.post(loc() + "/doReview", this.formData)
if (resp.code === 0) {
this.pageData()
this.$refs.guava.index()
this.notifySuccess(resp.msg)
}else{
this.notifyError(resp.msg)
}
this.subDis = false
this.subLoading1 = false
this.subLoading2 = false
}
})
},
async flushUnits() {
this.$set(this.pageForm, "unitId", "")
this.units = await getUnits(this.pageForm.unionId)
},
},
async created() {
this.pageData();
this.unions = await getUnionList()
this.flushUnits()
const aa = await getDictState("ReimbursementIsSign")
this.ReimbursementIsSign = aa.disabled
}
})
</script>
<!--#
}
#-->
@@ -1,285 +0,0 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">报销时间:</div>
<div class="search-item-option">
<el-date-picker type="daterange" style="width: 100%" range-separator="——"
v-model="pageForm.reimbursementDate"
value-format="yyyy-MM-dd" format="yyyy-MM-dd" start-placeholder="开始日期"
end-placeholder="结束日期"></el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">&emsp13;&emsp13;人:</div>
<div class="search-item-option">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
v-model="pageForm.searchKeyword">
<el-select placeholder="查询类型" slot="prepend" style="width: 100px;"
v-model="pageForm.searchName">
<el-option label="姓名" value="rei.userName"></el-option>
<el-option label="工号" value="rei.loginName"></el-option>
</el-select>
</el-input>
</div>
</div>
<div class="search-item">
<div class="search-item-label">所属工会:</div>
<div class="search-item-option">
<el-select @change="flushUnits" @clear="flushUnits" clearable="true"
filterable="true"
placeholder="所属工会" style="width: 100%;"
v-model="pageForm.unionId">
<el-option :label="item.unionname" :value="item.id" v-for="item in unions"></el-option>
</el-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">所属单位:</div>
<div class="search-item-option">
<el-select clearable="true" filterable="true" placeholder="所属单位"
style="width: 100%;"
v-model="pageForm.unitId">
<el-option :label="item.name" :value="item.id" v-for="item in units"></el-option>
</el-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">报销项目:</div>
<div class="search-item-option">
<el-select clearable style="width: 100%" v-model="pageForm.reiItemId">
<el-option value="ww" label="慰问"></el-option>
<el-option value="fyhd" label="活动"></el-option>
<el-option value="fyjj" label="建家"></el-option>
<el-option value="fyrc" label="日常"></el-option>
<el-option value="zflw" label="劳务"></el-option>
<el-option value="zfzj" label="专家"></el-option>
</el-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">经费来源:</div>
<div class="search-item-option">
<el-select clearable style="width: 100%" v-model="pageForm.jf_source">
<el-option value="1" label="校工会"></el-option>
<el-option value="2" label="分工会"></el-option>
<el-option value="3" label="社团"></el-option>
</el-select>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="报销列表">
<template #func>
<el-button @click="doExportUserExcel" size="mini" type="primary">导出汇总名单
</el-button>
</template>
</table-tool>
<el-row class="el-table-container">
<el-table :data="tableData" @sort-change="pageOrder" row-key="id" style="width: 100%"
v-loading="tabLoading">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号"
type="index"
width="80px"></el-table-column>
<el-table-column
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
align="center"
header-align="center"
v-for="column in tableColumns"
show-overflow-tooltip>
<template scope="{row}" v-if="column.prop=='stateId'">
<span :style="'color:'+row.stateColor">{{row.stateName}}</span>
</template>
<template scope="{row}" v-else-if="column.prop=='reimbursementItemSort'">
{{row.reimbursementItemSort==='fy'?'费用报销':'支付报销'}}
</template>
<template scope="{row}" v-else-if="column.prop=='description'">
<span>{{row.activity_name!=null?'活动名称:'+row.activity_name:'被慰问人:'+row.be_username}}</span>
</template>
<template scope="{row}" v-else-if="column.prop=='money'">
<span>{{row.money}}元</span>
</template>
</el-table-column>
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="150px">
<template scope="{row}">
<el-dropdown @command="dropdownCommand">
<el-button :loading="row.loading" size="mini">
<i class="ti-settings"></i>
<span class="ti-angle-down"></span>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item :command="{type:'view',data:row}">
查看
</el-dropdown-item>
<el-dropdown-item
:command="{type:'export',data:row}">
打印
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
</el-row>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #view>
<!-- <activity-bx-info ref="act_info" v-show="reimbursementItemId!=4"></activity-bx-info>
<info ref="info" v-show="reimbursementItemId==4"></info>-->
<reimbursement-new ref="rei_info"></reimbursement-new>
</template>
</guava>
</div>
<script>
var vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
reimbursementItemId: "",
unions: [],
units: [],
tabLoading: false,
userOptions: [],
formData: {},
tableData: [],
typeOptions: [],
pageForm: {
reimbursementDate: [],
searchName: "rei.userName",
searchKeyword: '',
unionId: '',
unitId: '',
reiItemId: '',
isAudit: false,
},
formRules: {
auditOpinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],
opinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],
},
tableColumns: [
{prop: 'loginName', label: '经办人工号', sortable: true},
{prop: 'userName', label: '姓名', sortable: true},
{prop: 'unionName', label: '所属工会', sortable: true},
{prop: 'unitName', label: '所属单位', sortable: true},
{prop: 'applyTime', label: '申请时间', sortable: true},
{prop: 'reimbursementItemSort', label: '报销类别', sortable: true},
{prop: 'reimbursementItemName', label: '报销项目', sortable: true},
{prop: 'description', label: '备注'},
{prop: 'money', label: '金额'},
{prop: 'stateId', label: '申请状态', sortable: true}
],
subDis: false,
subLoading1: false,
subLoading2: false,
subLoading3: false,
}
},
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'info': httpVueLoader('/components/condolence/Info.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue'),
'reimbursement-new': httpVueLoader('/components/reimbursement/reimbursementNew.vue'),
},
methods: {
doExportUserExcel() {
const {searchKeyword, searchName, unionId, unitId, reiItemId, reimbursementDate} = this.pageForm
window.open(loc() + "/doExportUserExcel?searchKeyword=" + searchKeyword + "&searchName=" + searchName + "&unionId=" + unionId + "&unitId" + unitId + "&reiItemId=" + reiItemId + "&reimbursementDate=" + JSON.stringify(reimbursementDate))
},
dropdownCommand(command) {
const {type, data} = command
if (type == 'view') {
this.openView(data)
} else if (type == 'export') {
this.export(data)
}
},
export(data) {
const {reimbursementItemId, id} = data
if (reimbursementItemId != 4) {
window.open("/platform/reimbursement/Summary/reiExport?id=" + id + "&Print=true")
} else {
window.open("/platform/reimbursement/Summary/reiExport?id=" + id + "&Print=true")
}
},
openView(row) {
/* const {reimbursementId, reimbursementItemId} = row
this.reimbursementItemId = reimbursementItemId
if (reimbursementItemId != 4) {
this.$refs.act_info.getActInfo(reimbursementId)
} else {
this.$refs.info.getInfo(reimbursementId)
}*/
this.$refs.rei_info.getInfo(row.id)
this.$refs.guava.view()
},
async flushUnits() {
this.$set(this.pageForm, "unitId", "")
this.units = await getUnits(this.pageForm.unionId)
this.doSearch()
},
pageData() {//加载分页数据
sublime.showLoadingbar();//显示loading
this.tabLoading = true
const pageForm = clone(this.pageForm)
pageForm.reimbursementDate = JSON.stringify(pageForm.reimbursementDate)
$.post(loc() + "/pageData", pageForm, (data) => {
sublime.closeLoadingbar();//关闭loading
this.tabLoading = false
if (data.code == 0) {
this.tableData = data.data.list;
this.pageForm.totalCount = data.data.totalCount;
} else {
this.$message.error(data.msg);
}
}, "json");
},
},
async created() {
this.pageData();
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('wyh02')||@shiro.hasRole('wyh03')||@shiro.hasRole('xghkj')}" === 'true') {
this.unions = await getUnionList()
} else {
this.unions = await getUnionList("${@shiro.getPrincipalProperty('unit').getUnionid()}")
this.pageForm.unionId = this.unions[0].id
}
this.flushUnits()
}
})
</script>
<!--#
}
#-->
@@ -1,346 +0,0 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div class="platform" id="app" v-cloak>
<guava padding="0% 5%" ref="guava">
<template>
<el-card shadow="never">
<search>
<search-item label="年&emsp;&emsp;度:">
<el-date-picker
placeholder="选择年"
style="width: 150px"
style="width: 100%"
type="year" v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</search-item>
<search-item label="所属工会:">
<el-select @change="flushUnits" @clear="flushUnits" clearable="true"
filterable="true"
placeholder="所属工会" style="width: 100%;"
v-model="pageForm.unionId">
<el-option :label="item.unionname" :value="item.id" v-for="item in unions"></el-option>
</el-select>
</search-item>
<search-item label="所属单位:">
<el-select clearable="true" filterable="true" placeholder="所属单位"
style="width: 100%;"
v-model="pageForm.unitId">
<el-option :label="item.name" :value="item.id" v-for="item in units"></el-option>
</el-select>
</search-item>
<template v-if="searchMore">
<search-item label="报销项目">
<el-select clearable style="width: 100%" v-model="pageForm.reiItemId">
<el-option :value="4" label="慰问"></el-option>
<el-option :value="1" label="文体活动"></el-option>
<el-option :value="2" label="日常活动"></el-option>
<el-option :value="3" label="其它活动"></el-option>
</el-select>
</search-item>
</template>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
<more v-model="searchMore"></more>
</div>
</search>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="报销列表">
<template #func>
<div class="pull-right offscreen-right mt5">
<el-radio-group @change="doSearch" size="medium" v-model="pageForm.isAudit">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</div>
</template>
</table-tool>
<el-row class="el-table-container">
<el-table :data="tableData" @sort-change="pageOrder" row-key="id" style="width: 100%"
v-loading="tabLoading">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号"
type="index"
width="80px"></el-table-column>
<el-table-column
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
align="center"
header-align="center"
v-for="column in tableColumns">
<template scope="{row}" v-if="column.prop=='stateId'">
<span :style="'color:'+row.stateColor">{{row.stateName}}</span>
</template>
</el-table-column>
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="150px">
<template scope="{row}">
<el-dropdown @command="dropdownCommand">
<el-button :loading="row.loading" size="mini">
<i class="ti-settings"></i>
<span class="ti-angle-down"></span>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item :command="{type:'view',data:row}">
查看
</el-dropdown-item>
<el-dropdown-item :command="{type:'Review',data:row}"
:disabled="row.State!=3080">
审核
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
</el-row>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #edit>
<activity-bx-info handle label="分管副主席审核" ref="act_info2" v-show="reimbursementItemId!=4">
<template #handle>
<el-form :model="formData" :rules="formRules" label-position="right" label-width="120px"
ref="form"
style="padding: 20px 0">
<el-form-item class="view-header" label="审核信息&emsp;" label-width="135px">
</el-form-item>
<el-row gutter="20">
<el-col :span="12">
<el-form-item label="审核人员" prop="username">
<el-input disabled
v-model="formData.username"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核时间" prop="time">
<el-input disabled v-model="formData.time"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="签&emsp;&emsp;字" prop="auditSign" v-if="!ReimbursementIsSign">
<sign :qz.sync="formData.auditSign" prefix="condolence"></sign>
</el-form-item>
<el-form-item label="审核意见" prop="auditOpinion">
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4" type="textarea"
v-model="formData.auditOpinion"></el-input>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button :disabled="subDis" :loading="subLoading1" @click="doReview(false)" type="danger">
</el-button>
<el-button :disabled="subDis" :loading="subLoading2" @click="doReview(true)" type="success">
</el-button>
</div>
</template>
</activity-bx-info>
<info handle label="分管副主席审核" ref="info2" v-show="reimbursementItemId==4">
<template #handle>
<el-form :model="formData" :rules="formRules" label-position="right" label-width="120px"
ref="form"
style="padding: 20px 0">
<el-form-item class="view-header" label="审核信息&emsp;" label-width="135px">
</el-form-item>
<el-row gutter="20">
<el-col :span="12">
<el-form-item label="审核人员" prop="username">
<el-input disabled
v-model="formData.username"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核时间" prop="time">
<el-input disabled v-model="formData.time"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="审核意见" prop="opinion">
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4" type="textarea"
v-model="formData.opinion"></el-input>
</el-form-item>
<el-form-item label="签&emsp;&emsp;字" prop="sign" v-if="!ReimbursementIsSign">
<sign :qz.sync="formData.sign" prefix="condolence"></sign>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button :disabled="subDis" :loading="subLoading1" @click="doReview(false)" type="danger">
</el-button>
<el-button :disabled="subDis" :loading="subLoading2" @click="doReview(true)" type="success">
</el-button>
</div>
</template>
</info>
</template>
<template #view>
<activity-bx-info ref="act_info" v-show="reimbursementItemId!=4"></activity-bx-info>
<info ref="info" v-show="reimbursementItemId==4"></info>
</template>
</guava>
</div>
<script>
var vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
ReimbursementIsSign: false,
reimbursementItemId: "",
unions: [],
units: [],
tabLoading: false,
userOptions: [],
formData: {},
tableData: [],
typeOptions: [],
pageForm: {
isAudit: false,
year: new Date().getFullYear() + ""
},
formRules: {
/* auditOpinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],
opinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],*/
},
tableColumns: [
{prop: 'userName', label: '经办人'},
{prop: 'unionname', label: '所在工会'},
{prop: 'unitName', label: '所在单位', sortable: true},
{prop: 'mobile', label: '联系方式'},
{prop: 'reimbursementItemName', label: '报销项目', sortable: true},
{prop: 'applyTime', label: '申请时间', sortable: true},
{prop: 'stateId', label: '申请状态'},
],
subDis: false,
subLoading1: false,
subLoading2: false,
subLoading3: false,
}
},
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'info': httpVueLoader('/components/condolence/Info.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue'),
},
methods: {
dropdownCommand(command) {
const {type, data} = command
if (type == 'view') {
this.openView(data)
} else if (type == 'Review') {
this.openReview(data)
}
},
openView(row) {
const {reimbursementId, reimbursementItemId} = row
this.reimbursementItemId = reimbursementItemId
if (reimbursementItemId != 4) {
this.$refs.act_info.getActInfo(reimbursementId)
} else {
this.$refs.info.getInfo(reimbursementId)
}
this.$refs.guava.view()
},
openReview(row) {
const {reimbursementId, reimbursementItemId} = row
this.reimbursementItemId = reimbursementItemId
this.formData = {
id: reimbursementId,
username: "${@shiro.getPrincipalProperty('username')}",
time: moment().format('YYYY-MM-DD'),
reimbursementItemId: reimbursementItemId,
}
this.subLoading1 = false
this.subLoading2 = false
this.subLoading3 = false
if (reimbursementItemId != 4) {
this.$refs.act_info2.getActInfo(reimbursementId)
} else {
this.$refs.info2.getInfo(reimbursementId)
}
this.$refs.guava.edit()
if (this.$refs['form']) {
this.$refs['form'].resetFields()
}
},
doReview(flag) {
this.$refs["form"].validate(async (valid) => {
const conMoney = this.$refs.info2.viewData.money
const actMoney = this.$refs.act_info2.viewData.activity_money
this.formData.money = this.formData.reimbursementItemId != 4 ? actMoney : conMoney
if (valid) {
this.formData.flag = flag
this.subDis = true
flag ? this.subLoading2 = true : this.subLoading1 = true
const resp = await $.post(loc() + "/doReview", this.formData)
if (resp.code === 0) {
this.pageData()
this.$refs.guava.index()
this.notifySuccess(resp.msg)
}else{
this.notifyError(resp.msg)
}
this.subDis = false
this.subLoading1 = false
this.subLoading2 = false
}
})
},
async flushUnits() {
this.$set(this.pageForm, "unitId", "")
this.units = await getUnits(this.pageForm.unionId)
},
},
async created() {
this.pageData();
this.unions = await getUnionList()
this.flushUnits()
const aa = await getDictState("ReimbursementIsSign")
this.ReimbursementIsSign = aa.disabled
}
})
</script>
<!--#
}
#-->
@@ -1,730 +0,0 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
#billNumber .el-input__inner::placeholder {
color: orangered;
}
</style>
<div id="app" v-cloak>
<guava>
<el-card shadow="never">
<div slot="header" class="clearfix">
<h3 style="color: rgb(24, 103, 176);font-family: Microsoft YaHei;">报销申请</h3>
</div>
<el-form :model="formData" label-position="right" label-suffix=""
label-width="130px" :rules="rules" ref="addForm">
<el-row gutter="60">
<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="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="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="12">
<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="jf_source">
<el-radio-group v-model="formData.jf_source" @change="jfSourceChange">
<el-radio border :label="i.key" v-for="i in jfSourceList">
{{i.name}}
</el-radio>
</el-radio-group>
</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>
<el-col :span="12" v-if="formData.jf_source === '3'">
<el-form-item label="所属社团" prop="clubId">
<el-select v-model="formData.clubId" @change="clubChange"
style="width: 100%"
placeholder="请选择所属社团">
<el-option
v-for="item in clubList"
:key="item.clubid"
:label="item.clubName"
:value="item.clubid">
</el-option>
</el-select>
</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="12">
<el-form-item label="户名" prop="bankUserName">
<!--<el-input type="text" placeholder="请输入户名" style="width: 99%"
v-model="formData.bankUserName"></el-input>-->
<el-autocomplete style="width: 100%"
v-model="formData.bankUserName"
:fetch-suggestions="querySearchAsync"
placeholder="请输入户名"
@select="handleSelect"
></el-autocomplete>
</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
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-number v-model="formData.money" :controls="false"
:max="1000000000" :min="0"
controls-position="right"
placeholder="请填写慰问金额"
precision="2"
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>
</template>
<template v-else>
<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>
</template>
<el-col :span="12" v-if="formData.reimbursementItemSort === 'fy'">
<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" v-if="formData.reimbursementItemSort === 'fy'">
<el-form-item id="billNumber" label="发票号码" prop="billNumber">
<el-input v-model="formData.billNumber"
placeholder="请填写发票号码,如有多个请用逗号分隔"></el-input>
</el-form-item>
</el-col>
<!-- <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">
<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 v-if="!ReimbursementIsSign" :span="24">
<el-form-item label="签&emsp;&emsp;字" prop="sign">
<sign :qz.sync="formData.sign" prefix="condolence"></sign>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item v-if="['zfzj', 'zflw'].includes(formData.reimbursementItemId)"
label="附件"
prop="files">
<file-upload card :max="50" :files.sync="formData.files"></file-upload>
</el-form-item>
<el-form-item v-else label="附件" prop="files">
<file-upload card :max="50" :files.sync="formData.files"></file-upload>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button type="primary" :disabled="roleDisabled" @click="doAdd()">确 定</el-button>
</div>
</el-card>
</guava>
</div>
<script>
var vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
let self = this
let checkFiles = function (rule, value, callback) {
if (self.formData.reimbursementItemId === 'fyww' || self.formData.reimbursementItemId === 'zfww'
|| self.formData.reimbursementItemId === 'zfzj' || self.formData.reimbursementItemId === 'zflw') {
callback()
} else {
if (self.formData.files === undefined || self.formData.files === null) {
callback(new Error("请上传附件"))
}
callback()
}
};
return {
clubList: [],
balance: 0,
ReimbursementIsSign: false,
jfSourceList: [],
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: "dgzf", name: '对公支付'},
{key: "grdf", name: '个人垫付'},
],
rules: {
jf_source: [{required: true, message: '必填', trigger: ['change', 'blur']}],
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']}],
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: true, message: '必填', trigger: ['change', 'blur']}],
files_num: [{required: true, message: '必填', trigger: ['change', 'blur']}],
bankUserName: [{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']}],
clubId: [{required: true, message: '必填', trigger: ['change', 'blur']}],
billNumber: [{
required: true,
message: '请填写发票号码,如有多个请用逗号分隔',
trigger: ['change', 'blur']
}],
files: [{required: true, validator: checkFiles, trigger: ['blur', 'change']}],
},
roleDisabled: false,
}
},
methods: {
async querySearchAsync(queryString, cb) {
const resp = await $.get(loc() + "/getLastData", {
queryString: queryString
})
if (resp.data) {
cb(resp.data)
}
},
handleSelect(item) {
this.$set(this.formData, 'bankUserName', item.bankUserName)
this.$set(this.formData, 'bankCardNumber', item.bankCardNumber)
this.$set(this.formData, 'bankOfDeposit', item.bankOfDeposit)
},
async jfSourceChange(val) {
//判断权限
const resp = await $.get(loc() + '/validRole', {val: val})
this.roleDisabled = resp.code !== 0
if (resp.code !== 0) {
this.$alert(resp.msg, '提示', {
confirmButtonText: '确定',
type: 'warning'
});
//this.formData.jf_source = ''
return
}
if (!val) {
this.balance = 0
return
}
if (val == "1") {
const {data} = await $.get(loc() + "/getSchoolBudget")
this.balance = data
} else if (val == "2") {
await this.getBalance()
} else {
//this.balance = 0
await this.clubChange(this.formData.clubId)
}
},
async clubChange(val) {
const {data} = await $.get(loc() + "/getClubBudget", {
clubId: val
})
this.balance = data
},
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),
sign: this.formData.sign
})
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 (val === 'fyww' || val === 'zfww' || val === 'zfzj' || val === 'zflw') {
this.rules.files[0].required = false
} else {
this.rules.files[0].required = true
}
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", "fyhd")
await this.getTypeOptions()
this.reimbursementItemSortChange(this.formData.reimbursementItemSort)
this.reimbursementItemChange(this.formData.reimbursementItemId)
},
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.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})
if(refs.data.be_user) {
const userData = await this.getUserData(refs.data.be_user);
this.userOptions.push(userData)
}
// await this.userChange()
await this.jfSourceChange(refs.data.jf_source)
this.formData = refs.data
},
},
async created() {
this.initData()
if ("${@shiro.hasRole('sysadmin')}" === 'true') {
this.jfSourceList.push({key: "1", name: "校工会"})
this.jfSourceList.push({key: "2", name: "分工会"})
this.jfSourceList.push({key: "3", name: "社团"})
} else {
if ("${@shiro.hasRole('A06')}" === 'true') {
this.jfSourceList.push({key: "1", name: "校工会"})
}
if ("${@shiro.hasAnyRoles('H04', 'gh01')}" === 'true') {
this.jfSourceList.push({key: "2", name: "分工会"})
}
if ("${@shiro.hasRole('club01')}" === 'true') {
this.jfSourceList.push({key: "3", name: "社团"})
}
}
const id = getQueryVariable("id")
if (id) await this.findData(id)
this.clubList = await getClubsByUser()
await this.jfSourceChange(this.formData.jf_source)
const aa = await getDictState("ReimbursementIsSign")
this.ReimbursementIsSign = aa.disabled
}
})
</script>
<!--#
}
#-->
@@ -1,383 +0,0 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
input[type="file"] {
display: none
}
.el-input-number input {
text-align: left !important;
}
.el-input-number__decrease, .el-input-number__increase {
display: none;
}
</style>
<div class="platform" id="app" v-cloak>
<guava padding="0% 5%" ref="guava">
<template>
<el-card shadow="never">
<search>
<search-item label="年&emsp;&emsp;度:">
<el-date-picker
placeholder="选择年"
style="width: 150px"
style="width: 100%"
type="year" v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</search-item>
<search-item label="所属工会:">
<el-select @change="flushUnits" @clear="flushUnits" clearable="true"
filterable="true"
placeholder="所属工会" style="width: 100%;"
v-model="pageForm.unionId">
<el-option :label="item.unionname" :value="item.id" v-for="item in unions"></el-option>
</el-select>
</search-item>
<search-item label="所属单位:">
<el-select clearable="true" filterable="true" placeholder="所属单位"
style="width: 100%;"
v-model="pageForm.unitId">
<el-option :label="item.name" :value="item.id" v-for="item in units"></el-option>
</el-select>
</search-item>
<template v-if="searchMore">
<search-item label="报销项目">
<el-select clearable style="width: 100%" v-model="pageForm.reiItemId">
<el-option :value="4" label="慰问"></el-option>
<el-option :value="1" label="文体活动"></el-option>
<el-option :value="2" label="日常活动"></el-option>
<el-option :value="3" label="其它活动"></el-option>
</el-select>
</search-item>
</template>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
<more v-model="searchMore"></more>
</div>
</search>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="报销列表">
<template #func>
<div class="pull-right offscreen-right mt5">
<el-radio-group @change="doSearch" size="medium" v-model="pageForm.isAudit">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</div>
</template>
</table-tool>
<el-row class="el-table-container">
<el-table :data="tableData" @sort-change="pageOrder" row-key="id" style="width: 100%"
v-loading="tabLoading">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号"
type="index"
width="80px"></el-table-column>
<el-table-column
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
align="center"
header-align="center"
v-for="column in tableColumns">
<template scope="{row}" v-if="column.prop==='stateId'">
<span :style="'color:'+row.stateColor">{{row.stateName}}</span>
</template>
<template scope="{row}" v-else-if="column.prop==='unitName'">
{{isDisPlayCode?''+row.unitcode+'':null}}{{row.unitName}}
</template>
<template scope="{row}" v-else-if="column.prop==='unionname'">
{{isDisPlayCode?''+row.unioncode+'':null}}{{row.unionname}}
</template>
<template scope="{row}" v-else-if="column.prop=='description'">
<span>{{row.activity_name!=null?'活动名称:'+row.activity_name:'被慰问人:'+row.be_username}}</span>
</template>
</el-table-column>
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="150px">
<template scope="{row}">
<el-dropdown @command="dropdownCommand">
<el-button :loading="row.loading" size="mini">
<i class="ti-settings"></i>
<span class="ti-angle-down"></span>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item :command="{type:'view',data:row}">
查看
</el-dropdown-item>
<el-dropdown-item :command="{type:'Review',data:row}"
:disabled="row.State!=3050">
审核
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
</el-row>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #edit>
<activity-bx-info handle label="分工会审核" ref="act_info2" v-show="reimbursementItemId!=4">
<template #handle>
<el-form :model="formData" :rules="formRules" label-position="right" label-width="120px"
ref="form"
style="padding: 20px 0">
<el-form-item class="view-header" label="审核信息&emsp;" label-width="135px">
</el-form-item>
<el-row gutter="20">
<el-col :span="12">
<el-form-item label="审核人员" prop="username">
<el-input disabled
v-model="formData.username"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核时间" prop="time">
<el-input disabled v-model="formData.time"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="审核意见" prop="auditOpinion">
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4" type="textarea"
v-model="formData.auditOpinion"></el-input>
</el-form-item>
<el-form-item label="签&emsp;&emsp;字" prop="auditSign" v-if="!ReimbursementIsSign">
<sign :qz.sync="formData.auditSign" prefix="condolence"></sign>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button :disabled="subDis" :loading="subLoading1" @click="doReview(false)" type="danger">
</el-button>
<el-button :disabled="subDis" :loading="subLoading2" @click="doReview(true)" type="success">
</el-button>
</div>
</template>
</activity-bx-info>
<info handle label="分工会审核" ref="info2" v-show="reimbursementItemId==4">
<template #handle>
<el-form :model="formData" :rules="formRules" label-position="right" label-width="120px"
ref="form"
style="padding: 20px 0">
<el-form-item class="view-header" label="审核信息&emsp;" label-width="135px">
</el-form-item>
<el-row gutter="20">
<el-col :span="12">
<el-form-item label="审核人员" prop="username">
<el-input disabled
v-model="formData.username"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核时间" prop="time">
<el-input disabled v-model="formData.time"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="审核意见" prop="auditOpinion">
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4" type="textarea"
v-model="formData.opinion"></el-input>
</el-form-item>
<el-form-item label="签&emsp;&emsp;字" prop="sign" v-if="!ReimbursementIsSign">
<sign :qz.sync="formData.sign" prefix="condolence"></sign>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button :disabled="subDis" :loading="subLoading1" @click="doReview(false)" type="danger">
</el-button>
<el-button :disabled="subDis" :loading="subLoading2" @click="doReview(true)" type="success">
</el-button>
</div>
</template>
</info>
</template>
<template #view>
<activity-bx-info ref="act_info" v-show="reimbursementItemId!=4"></activity-bx-info>
<info ref="info" v-show="reimbursementItemId==4"></info>
</template>
</guava>
</div>
<script>
var vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
ReimbursementIsSign: false,
reimbursementItemId: "",
unions: [],
units: [],
tabLoading: false,
userOptions: [],
formData: {},
tableData: [],
typeOptions: [],
pageForm: {
isAudit: false,
year: new Date().getFullYear() + ""
},
formRules: {
/* auditOpinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],
opinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],*/
},
tableColumns: [
{prop: 'userName', label: '经办人'},
{prop: 'unionname', label: '所在工会'},
{prop: 'unitName', label: '所在单位', sortable: true},
{prop: 'mobile', label: '联系方式'},
{prop: 'reimbursementItemName', label: '报销项目', sortable: true},
{prop: 'applyTime', label: '申请时间', sortable: true},
{prop: 'stateId', label: '申请状态'},
{prop: 'description', label: '备注'},
],
subDis: false,
subLoading1: false,
subLoading2: false,
subLoading3: false,
}
},
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'info': httpVueLoader('/components/condolence/Info.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue'),
},
methods: {
dropdownCommand(command) {
const {type, data} = command
if (type == 'view') {
this.openView(data)
} else if (type == 'Review') {
this.openReview(data)
}
},
doReview(flag) {
this.$refs["form"].validate(async (valid) => {
const conMoney = this.$refs.info2.viewData.money
const actMoney = this.$refs.act_info2.viewData.activity_money
this.formData.money = this.formData.reimbursementItemId != 4 ? actMoney : conMoney
if (valid) {
this.formData.flag = flag
this.subDis = true
flag ? this.subLoading2 = true : this.subLoading1 = true
const resp = await $.post(loc() + "/doReview", this.formData)
if (resp.code === 0) {
this.pageData()
this.$refs.guava.index()
this.notifySuccess(resp.msg)
}else{
this.notifyError(resp.msg)
}
this.subDis = false
this.subLoading1 = false
this.subLoading2 = false
}
})
},
openReview(row) {
const {reimbursementId, reimbursementItemId} = row
this.reimbursementItemId = reimbursementItemId
this.formData = {
id: reimbursementId,
username: "${@shiro.getPrincipalProperty('username')}",
time: moment().format('YYYY-MM-DD'),
reimbursementItemId: reimbursementItemId,
}
this.subLoading1 = false
this.subLoading2 = false
this.subLoading3 = false
if (reimbursementItemId != 4) {
this.$refs.act_info2.getActInfo(reimbursementId)
} else {
this.$refs.info2.getInfo(reimbursementId)
}
this.$refs.guava.edit()
if (this.$refs['form']) {
this.$refs['form'].resetFields()
}
},
openView(row) {
const {reimbursementId, reimbursementItemId} = row
this.reimbursementItemId = reimbursementItemId
if (reimbursementItemId != 4) {
this.$refs.act_info.getActInfo(reimbursementId)
} else {
this.$refs.info.getInfo(reimbursementId)
}
this.$refs.guava.view()
},
async getTypeOptions() {
const {code, data} = await $.get("/platform/condolence/type/getAll")
if (code == 0) {
this.typeOptions = data
}
},
async flushUnits() {
this.$set(this.pageForm, "unitId", "")
this.units = await getUnits(this.pageForm.unionId)
},
},
async created() {
this.pageData();
this.getTypeOptions()
if ("${@shiro.hasRole('sysadmin')}" === 'true') {
this.unions = await getUnionList(null)
} else {
this.unions = await getUnionList("${@shiro.getPrincipalProperty('unit').getUnionid()}")
this.pageForm.unionId = this.unions[0].id
}
this.flushUnits()
const aa = await getDictState("ReimbursementIsSign")
this.ReimbursementIsSign = aa.disabled
}
})
</script>
<!--#
}
#-->
@@ -1,358 +0,0 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div class="platform" id="app" v-cloak>
<guava padding="0% 5%" ref="guava">
<template>
<el-card shadow="never">
<search>
<search-item label="年&emsp;&emsp;度:">
<el-date-picker
placeholder="选择年"
style="width: 150px"
style="width: 100%"
type="year" v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</search-item>
<search-item label="所属工会:">
<el-select @change="flushUnits" @clear="flushUnits" clearable="true"
filterable="true"
placeholder="所属工会" style="width: 100%;"
v-model="pageForm.unionId">
<el-option :label="item.unionname" :value="item.id" v-for="item in unions"></el-option>
</el-select>
</search-item>
<search-item label="所属单位:">
<el-select clearable="true" filterable="true" placeholder="所属单位"
style="width: 100%;"
v-model="pageForm.unitId">
<el-option :label="item.name" :value="item.id" v-for="item in units"></el-option>
</el-select>
</search-item>
<template v-if="searchMore">
<search-item label="报销项目">
<el-select clearable style="width: 100%" v-model="pageForm.reiItemId">
<el-option :value="4" label="慰问"></el-option>
<el-option :value="1" label="文体活动"></el-option>
<el-option :value="2" label="日常活动"></el-option>
<el-option :value="3" label="其它活动"></el-option>
</el-select>
</search-item>
</template>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
<more v-model="searchMore"></more>
</div>
</search>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="报销列表">
<template #func>
<div class="pull-right offscreen-right mt5">
<el-radio-group @change="doSearch" size="medium" v-model="pageForm.isAudit">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</div>
</template>
</table-tool>
<el-row class="el-table-container">
<el-table :data="tableData" @sort-change="pageOrder" row-key="id" style="width: 100%"
v-loading="tabLoading">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号"
type="index"
width="80px"></el-table-column>
<el-table-column
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
align="center"
header-align="center"
v-for="column in tableColumns">
<template scope="{row}" v-if="column.prop=='stateId'">
<span :style="'color:'+row.stateColor">{{row.stateName}}</span>
</template>
</el-table-column>
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="150px">
<template scope="{row}">
<el-dropdown @command="dropdownCommand">
<el-button :loading="row.loading" size="mini">
<i class="ti-settings"></i>
<span class="ti-angle-down"></span>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item :command="{type:'view',data:row}">
查看
</el-dropdown-item>
<el-dropdown-item :command="{type:'Review',data:row}"
:disabled="row.State!=3070">
审核
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
</el-row>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #edit>
<activity-bx-info handle label="财务审核" ref="act_info2" v-show="reimbursementItemId!=4">
<template #handle>
<el-form :model="formData" :rules="formRules" label-position="right" label-width="120px"
ref="form"
style="padding: 20px 0">
<el-form-item class="view-header" label="审核信息&emsp;" label-width="135px">
</el-form-item>
<el-row gutter="20">
<el-col :span="12">
<el-form-item label="审核人员" prop="username">
<el-input disabled
v-model="formData.username"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核时间" prop="time">
<el-input disabled v-model="formData.time"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="报销金额" prop="activity_money">
<el-input v-model="formData.activity_money"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="审核意见" prop="auditOpinion">
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4" type="textarea"
v-model="formData.auditOpinion"></el-input>
</el-form-item>
<el-form-item label="签&emsp;&emsp;字" prop="auditSign" v-if="!ReimbursementIsSign">
<sign :qz.sync="formData.auditSign" prefix="condolence"></sign>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button :disabled="subDis" :loading="subLoading1" @click="doReview(false)" type="danger">
</el-button>
<el-button :disabled="subDis" :loading="subLoading2" @click="doReview(true)" type="success">
</el-button>
</div>
</template>
</activity-bx-info>
<info handle label="财务审核" ref="info2" v-show="reimbursementItemId==4">
<template #handle>
<el-form :model="formData" :rules="formRules" label-position="right" label-width="120px"
ref="form"
style="padding: 20px 0">
<el-form-item class="view-header" label="审核信息&emsp;" label-width="135px">
</el-form-item>
<el-row gutter="20">
<el-col :span="12">
<el-form-item label="审核人员" prop="username">
<el-input disabled
v-model="formData.username"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核时间" prop="time">
<el-input disabled v-model="formData.time"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="报销金额" prop="money">
<el-input v-model="formData.money"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="审核意见" prop="opinion">
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4" type="textarea"
v-model="formData.opinion"></el-input>
</el-form-item>
<el-form-item label="签&emsp;&emsp;字" prop="sign" v-if="!ReimbursementIsSign">
<sign :qz.sync="formData.sign" prefix="condolence"></sign>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button :disabled="subDis" :loading="subLoading1" @click="doReview(false)" type="danger">
</el-button>
<el-button :disabled="subDis" :loading="subLoading2" @click="doReview(true)" type="success">
</el-button>
</div>
</template>
</info>
</template>
<template #view>
<activity-bx-info ref="act_info" v-show="reimbursementItemId!=4"></activity-bx-info>
<info ref="info" v-show="reimbursementItemId==4"></info>
</template>
</guava>
</div>
<script>
var vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
ReimbursementIsSign: false,
reimbursementItemId: "",
unions: [],
units: [],
tabLoading: false,
userOptions: [],
formData: {},
tableData: [],
typeOptions: [],
pageForm: {
isAudit: false,
year: new Date().getFullYear() + ""
},
formRules: {
/* auditOpinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],
opinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],*/
},
tableColumns: [
{prop: 'userName', label: '经办人'},
{prop: 'unionname', label: '所在工会'},
{prop: 'unitName', label: '所在单位', sortable: true},
{prop: 'mobile', label: '联系方式'},
{prop: 'reimbursementItemName', label: '报销项目', sortable: true},
{prop: 'applyTime', label: '申请时间', sortable: true},
{prop: 'stateId', label: '申请状态'},
],
subDis: false,
subLoading1: false,
subLoading2: false,
subLoading3: false,
}
},
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'info': httpVueLoader('/components/condolence/Info.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue'),
},
methods: {
dropdownCommand(command) {
const {type, data} = command
if (type == 'view') {
this.openView(data)
} else if (type == 'Review') {
this.openReview(data)
}
},
openView(row) {
const {reimbursementId, reimbursementItemId} = row
this.reimbursementItemId = reimbursementItemId
if (reimbursementItemId != 4) {
this.$refs.act_info.getActInfo(reimbursementId)
} else {
this.$refs.info.getInfo(reimbursementId)
}
this.$refs.guava.view()
},
openReview(row) {
const {reimbursementId, reimbursementItemId, activity_money, money} = row
this.reimbursementItemId = reimbursementItemId
this.formData = {
id: reimbursementId,
username: "${@shiro.getPrincipalProperty('username')}",
time: moment().format('YYYY-MM-DD'),
reimbursementItemId: reimbursementItemId,
activity_money: activity_money,
money: money
}
this.subLoading1 = false
this.subLoading2 = false
this.subLoading3 = false
if (reimbursementItemId != 4) {
this.$refs.act_info2.getActInfo(reimbursementId)
} else {
this.$refs.info2.getInfo(reimbursementId)
}
this.$refs.guava.edit()
if (this.$refs['form']) {
this.$refs['form'].resetFields()
}
},
doReview(flag) {
this.$refs["form"].validate(async (valid) => {
this.formData.money = this.formData.reimbursementItemId != 4 ? this.formData.activity_money : this.formData.money
if (valid) {
console.log(1)
this.formData.flag = flag
this.subDis = true
flag ? this.subLoading2 = true : this.subLoading1 = true
const resp = await $.post(loc() + "/doReview", this.formData)
if (resp.code === 0) {
this.pageData()
this.$refs.guava.index()
this.notifySuccess(resp.msg)
}else{
this.notifyError(resp.msg)
}
this.subDis = false
this.subLoading1 = false
this.subLoading2 = false
}
})
},
async flushUnits() {
this.$set(this.pageForm, "unitId", "")
this.units = await getUnits(this.pageForm.unionId)
},
},
async created() {
this.pageData();
this.unions = await getUnionList()
this.flushUnits()
const aa = await getDictState("ReimbursementIsSign")
this.ReimbursementIsSign = aa.disabled
}
})
</script>
<!--#
}
#-->
@@ -1,3 +0,0 @@
const judgmentUnit = "${@shiro.hasRole('sysadmin')||@shiro.hasRole('H04')||@shiro.hasRole('gh12')}" === 'true'
const judgmentUnion = "${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('xghhdwy')}" === 'true'
const judgmentH02 = "${@shiro.hasRole('club01')}" === 'true'
@@ -1,368 +0,0 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div class="platform" id="app" v-cloak>
<guava padding="0% 5%" ref="guava">
<template>
<el-card shadow="never">
<search>
<search-item label="年&emsp;&emsp;度:">
<el-date-picker
placeholder="选择年"
style="width: 150px"
style="width: 100%"
type="year" v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</search-item>
<search-item label="所属工会:">
<el-select @change="flushUnits" @clear="flushUnits" clearable="true"
filterable="true"
placeholder="所属工会" style="width: 100%;"
v-model="pageForm.unionId">
<el-option :label="item.unionname" :value="item.id"
v-for="item in unions"></el-option>
</el-select>
</search-item>
<search-item label="所属单位:">
<el-select clearable="true" filterable="true" placeholder="所属单位"
style="width: 100%;"
v-model="pageForm.unitId">
<el-option :label="item.name" :value="item.id"
v-for="item in units"></el-option>
</el-select>
</search-item>
<template v-if="searchMore">
<search-item label="报销项目">
<el-select clearable style="width: 100%" v-model="pageForm.reiItemId">
<el-option :value="4" label="慰问"></el-option>
<el-option :value="1" label="文体活动"></el-option>
<el-option :value="2" label="日常活动"></el-option>
<el-option :value="3" label="其它活动"></el-option>
</el-select>
</search-item>
</template>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索
</el-button>
<more v-model="searchMore"></more>
</div>
</search>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="报销列表">
<template #func>
<div class="pull-right offscreen-right mt5">
<el-radio-group @change="doSearch" size="medium"
v-model="pageForm.isAudit">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</div>
</template>
</table-tool>
<el-row class="el-table-container">
<el-table :data="tableData" @sort-change="pageOrder" row-key="id"
style="width: 100%"
v-loading="tabLoading">
<el-table-column :index="indexMethod" align="center" header-align="center"
label="序号"
type="index"
width="80px"></el-table-column>
<el-table-column
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
align="center"
header-align="center"
v-for="column in tableColumns">
<template scope="{row}" v-if="column.prop=='stateId'">
<span :style="'color:'+row.stateColor">{{row.stateName}}</span>
</template>
</el-table-column>
<el-table-column align="center" fixed="right" header-align="center"
label="操作" width="150px">
<template scope="{row}">
<el-dropdown @command="dropdownCommand">
<el-button :loading="row.loading" size="mini">
<i class="ti-settings"></i>
<span class="ti-angle-down"></span>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item :command="{type:'view',data:row}">
查看
</el-dropdown-item>
<el-dropdown-item :command="{type:'Review',data:row}"
:disabled="row.State!=3060">
审核
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
</el-row>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #edit>
<activity-bx-info handle label="书记审核" ref="act_info2" v-show="reimbursementItemId!=4">
<template #handle>
<el-form :model="formData" :rules="formRules" label-position="right"
label-width="120px"
ref="form"
style="padding: 20px 0">
<el-form-item class="view-header" label="审核信息&emsp;" label-width="135px">
</el-form-item>
<el-row gutter="20">
<el-col :span="12">
<el-form-item label="审核人员" prop="username">
<el-input disabled
v-model="formData.username"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核时间" prop="time">
<el-input disabled v-model="formData.time"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="审核意见" prop="auditOpinion">
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4"
type="textarea"
v-model="formData.auditOpinion"></el-input>
</el-form-item>
<el-form-item label="签&emsp;&emsp;字" prop="auditSign"
v-if="!ReimbursementIsSign">
<sign :qz.sync="formData.auditSign" prefix="condolence"></sign>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button :disabled="subDis" :loading="subLoading1"
@click="doReview(false)" type="danger">
</el-button>
<el-button :disabled="subDis" :loading="subLoading2" @click="doReview(true)"
type="success">
</el-button>
</div>
</template>
</activity-bx-info>
<info handle label="书记审核" ref="info2" v-show="reimbursementItemId==4">
<template #handle>
<el-form :model="formData" :rules="formRules" label-position="right"
label-width="120px"
ref="form"
style="padding: 20px 0">
<el-form-item class="view-header" label="审核信息&emsp;" label-width="135px">
</el-form-item>
<el-row gutter="20">
<el-col :span="12">
<el-form-item label="审核人员" prop="username">
<el-input disabled
v-model="formData.username"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核时间" prop="time">
<el-input disabled v-model="formData.time"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="审核意见" prop="opinion">
<el-input maxlength="500" placeholder="请填写您的审核意见" rows="4"
type="textarea"
v-model="formData.opinion"></el-input>
</el-form-item>
<el-form-item label="签&emsp;&emsp;字" prop="sign">
<sign :qz.sync="formData.sign" prefix="condolence"></sign>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button :disabled="subDis" :loading="subLoading1"
@click="doReview(false)" type="danger">
</el-button>
<el-button :disabled="subDis" :loading="subLoading2" @click="doReview(true)"
type="success">
</el-button>
</div>
</template>
</info>
</template>
<template #view>
<activity-bx-info ref="act_info" v-show="reimbursementItemId!=4"></activity-bx-info>
<info ref="info" v-show="reimbursementItemId==4"></info>
</template>
</guava>
</div>
<script>
var vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
ReimbursementIsSign: false,
reimbursementItemId: "",
unions: [],
units: [],
tabLoading: false,
userOptions: [],
formData: {},
tableData: [],
typeOptions: [],
pageForm: {
isAudit: false,
year: new Date().getFullYear() + ""
},
formRules: {
/* auditOpinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],
opinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],*/
},
tableColumns: [
{prop: 'userName', label: '经办人'},
{prop: 'unionname', label: '所在工会'},
{prop: 'unitName', label: '所在单位', sortable: true},
{prop: 'mobile', label: '联系方式'},
{prop: 'reimbursementItemName', label: '报销项目', sortable: true},
{prop: 'applyTime', label: '申请时间', sortable: true},
{prop: 'stateId', label: '申请状态'},
],
subDis: false,
subLoading1: false,
subLoading2: false,
subLoading3: false,
}
},
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'sign': httpVueLoader('/components/sign/sign.vue?v=2.0.0'),
'info': httpVueLoader('/components/condolence/Info.vue'),
'activity-bx-info': httpVueLoader('/components/activityBx/ActivityBxInfo.vue'),
},
methods: {
dropdownCommand(command) {
const {type, data} = command
if (type == 'view') {
this.openView(data)
} else if (type == 'Review') {
this.openReview(data)
}
},
openView(row) {
const {reimbursementId, reimbursementItemId} = row
this.reimbursementItemId = reimbursementItemId
if (reimbursementItemId != 4) {
this.$refs.act_info.getActInfo(reimbursementId)
} else {
this.$refs.info.getInfo(reimbursementId)
}
this.$refs.guava.view()
},
openReview(row) {
const {reimbursementId, reimbursementItemId} = row
this.reimbursementItemId = reimbursementItemId
this.formData = {
id: reimbursementId,
username: "${@shiro.getPrincipalProperty('username')}",
time: moment().format('YYYY-MM-DD'),
reimbursementItemId: reimbursementItemId,
}
this.subLoading1 = false
this.subLoading2 = false
this.subLoading3 = false
if (reimbursementItemId != 4) {
this.$refs.act_info2.getActInfo(reimbursementId)
} else {
this.$refs.info2.getInfo(reimbursementId)
}
this.$refs.guava.edit()
if (this.$refs['form']) {
this.$refs['form'].resetFields()
}
},
doReview(flag) {
this.$refs["form"].validate(async (valid) => {
const conMoney = this.$refs.info2.viewData.money
const actMoney = this.$refs.act_info2.viewData.activity_money
this.formData.money = this.formData.reimbursementItemId != 4 ? actMoney : conMoney
if (valid) {
this.formData.flag = flag
this.subDis = true
flag ? this.subLoading2 = true : this.subLoading1 = true
const resp = await $.post(loc() + "/doReview", this.formData)
if (resp.code === 0) {
this.pageData()
this.$refs.guava.index()
this.notifySuccess(resp.msg)
} else {
this.notifyError(resp.msg)
}
this.subDis = false
this.subLoading1 = false
this.subLoading2 = false
}
})
},
async flushUnits() {
this.$set(this.pageForm, "unitId", "")
this.units = await getUnits(this.pageForm.unionId)
},
},
async created() {
this.pageData();
if ("${@shiro.hasRole('sysadmin')}" === 'true') {
this.unions = await getUnionList()
} else {
this.unions = await getUnionList("${@shiro.getPrincipalProperty('unit').getUnionid()}")
this.pageForm.unionId = this.unions[0].id
}
this.flushUnits()
const aa = await getDictState("ReimbursementIsSign")
this.ReimbursementIsSign = aa.disabled
}
})
</script>
<!--#
}
#-->