Merge remote-tracking branch 'origin/main'
# Conflicts: # src/main/resources/db/menu/init_tour_menu.sql # src/main/resources/db/tour_setting_create.sql # src/main/resources/views/platform/zhgh/staffmanage/member/apply/common/commonQuery.js # src/main/resources/views/platform/zhgh/staffmanage/member/change/common/commonQuery.js # src/main/resources/views/platform/zhgh/staffmanage/member/info/common/commonQuery.js
This commit is contained in:
@@ -78,10 +78,10 @@ layout("/layouts/platform.html"){
|
||||
<el-table-column prop="userState" label="在职状态" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="arrivalAtSchoolDate" label="来校时间" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="personType" label="人员类型" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="technicalTitle" label="技术职称" sortable width="120"></el-table-column>
|
||||
<!-- <el-table-column prop="technicalTitle" label="技术职称" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="position" label="干部职务" sortable width="120" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="education" label="学历" show-overflow-tooltip sortable width="120"></el-table-column>
|
||||
<el-table-column prop="academicDegree" label="学位" show-overflow-tooltip sortable width="120"></el-table-column>
|
||||
<el-table-column prop="academicDegree" label="学位" show-overflow-tooltip sortable width="120"></el-table-column>-->
|
||||
<el-table-column prop="unitName" label="单位" show-overflow-tooltip sortable width="120"></el-table-column>
|
||||
<el-table-column prop="unitId" label="单位编码" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="political" label="政治面貌" sortable></el-table-column>
|
||||
|
||||
@@ -71,10 +71,10 @@ layout("/layouts/platform.html"){
|
||||
<el-table-column prop="userState" label="在职状态" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="personType" label="人员类型" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="arrivalAtSchoolDate" label="来校年月" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="technicalTitle" label="技术职称" sortable width="120"></el-table-column>
|
||||
<!--<el-table-column prop="technicalTitle" label="技术职称" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="position" label="职务" sortable width="120" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="education" label="学历" show-overflow-tooltip sortable width="120"></el-table-column>
|
||||
<el-table-column prop="academicDegree" label="学位" show-overflow-tooltip sortable width="120"></el-table-column>
|
||||
<el-table-column prop="academicDegree" label="学位" show-overflow-tooltip sortable width="120"></el-table-column>-->
|
||||
<el-table-column prop="unitName" label="单位" show-overflow-tooltip sortable width="120"></el-table-column>
|
||||
<el-table-column prop="unitId" label="单位编码" sortable width="120"></el-table-column>
|
||||
<el-table-column prop="political" label="政治面貌" sortable></el-table-column>
|
||||
@@ -120,9 +120,9 @@ layout("/layouts/platform.html"){
|
||||
</div>
|
||||
</el-timeline-item>
|
||||
</el-timeline>
|
||||
<span slot="footer" class="dialog-footer" v-loading="updateLoading">
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="updateDialog = false" :disabled="updateLoading">取 消</el-button>
|
||||
<el-button type="primary" @click="execUpdate" :disabled="updateLoading">确 定</el-button>
|
||||
<el-button type="primary" @click="execUpdate" :disabled="updateLoading" :loading="updateLoading">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
@@ -38,6 +38,13 @@ layout("/layouts/platform.html"){
|
||||
<el-table-column label="身份" prop="roleName" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="入会时间" prop="joinTime" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="退会时间" prop="exitTime" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="退出方式" width="110">
|
||||
<template v-slot="{row}">
|
||||
<el-tag :type="row.exitType === 'AUDIT_EXIT' ? 'success' : 'info'" size="mini">
|
||||
{{ exitTypeName(row) }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="120">
|
||||
<template v-slot="{row}">
|
||||
<el-button size="mini" type="primary" @click="onView(row)">查看</el-button>
|
||||
@@ -76,14 +83,17 @@ layout("/layouts/platform.html"){
|
||||
async getClubList() {
|
||||
const resp = await this.$axios.post("/platform/club/infoManage/exitManage/getClubList")
|
||||
if (resp.code === 0) {
|
||||
this.clubList = resp.data
|
||||
this.$set(this, "clubList", resp.data)
|
||||
}
|
||||
},
|
||||
exitTypeName(row) {
|
||||
return row.exitType === "AUDIT_EXIT" ? "审核退会" : "直接移出"
|
||||
},
|
||||
async pageData() {
|
||||
const resp = await this.$axios.post("/platform/club/infoManage/exitManage/pageData", this.pageForm)
|
||||
if (resp.code === 0) {
|
||||
this.tableData = resp.data.list
|
||||
this.pageForm.totalCount = resp.data.totalCount
|
||||
this.$set(this, "tableData", resp.data.list)
|
||||
this.$set(this.pageForm, "totalCount", resp.data.totalCount)
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
|
||||
@@ -1,58 +1,60 @@
|
||||
const clubExitInfo = {
|
||||
template:
|
||||
/*language=HTML*/
|
||||
`
|
||||
<div>
|
||||
<div class="process-title">
|
||||
退会信息
|
||||
<el-link type="primary" @click="openChart">点击查看流程图</el-link>
|
||||
</div>
|
||||
<el-descriptions border>
|
||||
<el-descriptions-item label="姓名">{{viewData.userName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="工号">{{viewData.loginName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">{{viewData.sex}}</el-descriptions-item>
|
||||
<el-descriptions-item label="出生年月">{{$moment(viewData.birthday).format('YYYY-MM-DD')}}</el-descriptions-item>
|
||||
<el-descriptions-item label="联系电话">{{viewData.mobile}}</el-descriptions-item>
|
||||
<el-descriptions-item label="电子信箱">{{viewData.email}}</el-descriptions-item>
|
||||
<el-descriptions-item label="分工会">{{viewData.unionName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="部门" :span="2">{{viewData.unitName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="职务">{{viewData.position}}</el-descriptions-item>
|
||||
<el-descriptions-item label="职称" :span="2">{{viewData.technicalTitle}}</el-descriptions-item>
|
||||
<el-descriptions-item label="学历">{{viewData.education}}</el-descriptions-item>
|
||||
<el-descriptions-item label="学位" :span="2">{{viewData.academicDegree}}</el-descriptions-item>
|
||||
<el-descriptions-item label="同时参加其他社团情况" :span="3">{{viewData.sameTimeJoinOtherClubSituation}}</el-descriptions-item>
|
||||
<el-descriptions-item label="文化、体育方面的活动经历、获奖情况" :span="3">{{viewData.awardsExperience}}</el-descriptions-item>
|
||||
<el-descriptions-item label="照片" :span="3">
|
||||
<img :src="viewData.avatar" alt="" style="width: 120px;height: 150px" v-if="viewData.avatar">
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="签字" :span="3">
|
||||
<el-image v-if="viewData.signature" :src="viewData.signature" class="signature-image"></el-image>
|
||||
<span v-else>暂无</span>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<template v-for="task in doneTasks">
|
||||
<div class="mt10">
|
||||
<div class="process-title">{{ task.displayName }}</div>
|
||||
<el-descriptions border class="flow-task-form" :column="3" :key="task.id" v-if="task.ext.isFirstTaskNode">
|
||||
<el-descriptions-item label="申请用户">{{ task.ext.initiatorName }}({{task.ext.initiatorAccount}})</el-descriptions-item>
|
||||
<el-descriptions-item label="申请时间">{{ task.finishTime }}</el-descriptions-item>
|
||||
<el-descriptions-item label="办理结果">
|
||||
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE" :value="task.ext.submitType"></dict-tag>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<el-descriptions border class="flow-task-form" :column="3" :key="task.id" v-else>
|
||||
<el-descriptions-item label="办理用户">{{ task.taskFormData.userName }}({{task.taskFormData.loginName}})</el-descriptions-item>
|
||||
<el-descriptions-item label="办理时间">{{ task.finishTime }}</el-descriptions-item>
|
||||
<el-descriptions-item label="办理结果">
|
||||
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE" :value="task.ext.submitType"></dict-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="办理意见" v-if="!task.ext.isFirstTaskNode">{{ task.taskFormData.opinion }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</template>
|
||||
<snaker-chart ref="snakerChartRef"></snaker-chart>
|
||||
</div>
|
||||
`,
|
||||
[
|
||||
'<div>',
|
||||
' <div class="process-title">',
|
||||
' 退会信息',
|
||||
' <el-link v-if="row.instanceId" type="primary" @click="openChart">点击查看流程图</el-link>',
|
||||
' </div>',
|
||||
' <el-descriptions border>',
|
||||
' <el-descriptions-item label="姓名">{{viewData.userName}}</el-descriptions-item>',
|
||||
' <el-descriptions-item label="工号">{{viewData.loginName}}</el-descriptions-item>',
|
||||
' <el-descriptions-item label="退出方式">{{getExitTypeName()}}</el-descriptions-item>',
|
||||
' <el-descriptions-item label="性别">{{viewData.sex}}</el-descriptions-item>',
|
||||
' <el-descriptions-item label="出生年月">{{$moment(viewData.birthday).format(\'YYYY-MM-DD\')}}</el-descriptions-item>',
|
||||
' <el-descriptions-item label="联系电话">{{viewData.mobile}}</el-descriptions-item>',
|
||||
' <el-descriptions-item label="电子信箱">{{viewData.email}}</el-descriptions-item>',
|
||||
' <el-descriptions-item label="分工会">{{viewData.unionName}}</el-descriptions-item>',
|
||||
' <el-descriptions-item label="部门" :span="2">{{viewData.unitName}}</el-descriptions-item>',
|
||||
' <el-descriptions-item label="职务">{{viewData.position}}</el-descriptions-item>',
|
||||
' <el-descriptions-item label="职称" :span="2">{{viewData.technicalTitle}}</el-descriptions-item>',
|
||||
' <el-descriptions-item label="学历">{{viewData.education}}</el-descriptions-item>',
|
||||
' <el-descriptions-item label="学位" :span="2">{{viewData.academicDegree}}</el-descriptions-item>',
|
||||
' <el-descriptions-item label="同时参加其他社团情况" :span="3">{{viewData.sameTimeJoinOtherClubSituation}}</el-descriptions-item>',
|
||||
' <el-descriptions-item label="文化、体育方面的活动经历、获奖情况" :span="3">{{viewData.awardsExperience}}</el-descriptions-item>',
|
||||
' <el-descriptions-item label="照片" :span="3">',
|
||||
' <img :src="viewData.avatar" alt="" style="width: 120px;height: 150px" v-if="viewData.avatar">',
|
||||
' </el-descriptions-item>',
|
||||
' <el-descriptions-item label="签字" :span="3">',
|
||||
' <el-image v-if="viewData.signature" :src="viewData.signature" class="signature-image"></el-image>',
|
||||
' <span v-else>暂无</span>',
|
||||
' </el-descriptions-item>',
|
||||
' </el-descriptions>',
|
||||
' <template v-for="task in doneTasks">',
|
||||
' <div class="mt10">',
|
||||
' <div class="process-title">{{ task.displayName }}</div>',
|
||||
' <el-descriptions border class="flow-task-form" :column="3" :key="task.id" v-if="task.ext.isFirstTaskNode">',
|
||||
' <el-descriptions-item label="申请用户">{{ task.ext.initiatorName }}({{task.ext.initiatorAccount}})</el-descriptions-item>',
|
||||
' <el-descriptions-item label="申请时间">{{ task.finishTime }}</el-descriptions-item>',
|
||||
' <el-descriptions-item label="办理结果">',
|
||||
' <dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE" :value="task.ext.submitType"></dict-tag>',
|
||||
' </el-descriptions-item>',
|
||||
' </el-descriptions>',
|
||||
' <el-descriptions border class="flow-task-form" :column="3" :key="task.id" v-else>',
|
||||
' <el-descriptions-item label="办理用户">{{ task.taskFormData.userName }}({{task.taskFormData.loginName}})</el-descriptions-item>',
|
||||
' <el-descriptions-item label="办理时间">{{ task.finishTime }}</el-descriptions-item>',
|
||||
' <el-descriptions-item label="办理结果">',
|
||||
' <dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE" :value="task.ext.submitType"></dict-tag>',
|
||||
' </el-descriptions-item>',
|
||||
' <el-descriptions-item label="办理意见" v-if="!task.ext.isFirstTaskNode">{{ task.taskFormData.opinion }}</el-descriptions-item>',
|
||||
' </el-descriptions>',
|
||||
' </div>',
|
||||
' </template>',
|
||||
' <snaker-chart ref="snakerChartRef"></snaker-chart>',
|
||||
' <slot></slot>',
|
||||
'</div>'
|
||||
].join(''),
|
||||
dicts: ["PROCESS_TASK_SUBMIT_TYPE"],
|
||||
data() {
|
||||
return {
|
||||
@@ -63,33 +65,43 @@ const clubExitInfo = {
|
||||
},
|
||||
methods: {
|
||||
onOpen(row) {
|
||||
this.row = row
|
||||
this.$set(this, "row", row || {})
|
||||
this.$set(this, "viewData", {})
|
||||
this.$set(this, "doneTasks", [])
|
||||
this.$axios.post("/platform/club/infoManage/exitManage/info", { id: row.id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.viewData = res.data
|
||||
this.$set(this, "viewData", res.data || {})
|
||||
}
|
||||
})
|
||||
this.getDoneTasks()
|
||||
if (row.instanceId) {
|
||||
this.getDoneTasks()
|
||||
}
|
||||
},
|
||||
getDoneTasks() {
|
||||
this.$axios.post("/flow/common/doneTasks", {bizId: this.row.id}).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.doneTasks = res.data
|
||||
this.$set(this, "doneTasks", res.data || [])
|
||||
}
|
||||
})
|
||||
},
|
||||
openChart(){
|
||||
this.$refs.snakerChartRef.onOpenFull(this.row.instanceProcessDefineId, this.row.instanceId)
|
||||
getExitTypeName() {
|
||||
const exitType = this.row.exitType || this.viewData.exitType
|
||||
return exitType === "AUDIT_EXIT" ? "审核退会" : "直接移出"
|
||||
},
|
||||
openChart() {
|
||||
if (this.row.instanceId) {
|
||||
this.$refs.snakerChartRef.onOpenFull(this.row.instanceProcessDefineId, this.row.instanceId)
|
||||
}
|
||||
}
|
||||
},
|
||||
style: /*language=CSS*/ `
|
||||
.el-descriptions-item__label {
|
||||
width: 200px;
|
||||
min-width: 200px;
|
||||
max-width: 200px;
|
||||
}
|
||||
.el-tabs__header {
|
||||
margin: 0;
|
||||
}
|
||||
`
|
||||
style: /*language=CSS*/ [
|
||||
'.el-descriptions-item__label {',
|
||||
' width: 200px;',
|
||||
' min-width: 200px;',
|
||||
' max-width: 200px;',
|
||||
'}',
|
||||
'.el-tabs__header {',
|
||||
' margin: 0;',
|
||||
'}'
|
||||
].join('')
|
||||
}
|
||||
|
||||
@@ -35,6 +35,8 @@
|
||||
<el-table-column label="姓名" prop="userName" show-overflow-tooltip sortable></el-table-column>
|
||||
<el-table-column label="性别" prop="sex" show-overflow-tooltip sortable></el-table-column>
|
||||
<el-table-column label="电话" prop="mobile" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="人员类型" prop="personType" show-overflow-tooltip sortable></el-table-column>
|
||||
<el-table-column label="在职状态" prop="userState" show-overflow-tooltip sortable></el-table-column>
|
||||
<el-table-column label="所属单位" prop="unitName" sortable show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="身份" prop="roleName" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="入会时间" prop="joinTime" show-overflow-tooltip sortable></el-table-column>
|
||||
|
||||
@@ -20,7 +20,12 @@ layout("/layouts/platform.html"){
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="人员状态:">
|
||||
<dict-select clearable code="USER_STATE" placeholder="请选择人员状态" v-model="pageForm.userState"></dict-select>
|
||||
<el-select clearable placeholder="请选择人员状态" v-model="pageForm.userState">
|
||||
<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>
|
||||
</search-item>
|
||||
<search-item label="性别:">
|
||||
<el-select clearable filterable placeholder="请选择性别" v-model="pageForm.sex">
|
||||
|
||||
@@ -27,8 +27,8 @@ layout("/layouts/platform.html"){
|
||||
:value="o.id"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="荣誉级别">
|
||||
<el-select v-model="pageForm.honorLevel" placeholder="请选择荣誉级别" clearable>
|
||||
<search-item label="荣誉类别">
|
||||
<el-select v-model="pageForm.honorLevel" placeholder="请选择荣誉类别" clearable>
|
||||
<el-option v-for="o in honorLevelList" :key="o.id" :label="o.name" :value="o.id"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
@@ -77,7 +77,7 @@ layout("/layouts/platform.html"){
|
||||
sortable></el-table-column>
|
||||
<!--<el-table-column prop="prizeDesc" label="奖项说明" ></el-table-column>-->
|
||||
<el-table-column prop="typeName" label="荣誉类型"></el-table-column>
|
||||
<el-table-column prop="levelName" label="级别"
|
||||
<el-table-column prop="levelName" label="荣誉类别"
|
||||
sortable></el-table-column>
|
||||
<el-table-column prop="grantUnit" label="授予单位"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
@@ -185,7 +185,7 @@ layout("/layouts/platform.html"){
|
||||
</el-form-item>
|
||||
</el-col>-->
|
||||
<el-col :span="6">
|
||||
<el-form-item label="级别">{{ viewData.levelName }}</el-form-item>
|
||||
<el-form-item label="荣誉类别">{{ viewData.levelName }}</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="授予单位">{{ viewData.grantUnit }}</el-form-item>
|
||||
@@ -303,9 +303,9 @@ layout("/layouts/platform.html"){
|
||||
prize +
|
||||
"&honorLevel=" +
|
||||
honorLevel +
|
||||
"&userName" +
|
||||
"&userName=" +
|
||||
userName +
|
||||
"&unitName" +
|
||||
"&unitName=" +
|
||||
unitName
|
||||
},
|
||||
openEdit(row) {
|
||||
|
||||
+185
-145
@@ -96,6 +96,9 @@ layout("/layouts/platform.html"){
|
||||
{{item.name}}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
<span class="ml10 text-danger" v-if="getProjectTipByProject(formData.reimburseProject)">
|
||||
{{getProjectTipByProject(formData.reimburseProject)}}
|
||||
</span>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="经办人">{{formData.userName}}({{formData.loginName}})</el-descriptions-item>
|
||||
@@ -400,145 +403,6 @@ layout("/layouts/platform.html"){
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="支付信息" :span="3">
|
||||
<div class="mb10">
|
||||
<el-button type="primary" size="mini" @click="addPaymentInfo">新增支付信息</el-button>
|
||||
</div>
|
||||
<el-table class="payment-info-table" :data="paymentInfoRows" border empty-text="暂无支付信息" style="width: 100%">
|
||||
<el-table-column label="支付方式" min-width="160">
|
||||
<template slot-scope="scope">
|
||||
<el-form-item :prop="'paymentDetails.' + scope.$index + '.paymentWay'"
|
||||
:rules="paymentDetailRules.paymentWay">
|
||||
<el-select v-model="scope.row.paymentWay"
|
||||
clearable
|
||||
placeholder="请选择支付方式"
|
||||
style="width: 100%"
|
||||
@change="handlePaymentWayChange(scope.row)">
|
||||
<el-option
|
||||
v-for="item in dict.type.UNION_REIMBURSE_PAYMENT_WAY"
|
||||
:key="item.code"
|
||||
:label="item.name"
|
||||
:value="item.code">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="金额" min-width="140">
|
||||
<template slot-scope="scope">
|
||||
<el-form-item :prop="'paymentDetails.' + scope.$index + '.money'"
|
||||
:rules="paymentDetailRules.money">
|
||||
<el-input v-model="scope.row.money" placeholder="请输入金额"></el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="付款人" min-width="240">
|
||||
<template slot-scope="scope">
|
||||
<el-form-item v-if="isPrivatePayment(scope.row)"
|
||||
:prop="'paymentDetails.' + scope.$index + '.payer'"
|
||||
:rules="paymentDetailRules.payer">
|
||||
<el-select style="width: 100%"
|
||||
v-model="scope.row.payer"
|
||||
@change="payerUserChange(scope.row)"
|
||||
filterable
|
||||
clearable
|
||||
remote
|
||||
reserve-keyword
|
||||
placeholder="请输入姓名或工号查询"
|
||||
:remote-method="createRemoteMethodForPayer(scope.row)">
|
||||
<el-option
|
||||
v-for="item in scope.row.payerOptions"
|
||||
:key="item.id"
|
||||
:label="item.userName+'('+item.loginName+')'+'('+item.unitName+')'"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<span v-else>无需填写</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="户名" min-width="180">
|
||||
<template slot-scope="scope">
|
||||
<el-form-item v-if="isPrivatePayment(scope.row)"
|
||||
:prop="'paymentDetails.' + scope.$index + '.bankUserName'"
|
||||
:rules="paymentDetailRules.bankUserName">
|
||||
<el-select
|
||||
v-model="scope.row.bankUserName"
|
||||
@change="handleBankUserNameChange(scope.row)"
|
||||
clearable
|
||||
filterable
|
||||
allow-create
|
||||
default-first-option
|
||||
placeholder="请输入户名"
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="(item, index) in getBankHistoryUserNames(scope.row)"
|
||||
:key="index"
|
||||
:label="item"
|
||||
:value="item">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<span v-else>无需填写</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="开户行" min-width="220">
|
||||
<template slot-scope="scope">
|
||||
<el-form-item v-if="isPrivatePayment(scope.row)"
|
||||
:prop="'paymentDetails.' + scope.$index + '.bankOfDeposit'"
|
||||
:rules="paymentDetailRules.bankOfDeposit">
|
||||
<el-select
|
||||
v-model="scope.row.bankOfDeposit"
|
||||
@change="fillBankInfoFromHistory(scope.row)"
|
||||
clearable
|
||||
filterable
|
||||
allow-create
|
||||
default-first-option
|
||||
placeholder="请输入开户行名称"
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="(item, index) in scope.row.historyData"
|
||||
:key="index"
|
||||
:label="item.bankOfDeposit"
|
||||
:value="item.bankOfDeposit">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<span v-else>无需填写</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="银行卡号" min-width="220">
|
||||
<template slot-scope="scope">
|
||||
<el-form-item v-if="isPrivatePayment(scope.row)"
|
||||
:prop="'paymentDetails.' + scope.$index + '.bankCardNumber'"
|
||||
:rules="paymentDetailRules.bankCardNumber">
|
||||
<el-select
|
||||
v-model="scope.row.bankCardNumber"
|
||||
@change="fillBankInfoFromHistory(scope.row)"
|
||||
clearable
|
||||
filterable
|
||||
allow-create
|
||||
default-first-option
|
||||
placeholder="请输入银行卡号"
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="(item, index) in scope.row.historyData"
|
||||
:key="index"
|
||||
:label="item.bankCardNumber"
|
||||
:value="item.bankCardNumber">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<span v-else>无需填写</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" fixed="right" width="120">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="text" style="color: #f56c6c;" @click="deletePaymentInfo(scope.$index)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="参加随行人员" :span="3"
|
||||
v-if="formData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<el-form-item prop="participants" label="参加随行人员">
|
||||
@@ -563,7 +427,8 @@ layout("/layouts/platform.html"){
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item :span="3">
|
||||
<el-descriptions-item :span="3"
|
||||
v-if="formData.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'">
|
||||
<template slot="label">
|
||||
附件
|
||||
</template>
|
||||
@@ -619,6 +484,148 @@ layout("/layouts/platform.html"){
|
||||
type="textarea" :autosize="{ minRows: 4, maxRows: 8}"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<div class="invoice-field-title">支付信息</div>
|
||||
<div>
|
||||
<div class="mb10">
|
||||
<el-button type="primary" size="mini" @click="addPaymentInfo">新增支付信息</el-button>
|
||||
</div>
|
||||
<el-table class="payment-info-table" :data="paymentInfoRows" border empty-text="暂无支付信息" style="width: 100%">
|
||||
<el-table-column label="支付方式" min-width="160">
|
||||
<template slot-scope="scope">
|
||||
<el-form-item :prop="'paymentDetails.' + scope.$index + '.paymentWay'"
|
||||
:rules="paymentDetailRules.paymentWay">
|
||||
<el-select v-model="scope.row.paymentWay"
|
||||
clearable
|
||||
placeholder="请选择支付方式"
|
||||
style="width: 100%"
|
||||
@change="handlePaymentWayChange(scope.row)">
|
||||
<el-option
|
||||
v-for="item in dict.type.UNION_REIMBURSE_PAYMENT_WAY"
|
||||
:key="item.code"
|
||||
:label="item.name"
|
||||
:value="item.code">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="金额" min-width="140">
|
||||
<template slot-scope="scope">
|
||||
<el-form-item :prop="'paymentDetails.' + scope.$index + '.money'"
|
||||
:rules="paymentDetailRules.money">
|
||||
<el-input v-model="scope.row.money" placeholder="请输入金额"></el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="付款人" min-width="240">
|
||||
<template slot-scope="scope">
|
||||
<el-form-item v-if="isPrivatePayment(scope.row)"
|
||||
:prop="'paymentDetails.' + scope.$index + '.payer'"
|
||||
:rules="paymentDetailRules.payer">
|
||||
<el-select style="width: 100%"
|
||||
v-model="scope.row.payer"
|
||||
@change="payerUserChange(scope.row)"
|
||||
filterable
|
||||
clearable
|
||||
remote
|
||||
reserve-keyword
|
||||
placeholder="请输入姓名或工号查询"
|
||||
:remote-method="createRemoteMethodForPayer(scope.row)">
|
||||
<el-option
|
||||
v-for="item in scope.row.payerOptions"
|
||||
:key="item.id"
|
||||
:label="item.userName+'('+item.loginName+')'+'('+item.unitName+')'"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<span v-else>无需填写</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="户名" min-width="180">
|
||||
<template slot-scope="scope">
|
||||
<el-form-item v-if="isPrivatePayment(scope.row)"
|
||||
:prop="'paymentDetails.' + scope.$index + '.bankUserName'"
|
||||
:rules="paymentDetailRules.bankUserName">
|
||||
<el-select
|
||||
v-model="scope.row.bankUserName"
|
||||
@change="handleBankUserNameChange(scope.row)"
|
||||
clearable
|
||||
filterable
|
||||
allow-create
|
||||
default-first-option
|
||||
placeholder="请输入户名"
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="(item, index) in getBankHistoryUserNames(scope.row)"
|
||||
:key="index"
|
||||
:label="item"
|
||||
:value="item">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<span v-else>无需填写</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="开户行" min-width="220">
|
||||
<template slot-scope="scope">
|
||||
<el-form-item v-if="isPrivatePayment(scope.row)"
|
||||
:prop="'paymentDetails.' + scope.$index + '.bankOfDeposit'"
|
||||
:rules="paymentDetailRules.bankOfDeposit">
|
||||
<el-select
|
||||
v-model="scope.row.bankOfDeposit"
|
||||
@change="fillBankInfoFromHistory(scope.row)"
|
||||
clearable
|
||||
filterable
|
||||
allow-create
|
||||
default-first-option
|
||||
placeholder="请输入开户行名称"
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="(item, index) in scope.row.historyData"
|
||||
:key="index"
|
||||
:label="item.bankOfDeposit"
|
||||
:value="item.bankOfDeposit">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<span v-else>无需填写</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="银行卡号" min-width="220">
|
||||
<template slot-scope="scope">
|
||||
<el-form-item v-if="isPrivatePayment(scope.row)"
|
||||
:prop="'paymentDetails.' + scope.$index + '.bankCardNumber'"
|
||||
:rules="paymentDetailRules.bankCardNumber">
|
||||
<el-select
|
||||
v-model="scope.row.bankCardNumber"
|
||||
@change="fillBankInfoFromHistory(scope.row)"
|
||||
clearable
|
||||
filterable
|
||||
allow-create
|
||||
default-first-option
|
||||
placeholder="请输入银行卡号"
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="(item, index) in scope.row.historyData"
|
||||
:key="index"
|
||||
:label="item.bankCardNumber"
|
||||
:value="item.bankCardNumber">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<span v-else>无需填写</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" fixed="right" width="120">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="text" style="color: #f56c6c;" @click="deletePaymentInfo(scope.$index)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<div class="invoice-toolbar">
|
||||
<div>
|
||||
@@ -819,7 +826,21 @@ layout("/layouts/platform.html"){
|
||||
{required: true, message: "请填写联系方式", trigger: ["change", "blur"]},
|
||||
{pattern: /^(1[3-9]\d{9}|0\d{2,3}-?\d{7,8})$/, message: "请输入正确的联系方式", trigger: "blur"}
|
||||
],
|
||||
files: [{required: true, message: "请上传附件", trigger: ["change", "blur"]}],
|
||||
files: [{
|
||||
validator: (rule, value, callback) => {
|
||||
// 慰问项目不展示附件上传,提交时无需校验附件。
|
||||
if (this.formData.reimburseProject === "UNION_REIMBURSE_PROJECT_1") {
|
||||
callback()
|
||||
return
|
||||
}
|
||||
if (!value || value.length === 0) {
|
||||
callback(new Error("请上传附件"))
|
||||
return
|
||||
}
|
||||
callback()
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}],
|
||||
userSign: [{required: true, message: "请签名", trigger: ["change", "blur"]}],
|
||||
// certifierUserId: [{required: true, message: "请填写认证人", trigger: ["change", "blur"]}],
|
||||
|
||||
@@ -1205,6 +1226,11 @@ layout("/layouts/platform.html"){
|
||||
this.rebuildInvoiceSummary()
|
||||
this.normalizeFundBalance()
|
||||
}
|
||||
this.$nextTick(() => {
|
||||
if (this.$refs.formRef) {
|
||||
this.$refs.formRef.clearValidate("files")
|
||||
}
|
||||
})
|
||||
},
|
||||
openInvoiceDialog(mode, row, index) {
|
||||
this.invoiceDialogMode = mode
|
||||
@@ -1561,10 +1587,10 @@ layout("/layouts/platform.html"){
|
||||
return new Promise((resolve) => {
|
||||
this.rebuildInvoiceSummary()
|
||||
const paymentDetails = this.preparePaymentDetailsForSubmit()
|
||||
this.$refs.formRef.validate((valid) => {
|
||||
this.$refs.formRef.validate((valid, invalidFields) => {
|
||||
if (valid) {
|
||||
if (!this.validatePaymentDetailsBeforeSubmit(paymentDetails)) {
|
||||
this.$set(this, "activeTabName", "basic")
|
||||
this.$set(this, "activeTabName", "invoice")
|
||||
resolve(false)
|
||||
return
|
||||
}
|
||||
@@ -1581,6 +1607,12 @@ layout("/layouts/platform.html"){
|
||||
this.normalizeFundBalance()
|
||||
resolve(true)
|
||||
} else {
|
||||
// 支付信息已移至发票信息页,支付明细校验失败时跳转到对应页签。
|
||||
const paymentDetailInvalid = Object.keys(invalidFields || {})
|
||||
.some((field) => field.indexOf("paymentDetails.") === 0)
|
||||
if (paymentDetailInvalid) {
|
||||
this.$set(this, "activeTabName", "invoice")
|
||||
}
|
||||
this.$message.warning("请完善必填信息")
|
||||
resolve(false)
|
||||
}
|
||||
@@ -1592,7 +1624,7 @@ layout("/layouts/platform.html"){
|
||||
const isValid = await this.validateBeforeSubmit()
|
||||
if (!isValid) return
|
||||
|
||||
this.$confirm("您确定要提交吗?", "提示", {
|
||||
this.$confirm("您确定要提交吗?审核通过后可前往我的报销打印!", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
@@ -1612,7 +1644,7 @@ layout("/layouts/platform.html"){
|
||||
const isValid = await this.validateBeforeSubmit()
|
||||
if (!isValid) return
|
||||
|
||||
this.$confirm("您确定要提交吗?", "提示", {
|
||||
this.$confirm("您确定要提交吗?审核通过后可前往我的报销打印!", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
@@ -1650,6 +1682,14 @@ layout("/layouts/platform.html"){
|
||||
const project = this.descOptions.find(item => item.reimburseProject === projectCode);
|
||||
return project ? project.fileDesc : '';
|
||||
},
|
||||
// 根据当前选择的报销项目获取管理端配置的提示内容。
|
||||
getProjectTipByProject(projectCode) {
|
||||
if (!this.descOptions || !Array.isArray(this.descOptions)) {
|
||||
return '';
|
||||
}
|
||||
const project = this.descOptions.find(item => item.reimburseProject === projectCode);
|
||||
return project ? project.projectTip : '';
|
||||
},
|
||||
// 新建申请默认优先选择分工会经费;若当前用户没有对应权限,则按页面可见权限回退到其它经费来源。
|
||||
getDefaultFundSource() {
|
||||
if (this.$auth.hasPermission("unionReimburse.fgh")) {
|
||||
|
||||
+60
-8
@@ -62,11 +62,17 @@ layout("/layouts/platform.html"){
|
||||
</el-table-column>
|
||||
<el-table-column prop="reimburseProject" label="报销项目" sortable="custom">
|
||||
<template slot-scope="{row}">
|
||||
<span v-if="row.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">慰问</span>
|
||||
<span v-else-if="row.reimburseProject === 'UNION_REIMBURSE_PROJECT_2'">文体活动</span>
|
||||
<span v-else-if="row.reimburseProject === 'UNION_REIMBURSE_PROJECT_3'">日常活动</span>
|
||||
<span v-else-if="row.reimburseProject === 'UNION_REIMBURSE_PROJECT_4'">专项活动</span>
|
||||
<span v-else>{{ row.reimburseProject }}</span>
|
||||
<el-select v-if="isAdmin && row.reimburseProject !== 'UNION_REIMBURSE_PROJECT_1'"
|
||||
:value="row.reimburseProject"
|
||||
size="mini"
|
||||
style="width: 120px"
|
||||
@change="updateReimburseProject(row, $event)">
|
||||
<el-option v-for="item in activityReimburseProjectOptions"
|
||||
:key="item.code"
|
||||
:label="item.name"
|
||||
:value="item.code"></el-option>
|
||||
</el-select>
|
||||
<span v-else>{{ getReimburseProjectName(row.reimburseProject) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注">
|
||||
@@ -106,6 +112,7 @@ layout("/layouts/platform.html"){
|
||||
<el-form :model="editFormData" :rules="editFormRules" ref="editForm" label-width="120px">
|
||||
<el-form-item label="实际报销金额" prop="realMoney">
|
||||
<el-input v-model="editFormData.realMoney" placeholder="请输入实际报销金额"></el-input>
|
||||
<div class="text-muted mt5">申请金额:{{ editFormData.maxMoney }}</div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
@@ -137,7 +144,8 @@ layout("/layouts/platform.html"){
|
||||
editDialogVisible: false,
|
||||
editFormData: {
|
||||
realMoney: '',
|
||||
id: '' // 报销记录ID
|
||||
id: '', // 报销记录ID
|
||||
maxMoney: '0.00' // 申请金额上限
|
||||
},
|
||||
editFormRules: {
|
||||
realMoney: [
|
||||
@@ -151,12 +159,50 @@ layout("/layouts/platform.html"){
|
||||
computed: {
|
||||
isAdmin() {
|
||||
return this.$auth.hasRoleOr(['SYSADMIN', 'SCHOOL_UNION_ADMIN'])
|
||||
},
|
||||
activityReimburseProjectOptions() {
|
||||
const activityProjectCodes = [
|
||||
"UNION_REIMBURSE_PROJECT_2",
|
||||
"UNION_REIMBURSE_PROJECT_3",
|
||||
"UNION_REIMBURSE_PROJECT_4"
|
||||
]
|
||||
return (this.dict.type.UNION_REIMBURSE_PROJECT || [])
|
||||
.filter((item) => activityProjectCodes.includes(item.code))
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
formatCreateTime(value) {
|
||||
return value && this.$moment(value).isValid() ? this.$moment(value).format("YYYY-MM-DD HH:mm:ss") : ""
|
||||
},
|
||||
getReimburseProjectName(reimburseProject) {
|
||||
const project = (this.dict.type.UNION_REIMBURSE_PROJECT || [])
|
||||
.find((item) => item.code === reimburseProject)
|
||||
return project ? project.name : reimburseProject
|
||||
},
|
||||
async updateReimburseProject(row, reimburseProject) {
|
||||
if (reimburseProject === row.reimburseProject) {
|
||||
return
|
||||
}
|
||||
try {
|
||||
await this.$confirm("确定修改该记录的报销项目吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
})
|
||||
const res = await this.$axios.post("/platform/unionReimburse/collect/updateReimburseProject", {
|
||||
id: row.id,
|
||||
reimburseProject: reimburseProject
|
||||
})
|
||||
if (res.code === 0) {
|
||||
this.$set(row, "reimburseProject", reimburseProject)
|
||||
this.$message.success("报销项目修改成功")
|
||||
} else {
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
} catch (error) {
|
||||
// 取消确认时保持列表原项目,不修改页面数据。
|
||||
}
|
||||
},
|
||||
onView(row) {
|
||||
this.$refs.guava.edit(()=>{
|
||||
this.showApprovalForm = false
|
||||
@@ -179,8 +225,10 @@ layout("/layouts/platform.html"){
|
||||
},
|
||||
openEdit(row) {
|
||||
// 初始化编辑表单数据
|
||||
this.editFormData.id = row.id;
|
||||
this.editFormData.realMoney = row.realMoney || '';
|
||||
const applyMoney = row.money != null ? row.money : row.condolenceMoney
|
||||
this.$set(this.editFormData, "id", row.id)
|
||||
this.$set(this.editFormData, "realMoney", row.realMoney || '')
|
||||
this.$set(this.editFormData, "maxMoney", Number(applyMoney || 0).toFixed(2))
|
||||
this.editDialogVisible = true;
|
||||
},
|
||||
|
||||
@@ -195,6 +243,10 @@ layout("/layouts/platform.html"){
|
||||
saveFinallyMoney() {
|
||||
this.$refs.editForm.validate((valid) => {
|
||||
if (valid) {
|
||||
if (Number(this.editFormData.realMoney) > Number(this.editFormData.maxMoney)) {
|
||||
this.$message.error("实际报销金额不能超过申请金额:" + this.editFormData.maxMoney)
|
||||
return
|
||||
}
|
||||
this.$axios.post("/platform/unionReimburse/collect/updateActuallyAmount", {
|
||||
id: this.editFormData.id,
|
||||
realMoney: this.editFormData.realMoney
|
||||
|
||||
@@ -14,6 +14,10 @@ const basicForm = {
|
||||
<el-input type="text" v-model="formData.fileDesc" maxlength="50"
|
||||
placeholder="请填写附件说明"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="报销项目提示" prop="projectTip">
|
||||
<el-input type="textarea" v-model="formData.projectTip" maxlength="500" show-word-limit
|
||||
placeholder="请填写报销项目提示"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
@@ -84,6 +84,7 @@ layout("/layouts/platform.html"){
|
||||
{prop: 'code', label: '项目编码'},
|
||||
{prop: 'name', label: '项目名称'},
|
||||
{prop: 'fileDesc', label: '附件说明'},
|
||||
{prop: 'projectTip', label: '报销项目提示'},
|
||||
// {prop: 'isUploadFile', label: '是否上传附件'},
|
||||
],
|
||||
}
|
||||
|
||||
@@ -20,8 +20,6 @@ const COMMON_QUERY = {
|
||||
userStates: [],
|
||||
personTypes: [],
|
||||
preparedBys: [],
|
||||
userAttribute: '',
|
||||
userAttributes: [],
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -31,8 +29,6 @@ const COMMON_QUERY = {
|
||||
pageForm.userStates = JSON.stringify(this.pageForm.userStates)
|
||||
pageForm.personTypes = JSON.stringify(this.pageForm.personTypes)
|
||||
pageForm.preparedBys = JSON.stringify(this.pageForm.preparedBys)
|
||||
// 多选值沿用现有数组参数的JSON提交口径,便于后端稳定绑定List。
|
||||
pageForm.userAttributes = JSON.stringify(this.pageForm.userAttributes)
|
||||
this.$emit('search', pageForm)
|
||||
},
|
||||
async initData(){
|
||||
|
||||
@@ -63,12 +63,7 @@
|
||||
|
||||
<el-descriptions-item label="工作单位">
|
||||
<el-form-item prop="unitId">
|
||||
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%"
|
||||
disabled @change="getUnionName(formData.unitId)"
|
||||
v-model="formData.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
<el-input v-model="formData.unitName" disabled placeholder="暂无工作单位"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
@@ -278,6 +273,18 @@
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
normalizeUnitField() {
|
||||
if (!this.formData || !this.formData.unitId) {
|
||||
return
|
||||
}
|
||||
const unitId = String(this.formData.unitId)
|
||||
this.$set(this.formData, "unitId", unitId)
|
||||
const unit = this.units.find(v => String(v.id) === unitId)
|
||||
if (unit) {
|
||||
this.$set(this.formData, "unitName", unit.name)
|
||||
this.$set(this.formData, "unionName", unit.unionName || unit.unionname || this.formData.unionName || "")
|
||||
}
|
||||
},
|
||||
// 提交
|
||||
handleTaskAction(val) {
|
||||
this.$refs.formRef.validate((valid) => {
|
||||
@@ -446,7 +453,7 @@
|
||||
this.$set(this.formData, "userState", userState)
|
||||
this.$set(this.formData, "personType", personType)
|
||||
this.$set(this.formData, "unitName", unit ? unit.name : unitName)
|
||||
this.$set(this.formData, "unitId", unit ? unit.id : unitId)
|
||||
this.$set(this.formData, "unitId", unit ? String(unit.id) : unitId)
|
||||
this.$set(this.formData, "unionName", union ? union.name : unionName)
|
||||
this.$set(this.formData, "unionId", union ? union.id : unionId)
|
||||
|
||||
@@ -458,8 +465,9 @@
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.init()
|
||||
await this.init()
|
||||
this.units = await this.$businessTool.listUnit()
|
||||
this.normalizeUnitField()
|
||||
await this.validateApply()
|
||||
}
|
||||
})
|
||||
|
||||
@@ -69,12 +69,7 @@ layout("/layouts/platform.html"){
|
||||
|
||||
<el-descriptions-item label="工作单位">
|
||||
<el-form-item prop="unitId">
|
||||
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%"
|
||||
disabled @change="getUnionName(formData.unitId)"
|
||||
v-model="formData.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
<el-input v-model="formData.unitName" disabled placeholder="暂无工作单位"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
@@ -326,6 +321,18 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
normalizeUnitField() {
|
||||
if (!this.formData || !this.formData.unitId) {
|
||||
return
|
||||
}
|
||||
const unitId = String(this.formData.unitId)
|
||||
this.$set(this.formData, "unitId", unitId)
|
||||
const unit = this.units.find(v => String(v.id) === unitId)
|
||||
if (unit) {
|
||||
this.$set(this.formData, "unitName", unit.name)
|
||||
this.$set(this.formData, "unionName", unit.unionName || unit.unionname || this.formData.unionName || "")
|
||||
}
|
||||
},
|
||||
onSave() {
|
||||
this.$confirm("您确定保存吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
@@ -453,7 +460,7 @@ layout("/layouts/platform.html"){
|
||||
this.$set(this.formData, "personType", personType)
|
||||
this.$set(this.formData, "preparedBy", preparedBy)
|
||||
this.$set(this.formData, "unitName", unit ? unit.name : unitName)
|
||||
this.$set(this.formData, "unitId", unit ? unit.id : unitId)
|
||||
this.$set(this.formData, "unitId", unit ? String(unit.id) : unitId)
|
||||
this.$set(this.formData, "unionName", union ? union.name : unionName)
|
||||
this.$set(this.formData, "unionId", union ? union.id : unionId)
|
||||
|
||||
@@ -465,11 +472,10 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.init()
|
||||
this.$businessTool.listUnit().then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
async created() {
|
||||
await this.init()
|
||||
this.units = await this.$businessTool.listUnit()
|
||||
this.normalizeUnitField()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
+33
-16
@@ -92,12 +92,7 @@ const MEMBER_CHANGE = {
|
||||
<template>
|
||||
<el-descriptions-item label="工作单位">
|
||||
<el-form-item prop="unitId">
|
||||
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%"
|
||||
:disabled="allowFields('unitId')" @change="getUnionName"
|
||||
v-model="formData.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
<el-input v-model="formData.unitName" disabled placeholder="暂无工作单位"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
@@ -194,9 +189,10 @@ const MEMBER_CHANGE = {
|
||||
|
||||
<el-descriptions-item label="福利会员状态">
|
||||
<el-form-item prop="welfareMember">
|
||||
<el-radio-group v-model="formData.welfareMember" size="small">
|
||||
<el-radio border :label="true">福利会员</el-radio>
|
||||
<el-radio border :label="false">非福利会员</el-radio>
|
||||
<el-radio-group v-model="formData.welfareMember" size="small" class="welfare-member-radio-group"
|
||||
style="display: flex; align-items: center; flex-wrap: nowrap; white-space: nowrap;">
|
||||
<el-radio border :label="true" style="flex-shrink: 0;">福利会员</el-radio>
|
||||
<el-radio border :label="false" style="flex-shrink: 0;">非福利会员</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
@@ -366,9 +362,21 @@ const MEMBER_CHANGE = {
|
||||
},
|
||||
methods: {
|
||||
getUnionName(val){
|
||||
debugger
|
||||
const data = this.units.find(v => v.id === val)
|
||||
this.$set(this.formData, 'unionName', data ? data.unionName : '')
|
||||
const data = this.units.find(v => String(v.id) === String(val))
|
||||
this.$set(this.formData, 'unitName', data ? data.name : '')
|
||||
this.$set(this.formData, 'unionName', data ? (data.unionName || data.unionname || '') : '')
|
||||
},
|
||||
normalizeUnitField() {
|
||||
if (!this.formData || !this.formData.unitId) {
|
||||
return
|
||||
}
|
||||
const unitId = String(this.formData.unitId)
|
||||
this.$set(this.formData, "unitId", unitId)
|
||||
let unit = this.units.find(v => String(v.id) === unitId)
|
||||
if (unit) {
|
||||
this.$set(this.formData, "unitName", unit.name)
|
||||
this.$set(this.formData, "unionName", unit.unionName || unit.unionname || this.formData.unionName || "")
|
||||
}
|
||||
},
|
||||
allowFields(prop) {
|
||||
return !this.allowChangeFields.map(v => v.code).includes(prop)
|
||||
@@ -407,14 +415,15 @@ const MEMBER_CHANGE = {
|
||||
this.isShow = true
|
||||
this.user = this.$store.state.user
|
||||
}
|
||||
this.getFormDataValue(this.id)
|
||||
await this.getFormDataValue(this.id)
|
||||
this.allowChangeFields = await this.$businessTool.getDictOptions("ALLOW_CHANGE_FIELDS")
|
||||
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_MEMBER_ADMIN, SCHOOL_UNION_ADMIN')) {
|
||||
this.units = await this.$businessTool.listUnit()
|
||||
this.unions = await this.$businessTool.listUnion()
|
||||
} else {
|
||||
this.units = await this.$businessTool.listUnit(this.user.union.id)
|
||||
this.units = await this.$businessTool.listUnit()
|
||||
}
|
||||
this.normalizeUnitField()
|
||||
},
|
||||
async getUserById(userId){
|
||||
const resp = await $.post("/platform/member/change/apply/getUserByIdForMemberChange", { userId })
|
||||
@@ -424,7 +433,7 @@ const MEMBER_CHANGE = {
|
||||
},
|
||||
getFormDataValue(id){
|
||||
if (id) {
|
||||
$.post("/platform/member/change/apply/findChangeById", { id }).then((res) => {
|
||||
return $.post("/platform/member/change/apply/findChangeById", { id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.formData = res.data
|
||||
this.formData.unionid = this.user.unionid
|
||||
@@ -485,7 +494,7 @@ const MEMBER_CHANGE = {
|
||||
this.$set(this.formData, "userAttribute", userAttribute)
|
||||
this.$set(this.formData, "aidFundMemberUserType", aidFundMemberUserType)
|
||||
this.$set(this.formData, "unitName", unit ? unit.name : null)
|
||||
this.$set(this.formData, "unitId", unit ? unit.id : null)
|
||||
this.$set(this.formData, "unitId", unit ? String(unit.id) : null)
|
||||
this.$set(this.formData, "unionName", union ? union.name : null)
|
||||
this.$set(this.formData, "unionId", union ? union.id : null)
|
||||
|
||||
@@ -504,6 +513,14 @@ const MEMBER_CHANGE = {
|
||||
.el-descriptions-item__label {
|
||||
width: 15% !important;
|
||||
}
|
||||
.welfare-member-radio-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
.welfare-member-radio-group .el-radio {
|
||||
margin-right: 12px;
|
||||
}
|
||||
`
|
||||
}
|
||||
|
||||
|
||||
@@ -38,10 +38,11 @@ layout("/layouts/platform.html"){
|
||||
<!-- <dict-select v-model="pageForm.preparedBy" placeholder="请选择编制类别" @change="doSearch"-->
|
||||
<!-- code="USER_PREPARED_BY_TYPE"></dict-select>-->
|
||||
<!-- </search-item>-->
|
||||
<search-item label="人员分类">
|
||||
<dict-select v-model="pageForm.aidFundMemberUserType" placeholder="请选择人员分类" @change="doSearch"
|
||||
code="AIDFUND_MEMBER_USER_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<!-- 临时屏蔽“人员分类”查询字段,不删除配置,后续需要可恢复。-->
|
||||
<!-- <search-item label="人员分类">-->
|
||||
<!-- <dict-select v-model="pageForm.aidFundMemberUserType" placeholder="请选择人员分类" @change="doSearch"-->
|
||||
<!-- code="AIDFUND_MEMBER_USER_TYPE"></dict-select>-->
|
||||
<!-- </search-item>-->
|
||||
<search-item label="人员属性">
|
||||
<dict-select v-model="pageForm.userAttributes" placeholder="请选择人员属性" @change="doSearch"
|
||||
code="USER_ATTRIBUTE" multiple collapse-tags clearable></dict-select>
|
||||
@@ -544,16 +545,21 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "sex", label: "性别", width: 120},
|
||||
{ prop: "birthday", label: "出生年月", width: 120, sortable: true },
|
||||
{ prop: "nationality", label: "国籍", width: 120, sortable: true, checked: 0 },
|
||||
{ prop: "nation", label: "民族", width: 120, sortable: true},
|
||||
// 临时屏蔽“民族”列表字段,不删除配置,后续需要可恢复。
|
||||
// { prop: "nation", label: "民族", width: 120, sortable: true},
|
||||
{ prop: "mobile", label: "联系电话", width: 120 },
|
||||
{ prop: "political", label: "政治面貌", width: 120, sortable: true},
|
||||
// 临时屏蔽“政治面貌”列表字段,不删除配置,后续需要可恢复。
|
||||
// { prop: "political", label: "政治面貌", width: 120, sortable: true},
|
||||
{ prop: "userState", label: "在职状态", width: 120, sortable: true },
|
||||
{ prop: "personType", label: "人员类型", width: 120, sortable: true, checked: 0 },
|
||||
// 临时隐藏原人员类型位置,人员类型显示到原“人员分类”位置。
|
||||
// { prop: "personType", label: "人员类型", width: 120, sortable: true, checked: 0 },
|
||||
// { prop: "preparedBy", label: "编制类别", width: 120, sortable: true },
|
||||
{ prop: "postDoctoralJoinDate", label: "进站时间", sortable: true, checked: 0 },
|
||||
{ prop: "unionName", label: "所属工会", width: 120, sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", width: 120, sortable: true },
|
||||
{ prop: "aidFundMemberUserType", label: "人员分类", width: 120, sortable: true },
|
||||
{ prop: "personType", label: "人员类型", width: 120, sortable: true },
|
||||
// 临时屏蔽“人员分类”列表字段,不删除配置,后续需要可恢复。
|
||||
// { prop: "aidFundMemberUserType", label: "人员分类", width: 120, sortable: true },
|
||||
{ prop: "userAttribute", label: "人员属性", width: 120, sortable: true },
|
||||
{ prop: "idCardType", label: "证件类型", width: 120, sortable: true, checked: 0 },
|
||||
{ prop: "idCard", label: "证件号码", width: 120, sortable: true, checked: 0 },
|
||||
|
||||
@@ -73,17 +73,17 @@ const MEMBER_INFO = {
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
|
||||
<!-- 第 4 行 -->
|
||||
<el-descriptions-item label="人员属性">{{ viewData.userAttribute }}</el-descriptions-item>
|
||||
<el-descriptions-item label="职称">{{ viewData.professionalTitle }}</el-descriptions-item>
|
||||
<el-descriptions-item label="职级">{{ viewData.professionalLevel }}</el-descriptions-item>
|
||||
<el-descriptions-item label="岗位系列">{{ viewData.positionSeries }}</el-descriptions-item>
|
||||
|
||||
<!-- 第 5 行 -->
|
||||
<el-descriptions-item label="岗位系列">{{ viewData.positionSeries }}</el-descriptions-item>
|
||||
<el-descriptions-item label="行政级别(管理岗位)">{{ viewData.administrativeLevel }}</el-descriptions-item>
|
||||
<el-descriptions-item label="岗级">{{ viewData.positionLevel }}</el-descriptions-item>
|
||||
<el-descriptions-item label="行政岗级">{{ viewData.administrativePositionLevel }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="人员分类">{{ viewData.aidFundMemberUserType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员属性">{{ viewData.userAttribute }}</el-descriptions-item>
|
||||
<el-descriptions-item label="行政岗级">{{ viewData.administrativePositionLevel }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员分类" v-if="false">{{ viewData.aidFundMemberUserType }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
`,
|
||||
|
||||
@@ -46,7 +46,7 @@ layout("/layouts/platform.html"){
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择人员类型" @change="doSearch" code="USER_PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员分类">
|
||||
<search-item label="人员分类" v-if="false">
|
||||
<dict-select v-model="pageForm.aidFundMemberUserType" placeholder="请选择人员分类" @change="doSearch" code="AIDFUND_MEMBER_USER_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员属性">
|
||||
|
||||
@@ -46,7 +46,7 @@ layout("/layouts/platform.html"){
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="请选择人员类型" @change="doSearch" code="USER_PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员分类">
|
||||
<search-item label="人员分类" v-if="false">
|
||||
<dict-select v-model="pageForm.aidFundMemberUserType" placeholder="请选择人员分类" @change="doSearch" code="AIDFUND_MEMBER_USER_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员属性">
|
||||
|
||||
+37
@@ -82,6 +82,30 @@ layout("/layouts/platform.html"){
|
||||
|
||||
<el-card shadow="never">
|
||||
<el-row type="flex" align="middle" class="query-row query-row-tag">
|
||||
<el-col class="query-row-title">人员类型:</el-col>
|
||||
<el-col class="query-row-content query-row-content-tag">
|
||||
<el-tag
|
||||
class="query-tag-item"
|
||||
v-for="item in personTypeOptions"
|
||||
:key="item.code"
|
||||
:effect="pageForm.personTypes.includes(item.name)?'dark':'plain'"
|
||||
@click="tagClick('personTypes',item.name)">
|
||||
{{ item.name }}
|
||||
</el-tag>
|
||||
<span class="query-tag-actions">
|
||||
<el-link type="danger"
|
||||
v-if="personTypeOptions.length&&pageForm.personTypes.length"
|
||||
:underline="false"
|
||||
@click="pageForm.personTypes=[];doSearch()">清空
|
||||
</el-link>
|
||||
<el-link :underline="false"
|
||||
@click="pageForm.personTypes=personTypeOptions.map(p=>p.code);doSearch()"
|
||||
type="success">全部
|
||||
</el-link>
|
||||
</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row type="flex" align="middle" class="query-row query-row-tag" v-if="false">
|
||||
<el-col class="query-row-title">人员分类:</el-col>
|
||||
<el-col class="query-row-content query-row-content-tag">
|
||||
<el-tag
|
||||
@@ -211,11 +235,13 @@ layout("/layouts/platform.html"){
|
||||
},
|
||||
unions: [],
|
||||
units: [],
|
||||
personTypeOptions: [],
|
||||
aidFundMemberUserTypeOptions: [],
|
||||
userAttributeOptions: [],
|
||||
pageForm: {
|
||||
currentYear: moment().format("YYYY"),
|
||||
queryType: "fgh",
|
||||
personTypes: [],
|
||||
userAttributes: [],
|
||||
aidFundMemberUserTypes: []
|
||||
},
|
||||
@@ -239,6 +265,9 @@ layout("/layouts/platform.html"){
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
this.$businessTool.getDictOptions("USER_PERSON_TYPE").then((data) => {
|
||||
this.personTypeOptions = data
|
||||
})
|
||||
this.$businessTool.getDictOptions("AIDFUND_MEMBER_USER_TYPE").then((data) => {
|
||||
this.aidFundMemberUserTypeOptions = data
|
||||
})
|
||||
@@ -249,6 +278,7 @@ layout("/layouts/platform.html"){
|
||||
pageData() {
|
||||
// 统计接口按 JSON 字符串接收多选条件,这里统一在提交前做转换,保证人员分类和人员属性都能正确过滤。
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.personTypes = JSON.stringify(this.pageForm.personTypes)
|
||||
pageForm.aidFundMemberUserTypes = JSON.stringify(this.pageForm.aidFundMemberUserTypes)
|
||||
pageForm.userAttributes = JSON.stringify(this.pageForm.userAttributes)
|
||||
this.$axios.post(loc() + "/pageData", pageForm).then((res) => {
|
||||
@@ -259,6 +289,13 @@ layout("/layouts/platform.html"){
|
||||
})
|
||||
},
|
||||
tagClick(key,code) {
|
||||
if (key === "personTypes") {
|
||||
if (this.pageForm.personTypes.includes(code)) {
|
||||
this.pageForm.personTypes.splice(this.pageForm.personTypes.indexOf(code), 1)
|
||||
} else {
|
||||
this.pageForm.personTypes.push(code)
|
||||
}
|
||||
}
|
||||
if (key === "userAttributes") {
|
||||
if (this.pageForm.userAttributes.includes(code)) {
|
||||
this.pageForm.userAttributes.splice(this.pageForm.userAttributes.indexOf(code), 1)
|
||||
|
||||
+2
-1
@@ -163,7 +163,8 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "postDoctoralJoinDate", label: "进站时间", sortable: true, checked: 0 },
|
||||
{ prop: "unionName", label: "所属工会", width: 120, sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", width: 120, sortable: true },
|
||||
{ prop: "aidFundMemberUserType", label: "人员分类", width: 120, sortable: true },
|
||||
// 临时屏蔽“人员分类”列表字段,不删除配置,后续需要可恢复。
|
||||
// { prop: "aidFundMemberUserType", label: "人员分类", width: 120, sortable: true },
|
||||
{ prop: "userAttribute", label: "人员属性", width: 120, sortable: true },
|
||||
{ prop: "idCardType", label: "证件类型", width: 120, sortable: true, checked: 0 },
|
||||
{ prop: "idCard", label: "证件号码", width: 120, sortable: true, checked: 0 },
|
||||
|
||||
+1
-1
@@ -88,7 +88,7 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-row type="flex" align="middle" class="query-row query-row-tag">
|
||||
<el-row type="flex" align="middle" class="query-row query-row-tag" v-if="false">
|
||||
<el-col class="query-row-title">人员分类:</el-col>
|
||||
<el-col class="query-row-content query-row-content-tag">
|
||||
<el-tag
|
||||
|
||||
+37
@@ -82,6 +82,30 @@ layout("/layouts/platform.html"){
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<el-row type="flex" align="middle" class="query-row query-row-tag">
|
||||
<el-col class="query-row-title">人员类型:</el-col>
|
||||
<el-col class="query-row-content query-row-content-tag">
|
||||
<el-tag
|
||||
class="query-tag-item"
|
||||
v-for="item in personTypeOptions"
|
||||
:key="item.code"
|
||||
:effect="pageForm.personTypes.includes(item.name)?'dark':'plain'"
|
||||
@click="tagClick('personTypes',item.name)">
|
||||
{{ item.name }}
|
||||
</el-tag>
|
||||
<span class="query-tag-actions">
|
||||
<el-link type="danger"
|
||||
v-if="personTypeOptions.length&&pageForm.personTypes.length"
|
||||
:underline="false"
|
||||
@click="pageForm.personTypes=[];doSearch()">清空
|
||||
</el-link>
|
||||
<el-link :underline="false"
|
||||
@click="pageForm.personTypes=personTypeOptions.map(p=>p.code);doSearch()"
|
||||
type="success">全部
|
||||
</el-link>
|
||||
</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row type="flex" align="middle" class="query-row query-row-tag" v-if="false">
|
||||
<el-col class="query-row-title">人员分类:</el-col>
|
||||
<el-col class="query-row-content query-row-content-tag">
|
||||
<el-tag
|
||||
@@ -173,10 +197,12 @@ layout("/layouts/platform.html"){
|
||||
},
|
||||
unions: [],
|
||||
units: [],
|
||||
personTypeOptions: [],
|
||||
userAttributeOptions: [],
|
||||
pageForm: {
|
||||
currentYear: moment().format("YYYY"),
|
||||
queryType: "fgh",
|
||||
personTypes: [],
|
||||
userAttributes: [],
|
||||
aidFundMemberUserTypes: []
|
||||
},
|
||||
@@ -200,6 +226,9 @@ layout("/layouts/platform.html"){
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
this.$businessTool.getDictOptions("USER_PERSON_TYPE").then((data) => {
|
||||
this.personTypeOptions = data
|
||||
})
|
||||
this.$businessTool.getDictOptions("AIDFUND_MEMBER_USER_TYPE").then((data) => {
|
||||
this.aidFundMemberUserTypeOptions = data
|
||||
})
|
||||
@@ -208,6 +237,13 @@ layout("/layouts/platform.html"){
|
||||
})
|
||||
},
|
||||
tagClick(key,code) {
|
||||
if (key === "personTypes") {
|
||||
if (this.pageForm.personTypes.includes(code)) {
|
||||
this.pageForm.personTypes.splice(this.pageForm.personTypes.indexOf(code), 1)
|
||||
} else {
|
||||
this.pageForm.personTypes.push(code)
|
||||
}
|
||||
}
|
||||
if (key === "userAttributes") {
|
||||
if (this.pageForm.userAttributes.includes(code)) {
|
||||
this.pageForm.userAttributes.splice(this.pageForm.userAttributes.indexOf(code), 1)
|
||||
@@ -227,6 +263,7 @@ layout("/layouts/platform.html"){
|
||||
pageData() {
|
||||
const pageForm = clone(this.pageForm)
|
||||
// 统计接口按 JSON 字符串接收多选条件,这里把人员分类和人员属性统一成同一提交口径。
|
||||
pageForm.personTypes = JSON.stringify(this.pageForm.personTypes)
|
||||
pageForm.aidFundMemberUserTypes = JSON.stringify(this.pageForm.aidFundMemberUserTypes)
|
||||
pageForm.userAttributes = JSON.stringify(this.pageForm.userAttributes)
|
||||
this.$axios.post(loc() + "/pageData", pageForm).then((res) => {
|
||||
|
||||
@@ -84,6 +84,13 @@ const filterUser = {
|
||||
v-model="pageForm.personTypes"></dict-select>
|
||||
</search-item>
|
||||
|
||||
<search-item label="人员属性:">
|
||||
<dict-select clearable code="USER_ATTRIBUTE"
|
||||
multiple
|
||||
collapse-tags
|
||||
placeholder="请选择人员属性"
|
||||
v-model="pageForm.userAttributes"></dict-select>
|
||||
</search-item>
|
||||
|
||||
<search-item label="在职状态:">
|
||||
<dict-select clearable code="USER_STATE"
|
||||
@@ -152,6 +159,7 @@ const filterUser = {
|
||||
userStates: [],
|
||||
personTypes: [],
|
||||
preparedBys: [],
|
||||
userAttributes: [],
|
||||
unitIds: []
|
||||
},
|
||||
sexOptions: ["男", "女"],
|
||||
@@ -165,7 +173,8 @@ const filterUser = {
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true }
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "threeUnitName", label: "三级单位", sortable: true }
|
||||
]
|
||||
}
|
||||
},
|
||||
@@ -186,9 +195,10 @@ const filterUser = {
|
||||
this.$set(this.pageForm, "birthday", null)
|
||||
this.$set(this.pageForm, "birthMonths", [])
|
||||
this.$set(this.pageForm, "unionId", null)
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.$set(this.pageForm, "unitIds", [])
|
||||
this.$set(this.pageForm, "personTypes", [])
|
||||
this.$set(this.pageForm, "preparedBys", [])
|
||||
this.$set(this.pageForm, "userAttributes", [])
|
||||
this.$set(this.pageForm, "userStates", [])
|
||||
this.$set(this.pageForm, "isMember", null)
|
||||
},
|
||||
|
||||
@@ -3,7 +3,7 @@ const welfareOption = {
|
||||
<div class="welfare-option">
|
||||
<el-card shadow="never">
|
||||
<el-table :data="welfareList" border style="width: 100%; margin-top: 20px;">
|
||||
<el-table-column align="center" header-align="center" label="福利名称">
|
||||
<el-table-column align="center" header-align="center" label="福利名称" min-width="520">
|
||||
<template slot-scope="{row}">
|
||||
<el-input
|
||||
v-model="row.optionName"
|
||||
@@ -12,6 +12,16 @@ const welfareOption = {
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="系统默认选择" width="140">
|
||||
<template slot-scope="{$index}">
|
||||
<el-radio
|
||||
v-model="systemDefaultPlaceholderIndex"
|
||||
:label="$index">
|
||||
|
||||
</el-radio>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="图片" width="200">
|
||||
<template slot-scope="{row}">
|
||||
<file-upload :upload_number="1" :value.sync="row.imgUrl"
|
||||
@@ -22,22 +32,22 @@ const welfareOption = {
|
||||
upload_result_category="interval"></file-upload>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
<el-table-column align="center" header-align="center" label="说明" width="120">
|
||||
<template slot-scope="{row, $index}">
|
||||
<el-button
|
||||
type="text"
|
||||
<el-button
|
||||
type="text"
|
||||
@click="openDescription(row, $index)">
|
||||
{{ row.description ? '编辑说明' : '添加说明' }}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
<el-table-column align="center" header-align="center" label="操作" width="100">
|
||||
<template slot-scope="{$index}">
|
||||
<el-button
|
||||
<el-button
|
||||
type="danger"
|
||||
icon="el-icon-delete"
|
||||
icon="el-icon-delete"
|
||||
circle
|
||||
size="mini"
|
||||
@click="deleteOption($index)">
|
||||
@@ -48,7 +58,6 @@ const welfareOption = {
|
||||
<el-button type="primary" size="small" @click="addOption">添加福利选项</el-button>
|
||||
</el-card>
|
||||
|
||||
<!-- 说明编辑对话框 -->
|
||||
<el-dialog
|
||||
title="编辑福利说明"
|
||||
:visible.sync="descriptionDialog.visible"
|
||||
@@ -57,8 +66,8 @@ const welfareOption = {
|
||||
:close-on-click-modal="false">
|
||||
<text-editor v-model="descriptionDialog.content"></text-editor>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="descriptionDialog.visible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="saveDescription">确 定</el-button>
|
||||
<el-button @click="descriptionDialog.visible = false">取消</el-button>
|
||||
<el-button type="primary" @click="saveDescription">确定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
@@ -74,6 +83,7 @@ const welfareOption = {
|
||||
data() {
|
||||
return {
|
||||
welfareList: [],
|
||||
systemDefaultPlaceholderIndex: null,
|
||||
descriptionDialog: {
|
||||
visible: false,
|
||||
content: '',
|
||||
@@ -111,6 +121,11 @@ const welfareOption = {
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.welfareList.splice(index, 1);
|
||||
if (this.systemDefaultPlaceholderIndex === index) {
|
||||
this.systemDefaultPlaceholderIndex = null;
|
||||
} else if (this.systemDefaultPlaceholderIndex > index) {
|
||||
this.systemDefaultPlaceholderIndex--;
|
||||
}
|
||||
this.updateSortNumbers();
|
||||
});
|
||||
},
|
||||
@@ -158,7 +173,7 @@ const welfareOption = {
|
||||
|
||||
style: /*language=CSS*/ `
|
||||
/deep/ .welfare-option {
|
||||
|
||||
|
||||
}
|
||||
|
||||
/deep/ .welfare-option .el-card__body{
|
||||
@@ -182,6 +197,10 @@ const welfareOption = {
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
/deep/ .welfare-option .el-radio__label {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
/deep/ .preview-image {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
|
||||
@@ -34,6 +34,9 @@ layout("/layouts/platform.html"){
|
||||
<el-card class="mt10" shadow="never" v-loading="tableLoading">
|
||||
<table-tool label="工会列表">
|
||||
<el-button @click="exportByWelfareOptions" icon="el-icon-printer" size="small" type="primary">按福利选项导出</el-button>
|
||||
<el-button :disabled="!pageForm.projectId" @click="remindUnSelectedPlaceholder" icon="el-icon-bell" size="small" type="primary">
|
||||
提醒未选择人员
|
||||
</el-button>
|
||||
<template v-if="$auth.hasRoleOr(['SYSADMIN','SCHOOL_UNION_ADMIN','SCHOOL_UNION_WELFARE_ADMIN'])">
|
||||
<el-button :disabled="!pageForm.projectId" @click="exportSummary" icon="el-icon-printer" size="small" type="primary">
|
||||
导出汇总表
|
||||
@@ -107,6 +110,9 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
remindUnSelectedPlaceholder() {
|
||||
this.$message.info("提醒未选择人员功能待开发")
|
||||
},
|
||||
// 导出汇总表
|
||||
exportSummary() {
|
||||
this.$downLoad("/platform/welfare/statistics/exportSummary", {
|
||||
|
||||
+140
-116
@@ -439,6 +439,11 @@ layout("/layouts/platform_h5.html"){
|
||||
required
|
||||
is-link
|
||||
></van-field>
|
||||
<van-cell v-if="getProjectTipByProject(formData.reimburseProject)">
|
||||
<template #title>
|
||||
<span style="color: #ee0a24; text-align: left;">报销提示:{{getProjectTipByProject(formData.reimburseProject)}}</span>
|
||||
</template>
|
||||
</van-cell>
|
||||
<van-popup position="bottom" round v-model:show="showReimburseProjectPicker">
|
||||
<van-picker :columns="reimburseProjectColumns" @cancel="closePopup('showReimburseProjectPicker')"
|
||||
@confirm="onReimburseProjectConfirm" show-toolbar></van-picker>
|
||||
@@ -528,120 +533,6 @@ layout("/layouts/platform_h5.html"){
|
||||
-->
|
||||
|
||||
</van-cell-group>
|
||||
<van-cell-group class="form-section">
|
||||
<div class="payment-section">
|
||||
<div class="payment-toolbar">
|
||||
<span>支付信息</span>
|
||||
<van-button native-type="button" size="small" type="primary" icon="plus" @click="addPaymentInfo">新增</van-button>
|
||||
</div>
|
||||
<div class="invoice-tip" v-if="!paymentInfoRows.length">请至少维护一条支付信息。</div>
|
||||
<van-swipe
|
||||
ref="paymentSwipe"
|
||||
class="payment-swipe"
|
||||
:loop="false"
|
||||
:show-indicators="false"
|
||||
@change="handlePaymentSwipeChange"
|
||||
v-if="paymentInfoRows.length">
|
||||
<van-swipe-item v-for="(item, index) in paymentInfoRows" :key="index">
|
||||
<div class="payment-detail-item">
|
||||
<div class="payment-detail-title">
|
||||
<div class="payment-title-left">
|
||||
<span>支付信息{{index + 1}}</span>
|
||||
<span class="payment-index-text">{{index + 1}} / {{paymentInfoRows.length}}</span>
|
||||
</div>
|
||||
<van-tag v-if="item.paymentWayName" type="primary">{{item.paymentWayName}}</van-tag>
|
||||
</div>
|
||||
<van-field
|
||||
v-model="item.paymentWayName"
|
||||
label="支付方式"
|
||||
readonly
|
||||
placeholder="请选择支付方式"
|
||||
@click="openPaymentWayPicker(item, index)"
|
||||
clickable
|
||||
required
|
||||
is-link
|
||||
></van-field>
|
||||
<van-field
|
||||
label="金额"
|
||||
v-model="item.money"
|
||||
placeholder="请输入金额"
|
||||
type="number"
|
||||
required
|
||||
></van-field>
|
||||
<template v-if="isPrivatePayment(item)">
|
||||
<van-field
|
||||
v-model="item.payerName"
|
||||
label="付款人"
|
||||
readonly
|
||||
placeholder="请选择付款人"
|
||||
@click="openPayerSelect(item, index)"
|
||||
clickable
|
||||
required
|
||||
is-link
|
||||
></van-field>
|
||||
<van-field
|
||||
label="户名"
|
||||
v-model="item.bankUserName"
|
||||
placeholder="请输入户名"
|
||||
required
|
||||
></van-field>
|
||||
<van-field
|
||||
label="开户行"
|
||||
v-model="item.bankOfDeposit"
|
||||
placeholder="请输入开户行"
|
||||
required
|
||||
></van-field>
|
||||
<van-field
|
||||
label="银行卡号"
|
||||
v-model="item.bankCardNumber"
|
||||
placeholder="请输入银行卡号"
|
||||
required
|
||||
></van-field>
|
||||
</template>
|
||||
<div class="payment-detail-actions">
|
||||
<div class="payment-nav-buttons">
|
||||
<span class="payment-nav-btn" :class="{active: currentPaymentIndex > 0}" @click="showPrevPayment">
|
||||
<van-icon name="arrow-left"></van-icon>
|
||||
</span>
|
||||
<span class="payment-nav-btn" :class="{active: currentPaymentIndex < paymentInfoRows.length - 1}" @click="showNextPayment">
|
||||
<van-icon name="arrow"></van-icon>
|
||||
</span>
|
||||
</div>
|
||||
<van-button class="payment-delete-btn" native-type="button" size="small" plain type="danger" icon="delete-o" @click="deletePaymentInfo(index)">删除</van-button>
|
||||
</div>
|
||||
</div>
|
||||
</van-swipe-item>
|
||||
</van-swipe>
|
||||
<div class="payment-dots" v-if="paymentInfoRows.length > 1">
|
||||
<span class="payment-dot" :class="{active: index === currentPaymentIndex}" v-for="(item, index) in paymentInfoRows"></span>
|
||||
</div>
|
||||
</div>
|
||||
<van-popup position="bottom" round v-model:show="showPaymentWayPicker">
|
||||
<van-picker :columns="paymentWayColumns" @cancel="closePopup('showPaymentWayPicker')"
|
||||
@confirm="onPaymentWayConfirm" show-toolbar></van-picker>
|
||||
</van-popup>
|
||||
<van-action-sheet v-model="payerSelectShow" title="付款人" class="height100">
|
||||
<van-search
|
||||
v-model="payerSearchKeyword"
|
||||
:show-action="false"
|
||||
:reverse-color="false"
|
||||
input-align="left"
|
||||
placeholder="请输入工号或姓名选择付款人"
|
||||
@input="payerRemoteMethod"
|
||||
@clear="payerRemoteMethod"
|
||||
shape="round"
|
||||
></van-search>
|
||||
<div class="van-action-sheet__content mt5" v-if="payerOptions && payerOptions.length>0">
|
||||
<template v-for="item in payerOptions">
|
||||
<van-button native-type="button" @click="payerUserChange(item)"
|
||||
class="van-action-sheet__item van-hairline--bottom">
|
||||
<span class="van-action-sheet__name">{{item.userName}}({{item.loginName}})</span>
|
||||
</van-button>
|
||||
</template>
|
||||
</div>
|
||||
<van-empty description="暂无数据" v-else></van-empty>
|
||||
</van-action-sheet>
|
||||
</van-cell-group>
|
||||
<van-cell-group :title="formData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1' ? '慰问信息' : '活动信息'" class="form-section">
|
||||
|
||||
<template v-if="formData.reimburseProject === 'UNION_REIMBURSE_PROJECT_1'">
|
||||
@@ -921,6 +812,120 @@ layout("/layouts/platform_h5.html"){
|
||||
</template>
|
||||
</van-field>
|
||||
</van-cell-group>
|
||||
<van-cell-group class="form-section">
|
||||
<div class="payment-section">
|
||||
<div class="payment-toolbar">
|
||||
<span>支付信息</span>
|
||||
<van-button native-type="button" size="small" type="primary" icon="plus" @click="addPaymentInfo">新增</van-button>
|
||||
</div>
|
||||
<div class="invoice-tip" v-if="!paymentInfoRows.length">请至少维护一条支付信息。</div>
|
||||
<van-swipe
|
||||
ref="paymentSwipe"
|
||||
class="payment-swipe"
|
||||
:loop="false"
|
||||
:show-indicators="false"
|
||||
@change="handlePaymentSwipeChange"
|
||||
v-if="paymentInfoRows.length">
|
||||
<van-swipe-item v-for="(item, index) in paymentInfoRows" :key="index">
|
||||
<div class="payment-detail-item">
|
||||
<div class="payment-detail-title">
|
||||
<div class="payment-title-left">
|
||||
<span>支付信息{{index + 1}}</span>
|
||||
<span class="payment-index-text">{{index + 1}} / {{paymentInfoRows.length}}</span>
|
||||
</div>
|
||||
<van-tag v-if="item.paymentWayName" type="primary">{{item.paymentWayName}}</van-tag>
|
||||
</div>
|
||||
<van-field
|
||||
v-model="item.paymentWayName"
|
||||
label="支付方式"
|
||||
readonly
|
||||
placeholder="请选择支付方式"
|
||||
@click="openPaymentWayPicker(item, index)"
|
||||
clickable
|
||||
required
|
||||
is-link
|
||||
></van-field>
|
||||
<van-field
|
||||
label="金额"
|
||||
v-model="item.money"
|
||||
placeholder="请输入金额"
|
||||
type="number"
|
||||
required
|
||||
></van-field>
|
||||
<template v-if="isPrivatePayment(item)">
|
||||
<van-field
|
||||
v-model="item.payerName"
|
||||
label="付款人"
|
||||
readonly
|
||||
placeholder="请选择付款人"
|
||||
@click="openPayerSelect(item, index)"
|
||||
clickable
|
||||
required
|
||||
is-link
|
||||
></van-field>
|
||||
<van-field
|
||||
label="户名"
|
||||
v-model="item.bankUserName"
|
||||
placeholder="请输入户名"
|
||||
required
|
||||
></van-field>
|
||||
<van-field
|
||||
label="开户行"
|
||||
v-model="item.bankOfDeposit"
|
||||
placeholder="请输入开户行"
|
||||
required
|
||||
></van-field>
|
||||
<van-field
|
||||
label="银行卡号"
|
||||
v-model="item.bankCardNumber"
|
||||
placeholder="请输入银行卡号"
|
||||
required
|
||||
></van-field>
|
||||
</template>
|
||||
<div class="payment-detail-actions">
|
||||
<div class="payment-nav-buttons">
|
||||
<span class="payment-nav-btn" :class="{active: currentPaymentIndex > 0}" @click="showPrevPayment">
|
||||
<van-icon name="arrow-left"></van-icon>
|
||||
</span>
|
||||
<span class="payment-nav-btn" :class="{active: currentPaymentIndex < paymentInfoRows.length - 1}" @click="showNextPayment">
|
||||
<van-icon name="arrow"></van-icon>
|
||||
</span>
|
||||
</div>
|
||||
<van-button class="payment-delete-btn" native-type="button" size="small" plain type="danger" icon="delete-o" @click="deletePaymentInfo(index)">删除</van-button>
|
||||
</div>
|
||||
</div>
|
||||
</van-swipe-item>
|
||||
</van-swipe>
|
||||
<div class="payment-dots" v-if="paymentInfoRows.length > 1">
|
||||
<span class="payment-dot" :class="{active: index === currentPaymentIndex}" v-for="(item, index) in paymentInfoRows"></span>
|
||||
</div>
|
||||
</div>
|
||||
<van-popup position="bottom" round v-model:show="showPaymentWayPicker">
|
||||
<van-picker :columns="paymentWayColumns" @cancel="closePopup('showPaymentWayPicker')"
|
||||
@confirm="onPaymentWayConfirm" show-toolbar></van-picker>
|
||||
</van-popup>
|
||||
<van-action-sheet v-model="payerSelectShow" title="付款人" class="height100">
|
||||
<van-search
|
||||
v-model="payerSearchKeyword"
|
||||
:show-action="false"
|
||||
:reverse-color="false"
|
||||
input-align="left"
|
||||
placeholder="请输入工号或姓名选择付款人"
|
||||
@input="payerRemoteMethod"
|
||||
@clear="payerRemoteMethod"
|
||||
shape="round"
|
||||
></van-search>
|
||||
<div class="van-action-sheet__content mt5" v-if="payerOptions && payerOptions.length>0">
|
||||
<template v-for="item in payerOptions">
|
||||
<van-button native-type="button" @click="payerUserChange(item)"
|
||||
class="van-action-sheet__item van-hairline--bottom">
|
||||
<span class="van-action-sheet__name">{{item.userName}}({{item.loginName}})</span>
|
||||
</van-button>
|
||||
</template>
|
||||
</div>
|
||||
<van-empty description="暂无数据" v-else></van-empty>
|
||||
</van-action-sheet>
|
||||
</van-cell-group>
|
||||
<van-cell-group title="电子发票" class="form-section" v-if="formData.reimburseProject">
|
||||
<van-field label="报销金额"
|
||||
v-model="formData.money"
|
||||
@@ -1186,6 +1191,7 @@ layout("/layouts/platform_h5.html"){
|
||||
clubOptions: [],
|
||||
condolenceOptions: [],
|
||||
typeOptions: [],
|
||||
descOptions: [],
|
||||
// 添加报销项目原始数据列表
|
||||
reimburseProjectList: [],
|
||||
// 添加日期选择器相关变量
|
||||
@@ -2025,7 +2031,7 @@ layout("/layouts/platform_h5.html"){
|
||||
}
|
||||
this.$dialog.confirm({
|
||||
title: "温馨提示",
|
||||
message: "您确定要提交吗?"
|
||||
message: "您确定要提交吗?审核通过后可前往pc端我的报销打印!"
|
||||
}).then(() => {
|
||||
this.$axios.post("/platform/unionReimburse/apply/submit", { data: JSON.stringify(this.buildSubmitFormData(paymentDetails)) })
|
||||
.then(res => {
|
||||
@@ -2064,7 +2070,7 @@ layout("/layouts/platform_h5.html"){
|
||||
}
|
||||
this.$dialog.confirm({
|
||||
title: "温馨提示",
|
||||
message: "您确定要提交吗?"
|
||||
message: "您确定要提交吗?审核通过后可前往pc端我的报销打印!"
|
||||
}).then(() => {
|
||||
this.$axios.post("/platform/unionReimburse/apply/submitAgain", {
|
||||
data: JSON.stringify(this.buildSubmitFormData(paymentDetails)),
|
||||
@@ -2195,6 +2201,23 @@ layout("/layouts/platform_h5.html"){
|
||||
const matchedFundSource = this.reimburseFundSourceColumns.find(item => item.value === code)
|
||||
return matchedFundSource ? matchedFundSource.text : ""
|
||||
},
|
||||
// 查询管理端配置的报销项目提示。
|
||||
queryProjectDesc() {
|
||||
return this.$axios.post("/platform/unionReimburse/desc/queryFileDesc")
|
||||
.then((resp) => {
|
||||
if (resp.code === 0) {
|
||||
this.$set(this, "descOptions", resp.data || [])
|
||||
}
|
||||
})
|
||||
},
|
||||
// 根据当前选择的报销项目获取管理端配置的提示内容。
|
||||
getProjectTipByProject(projectCode) {
|
||||
if (!this.descOptions || !Array.isArray(this.descOptions)) {
|
||||
return ""
|
||||
}
|
||||
const project = this.descOptions.find(item => item.reimburseProject === projectCode)
|
||||
return project ? project.projectTip : ""
|
||||
},
|
||||
async initDictOptions() {
|
||||
// 报销类别
|
||||
const reimburseTypeData = await this.$businessTool.getDictOptions("UNION_REIMBURSE_TYPE")
|
||||
@@ -2558,6 +2581,7 @@ layout("/layouts/platform_h5.html"){
|
||||
|
||||
async created() {
|
||||
await this.initDictOptions()
|
||||
await this.queryProjectDesc()
|
||||
await this.queryCondolenceType()
|
||||
await this.queryClubs()
|
||||
await this.init()
|
||||
|
||||
Reference in New Issue
Block a user