commit
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,266 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
<el-card shadow="never">
|
||||
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名工号">
|
||||
<el-input placeholder="请输入关键字查询" v-model="pageForm.keyWord"></el-input>
|
||||
</search-item>
|
||||
<search-item label="所属工会">
|
||||
<el-select v-model="pageForm.unionId" clearable filterable placeholder="请选择院级工会"
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in unionList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="绑定列表">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="medium" type="danger">
|
||||
批量删除 
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'delete2'}">
|
||||
删除已选
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete3'}">
|
||||
全部删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" style="width: 100%" row-key="_id" @sort-change="pageOrder"
|
||||
v-loading="tabLoading" @selection-change="handleSelectionChange">
|
||||
<el-table-column :reserve-selection="true"
|
||||
type="selection"
|
||||
width="55">
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="序号" width="60" type="index">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="工号" prop="loginname" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
|
||||
<el-table-column label="姓名" prop="username" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
|
||||
<el-table-column label="openid" prop="openid" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="操作" fixed="right" width="240px">
|
||||
<template scope="{row}">
|
||||
<el-button type="danger" @click="doDelete(row._id)" size="mini"
|
||||
icon="el-icon-delete"></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<el-row class="el-pagination-container">
|
||||
<el-pagination
|
||||
@size-change="pageSizeChange"
|
||||
@current-change="pageNumberChange"
|
||||
:current-page="pageForm.pageNumber"
|
||||
:page-sizes="[10, 20]"
|
||||
:page-size="pageForm.pageSize"
|
||||
layout="total, sizes, prev, pager, next"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
v: "index",
|
||||
stepActive: 0,
|
||||
tabLoading: false,
|
||||
subDis: false,
|
||||
formData: {},
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
searchName: "name",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: ""
|
||||
},
|
||||
multipleSelection: [],
|
||||
unionList: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand: function (command) {
|
||||
const {type, data} = command
|
||||
if (type == 'delete2') {
|
||||
this.doDelete2()
|
||||
} else if (type == 'delete3') {
|
||||
this.doDelete3()
|
||||
}
|
||||
},
|
||||
async doDelete(id) {
|
||||
this.$confirm('是否确定删除!', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: async (a, b) => {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
const {
|
||||
code,
|
||||
data,
|
||||
msg
|
||||
} = await this.$axios.post(loc() + "/delete", {ids: JSON.stringify([id])})
|
||||
if (code === 0) {
|
||||
this.$message({message: msg, type: 'success'});
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message({message: data.msg, type: 'error'});
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
},
|
||||
async doDelete2() {
|
||||
|
||||
if (!this.multipleSelection.length) {
|
||||
this.$notify({
|
||||
title: '提示',
|
||||
message: '请先勾选需要删除的人员!',
|
||||
type: 'warning'
|
||||
});
|
||||
return
|
||||
}
|
||||
|
||||
this.$confirm('是否确定删除!', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: async (a, b) => {
|
||||
if ("confirm" === a) {//确认后再执行
|
||||
|
||||
const arr = this.multipleSelection.map(v => {
|
||||
return v._id
|
||||
})
|
||||
|
||||
const {code, data, msg} = await this.$axios.post(loc() + "/delete", {ids: JSON.stringify(arr)})
|
||||
if (code === 0) {
|
||||
this.multipleSelection = []
|
||||
this.$message({
|
||||
message: msg,
|
||||
type: 'success'
|
||||
});
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
async doDelete3() {
|
||||
this.$confirm('是否确定删除全部登录记录!', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: async (a, b) => {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
const {code, data, msg} = await this.$axios.post(loc() + "/deleteAll")
|
||||
if (code === 0) {
|
||||
this.multipleSelection = []
|
||||
this.$message({
|
||||
message: msg,
|
||||
type: 'success'
|
||||
});
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
handleSelectionChange(val) {
|
||||
this.multipleSelection = val;
|
||||
},
|
||||
doSearch() {
|
||||
this.tabKey = new Date().getTime()
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData()
|
||||
},
|
||||
pageOrder(column) {//按字段排序
|
||||
this.pageForm.pageOrderName = column.prop;
|
||||
this.pageForm.pageOrderBy = column.order;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange(val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange(val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageData() {//加载分页数据
|
||||
this.tabLoading = true
|
||||
this.$axios.post(loc() + "/pageData", this.pageForm)
|
||||
.then(res => {
|
||||
this.tabLoading = false
|
||||
if (res.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
},
|
||||
async created() {
|
||||
this.pageData();
|
||||
|
||||
const hasAdminRole = this.$auth.hasRoleOr("SYSADMIN, SCHOOL_UNION_ADMIN")
|
||||
if (hasAdminRole) {
|
||||
this.unionList = await this.$businessTool.listUnion()
|
||||
} else {
|
||||
this.unionList = await this.$businessTool.listUnion(this.$store.user.union.id)
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,264 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="年份">
|
||||
<el-date-picker
|
||||
:clearable="false"
|
||||
placeholder="选择年"
|
||||
style="width: 100%"
|
||||
@change="getCascadersActivity"
|
||||
type="year" v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="活动">
|
||||
<el-cascader
|
||||
style="width: 100%"
|
||||
@change="doSearch"
|
||||
v-model="pageForm.activityId"
|
||||
:options="activityOptions"
|
||||
:props="{ checkStrictly: true,emitPath:false}"
|
||||
clearable></el-cascader>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool label="参与列表">
|
||||
<el-button @click="$downLoad(loc() + '/exportUnionRegCheckInNum', {activityId : pageForm.activityId})"
|
||||
class="ml10"
|
||||
size="small"
|
||||
type="primary"
|
||||
icon="el-icon-download">
|
||||
导出报名及打卡人数
|
||||
</el-button>
|
||||
<el-button @click="$downLoad(loc() + '/exportNotGetGiftVoucherUsers', {activityId : pageForm.activityId})"
|
||||
class="ml10"
|
||||
size="small"
|
||||
type="primary"
|
||||
icon="el-icon-download">
|
||||
导出未取得礼品券人员
|
||||
</el-button>
|
||||
|
||||
<el-button @click="$downLoad(loc() + '/exportNotGetGiftVoucherUsers', {activityId : pageForm.activityId})"
|
||||
class="ml10"
|
||||
size="small"
|
||||
type="primary"
|
||||
icon="el-icon-download">
|
||||
导出未使用礼品券用户
|
||||
</el-button>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" show-summary>
|
||||
<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"
|
||||
:key="column.prop"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="300px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="viewReg(row)" size="mini" type="primary">查看报名情况</el-button>
|
||||
<el-button @click="viewCheckIn(row)" size="mini" type="primary">查看打卡情况</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<el-card shadow="never" v-if="viewIndex==='regTableShow'">
|
||||
<template #header>
|
||||
<div style="display: flex;justify-content: space-between;align-items: center">
|
||||
<h4 style="color: rgb(24, 103, 176);">
|
||||
{{viewUnion.unionname}}
|
||||
</h4>
|
||||
<el-button type="primary" size="mini" icon="el-icon-download"
|
||||
@click="exportRegUsers">
|
||||
导出名单
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
<el-table :data="regTableData" style="width: 100%" row-key="_id" max-height="600px">
|
||||
<el-table-column label="工号" prop="loginname"></el-table-column>
|
||||
<el-table-column label="姓名" prop="username"></el-table-column>
|
||||
<el-table-column label="性别" prop="sex"></el-table-column>
|
||||
<el-table-column label="单位" prop="unitname" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="电话" prop="mobile"></el-table-column>
|
||||
<el-table-column label="报名时间" prop="register_time_str"></el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
<el-card shadow="never" v-else-if="viewIndex==='checkInTableShow'">
|
||||
<template #header>
|
||||
<div style="display: flex;justify-content: space-between;align-items: center">
|
||||
<h4 style="color: rgb(24, 103, 176);">
|
||||
{{viewUnion.unionname}}
|
||||
</h4>
|
||||
<el-button type="primary" size="mini" icon="el-icon-download"
|
||||
@click="exportCheckInUsers">
|
||||
导出名单
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
<el-table :data="regTableData" style="width: 100%" row-key="_id" max-height="600px">
|
||||
<el-table-column label="工号" prop="loginname"></el-table-column>
|
||||
<el-table-column label="姓名" prop="username"></el-table-column>
|
||||
<el-table-column label="性别" prop="sex"></el-table-column>
|
||||
<el-table-column label="单位" prop="unitname" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="电话" prop="mobile"></el-table-column>
|
||||
<el-table-column label="点位总数" prop="pts_size"></el-table-column>
|
||||
<el-table-column label="已打卡点位数" prop="sign_size"></el-table-column>
|
||||
<el-table-column label="礼品券" prop="used">
|
||||
<template scope="{row}">
|
||||
<span v-if="row.used==null" class="text-danger">未取得</span>
|
||||
<span v-else-if="row.used" class="text-success">已使用</span>
|
||||
<span v-else-if="!row.used" class="text-warning">未使用</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{label: '分工会', prop: 'unionname'},
|
||||
{label: '报名人数', prop: 'regCount'},
|
||||
{label: '打卡人数', prop: 'checkInCount'},
|
||||
],
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
pageForm: {
|
||||
unionId: '',
|
||||
unitId: '',
|
||||
activityDate: [],
|
||||
year: new Date().getFullYear() + '',
|
||||
},
|
||||
|
||||
activityOptions: [],
|
||||
|
||||
regTableData: [],
|
||||
checkInTableData: [],
|
||||
viewIndex: '',
|
||||
viewUnion: {}
|
||||
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
viewReg({id, unionname}) {
|
||||
this.viewUnion.unionId = id
|
||||
this.viewUnion.unionname = unionname
|
||||
this.$refs.guava.view(() => {
|
||||
this.viewIndex = 'regTableShow'
|
||||
this.$axios.post(loc() + '/unionRegistrationData', {
|
||||
unionId: id,
|
||||
activityId: this.pageForm.activityId
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.regTableData = res.data
|
||||
} else {
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
viewCheckIn({id, unionname}) {
|
||||
this.viewUnion.unionId = id
|
||||
this.viewUnion.unionname = unionname
|
||||
this.$refs.guava.view(() => {
|
||||
this.viewIndex = 'checkInTableShow'
|
||||
this.$axios.post(loc() + '/unionCheckInData', {
|
||||
unionId: id,
|
||||
activityId: this.pageForm.activityId
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.regTableData = res.data
|
||||
} else {
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
exportExcel() {
|
||||
const {hdid, unionId, unitId, activityDate} = this.pageForm
|
||||
let activityDate1 = []
|
||||
if (activityDate && activityDate.length > 0) {
|
||||
activityDate1 = JSON.stringify(activityDate)
|
||||
}
|
||||
|
||||
this.$downLoad(loc() + "/exportExcel", {
|
||||
hdid: hdid,
|
||||
unionId: unionId,
|
||||
unitId: unitId,
|
||||
activityDate: activityDate1
|
||||
})
|
||||
},
|
||||
activityDateChange() {
|
||||
},
|
||||
async unionChange(val) {
|
||||
this.pageForm.unitId = null
|
||||
this.unitOptions = await this.$businessTool.listUnit(val)
|
||||
this.doSearch()
|
||||
},
|
||||
pageData() {
|
||||
this.$axios.post(loc() + '/pageData', this.pageForm).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.tableData = res.data
|
||||
} else {
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
async getCascadersActivity() {
|
||||
const {code, data} = await this.$axios.post(loc() + '/getCascadersActivity', {year: this.pageForm.year})
|
||||
this.activityOptions = data
|
||||
if (this.activityOptions && this.activityOptions.length > 0) {
|
||||
this.pageForm.activityId = this.activityOptions[0].value
|
||||
this.pageData()
|
||||
} else {
|
||||
this.tableData = []
|
||||
}
|
||||
},
|
||||
|
||||
exportCheckInUsers() {
|
||||
this.$downLoad(loc() + '/exportCheckInUsers', {
|
||||
unionId: this.viewUnion.unionId,
|
||||
activityId: this.pageForm.activityId
|
||||
})
|
||||
},
|
||||
exportRegUsers(){
|
||||
this.$downLoad(loc() + '/exportRegUsers', {
|
||||
unionId: this.viewUnion.unionId,
|
||||
activityId: this.pageForm.activityId
|
||||
})
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.unionOptions = await this.$businessTool.listUnion()
|
||||
this.unitOptions = await this.$businessTool.listUnit()
|
||||
await this.getCascadersActivity()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,383 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
|
||||
<search @search="doSearch">
|
||||
<search-item label="年份">
|
||||
<el-date-picker style="width: 100%"
|
||||
class="mr5"
|
||||
:picker-options="pickerOptions"
|
||||
v-model="pageForm.year" :clearable="false"
|
||||
type="year"
|
||||
value-format="yyyy" @change="getCascadersActivity"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="活动">
|
||||
<el-cascader
|
||||
style="width: 100%"
|
||||
@change="doSearch()"
|
||||
v-model="pageForm.activityId"
|
||||
:options="activityOptions"
|
||||
:props="{ checkStrictly: true,emitPath:false}"
|
||||
:clearable="false"></el-cascader>
|
||||
</search-item>
|
||||
|
||||
<search-item label="姓名工号">
|
||||
<el-input placeholder="请输入姓名或工号查询" clearable v-model="pageForm.searchKeyword"
|
||||
style="width: 100%" @keyup.enter.native="doSearch">
|
||||
</el-input>
|
||||
</search-item>
|
||||
|
||||
<template v-if="$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')">
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="unionChange" clearable filterable style="width: 100%"
|
||||
placeholder="请选择所属工会" v-model="pageForm.unionId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
v-for="item in unionOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
|
||||
<search-item label="所属单位">
|
||||
<el-select @change="doSearch" clearable filterable style="width: 100%"
|
||||
placeholder="请选择所属单位" v-model="pageForm.unitId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
v-for="item in unitOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
</template>
|
||||
</search>
|
||||
</el-card>
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool label="达标人员列表">
|
||||
<el-button @click="setRaffle" class="ml10" size="small" type="primary">设置抽奖条件</el-button>
|
||||
<el-button @click="viewLotteryUsers" class="ml10" size="small" type="primary">查看中奖人员</el-button>
|
||||
<el-button @click="exportExcel" class="ml10" size="small" type="primary">导出达标人员</el-button>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize">
|
||||
<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"
|
||||
>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<template #edit>
|
||||
<el-card shadow="never">
|
||||
<h2 style="color: #0a84ff">抽奖规则</h2>
|
||||
<span>排名位次指:一等奖,二等奖,三等奖;如您填写【1】,会按照达标总步数降序,取最高位次;填写【2】则排除【1】的中奖人数后再取抽奖人数的最高位次</span>
|
||||
<el-form :model="formData" ref="formRef" label-width="100px">
|
||||
<el-form-item>
|
||||
<el-table tooltip-effect="dark" style="width: 100%" :data="formData.manualLotteryRules">
|
||||
<el-table-column label="奖项名称" align="center">
|
||||
<template scope="scope">
|
||||
<el-input v-model="scope.row.awardName" placeholder="请输入奖项名称" max="50" clearable></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="奖项积分" align="center">
|
||||
<template scope="scope">
|
||||
<el-input-number v-model="scope.row.points" placeholder="请输入奖项积分" style="width: 100%"></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="抽奖人数" align="center">
|
||||
<template scope="scope">
|
||||
<el-input-number v-model="scope.row.lotteryUserNum"
|
||||
style="width: 100%"></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="抽奖类型" align="center">
|
||||
<template scope="scope">
|
||||
<el-select v-model="scope.row.raffleType">
|
||||
<el-option
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
v-for="item in raffleTypeOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="排名位次" align="center">
|
||||
<template scope="scope">
|
||||
<el-input-number v-if="scope.row.raffleType == '排名'"
|
||||
v-model="scope.row.rankingPosition"
|
||||
style="width: 100%"></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="是否兼得" align="center">
|
||||
<template scope="scope">
|
||||
<el-radio-group v-if="scope.row.raffleType == '达标'"
|
||||
v-model="scope.row.isSimultaneously" size="small">
|
||||
<el-radio label="true" border>是</el-radio>
|
||||
<el-radio label="false" border>否</el-radio>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作" align="center">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<el-button @click="formData.manualLotteryRules.push({})"
|
||||
icon="el-icon-plus" size="mini" type="primary"></el-button>
|
||||
</template>
|
||||
<template scope="scope">
|
||||
<el-button @click="formData.manualLotteryRules.splice(scope.$index,1)"
|
||||
icon="el-icon-delete" size="mini" type="danger"></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div style="text-align: right">
|
||||
<el-button @click="$refs.guava.index()" class="ml10">返回</el-button>
|
||||
<el-button @click="saveRaffle" class="ml10" type="primary">提交</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">姓名工号</div>
|
||||
<div class="search-item-option">
|
||||
<el-input v-model="awardPageForm.searchKeyword" placeholder="请输入姓名或工号" clearable></el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">奖项名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="awardPageForm.lotteryTime" style="width: 100%" clearable>
|
||||
<el-option
|
||||
:key="item.value"
|
||||
:label="item.value"
|
||||
:value="item.value"
|
||||
v-for="item in awardNameOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button @click="awardPageData" 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="exportAwardExcel" icon="el-icon-download" type="primary" size="small">导出中奖人员</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="awardTableData">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center" label="排名" type="index"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="工号" prop="loginName"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="姓名" prop="username"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="分工会" prop="unionName"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="单位" prop="unitName"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="奖项名称" prop="awardName"></el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins:[initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pickerOptions: {
|
||||
disabledDate(time) {
|
||||
return (
|
||||
time.getFullYear() > new Date().getFullYear()
|
||||
);
|
||||
}
|
||||
},
|
||||
pageForm: {
|
||||
year: moment().format('YYYY'),
|
||||
unionId:'',
|
||||
unitId:''
|
||||
},
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
activityOptions: [],
|
||||
tableColumns: [
|
||||
{label: '姓名', prop: 'username'},
|
||||
{label: '工号', prop: 'loginname'},
|
||||
{label: '分工会', prop: 'unionname', sortable: true},
|
||||
{label: '单位', prop: 'unitname'},
|
||||
{label: '步数', prop: 'total_steps', sortable: true},
|
||||
{label: '达标天数', prop: 'standardsDays', sortable: true},
|
||||
],
|
||||
raffleTypeOptions: [
|
||||
{ value: '排名', label: '排名' },
|
||||
{ value: '达标', label: '达标' },
|
||||
],
|
||||
formData: {
|
||||
manualLotteryRules: []
|
||||
},
|
||||
|
||||
awardNameOptions: [],
|
||||
awardPageForm: {
|
||||
searchKeyword: '',
|
||||
activityId: '',
|
||||
lotteryTime: ''
|
||||
},
|
||||
awardTableData: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* 设置抽奖条件
|
||||
*/
|
||||
async setRaffle(){
|
||||
this.$refs.guava.edit(async () => {
|
||||
// 获取该活动的抽奖条件
|
||||
const resp = await this.$axios.post('/platform/fitnessWalk/stepRaffle/getRaffle', {
|
||||
activityId: this.pageForm.activityId
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
if (resp.data) {
|
||||
this.formData = resp.data
|
||||
}
|
||||
} else {
|
||||
this.formData = {
|
||||
manualLotteryRules: []
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 查看中奖人员
|
||||
*/
|
||||
viewLotteryUsers(){
|
||||
this.$refs.guava.view(() => {
|
||||
this.awardPageData()
|
||||
})
|
||||
},
|
||||
async awardPageData() {
|
||||
this.awardPageForm.activityId = this.pageForm.activityId
|
||||
const resp = await this.$axios.post('/platform/fitnessWalk/stepWining/prizeUsers', this.awardPageForm)
|
||||
if (resp.code === 0) {
|
||||
this.awardTableData = resp.data
|
||||
}
|
||||
},
|
||||
exportAwardExcel(){
|
||||
const {searchKeyword,activityId,lotteryTime} = this.awardPageForm
|
||||
this.$downLoad(loc() + '/exportAwardExcel', {
|
||||
searchKeyword: searchKeyword,
|
||||
activityId: activityId,
|
||||
lotteryTime: lotteryTime
|
||||
})
|
||||
},
|
||||
async saveRaffle() {
|
||||
const formData = this.formData
|
||||
formData.activityId = this.pageForm.activityId
|
||||
formData.manualLotteryRules = JSON.stringify(this.formData.manualLotteryRules)
|
||||
const resp = await this.$axios.post('/platform/fitnessWalk/stepRaffle/saveRaffle', this.formData)
|
||||
if (resp.code === 0) {
|
||||
this.$message.success('保存成功')
|
||||
this.$refs.guava.index()
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
},
|
||||
exportExcel(){
|
||||
const {searchKeyword,activityId,unionId,unitId} = this.pageForm
|
||||
this.$downLoad(loc() + '/exportExcel', {
|
||||
searchKeyword: searchKeyword,
|
||||
activityId: activityId,
|
||||
unionId: unionId,
|
||||
unitId: unitId
|
||||
})
|
||||
},
|
||||
|
||||
async getAllActivity() {
|
||||
this.pageForm.activityId = ''
|
||||
this.activityOptions = []
|
||||
|
||||
const {data} = await this.$axios.post('/platform/fitnessWalk/activityManage/getAllActivity', this.pageForm)
|
||||
if (data == null || data.length === 0) {
|
||||
this.tableData = []
|
||||
return
|
||||
} else {
|
||||
this.activityOptions = data.filter(item => item.activityModel === 'stepCount')
|
||||
}
|
||||
|
||||
if (this.activityOptions) {
|
||||
this.pageForm.activityId = this.activityOptions[0]._id
|
||||
}
|
||||
},
|
||||
async unionChange(val) {
|
||||
this.pageForm.unitId = null
|
||||
this.unitOptions = await this.$businessTool.listUnit(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async getCascadersActivity() {
|
||||
const {code, data} = await this.$axios.post(loc() + '/getCascadersActivity', {year: this.pageForm.year})
|
||||
this.activityOptions = data
|
||||
if (this.activityOptions && this.activityOptions.length > 0) {
|
||||
this.pageForm.activityId = this.activityOptions[0].value
|
||||
this.doSearch()
|
||||
} else {
|
||||
this.tableData = []
|
||||
}
|
||||
},
|
||||
async getAwardUserNum(){
|
||||
const resp = await this.$axios.post('/platform/fitnessWalk/stepRaffle/getAwardUserNum')
|
||||
if (resp.code === 0) {
|
||||
|
||||
}
|
||||
},
|
||||
async getAwardNameOptions(){
|
||||
const resp = await this.$axios.post('/platform/fitnessWalk/stepWining/prizeOption', {
|
||||
activityId: this.pageForm.activityId
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.awardNameOptions = resp.data
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.unionOptions = await this.$businessTool.listUnion()
|
||||
this.unitOptions = await this.$businessTool.listUnit()
|
||||
await this.getCascadersActivity()
|
||||
await this.getAwardNameOptions()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,177 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="年份">
|
||||
<el-date-picker style="width: 100%"
|
||||
class="mr5"
|
||||
:picker-options="pickerOptions"
|
||||
v-model="pageForm.year" :clearable="false"
|
||||
type="year"
|
||||
value-format="yyyy" @change="getAllActivity"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="活动">
|
||||
<el-cascader
|
||||
style="width: 100%"
|
||||
@change="doSearch()"
|
||||
v-model="pageForm.activityId"
|
||||
:options="activityOptions"
|
||||
:props="{ checkStrictly: true,emitPath:false}"
|
||||
:clearable="false"></el-cascader>
|
||||
</search-item>
|
||||
|
||||
<search-item label="姓名工号">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
|
||||
@keyup.enter.native="doSearch"></el-input>
|
||||
</search-item>
|
||||
|
||||
<template v-if="$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')">
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="unionChange" clearable filterable style="width: 100%"
|
||||
placeholder="请选择所属工会" v-model="pageForm.unionId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
v-for="item in unionOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
|
||||
<search-item label="所属单位">
|
||||
<el-select @change="doSearch" clearable filterable style="width: 100%"
|
||||
placeholder="请选择所属单位" v-model="pageForm.unitId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
v-for="item in unitOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
</template>
|
||||
</search>
|
||||
</el-card>
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool label="排行榜">
|
||||
<el-radio-group v-model="pageForm.mode" size="small" @change="doSearch" class="mr10">
|
||||
<el-radio-button label="today">今日排行榜</el-radio-button>
|
||||
<el-radio-button label="all">总排行榜</el-radio-button>
|
||||
</el-radio-group>
|
||||
<el-button @click="exportExcel" size="small" type="primary">导出{{pageForm.mode == 'today' ? '今日排行榜' : '总排行榜'}}</el-button>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize">
|
||||
<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"
|
||||
>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins:[initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pickerOptions: {
|
||||
disabledDate(time) {
|
||||
return (
|
||||
time.getFullYear() > new Date().getFullYear()
|
||||
);
|
||||
}
|
||||
},
|
||||
pageForm: {
|
||||
year: new Date().getFullYear() + '',
|
||||
mode:'today',
|
||||
searchName:'u.username',
|
||||
unionId:'',
|
||||
unitId:''
|
||||
},
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
activityOptions: [],
|
||||
tableColumns: [
|
||||
{label: '姓名', prop: 'username'},
|
||||
{label: '工号', prop: 'loginname'},
|
||||
{label: '分工会', prop: 'unionname', sortable: true},
|
||||
{label: '单位', prop: 'unitname'},
|
||||
{label: '步数', prop: 'total_steps', sortable: true},
|
||||
],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
exportExcel(){
|
||||
const {searchName,searchKeyword,activityId,unionId,unitId,mode} = this.pageForm
|
||||
this.$downLoad(loc() + '/exportExcel', {
|
||||
searchName: searchName,
|
||||
searchKeyword: searchKeyword,
|
||||
activityId: activityId,
|
||||
unionId: unionId,
|
||||
unitId: unitId,
|
||||
mode: mode
|
||||
})
|
||||
},
|
||||
|
||||
async getAllActivity() {
|
||||
this.pageForm.activityId = ''
|
||||
this.activityOptions = []
|
||||
|
||||
const {data} = await this.$axios.post('/platform/fitnessWalk/activityManage/getAllActivity', this.pageForm)
|
||||
if (data == null || data.length === 0) {
|
||||
this.tableData = []
|
||||
return
|
||||
} else {
|
||||
this.activityOptions = data.filter(item => item.activityModel === 'stepCount')
|
||||
}
|
||||
|
||||
if (this.activityOptions) {
|
||||
this.pageForm.activityId = this.activityOptions[0]._id
|
||||
}
|
||||
},
|
||||
async unionChange(val) {
|
||||
this.pageForm.unitId = null
|
||||
this.unitOptions = await this.$businessTool.listUnit(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async getCascadersActivity() {
|
||||
const {code, data} = await this.$axios.post(loc() + '/getCascadersActivity', {year: this.pageForm.year})
|
||||
this.activityOptions = data
|
||||
if (this.activityOptions && this.activityOptions.length > 0) {
|
||||
this.pageForm.activityId = this.activityOptions[0].value
|
||||
this.doSearch()
|
||||
} else {
|
||||
this.tableData = []
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.unionOptions = await this.$businessTool.listUnion()
|
||||
this.unitOptions = await this.$businessTool.listUnit()
|
||||
await this.getCascadersActivity()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,202 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
|
||||
<search @search="doSearch">
|
||||
<search-item label="年份">
|
||||
<el-date-picker
|
||||
:clearable="false"
|
||||
placeholder="选择年"
|
||||
style="width: 100%"
|
||||
@change="getCascadersActivity"
|
||||
type="year" v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
<search-item label="活动">
|
||||
<el-cascader
|
||||
style="width: 100%"
|
||||
@change="doSearch();getActivityById()"
|
||||
v-model="pageForm.activityId"
|
||||
:options="activityOptions"
|
||||
:props="{ checkStrictly: true,emitPath:false}"
|
||||
:clearable="false"></el-cascader>
|
||||
</search-item>
|
||||
<search-item label="日期范围">
|
||||
<el-date-picker
|
||||
end-placeholder="结束日期"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
type="daterange"
|
||||
style="width: 100%"
|
||||
@change="activityDateChange"
|
||||
value-format="yyyy-MM-dd"
|
||||
v-model="pageForm.activityDate">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
<search-item label="姓名工号">
|
||||
<el-input v-model="pageForm.searchKeyword" max="20" placeholder="请输入工号或者姓名查询" clearable></el-input>
|
||||
</search-item>
|
||||
|
||||
<template v-if="$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')">
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="unionChange" clearable filterable style="width: 100%"
|
||||
placeholder="请选择所属工会" v-model="pageForm.unionId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id"
|
||||
v-for="item in unionOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="所属单位">
|
||||
<el-select @change="doSearch" clearable filterable style="width: 100%"
|
||||
placeholder="请选择所属单位" v-model="pageForm.unitId">
|
||||
<el-option
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
v-for="item in unitOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
</template>
|
||||
|
||||
</search>
|
||||
</el-card>
|
||||
<el-card class="mt20" shadow="never">
|
||||
<table-tool label="步数列表">
|
||||
<el-button @click="exportExcel" class="ml10" size="small" type="primary">导出</el-button>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize">
|
||||
<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==='registerNum'">
|
||||
<el-link @click="openView(row.id)" type="primary">
|
||||
{{row.registerNum}}
|
||||
</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{label: '姓名', prop: 'username'},
|
||||
{label: '工号', prop: 'loginname'},
|
||||
{label: '单位', prop: 'unitname'},
|
||||
{label: '分工会', prop: 'unionname', sortable: true},
|
||||
{label: '当前步数', prop: 'step', sortable: true},
|
||||
{label: '日期', prop: 'prizeData', sortable: true}
|
||||
],
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
pageForm: {
|
||||
unionId: '',
|
||||
unitId: '',
|
||||
activityDate: [],
|
||||
activityId: null,
|
||||
year: new Date().getFullYear() + '',
|
||||
},
|
||||
activityOptions: [],
|
||||
activityDatePickerOptions: {
|
||||
disabledDate: time => {
|
||||
return (
|
||||
time <= moment(this.activityInfo.endTime) || time >= moment(this.activityInfo.startTime)
|
||||
);
|
||||
}
|
||||
},
|
||||
activityInfo:{},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
exportExcel() {
|
||||
const {activityId, unionId, unitId, activityDate} = this.pageForm
|
||||
let activityDate1 = []
|
||||
if (activityDate && activityDate.length > 0) {
|
||||
activityDate1 = JSON.stringify(activityDate)
|
||||
}
|
||||
this.$downLoad(loc() + '/exportExcel', {
|
||||
activityId: activityId,
|
||||
unionId: unionId,
|
||||
unitId: unitId,
|
||||
activityDate: activityDate1
|
||||
})
|
||||
},
|
||||
activityDateChange() {
|
||||
// this.$set(this.pageForm, "activityDate", [])
|
||||
},
|
||||
async unionChange(val) {
|
||||
this.pageForm.unitId = null
|
||||
this.unitOptions = await this.$businessTool.listUnit(val)
|
||||
this.doSearch()
|
||||
},
|
||||
async getCascadersActivity() {
|
||||
const {code, data} = await this.$axios.post(loc() + '/getCascadersActivity', {year: this.pageForm.year})
|
||||
this.activityOptions = data
|
||||
if (this.activityOptions && this.activityOptions.length > 0) {
|
||||
this.pageForm.activityId = this.activityOptions[0].value
|
||||
this.doSearch()
|
||||
} else {
|
||||
this.tableData = []
|
||||
}
|
||||
},
|
||||
pageData() {
|
||||
let pageForm = clone(this.pageForm)
|
||||
if (pageForm.activityDate && pageForm.activityDate.length > 0) {
|
||||
pageForm.activityDate = JSON.stringify(pageForm.activityDate)
|
||||
}
|
||||
this.$axios.post(loc() + "/pageData", pageForm, (data) => {
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
|
||||
async getActivityById(){
|
||||
const resp = await this.$axios.post('/platform/fitnessWalk/activityManage/findOne',{id:this.pageForm.activityId})
|
||||
if (resp.code === 0){
|
||||
this.activityInfo = resp.data
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.unionOptions = await this.$businessTool.listUnion()
|
||||
this.unitOptions = await this.$businessTool.listUnit()
|
||||
await this.getCascadersActivity()
|
||||
await this.getActivityById();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,187 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.query-row {
|
||||
height: 50px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
<el-card shadow="never">
|
||||
|
||||
<search @search="doSearch">
|
||||
<search-item label="年份">
|
||||
<el-date-picker style="width: 100%"
|
||||
class="mr5"
|
||||
:picker-options="pickerOptions"
|
||||
v-model="pageForm.year" :clearable="false"
|
||||
type="year"
|
||||
value-format="yyyy" @change="getAllActivity"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="活动">
|
||||
<el-cascader
|
||||
style="width: 100%"
|
||||
@change="doSearch()"
|
||||
v-model="pageForm.activityId"
|
||||
:options="activityOptions"
|
||||
:props="{ checkStrictly: true,emitPath:false}"
|
||||
:clearable="false"></el-cascader>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never" style="height: 100px">
|
||||
<el-row type="flex" align="middle" class="query-row">
|
||||
<el-col class="query-row-title">奖项名称:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-radio-group v-model="changKeyItem" @change="subsectionChange(changKeyItem)" size="small">
|
||||
<el-radio
|
||||
style="margin-right: 10px;margin-top:5px;cursor: pointer"
|
||||
border
|
||||
v-for="item in subsectionList"
|
||||
:key="item.value"
|
||||
:label="item.name">
|
||||
{{ item.name }}
|
||||
</el-radio>
|
||||
</el-radio-group>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool label="中奖榜">
|
||||
<el-button @click="exportUserStepWining" class="ml10" size="small" type="primary">导出中奖名单</el-button>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize">
|
||||
<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">
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins:[initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pickerOptions: {
|
||||
disabledDate(time) {
|
||||
return (
|
||||
time.getFullYear() > new Date().getFullYear()
|
||||
);
|
||||
}
|
||||
},
|
||||
pageForm: {
|
||||
year: new Date().getFullYear() + '',
|
||||
mode:'today',
|
||||
searchName:'u.username',
|
||||
activityId:null
|
||||
},
|
||||
unionOptions: [],
|
||||
unitOptions: [],
|
||||
activityOptions: [],
|
||||
tableColumns: [
|
||||
{label: '姓名', prop: 'username'},
|
||||
// {label: '工号', prop: 'loginname'},
|
||||
{label: '分工会', prop: 'unionName', sortable: true},
|
||||
{label: '单位', prop: 'unitName'},
|
||||
{label: '奖项名称', prop: 'awardName'},
|
||||
],
|
||||
|
||||
allDataList:[],
|
||||
subsectionList:[],
|
||||
subsectionIndex: 0,
|
||||
changKeyItem:'',
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
exportUserStepWining(){
|
||||
this.$downLoad(loc() + '/exportUserStepWining', {
|
||||
activityId: this.pageForm.activityId
|
||||
})
|
||||
},
|
||||
async getAllActivity() {
|
||||
this.pageForm.activityId = ''
|
||||
this.activityOptions = []
|
||||
const {data} = await this.$axios.post('/platform/fitnessWalk/activityManage/getAllActivity', this.pageForm)
|
||||
if (data == null || data.length === 0) {
|
||||
this.tableData = []
|
||||
return
|
||||
} else {
|
||||
this.activityOptions = data.filter(item => item.activityModel === 'stepCount')
|
||||
}
|
||||
if (this.activityOptions) {
|
||||
this.pageForm.activityId = this.activityOptions[0]._id
|
||||
}
|
||||
},
|
||||
async unionChange(val) {
|
||||
this.pageForm.unitId = null
|
||||
this.unitOptions = await this.$businessTool.listUnit(val)
|
||||
this.doSearch()
|
||||
},
|
||||
subsectionChange(key) {
|
||||
const data = this.allDataList.find(item => item.title === key)
|
||||
this.tableData = data.awardList
|
||||
},
|
||||
async pageData(){
|
||||
const resp = await this.$axios.post(loc() + '/getUserStepWining',this.pageForm)
|
||||
if (resp.code === 0){
|
||||
this.allDataList = resp.data
|
||||
this.subsectionList = resp.data.map(v => {
|
||||
return {
|
||||
name: v.title,
|
||||
key: v.title
|
||||
}
|
||||
})
|
||||
this.tableData = this.allDataList[0].awardList
|
||||
this.changKeyItem = this.allDataList[0].title
|
||||
}
|
||||
},
|
||||
async getCascadersActivity() {
|
||||
const {code, data} = await this.$axios.post(loc() + '/getCascadersActivity', {year: this.pageForm.year})
|
||||
this.activityOptions = data
|
||||
if (this.activityOptions && this.activityOptions.length > 0) {
|
||||
this.pageForm.activityId = this.activityOptions[0].value
|
||||
this.doSearch()
|
||||
} else {
|
||||
this.tableData = []
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.unionOptions = await this.$businessTool.listUnion()
|
||||
this.unitOptions = await this.$businessTool.listUnit()
|
||||
await this.getCascadersActivity()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,460 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-descriptions__table {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
|
||||
.el-descriptions-item__cell {
|
||||
text-align: center !important;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
<tree-layout style="height: calc(100vh - 70px)">
|
||||
<template #tree>
|
||||
<div style="padding: 20px;">
|
||||
<el-input
|
||||
placeholder="输入关键字进行查找"
|
||||
v-model="filterText">
|
||||
</el-input>
|
||||
</div>
|
||||
|
||||
<el-tree ref="tree" :data="treeData" class="v-tree" node-key="id"
|
||||
:props="defaultProps"
|
||||
default-expand-all :expand-on-click-node="false"
|
||||
@node-click="handleNodeClick" accordion
|
||||
highlight-current :filter-node-method="filterNode">
|
||||
<div class="custom-tree-node" slot-scope="{ node, data }">
|
||||
|
||||
<div v-if="node.level==1" style="font-size: 16px;" class="v-node"><i
|
||||
class="el-icon-s-home"></i>
|
||||
{{ data.unionname }}
|
||||
</div>
|
||||
|
||||
<div v-if="node.level==2"
|
||||
style="font-size: 15px" :title="data.name" class="v-node">
|
||||
<i class="el-icon-star-on" v-if="checkData.name==data.name"></i>
|
||||
<i class="el-icon-star-off" v-else></i>
|
||||
{{ data.unionname }}
|
||||
<span style="color: #f76c6c">{{ '(' + data.revelCount + ')'}}</span>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</el-tree>
|
||||
</template>
|
||||
<template>
|
||||
<el-card shadow="never" style="margin: 0 10px">
|
||||
<div class="btn-group tool-button">
|
||||
<el-date-picker
|
||||
placeholder="选择年度" style="width: 100%"
|
||||
type="year"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-input style="width: 250px;" placeholder="请输入类型名称查询" v-model="pageForm.revelName"></el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-select clearable v-model="pageForm.typeId" filterable placeholder="请选择资料类型">
|
||||
<el-option
|
||||
v-for="item in typeList"
|
||||
:key="item.id"
|
||||
:label="item.typeName"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-button type="primary" @click="doSearch" icon="el-icon-search"></el-button>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right">
|
||||
<el-button type="primary" size="medium" @click="openAdd"><i
|
||||
class="ti-plus"></i> 添加资料
|
||||
</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card shadow="never" style="margin:10px 10px 0 10px">
|
||||
<table-tool :label="( checkData.unionname ? checkData.unionname : '全部分工会' ) + '资料列表'" :app="this">
|
||||
<template #func>
|
||||
<el-button v-if="checkData.id" type="primary" size="small" @click="exportAllFileByUnionId">导出全部资料</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" @sort-change='pageOrder' height="626">
|
||||
<el-table-column label="序号" type="index" header-align="center" align="center">
|
||||
<template scope="scope"><span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span></template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="revelName" label="资料名称"></el-table-column>
|
||||
<el-table-column sortable prop="typeName" label="资料类型"></el-table-column>
|
||||
<el-table-column sortable prop="username" label="上传人"></el-table-column>
|
||||
<el-table-column sortable prop="unionName" label="上传人工会"></el-table-column>
|
||||
<el-table-column sortable prop="belongToUnionName" label="资料归属工会"></el-table-column>
|
||||
<el-table-column sortable prop="time" label="上传时间"></el-table-column>
|
||||
<el-table-column prop="userOnline" label="操作" width="100px">
|
||||
<template slot-scope="scope">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain 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:scope.row}">
|
||||
预览资料
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
v-if="$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')"
|
||||
:command="{type:'edit',data:scope.row}">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:command="{type:'download',data:scope.row}">
|
||||
导出附件
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
v-if="$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')"
|
||||
:command="{type:'delete',data:scope.row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-row class="el-pagination-container">
|
||||
<el-pagination
|
||||
@size-change="pageSizeChange"
|
||||
@current-change="pageNumberChange"
|
||||
:current-page="pageForm.pageNumber"
|
||||
:page-sizes="[10, 20, 30, 50]"
|
||||
:page-size="pageForm.pageSize"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</template>
|
||||
</tree-layout>
|
||||
</guava>
|
||||
|
||||
<el-dialog title="新建资料" :visible.sync="addDialogVisible">
|
||||
<el-form :model="formData" ref="addForm" :rules="rules" label-width="100px">
|
||||
<el-form-item label="上传人">
|
||||
<el-input readonly value="$store.state.user.username"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="资料归属工会">
|
||||
<el-input readonly :value="checkData.id ? checkData.unionname : '$store.state.user.union.name'"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="revelName" label="资料名称">
|
||||
<el-input placeholder="请填写工作资料名称" v-model="formData.revelName"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="typeId" label="资料类型">
|
||||
<el-select v-model="formData.typeId" placeholder="选择资料类型" style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in typeList"
|
||||
:key="item.id"
|
||||
:label="item.typeName"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item prop="files" label="附件上传">
|
||||
<file-upload :value.sync="formData.files" accept=".doc, .docx, .xls, .xlsx, .pdf, .ppt, .jpg, .jpeg, .png"
|
||||
upload_mode="drag"
|
||||
:upload_number="10" upload_result_category="array"
|
||||
complete_result></file-upload>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doAdd">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog title="编辑资料" :visible.sync="editDialogVisible">
|
||||
<el-form :model="formData" ref="editForm" :rules="rules" label-width="100px">
|
||||
<el-form-item label="上传人">
|
||||
<el-input readonly v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="资料归属工会">
|
||||
<el-input readonly v-model="formData.belongToUnionName"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="revelName" label="资料名称">
|
||||
<el-input placeholder="请填写工作资料名称" v-model="formData.revelName"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="typeId" label="资料类型">
|
||||
<el-select v-model="formData.typeId" placeholder="选择资料类型" style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in typeList"
|
||||
:key="item.id"
|
||||
:label="item.typeName"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item prop="files" label="附件上传">
|
||||
<file-upload :value.sync="formData.files" accept=".doc, .docx, .xls, .xlsx, .pdf, .ppt, .jpg, .jpeg, .png"
|
||||
upload_mode="drag"
|
||||
:upload_number="10" upload_result_category="array"
|
||||
complete_result></file-upload>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doEdit">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog title="资料阅览" :visible.sync="viewDialogVisible" :modal-append-to-body="false">
|
||||
<el-descriptions class="margin-top" title="" :column="2" border>
|
||||
<el-descriptions-item span="2">
|
||||
<template slot="label">资料名称</template>
|
||||
<div v-html="formData.revelName"></div>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label">上传人</template>
|
||||
<div v-html="formData.username"></div>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label">上传时间</template>
|
||||
<div v-html="formData.time"></div>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label">所属工会</template>
|
||||
<div v-html="formData.unionName"></div>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label">资料类型</template>
|
||||
<div v-html="formData.typeName"></div>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item span="2">
|
||||
<template slot="label">附件</template>
|
||||
<div>
|
||||
<file-upload :files.sync="formData.files" view></file-upload>
|
||||
</div>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="viewDialogVisible = false">关 闭</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let vue = new Vue({
|
||||
el: "#app",
|
||||
components: {
|
||||
'tree-layout': httpVueLoader('/components/plugins/TreeLayout.vue'),
|
||||
},
|
||||
watch: {
|
||||
filterText(val) {
|
||||
this.$refs.tree.filter(val);
|
||||
},
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
filterText: '',
|
||||
treeData: [],
|
||||
defaultProps: {
|
||||
children: 'child',
|
||||
label: 'unionname',
|
||||
},
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
viewDialogVisible: false,
|
||||
tableData: [],
|
||||
jdhList: [],
|
||||
typeList: [],
|
||||
fileList: [],
|
||||
pageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: "",
|
||||
},
|
||||
formData: {},
|
||||
rules: {
|
||||
revelName: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
typeId: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
},
|
||||
delFiles: [],
|
||||
unionOptions: [],
|
||||
checkData: {},
|
||||
checkNode: {},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
exportAllFileByUnionId() {
|
||||
const unionId = this.checkData.id
|
||||
const unionName = this.checkData.unionname
|
||||
const url = '/platform/workershome/data/revel/exportAllFileByUnionId?unionId=' + unionId + '&unionName=' + unionName
|
||||
window.open(url)
|
||||
},
|
||||
exportAllFileById(data) {
|
||||
window.open('/platform/workershome/data/revel/exportAllFileById?id=' + data.id)
|
||||
},
|
||||
async handleNodeClick(data, node) {
|
||||
this.checkData = data
|
||||
this.checkNode = node
|
||||
await this.pageData()
|
||||
},
|
||||
filterNode(value, data, node) {
|
||||
if (!value) return true;
|
||||
return data.unionname.indexOf(value) !== -1
|
||||
},
|
||||
openView(row) {
|
||||
const formData = clone(row)
|
||||
formData.files = JSON.parse(formData.files || "[]")
|
||||
this.formData = formData
|
||||
this.viewDialogVisible = true
|
||||
},
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'view') {
|
||||
this.openView(data)
|
||||
} else if (type === 'edit') {
|
||||
this.openEdit(data)
|
||||
} else if (type === 'delete') {
|
||||
this.doDelete(data.id)
|
||||
} else if (type === 'download') {
|
||||
this.exportAllFileById(data)
|
||||
}
|
||||
},
|
||||
doDelete(id) {
|
||||
this.$confirm('确定要删除吗', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
}).then(async () => {
|
||||
const resp = await this.$axios.get(loc() + '/doDelete', {id: id})
|
||||
if (resp.code === 0) {
|
||||
this.doSearch()
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
this.$message.warning('操作失败')
|
||||
}
|
||||
})
|
||||
},
|
||||
doEdit() {
|
||||
this.$refs.editForm.validate(async (valid) => {
|
||||
if (valid) {
|
||||
const formData = clone(this.formData)
|
||||
formData.files = JSON.stringify(formData.files)
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)',
|
||||
});
|
||||
const resp = await this.$axios.post('/platform/workershome/data/revel/doEdit', formData)
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
this.editDialogVisible = false
|
||||
this.doSearch()
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
this.$message.warning('操作失败')
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
doSearch() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.loadTree()
|
||||
},
|
||||
pageOrder(column) {
|
||||
this.pageForm.pageOrderName = column.prop
|
||||
this.pageForm.pageOrderBy = column.order
|
||||
this.pageData()
|
||||
},
|
||||
pageNumberChange(val) {
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData()
|
||||
},
|
||||
pageSizeChange(val) {
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData()
|
||||
},
|
||||
async pageData() {
|
||||
this.pageForm.unionId = this.checkData.id
|
||||
const resp = await this.$axios.post('/platform/workershome/data/revel/pageData', this.pageForm)
|
||||
if (resp.code === 0) {
|
||||
this.tableData = resp.data.list
|
||||
this.pageForm.totalCount = resp.data.totalCount
|
||||
}
|
||||
},
|
||||
openEdit(obj) {
|
||||
if (this.$refs["editForm"])
|
||||
this.$refs["editForm"].resetFields()
|
||||
const formData = clone(obj)
|
||||
formData.files = JSON.parse(formData.files || "[]")
|
||||
formData.ispass = formData.ispass === 1
|
||||
this.formData = formData
|
||||
this.editDialogVisible = true
|
||||
},
|
||||
openAdd() {
|
||||
if (this.$refs["addForm"])
|
||||
this.$refs["addForm"].resetFields()
|
||||
this.formData = {files: []}
|
||||
this.addDialogVisible = true
|
||||
},
|
||||
doAdd() {
|
||||
this.$refs.addForm.validate(async (valid) => {
|
||||
if (valid) {
|
||||
const formData = clone(this.formData)
|
||||
formData.files = JSON.stringify(formData.files)
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
if (this.checkData.id) {
|
||||
this.formData.belongToUnionId = this.checkData.id
|
||||
}
|
||||
const resp = await this.$axios.post('/platform/workershome/data/revel/doAdd', formData)
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
this.addDialogVisible = false
|
||||
this.doSearch()
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
this.$message.warning('操作失败')
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
async loadTree() {
|
||||
const res = await this.$axios.post('/platform/workershome/data/revel/getTreeData', this.pageForm)
|
||||
if (res.code === 0) {
|
||||
this.treeData = res.data
|
||||
const isAdmin = this.$auth.hasRoleOr("SYSADMIN, SCHOOL_UNION_ADMIN")
|
||||
if (isAdmin) {
|
||||
const data = res.data[0].children && res.data[0].children.length > 0 ? {id: res.data[0].children[0].id} : {id: ''}
|
||||
await this.handleNodeClick({data}, {level: 2})
|
||||
} else {
|
||||
const data = res.data[0].children && res.data[0].children.length > 0 ? {id: res.data[0].children[0].id} : {id: ''}
|
||||
await this.handleNodeClick(data, {level: 2})
|
||||
}
|
||||
}
|
||||
},
|
||||
async getAllWakesHomeDataType() {
|
||||
const resp = await this.$axios.post('/platform/workershome/data/type/getAllWakesHomeDataType')
|
||||
if (resp.code === 0) {
|
||||
this.typeList = resp.data
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
await this.getAllWakesHomeDataType()
|
||||
await this.loadTree()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,207 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="类型名称">
|
||||
<el-input v-model="pageForm.typeName" placeholder="请输入类型名称" clearable></el-input>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="类型列表">
|
||||
<el-button type="primary" size="small" @click="openAdd"><i class="ti-plus"></i> 新增工作资料类型</el-button>
|
||||
</table-tool>
|
||||
<el-table ref="table" :data="tableData" style="width: 100%" row-key="id"
|
||||
@sort-change="pageOrder" v-loading="tableLoading"
|
||||
:size="tableSize" class="vi-table">
|
||||
<el-table-column align="center" header-align="center" type="index"
|
||||
:index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="资料类型编码" prop="code"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="资料类型名称" prop="typeName"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="操作" width="150px">
|
||||
<template scope="scope">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain 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:'top',data:scope.row}"
|
||||
v-if="scope.row.serialNum!==1">
|
||||
上移
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'edit',data:scope.row}">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',data:scope.row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'bottom',data:scope.row}"
|
||||
v-if="scope.row.serialNum!==pageForm.totalCount">
|
||||
下移
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</guava>
|
||||
|
||||
<el-dialog title="新增工作资料类型" :visible.sync="addDialogVisible" width="40%">
|
||||
<el-form :model="formData" ref="addForm" :rules="rules">
|
||||
<el-form-item prop="code" label="类型编码">
|
||||
<el-input v-model="formData.code" placeholder="请输入工作资料类型编码"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="typeName" label="类型名称">
|
||||
<el-input v-model="formData.typeName" placeholder="请输入工作资料类型名称"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doAdd">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog title="编辑工作资料类型" :visible.sync="editDialogVisible" width="40%">
|
||||
<el-form :model="formData" ref="editForm" :rules="rules">
|
||||
<el-form-item prop="code" label="类型编码">
|
||||
<el-input v-model="formData.code" placeholder="请输入工作资料类型编码"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="typeName" label="类型名称">
|
||||
<el-input v-model="formData.typeName" placeholder="请输入工作资料类型名称"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doEdit">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data: {
|
||||
pageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
typeName: ''
|
||||
},
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
formData: {},
|
||||
rules: {
|
||||
typeName: [{required: true, message: '请输入工作资料类型名称', trigger: ['change', 'blur']}],
|
||||
code: [{required: true, message: '请输入工作资料类型编码', trigger: ['change', 'blur']}]
|
||||
},
|
||||
tableData: []
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'top') {
|
||||
this.rowChange(data, false)
|
||||
} else if (type === 'edit') {
|
||||
this.openEdit(data)
|
||||
} else if (type === 'delete') {
|
||||
this.doDelete(data.id)
|
||||
} else if (type === 'bottom') {
|
||||
this.rowChange(data, true)
|
||||
}
|
||||
},
|
||||
async rowChange(row, toDown) {
|
||||
const resp = await this.$axios.post('/platform/workershome/data/type/serialNumChange', {
|
||||
id: row.id,
|
||||
serialNum: row.serialNum,
|
||||
toDown
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.doSearch()
|
||||
}
|
||||
},
|
||||
openAdd() {
|
||||
this.formData = {}
|
||||
this.addDialogVisible = true
|
||||
if (this.$refs["addForm"])
|
||||
this.$refs["addForm"].resetFields()
|
||||
},
|
||||
doAdd() {
|
||||
this.$refs['addForm'].validate(async valid => {
|
||||
if (valid) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
})
|
||||
const resp = await this.$axios.post('/platform/workershome/data/type/doAdd', this.formData)
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
this.addDialogVisible = false
|
||||
this.pageData()
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
openEdit(obj) {
|
||||
this.formData = JSON.parse(JSON.stringify(obj))
|
||||
this.editDialogVisible = true
|
||||
},
|
||||
doEdit() {
|
||||
this.$refs['editForm'].validate(async valid => {
|
||||
if (valid) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
const resp = await this.$axios.post('/platform/workershome/data/type/doEdit', this.formData)
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
this.editDialogVisible = false
|
||||
this.pageData()
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
doDelete(id) {
|
||||
this.$confirm('此操作将删除工作资料类型,确认删除吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
const resp = await this.$axios.post('/platform/workershome/data/type/doDelete', {id: id})
|
||||
if (resp.code === 0) {
|
||||
this.doSearch()
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+222
@@ -0,0 +1,222 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-form .el-select, .el-form .el-date-editor {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.el-divider {
|
||||
background-color: #1867b0;
|
||||
}
|
||||
|
||||
.el-divider__text {
|
||||
color: #1867b0;
|
||||
}
|
||||
|
||||
.w-e-text-container {
|
||||
height: 250px !important;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-clock>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<el-row justify="space-between" type="flex">
|
||||
<h3 style="color: rgb(24, 103, 176);">
|
||||
{{id?'信息编辑':'信息填写'}}
|
||||
</h3>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<el-form :model="formData" :rules="formRules" label-width="150px" ref="form">
|
||||
<div class="process-title">教工小家申报信息</div>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="填报人" prop="username">
|
||||
<el-input readonly v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="填报人工号" prop="loginName">
|
||||
<el-input readonly v-model="formData.loginName"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="联系方式" prop="mobile">
|
||||
<el-input maxlength="11" v-model="formData.mobile"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="填报单位" prop="unionName">
|
||||
<el-input readonly v-model="formData.unionName"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="创办时间" prop="foundTime">
|
||||
<el-date-picker
|
||||
v-model="formData.foundTime"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择创办日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="填报时间" prop="applyTime">
|
||||
<el-input readonly v-model="formData.applyDate"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="单位位置" prop="position">
|
||||
<el-input placeholder="请填写单位位置" v-model="formData.position"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="单位面积" prop="area">
|
||||
<el-input placeholder="请填写单位面积" v-model="formData.area"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="24" :sm="24">
|
||||
<el-form-item label="单位信息" prop="details">
|
||||
<el-input type="textarea" :rows="4"
|
||||
placeholder="请填写单位信息"
|
||||
v-model="formData.details"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-form-item class="is-required" label="基层工会简况"
|
||||
prop="basicInformation">
|
||||
<text-editor v-model="formData.basicInformation"></text-editor>
|
||||
<div style="text-align: right">
|
||||
<span style="color: #0a84ff">当前字数:{{ formData.basicInformation ? (dd3s.html2txt(formData.basicInformation).length) : 0 }}</span>
|
||||
<span>{{ ';最多500字' }}</span>
|
||||
</div>
|
||||
<!-- <el-input type="textarea" v-model="formData.basicInformation" maxlength="500" show-word-limit :rows="10"></el-input>-->
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item label="教工小家建设方案" prop="constructionPlan">
|
||||
<text-editor v-model="formData.constructionPlan"></text-editor>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
</el-form>
|
||||
|
||||
<el-row class="mt10" justify="center" type="flex">
|
||||
<el-button @click="doSave()" style="width: 200px" type="primary">保 存</el-button>
|
||||
<el-button @click="doSubmit()" style="width: 200px" type="primary">提 交
|
||||
</el-button>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
const validBasicInformation = (rule, value, callback) => {
|
||||
if (!this.formData.basicInformation || !dd3s.html2txt(this.formData.basicInformation)) {
|
||||
callback(new Error('请填写基层工会简况'));
|
||||
} else if (dd3s.html2txt(this.formData.basicInformation).length > 500) {
|
||||
console.log(11)
|
||||
callback(new Error('基层工会简况最多500字'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
id: '',
|
||||
formData: {},
|
||||
formRules: {
|
||||
mobile: [{required: true, message: '手机号不能为空', trigger: 'blur'},
|
||||
{pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号格式', trigger: 'blur'}],
|
||||
basicInformation: [{
|
||||
required: true,
|
||||
message: '必填',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
constructionPlan: [{
|
||||
required: true,
|
||||
message: '必填',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
basicInformation: [{
|
||||
validator: validBasicInformation,
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async doSave() {
|
||||
const resp = await this.$axios.post('/platform/workershome/declaration/apply/doSave', this.formData)
|
||||
if (resp.code === 0) {
|
||||
this.$message.success('保存成功')
|
||||
setTimeout(() => {
|
||||
sublime.jumpPagePjax('/platform/workershome/declaration/mine')
|
||||
}, 500)
|
||||
} else {
|
||||
this.$message.warning('操作失败')
|
||||
}
|
||||
},
|
||||
async doSubmit() {
|
||||
try {
|
||||
const valid = await this.$refs.form.validate()
|
||||
if (valid) {
|
||||
const resp = await this.$axios.post('/platform/workershome/declaration/apply/doSubmit', this.formData)
|
||||
if (resp.code === 0) {
|
||||
this.$message.success('提交成功')
|
||||
setTimeout(() => {
|
||||
sublime.jumpPagePjax('/platform/workershome/declaration/mine')
|
||||
}, 500)
|
||||
} else {
|
||||
this.$message.warning('操作失败')
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
// this.$message.warning('请查看是否按要求填写')
|
||||
}
|
||||
},
|
||||
async initFormData() {
|
||||
if (!this.id) {
|
||||
const user = this.$store.state.user
|
||||
this.$set(this.formData, 'username', user.username)
|
||||
this.$set(this.formData, 'loginName', user.loginname)
|
||||
this.$set(this.formData, 'mobile', user.mobile)
|
||||
this.$set(this.formData, 'applyDate', moment().format('YYYY-MM-DD'))
|
||||
this.$set(this.formData, 'unionName', user.union.name)
|
||||
} else {
|
||||
const resp = await this.$axios.get('/platform/workershome/declaration/apply/getInfoById', {id: this.id})
|
||||
if (resp.code === 0) {
|
||||
this.formData = resp.data
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.id = GetQueryString("id")
|
||||
this.initFormData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
const INFO = {
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<el-tabs v-model="activeName" tab-position="top">
|
||||
<el-tab-pane label="基本信息" name="1">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="填报人">{{ viewData.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="工号">{{ viewData.loginName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="联系方式">{{ viewData.mobile }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="填报单位">{{ viewData.unionName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="填报时间" :span="2">{{ viewData.applyTime }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="基本情况简介" :span="3">
|
||||
<div v-if="viewData.basicInformation" class="text-left" v-html="viewData.basicInformation"></div>
|
||||
<el-tag type="warning" v-else>暂无</el-tag>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="建设方案" :span="3">
|
||||
<div v-if="viewData.constructionPlan" class="text-left" v-html="viewData.constructionPlan"></div>
|
||||
<el-tag type="warning" v-else>暂无</el-tag>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="党组织盖章文档" :span="3">
|
||||
<file-upload v-if="viewInfo.files && viewInfo.files.length > 0" :files.sync="viewInfo.files" view></file-upload>
|
||||
<el-tag type="warning" v-else>暂无</el-tag>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="基层党组织审核信息" v-if="organizationAudit" name="2">
|
||||
<el-descriptions :column="2" border class="descriptions-form">
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
`,
|
||||
props: {
|
||||
activeName: {
|
||||
type: String,
|
||||
default: '1'
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
activeName: '1',
|
||||
viewData: {},
|
||||
organizationAudit: {},
|
||||
schoolAudit: {},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async openView(id) {
|
||||
const resp = await $.get('/platform/workershome/declaration/apply/getInfoById', {id: id})
|
||||
if (resp.code === 0) {
|
||||
this.viewData = resp.data
|
||||
this.organizationAudit = resp.data.organizationAudit
|
||||
this.schoolAudit = resp.data.schoolAudit
|
||||
} else {
|
||||
this.viewData = {}
|
||||
this.organizationAudit = {}
|
||||
this.schoolAudit = {}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+175
@@ -0,0 +1,175 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度">
|
||||
<el-date-picker
|
||||
@change="doSearch"
|
||||
formData="yyyy"
|
||||
placeholder="请选择年度"
|
||||
style="width: 100%"
|
||||
type="year"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="doSearch" clearable="true"
|
||||
filterable="true"
|
||||
placeholder="所属工会"
|
||||
style="width: 100%;"
|
||||
v-model="pageForm.unionId">
|
||||
<el-option :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool label="申报列表"></table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
|
||||
class="vi-table"
|
||||
ref="table"
|
||||
row-key="id" style="width: 100%" v-loading="tableLoading">
|
||||
<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 === 'applyDate'">
|
||||
<span>{{ moment(row.applyDate).format('YYYY年MM月DD日') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作"
|
||||
width="280px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)"
|
||||
size="mini"
|
||||
type="primary"
|
||||
v-if="!['10000'].includes(row.state) && row.state">查看
|
||||
</el-button>
|
||||
<el-button @click="openExport(row.id)"
|
||||
size="mini"
|
||||
type="primary"
|
||||
v-if="row.state">申报表导出
|
||||
</el-button>
|
||||
<el-button @click="openEdit(row)"
|
||||
size="mini"
|
||||
type="primary"
|
||||
v-if="['10000','10015','10025'].includes(row.state) || !row.state">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button @click="doDelete(row)"
|
||||
size="mini"
|
||||
type="danger"
|
||||
v-if="['10000'].includes(row.state) || !row.state">删除
|
||||
</el-button>
|
||||
<el-button @click="doDelete(row)"
|
||||
size="mini"
|
||||
type="danger"
|
||||
v-if="!['10000'].includes(row.state) && row.state && $auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
|
||||
<template #view>
|
||||
<wakes-info-apply ref="viewInfo"></wakes-info-apply>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
unions: [],
|
||||
pageForm: {
|
||||
isAudit: false,
|
||||
year: moment().format('YYYY'),
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'unionName', label: '申报工会', sortable: true},
|
||||
{prop: 'username', label: '申报人', sortable: true},
|
||||
{prop: 'loginName', label: '申报人工号', sortable: true},
|
||||
{prop: 'mobile', label: '联系方式', sortable: true},
|
||||
// {prop: 'basicInformation', label: '基本情况简介', sortable: true},
|
||||
{prop: 'applyDate', label: '申报日期', sortable: true},
|
||||
{prop: 'stateName', label: '审核状态', sortable: true},
|
||||
],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'wakes-info-apply': httpVueLoader('/components/workershome/declaration/WakesHomeInfoApply.vue')
|
||||
},
|
||||
methods: {
|
||||
openExport(id) {
|
||||
this.$downLoad(loc() + "/openExport", {id: id})
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.viewInfo.openView(row.id)
|
||||
},
|
||||
async doDelete(row) {
|
||||
this.$confirm('确定删除该申报记录吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
const resp = await this.$axios.get(loc() + '/doDelete', {id: row.id})
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.pageData();
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
openEdit(row) {
|
||||
window.location.href = '/platform/workershome/declaration/apply?id=' + row.id;
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.units = await this.$businessTool.listUnit(this.pageForm.unionId)
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')) {
|
||||
this.unions = await this.$businessTool.listUnion()
|
||||
} else {
|
||||
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
|
||||
this.$set(this.pageForm, 'unionId', this.unions ? this.unions[0].id : null)
|
||||
this.flushUnits()
|
||||
}
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+230
@@ -0,0 +1,230 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-clock>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度">
|
||||
<el-date-picker
|
||||
@change="doSearch"
|
||||
formData="yyyy"
|
||||
placeholder="请选择年度"
|
||||
style="width: 100%"
|
||||
type="year"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="doSearch" clearable="true"
|
||||
filterable="true"
|
||||
placeholder="所属工会"
|
||||
style="width: 100%;"
|
||||
v-model="pageForm.unionId">
|
||||
<el-option :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="审核列表">
|
||||
<el-radio-group @change="doSearch" class="mr10" size="small" 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>
|
||||
</table-tool>
|
||||
|
||||
<el-table ref="table" :data="tableData" style="width: 100%" row-key="id"
|
||||
@sort-change="pageOrder"
|
||||
v-loading="tableLoading" :size="tableSize" class="vi-table">
|
||||
<el-table-column align="center" header-align="center" type="index"
|
||||
:index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
show-overflow-tooltip
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop === 'applyDate'">
|
||||
<span>{{ moment(row.applyDate).format('YYYY年MM月DD日') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="操作" fixed="right" width="150px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button @click="openAudit(row)" v-if="['10010'].includes(row.state) || !row.state"
|
||||
size="mini" type="primary">审核
|
||||
</el-button>
|
||||
<el-button @click="doRollBack(row.id)"
|
||||
v-if="['10015','10020'].includes(row.state) || !row.state" size="mini" type="danger">
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<wakes-info-apply ref="viewInfo"></wakes-info-apply>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<wakes-info-apply ref="auditInfo">
|
||||
<template #handle>
|
||||
<el-tab-pane label="基层党组织审核" name="organizationAudit">
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
|
||||
style="padding: 20px 0"
|
||||
label-width="120px">
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="username" label="审核人员">
|
||||
<el-input value="${@shiro.getPrincipalProperty('username')}"
|
||||
disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="time" 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-item prop="auditSign" label="审核签字">
|
||||
<sign :qz.sync="formData.auditSign"></sign>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button type="danger" @click="doReview(false)">拒绝</el-button>
|
||||
<el-button type="primary" @click="doReview(true)">通过</el-button>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</template>
|
||||
</wakes-info-apply>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data: {
|
||||
id:'',
|
||||
unions:[],
|
||||
pageForm:{
|
||||
isAudit:false,
|
||||
year: moment().format('YYYY'),
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'unionName', label: '申报工会', sortable: true},
|
||||
{prop: 'username', label: '申报人', sortable: true},
|
||||
{prop: 'loginName', label: '申报人工号', sortable: true},
|
||||
{prop: 'mobile', label: '联系方式', sortable: true},
|
||||
// {prop: 'basicInformation', label: '基本情况简介', sortable: true},
|
||||
{prop: 'applyDate', label: '申报日期', sortable: true},
|
||||
{prop: 'stateName', label: '审核状态', sortable: true},
|
||||
],
|
||||
formRules: {
|
||||
auditSign: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
auditOpinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
},
|
||||
},
|
||||
components: {
|
||||
'wakes-info-apply': httpVueLoader('/components/workershome/declaration/WakesHomeInfoApply.vue')
|
||||
},
|
||||
methods: {
|
||||
doReview(row){
|
||||
this.$refs['form'].validate(valid => {
|
||||
if (valid) {
|
||||
this.$confirm('您确定要提交吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
this.formData.auditPass = row
|
||||
const {code, msg} = await this.$axios.post(loc() + '/doAudit', {
|
||||
audit: JSON.stringify(this.formData),
|
||||
id: this.id,
|
||||
isPass: row,
|
||||
})
|
||||
if (code === 0) {
|
||||
this.pageData()
|
||||
this.$message.success(msg)
|
||||
this.$refs.guava.index()
|
||||
} else {
|
||||
this.$message.warning(msg)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
openView(row){
|
||||
this.$refs.guava.view()
|
||||
this.$refs.viewInfo.openView(row.id)
|
||||
},
|
||||
openAudit(row){
|
||||
this.formData={}
|
||||
this.id = row.id
|
||||
this.$set(this.formData, 'auditTime', moment().format('YYYY-MM-DD'))
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.auditInfo.activeName = 'organizationAudit'
|
||||
this.$refs.auditInfo.openView(row.id)
|
||||
},
|
||||
async doRollBack(id){
|
||||
const confirm = await this.$confirm('确定要撤回该记录吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if ("confirm" === confirm) {
|
||||
const resp = await this.$axios.get(loc() + '/doRollBack',{id:id})
|
||||
if (resp.code === 0){
|
||||
this.pageData();
|
||||
this.$message.success(resp.msg)
|
||||
}else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.units = await this.$businessTool.listUnit(this.pageForm.unionId)
|
||||
}
|
||||
},
|
||||
},
|
||||
async created(){
|
||||
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')) {
|
||||
this.unions = await this.$businessTool.listUnion()
|
||||
} else {
|
||||
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
|
||||
this.$set(this.pageForm, 'unionId', this.unions ? this.unions[0].id : null)
|
||||
this.flushUnits()
|
||||
}
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+286
@@ -0,0 +1,286 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-clock>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度">
|
||||
<el-date-picker
|
||||
@change="doSearch"
|
||||
formData="yyyy"
|
||||
placeholder="请选择年度"
|
||||
style="width: 100%"
|
||||
type="year"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="doSearch" clearable="true"
|
||||
filterable="true"
|
||||
placeholder="所属工会"
|
||||
style="width: 100%;"
|
||||
v-model="pageForm.unionId">
|
||||
<el-option :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool label="审核列表">
|
||||
<el-radio-group @change="doSearch" class="mr10" size="small"
|
||||
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>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
|
||||
class="vi-table"
|
||||
ref="table"
|
||||
row-key="id" style="width: 100%" v-loading="tableLoading">
|
||||
<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"
|
||||
:width="column.width"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop === 'applyDate'">
|
||||
<span>{{ moment(row.applyDate).format('YYYY年MM月DD日') }}</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop === 'files'">
|
||||
<span>{{ row.files?"已上传":"未上传" }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作"
|
||||
width="300">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看
|
||||
</el-button>
|
||||
|
||||
<el-button @click="openAudit(row)"
|
||||
size="mini"
|
||||
type="primary"
|
||||
v-if="['10020'].includes(row.state) || !row.state">审核
|
||||
</el-button>
|
||||
<el-button @click="doRollBack(row.id)"
|
||||
size="mini"
|
||||
type="danger"
|
||||
v-if="['10025','10030'].includes(row.state) || !row.state">
|
||||
撤回
|
||||
</el-button>
|
||||
<el-button @click="openFile(row)" size="mini" type="primary">上传党组织盖章文档</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<wakes-info-apply ref="viewInfo"></wakes-info-apply>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<wakes-info-apply ref="auditInfo">
|
||||
<template #handle>
|
||||
<el-tab-pane label="校工会审核" name="schoolAudit">
|
||||
<el-form :model="formData" :rules="formRules" label-position="right"
|
||||
label-width="120px"
|
||||
ref="form"
|
||||
style="padding: 20px 0">
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核人员" prop="username">
|
||||
<el-input disabled
|
||||
value="${@shiro.getPrincipalProperty('username')}"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间" prop="time">
|
||||
<el-input disabled v-model="formData.auditTime"></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="审核签字" prop="auditSign">
|
||||
<sign :qz.sync="formData.auditSign"></sign>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button @click="doReview(false)" type="danger">拒绝</el-button>
|
||||
<el-button @click="doReview(true)" type="primary">通过</el-button>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</template>
|
||||
</wakes-info-apply>
|
||||
</template>
|
||||
</guava>
|
||||
<el-dialog
|
||||
:visible.sync="filesDialogVisible"
|
||||
title="上传党组织盖章文档"
|
||||
width="30%">
|
||||
<file-upload :value.sync="formData.files" accept=".doc, .docx, .xls, .xlsx, .pdf, .ppt, .jpg, .jpeg, .png"
|
||||
upload_mode="drag"
|
||||
:upload_number="10" upload_result_category="array"
|
||||
complete_result></file-upload>
|
||||
<span class="dialog-footer" slot="footer">
|
||||
<el-button @click="filesDialogVisible = false">关 闭</el-button>
|
||||
<el-button @click="doFiles" type="primary">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data: {
|
||||
id: '',
|
||||
unions: [],
|
||||
pageForm: {
|
||||
isAudit: false,
|
||||
year: moment().format('YYYY'),
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'unionName', label: '申报工会', sortable: true},
|
||||
{prop: 'username', label: '申报人', sortable: true, width: "100px"},
|
||||
{prop: 'loginName', label: '申报人工号', sortable: true, width: "150px"},
|
||||
{prop: 'mobile', label: '联系方式', sortable: true, width: "150px"},
|
||||
// {prop: 'basicInformation', label: '基本情况简介', sortable: true},
|
||||
{prop: 'applyDate', label: '申报日期', sortable: true},
|
||||
{prop: 'files', label: '是否上传党组织盖章文档', sortable: true},
|
||||
{prop: 'stateName', label: '审核状态', sortable: true},
|
||||
],
|
||||
formRules: {
|
||||
auditSign: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
auditOpinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
},
|
||||
filesDialogVisible: false,
|
||||
},
|
||||
components: {
|
||||
'wakes-info-apply': httpVueLoader('/components/workershome/declaration/WakesHomeInfoApply.vue')
|
||||
},
|
||||
methods: {
|
||||
async doFiles() {
|
||||
if (this.formData.files && this.formData.files.length === 0) {
|
||||
this.notifyWarning("请上传党组织盖章文档")
|
||||
return
|
||||
}
|
||||
const {code, msg} = await this.$axios.post(loc() + '/doFiles', {
|
||||
id: this.formData.id,
|
||||
files: JSON.stringify(this.formData.files),
|
||||
})
|
||||
if (code === 0) {
|
||||
this.pageData()
|
||||
this.notifySuccess(msg)
|
||||
this.filesDialogVisible = false
|
||||
} else {
|
||||
this.notifyWarning(msg)
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
openFile(row) {
|
||||
const formData = clone(row)
|
||||
this.formData.id = formData.id
|
||||
this.formData.files = formData.files ? JSON.parse(formData.files) : []
|
||||
this.filesDialogVisible = true
|
||||
},
|
||||
doReview(row) {
|
||||
this.$refs['form'].validate(valid => {
|
||||
if (valid) {
|
||||
this.$confirm('您确定要提交吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
this.formData.auditPass = row
|
||||
const {code, msg} = await this.$axios.post(loc() + '/doAudit', {
|
||||
audit: JSON.stringify(this.formData),
|
||||
id: this.id
|
||||
})
|
||||
if (code === 0) {
|
||||
this.pageData()
|
||||
this.$message.success(msg)
|
||||
this.$refs.guava.index()
|
||||
} else {
|
||||
this.$message.warning(msg)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.viewInfo.openView(row.id)
|
||||
},
|
||||
openAudit(row) {
|
||||
this.formData = {}
|
||||
this.id = row.id
|
||||
this.$set(this.formData, 'auditTime', moment().format('YYYY-MM-DD'))
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.auditInfo.activeName = 'schoolAudit'
|
||||
this.$refs.auditInfo.openView(row.id)
|
||||
},
|
||||
async doRollBack(id) {
|
||||
const confirm = await this.$confirm('确定要撤回该记录吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if ("confirm" === confirm) {
|
||||
const resp = await this.$axios.get(loc() + '/doRollBack', {id: id})
|
||||
if (resp.code === 0) {
|
||||
this.pageData();
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.units = await this.$businessTool.listUnit(this.pageForm.unionId)
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')) {
|
||||
this.unions = await this.$businessTool.listUnion()
|
||||
} else {
|
||||
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
|
||||
this.$set(this.pageForm, 'unionId', this.unions ? this.unions[0].id : null)
|
||||
this.flushUnits()
|
||||
}
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+177
@@ -0,0 +1,177 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-clock>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度">
|
||||
<el-date-picker
|
||||
@change="doSearch"
|
||||
formData="yyyy"
|
||||
placeholder="请选择年度"
|
||||
style="width: 100%"
|
||||
type="year"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="doSearch" clearable="true"
|
||||
filterable="true"
|
||||
placeholder="所属工会"
|
||||
style="width: 100%;"
|
||||
v-model="pageForm.unionId">
|
||||
<el-option :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="申报列表"></table-tool>
|
||||
|
||||
<el-table ref="table" :data="tableData" style="width: 100%" row-key="id"
|
||||
@sort-change="pageOrder"
|
||||
v-loading="tableLoading" :size="tableSize" class="vi-table">
|
||||
<el-table-column align="center" header-align="center" type="index"
|
||||
:index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
show-overflow-tooltip
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:width="column.width"
|
||||
:sortable="column.sortable"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop === 'applyDate'">
|
||||
<span>{{ moment(row.applyDate).format('YYYY年MM月DD日') }}</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop === 'files'">
|
||||
<span>{{ row.files?"已上传":"未上传" }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="操作" fixed="right" width="350">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button @click="openExport(row.id)" size="mini" type="primary">导出申报表</el-button>
|
||||
<el-button @click="openFile(row)" size="mini" type="primary">上传党组织盖章文档
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<wakes-info-apply ref="viewInfo"></wakes-info-apply>
|
||||
</template>
|
||||
</guava>
|
||||
<el-dialog
|
||||
:visible.sync="filesDialogVisible"
|
||||
title="上传党组织盖章文档"
|
||||
width="30%">
|
||||
<file-upload :value.sync="formData.files" accept=".doc, .docx, .xls, .xlsx, .pdf, .ppt, .jpg, .jpeg, .png"
|
||||
upload_mode="drag"
|
||||
:upload_number="10" upload_result_category="array"
|
||||
complete_result></file-upload>
|
||||
<span class="dialog-footer" slot="footer">
|
||||
<el-button @click="filesDialogVisible = false">关 闭</el-button>
|
||||
<el-button @click="doFiles" type="primary">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data: {
|
||||
id:'',
|
||||
unions:[],
|
||||
pageForm:{
|
||||
isAudit:false,
|
||||
year: moment().format('YYYY'),
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'unionName', label: '申报工会', sortable: true,width: "150px"},
|
||||
{prop: 'username', label: '申报人', sortable: true, width: "100px"},
|
||||
{prop: 'loginName', label: '申报人工号', sortable: true, width: "150px"},
|
||||
{prop: 'mobile', label: '联系方式', sortable: true, width: "150px"},
|
||||
// {prop: 'basicInformation', label: '基本情况简介', sortable: true},
|
||||
{prop: 'applyDate', label: '申报日期', sortable: true},
|
||||
{prop: 'files', label: '是否上传党组织盖章文档', sortable: true},
|
||||
{prop: 'stateName', label: '审核状态', sortable: true},
|
||||
],
|
||||
formRules: {
|
||||
auditSign: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
auditOpinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
},
|
||||
filesDialogVisible: false,
|
||||
},
|
||||
components: {
|
||||
'wakes-info-apply': httpVueLoader('/components/workershome/declaration/WakesHomeInfoApply.vue')
|
||||
},
|
||||
methods: {
|
||||
async doFiles() {
|
||||
if (this.formData.files && this.formData.files.length === 0) {
|
||||
this.notifyWarning("请上传党组织盖章文档")
|
||||
return
|
||||
}
|
||||
const {code, msg} = await this.$axios.post('/platform/workershome/declaration/school/doFiles', {
|
||||
id: this.formData.id,
|
||||
files: JSON.stringify(this.formData.files),
|
||||
})
|
||||
if (code === 0) {
|
||||
this.pageData()
|
||||
this.notifySuccess(msg)
|
||||
this.filesDialogVisible=false
|
||||
} else {
|
||||
this.notifyWarning(msg)
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
openFile(row) {
|
||||
const formData = clone(row)
|
||||
this.formData.id = formData.id
|
||||
this.formData.files = formData.files ? JSON.parse(formData.files) : []
|
||||
this.filesDialogVisible = true
|
||||
},
|
||||
openExport(id) {
|
||||
window.open("/platform/workershome/declaration/mine/openExport?id=" + id)
|
||||
},
|
||||
openView(row){
|
||||
this.$refs.guava.view()
|
||||
this.$refs.viewInfo.openView(row.id)
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.units = await this.$businessTool.listUnit(this.pageForm.unionId)
|
||||
}
|
||||
},
|
||||
},
|
||||
async created(){
|
||||
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')) {
|
||||
this.unions = await this.$businessTool.listUnion()
|
||||
} else {
|
||||
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
|
||||
this.$set(this.pageForm, 'unionId', this.unions ? this.unions[0].id : null)
|
||||
this.flushUnits()
|
||||
}
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,347 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-form .el-select, .el-form .el-date-editor {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.el-divider {
|
||||
background-color: #1867b0;
|
||||
}
|
||||
|
||||
.el-divider__text {
|
||||
color: #1867b0;
|
||||
}
|
||||
|
||||
.w-e-text-container {
|
||||
height: 250px !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<el-row justify="space-between" type="flex">
|
||||
<h3 style="color: rgb(24, 103, 176);">
|
||||
{{id?'信息编辑':'信息填写'}}
|
||||
</h3>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<el-form :model="formData" :rules="formRules" label-width="100px" ref="AddForm">
|
||||
<div class="process-title">教工小家申请信息</div>
|
||||
<el-row :gutter="20">
|
||||
|
||||
<el-col :lg="8" :sm="24">
|
||||
<el-form-item label="填报人" prop="username">
|
||||
<el-input readonly v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="8" :sm="24">
|
||||
<el-form-item label="联系方式" prop="mobile">
|
||||
<el-input v-model="formData.mobile" placeholder="请填写联系方式" maxlength="18"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="8" :sm="24">
|
||||
<el-form-item label="填报时间" prop="applyTime">
|
||||
<el-input readonly v-model="formData.applyTime"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :lg="8" :sm="24">
|
||||
<el-form-item label="填报类别" prop="category">
|
||||
<el-radio-group v-model="formData.category" size="small" @change="doChangeCategory">
|
||||
<el-radio label="校工会" border></el-radio>
|
||||
<el-radio label="分工会" border></el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :lg="8" :sm="24">
|
||||
<el-form-item label="填报单位" prop="unionName">
|
||||
<el-input readonly v-model="formData.unionName"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<div class="process-title">教工小家详细信息</div>
|
||||
<el-row :gutter="20">
|
||||
<el-col :lg="8" :sm="24">
|
||||
<el-form-item label="创办时间" prop="foundTime">
|
||||
<el-date-picker
|
||||
v-model="formData.foundTime"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择创办日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="8" :sm="24">
|
||||
<el-form-item label="单位位置" prop="position">
|
||||
<el-input placeholder="请填写单位位置" v-model="formData.position"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="8" :sm="24">
|
||||
<el-form-item label="单位面积" prop="area">
|
||||
<el-input placeholder="请填写单位面积" v-model="formData.area"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="24" :sm="24">
|
||||
<el-form-item label="单位信息" prop="details">
|
||||
<el-input type="textarea" :rows="4"
|
||||
placeholder="请填写单位信息"
|
||||
v-model="formData.details"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<div class="process-title">教工小家荣誉信息</div>
|
||||
<el-row :gutter="20">
|
||||
<el-col :lg="24" :sm="24">
|
||||
<el-form-item class="is-required" label="获奖情况" prop="payStandard">
|
||||
<el-button
|
||||
@click="formData.awardInfo.push({awardTime:'',awardUnit:'',awardName:'',awardPic:''})"
|
||||
icon="el-icon-plus" size="mini"
|
||||
style="float: right;margin-bottom: 10px">
|
||||
添加
|
||||
</el-button>
|
||||
<span style="color: red">说明:各奖项图片只能上传一张。</span>
|
||||
<el-table
|
||||
:data="formData.awardInfo"
|
||||
border
|
||||
v-fit-columns
|
||||
size="mini"
|
||||
style="width: 100%">
|
||||
<el-table-column label="获奖日期" prop="awardTime">
|
||||
<template scope="{row,$index}">
|
||||
<el-form-item :prop="'awardInfo.'+$index+'.awardTime'"
|
||||
:rules="[{required:true,message:'必填',trigger:['change','blur']}]"
|
||||
label-width="0">
|
||||
<el-date-picker
|
||||
v-model="row.awardTime"
|
||||
type="datetime"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="请选择获奖日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="获奖单位" prop="awardUnit">
|
||||
<template scope="{row,$index}">
|
||||
<el-form-item :prop="'awardInfo.'+$index+'.awardUnit'"
|
||||
:rules="[{required:true,message:'必填',trigger:['change','blur']}]"
|
||||
label-width="0">
|
||||
<el-input clearable maxlength="100" placeholder="请输入获奖单位"
|
||||
v-model="row.awardUnit"></el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="奖项名称" prop="awardName">
|
||||
<template slot-scope="{row,$index}">
|
||||
<el-input clearable maxlength="100" placeholder="请输入奖项名称"
|
||||
v-model="row.awardName"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="奖项照片" prop="awardPic">
|
||||
<template scope="{row,$index}">
|
||||
<file-upload :value.sync="formData.awardPic" accept=".jpg, .jpeg, .png"
|
||||
upload_mode="drag"
|
||||
:upload_number="1" upload_result_category="array"
|
||||
complete_result></file-upload>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="操作" width="80">
|
||||
<template slot-scope="scope">
|
||||
<el-button :disabled="formData.awardInfo.length<=1"
|
||||
@click="formData.awardInfo.splice(scope.$index,1)" circle
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
type="danger"></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<div class="process-title">教工小家材料上传</div>
|
||||
<el-row gutter="20">
|
||||
<el-col :lg="24" :sm="24">
|
||||
<el-form-item required label="图片上传" prop="picFiles">
|
||||
<file-upload :value.sync="formData.picFiles" accept=".jpg, .jpeg, .png"
|
||||
upload_mode="drag"
|
||||
:upload_number="10" upload_result_category="array"
|
||||
complete_result></file-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="24" :sm="24">
|
||||
<el-form-item required label="附件上传" prop="files">
|
||||
<file-upload :value.sync="formData.files" accept=".doc, .docx, .xls, .xlsx, .pdf, .ppt, .jpg, .jpeg, .png"
|
||||
upload_mode="drag"
|
||||
:upload_number="10" upload_result_category="array"
|
||||
complete_result></file-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
|
||||
<el-row class="mt10" v-if="disabled" justify="center" type="flex">
|
||||
<el-button @click="doSave()" style="width: 300px" type="primary">保 存
|
||||
</el-button>
|
||||
<el-button @click="doSubmit()" style="width: 300px" type="primary">提 交
|
||||
</el-button>
|
||||
</el-row>
|
||||
|
||||
</el-card>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
id: '',
|
||||
formRules: {
|
||||
position: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
mobile: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
picFiles: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
files: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
},
|
||||
formData: {
|
||||
category: '分工会',
|
||||
awardInfo: [{awardTime: '', awardUnit: '', awardName: '', awardPic: ''}]
|
||||
},
|
||||
disabled: false,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async doSave() {
|
||||
let postUrl = ''
|
||||
if (this.formData.id) {
|
||||
postUrl = loc() + '/doEdit'
|
||||
} else {
|
||||
postUrl = loc() + '/doAdd'
|
||||
}
|
||||
const formData = this.doJsonStr(this.formData)
|
||||
formData.isSubmit = false;
|
||||
const resp = await this.$axios.post(postUrl, formData)
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
setTimeout(() => {
|
||||
location.href = '/platform/workershome/info/mine'
|
||||
}, 500)
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
},
|
||||
async doSubmit() {
|
||||
try {
|
||||
const valid = await this.$refs['AddForm'].validate()
|
||||
if (valid) {
|
||||
let postUrl = ''
|
||||
if (this.formData.id) {
|
||||
postUrl = loc() + '/doEdit'
|
||||
} else {
|
||||
postUrl = loc() + '/doAdd'
|
||||
}
|
||||
const formData = this.doJsonStr(this.formData)
|
||||
formData.isSubmit = true
|
||||
const resp = await this.$axios.post(postUrl, formData)
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
setTimeout(() => {
|
||||
location.href = '/platform/workershome/info/mine'
|
||||
}, 500)
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
},
|
||||
doChangeCategory() {
|
||||
if (this.formData.category === '校工会') {
|
||||
this.formData.unionName = '校工会'
|
||||
this.formData.unionId = null
|
||||
} else {
|
||||
this.formData.unionName = this.$store.state.union.name
|
||||
this.formData.unionId = this.$store.state.union.id
|
||||
}
|
||||
},
|
||||
async initFormData() {
|
||||
if (!this.id) {
|
||||
const user = this.$store.state.user
|
||||
this.$set(this.formData, 'username', user.username)
|
||||
this.$set(this.formData, 'mobile', user.mobile)
|
||||
this.$set(this.formData, 'applyTime', moment().format('YYYY-MM-DD'))
|
||||
this.$set(this.formData, 'unionName', user.union.name)
|
||||
} else {
|
||||
const resp = await this.$axios.get('/platform/workershome/info/mine/getInfoById', {id: this.id})
|
||||
if (resp.code === 0) {
|
||||
this.formData = {...resp.data}
|
||||
}
|
||||
}
|
||||
},
|
||||
doJsonStr(data) {
|
||||
const formData = clone(data)
|
||||
formData.awardInfo = JSON.stringify(this.formData.awardInfo)
|
||||
formData.picFiles = JSON.stringify(this.formData.picFiles)
|
||||
formData.files = JSON.stringify(this.formData.files)
|
||||
return formData;
|
||||
},
|
||||
async validateApply() {
|
||||
const resp = await this.$axios.get(loc() + '/validateApply')
|
||||
if (resp.code === 0) {
|
||||
this.disabled = true
|
||||
await this.getWakesHomeUnitInfo()
|
||||
} else {
|
||||
this.disabled = false
|
||||
this.$confirm('未获取到单位的建家申报记录,是否前往申报?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
setTimeout(() => {
|
||||
location.href = '/platform/workershome/declaration/apply'
|
||||
}, 500)
|
||||
})
|
||||
}
|
||||
},
|
||||
async getWakesHomeUnitInfo() {
|
||||
const resp = await this.$axios.get('/platform/workershome/declaration/apply/getWakesHomeUnitInfo')
|
||||
if (resp.code === 0 && resp.data) {
|
||||
this.$set(this.formData, 'foundTime', resp.data.foundTime)
|
||||
this.$set(this.formData, 'position', resp.data.position)
|
||||
this.$set(this.formData, 'area', resp.data.area)
|
||||
this.$set(this.formData, 'details', resp.data.details)
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.id = GetQueryString("id")
|
||||
this.initFormData()
|
||||
await this.validateApply()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,223 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-row {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.el-row .el-card {
|
||||
min-width: 100%;
|
||||
height: 100%;
|
||||
margin-right: 20px;
|
||||
transition: all .5s;
|
||||
}
|
||||
|
||||
.el-form-item {
|
||||
margin-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.pagination-container {
|
||||
margin-top: -3px;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
.box-card {
|
||||
.header {
|
||||
min-height: 20px;
|
||||
position: relative;
|
||||
|
||||
.label {
|
||||
padding: 1px 6px;
|
||||
background-color: #fdf0da;
|
||||
font-size: 15px;
|
||||
color: #f19901;
|
||||
}
|
||||
|
||||
.header-label {
|
||||
padding: 1px 6px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.card-header-tag-blue {
|
||||
position: absolute;
|
||||
width: 68px;
|
||||
height: 30px;
|
||||
top: -14px;
|
||||
right: -15px;
|
||||
/*background-image: url("~@/assets/images/img_dpj_t.png");*/
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.card-header-tag-green {
|
||||
position: absolute;
|
||||
width: 68px;
|
||||
height: 30px;
|
||||
top: -14px;
|
||||
right: -15px;
|
||||
/*background-image: url("~@/assets/images/img_ypj_t.png");*/
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.footer {
|
||||
font-size: 18px !important;
|
||||
background-color: rgb(245, 247, 251);
|
||||
display: flex;
|
||||
height: 50px;
|
||||
justify-content: space-evenly;
|
||||
}
|
||||
|
||||
.card-label {
|
||||
color: rgb(197, 197, 197);
|
||||
margin-right: 8px;
|
||||
width: 70px;
|
||||
display: inline-block;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度">
|
||||
<el-date-picker
|
||||
@change="doSearch"
|
||||
formData="yyyy"
|
||||
placeholder="请选择年度"
|
||||
style="width: 100%"
|
||||
type="year"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="doSearch" clearable="true"
|
||||
filterable="true"
|
||||
placeholder="所属工会"
|
||||
style="width: 100%;"
|
||||
v-model="pageForm.unionId">
|
||||
<el-option :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="展示列表">
|
||||
<!--<el-button type="primary" size="small">添加信息</el-button>-->
|
||||
</table-tool>
|
||||
<el-row :gutter="20" style="margin-right: 15px;margin-left: -5px" type="flex" v-loading="loading">
|
||||
<el-col v-for="(item, index) in tableData" :key="index" :span="6" style="margin-top: 10px">
|
||||
<el-card class="box-card" shadow="always" :body-style="{ padding: '0px' }">
|
||||
<div slot="header" class="header" style="display: flex">
|
||||
<span class="label">{{item.unionName}}</span>
|
||||
<div style="display:flex; align-items: center;color: #cccccc;margin-left: 20px">|</div>
|
||||
<el-tooltip class="item" effect="dark" :content="item.position" placement="top-start">
|
||||
<el-button type="text" class="header-label">查看位置</el-button>
|
||||
</el-tooltip>
|
||||
<!--<span class="header-label"></span>-->
|
||||
</div>
|
||||
<div style="margin: 15px">
|
||||
<div>
|
||||
<el-carousel height="150px">
|
||||
<el-carousel-item v-for="o in item.picFiles" :key="item">
|
||||
<el-image @click="PREVIEW_IMAGE(o.filepath)"
|
||||
:src="CREATE_PREVIEW_URL(o.filepath)"
|
||||
style="width: 100%;height: 100%"></el-image>
|
||||
</el-carousel-item>
|
||||
</el-carousel>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer">
|
||||
<div style="display: flex;align-items: center">
|
||||
<span style="color: #18c8bd;font-size: 14px">面积:{{item.area}}(㎡)</span>
|
||||
<div style="display:flex; align-items: center;color: #cccccc;margin: 0 10px">|</div>
|
||||
<span style="color: #18c8bd;font-size: 14px">申报日期:{{item.applyTime}}</span>
|
||||
</div>
|
||||
<div style="display:flex; align-items: center;color: #cccccc">|</div>
|
||||
<div style="display: flex;align-items: center">
|
||||
<el-button type="text"
|
||||
:style="item.status === '2' ? 'color: #18c8bd' : 'color: rgb(34, 125, 251)'"
|
||||
style="color: #18c8bd"></el-button>
|
||||
<el-button type="text" style="color: #18c8bd;" @click="openView(item.id)">查看
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
</template>
|
||||
<template #view>
|
||||
<wakes-info ref="viewInfo"></wakes-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
unions: [],
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
year: moment().format('YYYY'),
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.viewInfo.openView(row)
|
||||
},
|
||||
async pageData() {
|
||||
const resp = await this.$axios.post(loc() + '/pageData', this.pageForm)
|
||||
if (resp.code === 0) {
|
||||
this.tableData = resp.data
|
||||
this.tableData.forEach(item => {
|
||||
item.picFiles = JSON.parse(item.picFiles)
|
||||
})
|
||||
}
|
||||
},
|
||||
flushUnits() {
|
||||
},
|
||||
|
||||
},
|
||||
components: {
|
||||
'wakes-info': httpVueLoader('/components/workershome/info/WakesHomeInfo.vue')
|
||||
},
|
||||
async created() {
|
||||
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')) {
|
||||
this.unions = await this.$businessTool.listUnion()
|
||||
} else {
|
||||
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
|
||||
this.$set(this.pageForm, 'unionId', this.unions ? this.unions[0].id : null)
|
||||
this.flushUnits()
|
||||
}
|
||||
this.unions.unshift({id: '校工会', unionname: '校工会'})
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,162 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度">
|
||||
<el-date-picker
|
||||
@change="doSearch"
|
||||
formData="yyyy"
|
||||
placeholder="请选择年度"
|
||||
style="width: 100%"
|
||||
type="year"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="doSearch" clearable="true"
|
||||
filterable="true"
|
||||
placeholder="所属工会"
|
||||
style="width: 100%;"
|
||||
v-model="pageForm.unionId">
|
||||
<el-option :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool label="申报列表">
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" class="vi-table"
|
||||
ref="table"
|
||||
row-key="id" style="width: 100%" v-loading="tableLoading">
|
||||
<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"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作"
|
||||
width="150px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)"
|
||||
size="mini" type="primary"
|
||||
v-if="![8100].includes(row.state) && row.state">查看
|
||||
</el-button>
|
||||
<el-button @click="openEdit(row)"
|
||||
size="mini" type="primary"
|
||||
v-if="[8100,8125].includes(row.state) || !row.state">编辑
|
||||
</el-button>
|
||||
<el-button @click="doDelete(row)"
|
||||
size="mini" type="danger"
|
||||
v-if="[8100].includes(row.state) || !row.state">删除
|
||||
</el-button>
|
||||
<el-button @click="doDelete(row)"
|
||||
size="mini"
|
||||
type="danger" v-if="![8100].includes(row.state) && row.state && $auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')">删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
|
||||
<template #view>
|
||||
<wakes-info ref="viewInfo"></wakes-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
unions: [],
|
||||
pageForm: {
|
||||
isAudit: false,
|
||||
year: moment().format('YYYY'),
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'unionName', label: '申报工会', sortable: true},
|
||||
{prop: 'username', label: '申报人', sortable: true},
|
||||
{prop: 'mobile', label: '联系方式', sortable: true},
|
||||
{prop: 'position', label: '地址', sortable: true},
|
||||
{prop: 'area', label: '面积', sortable: true},
|
||||
{prop: 'foundTime', label: '创立时间', sortable: true},
|
||||
{prop: 'applyTime', label: '申报日期', sortable: true},
|
||||
{prop: 'stateName', label: '状态', sortable: true},
|
||||
],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'wakes-info': httpVueLoader('/components/workershome/info/WakesHomeInfo.vue')
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$refs.viewInfo.openView(row.id)
|
||||
},
|
||||
async doDelete(row) {
|
||||
const confirm = await this.$confirm('确定要删除吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm==="confirm"){
|
||||
const resp = await this.$axios.get(loc() + '/doRemove', {id: row.id})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.pageData();
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
openEdit(row) {
|
||||
location.href = '/platform/workershome/info/apply?id=' + row.id
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.units = await this.$businessTool.listUnit(this.pageForm.unionId)
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')) {
|
||||
this.unions = await this.$businessTool.listUnion()
|
||||
this.unions.unshift({id: '校工会', unionname: '校工会'})
|
||||
} else {
|
||||
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
|
||||
this.$set(this.pageForm, 'unionId', this.unions ? this.unions[0].id : null)
|
||||
this.flushUnits()
|
||||
}
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+229
@@ -0,0 +1,229 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度">
|
||||
<el-date-picker
|
||||
@change="doSearch"
|
||||
formData="yyyy"
|
||||
placeholder="请选择年度"
|
||||
style="width: 100%"
|
||||
type="year"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="doSearch" clearable="true"
|
||||
filterable="true"
|
||||
placeholder="所属工会"
|
||||
style="width: 100%;"
|
||||
v-model="pageForm.unionId">
|
||||
<el-option :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="审核列表">
|
||||
<el-radio-group @change="doSearch" class="mr10" size="small" 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>
|
||||
</table-tool>
|
||||
|
||||
<el-table ref="table" :data="tableData" style="width: 100%" row-key="id"
|
||||
@sort-change="pageOrder"
|
||||
v-loading="tableLoading" :size="tableSize" class="vi-table">
|
||||
<el-table-column align="center" header-align="center" type="index"
|
||||
:index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
show-overflow-tooltip
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="操作" fixed="right" width="150px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button @click="openAudit(row)" v-if="[8120].includes(row.state) || !row.state" size="mini" type="primary">审核</el-button>
|
||||
<el-button @click="doRollBack(row.id)" v-if="[8125,8130].includes(row.state) || !row.state" size="mini" type="danger">撤回</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<wakes-info ref="viewInfo"></wakes-info>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<wakes-info ref="auditInfo">
|
||||
<template #handle>
|
||||
<el-tab-pane label="校工会审核" name="schoolAudit">
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
|
||||
style="padding: 20px 0"
|
||||
label-width="120px">
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="username" label="审核人员">
|
||||
<el-input value="${@shiro.getPrincipalProperty('username')}"
|
||||
disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="time" 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-item prop="auditSign" label="审核签字">-->
|
||||
<!-- <sign :qz.sync="formData.auditSign"></sign>-->
|
||||
<!-- </el-form-item>-->
|
||||
</el-form>
|
||||
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button type="danger" @click="doReview(0)">
|
||||
拒绝
|
||||
</el-button>
|
||||
<el-button type="primary" @click="doReview(1)">
|
||||
通过
|
||||
</el-button>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</template>
|
||||
</wakes-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el:'#app',
|
||||
mixins:[initTableMixins],
|
||||
data(){
|
||||
return{
|
||||
id:'',
|
||||
unions:[],
|
||||
pageForm:{
|
||||
isAudit:false,
|
||||
year: moment().format('YYYY'),
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'unionName', label: '申报工会', sortable: true},
|
||||
{prop: 'username', label: '申报人', sortable: true},
|
||||
{prop: 'mobile', label: '联系方式', sortable: true},
|
||||
{prop: 'position', label: '地址', sortable: true},
|
||||
{prop: 'area', label: '面积', sortable: true},
|
||||
{prop: 'foundTime', label: '创立时间', sortable: true},
|
||||
{prop: 'applyTime', label: '申报日期', sortable: true},
|
||||
{prop: 'stateName', label: '状态', sortable: true},
|
||||
],
|
||||
formRules: {
|
||||
// auditSign: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
auditOpinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'wakes-info': httpVueLoader('/components/workershome/info/WakesHomeInfo.vue')
|
||||
},
|
||||
methods:{
|
||||
doReview(row){
|
||||
this.$refs['form'].validate(valid => {
|
||||
if (valid) {
|
||||
this.$confirm('您确定要提交吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
const {code, msg} = await this.$axios.post(loc() + '/doAudit', {
|
||||
audit: JSON.stringify(this.formData),
|
||||
id: this.id,
|
||||
isPass: row,
|
||||
})
|
||||
if (code === 0) {
|
||||
this.pageData()
|
||||
this.notifySuccess(msg)
|
||||
this.$refs.guava.index()
|
||||
} else {
|
||||
this.notifyWarning(msg)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
openView(row){
|
||||
this.$refs.guava.view()
|
||||
this.$refs.viewInfo.openView(row.id)
|
||||
},
|
||||
openAudit(row){
|
||||
this.formData={}
|
||||
this.id = row.id
|
||||
this.$set(this.formData, 'auditTime', moment().format('YYYY-MM-DD'))
|
||||
this.$refs.guava.edit()
|
||||
this.$refs.auditInfo.activeName = 'schoolAudit'
|
||||
this.$refs.auditInfo.openView(row.id)
|
||||
},
|
||||
async doRollBack(id){
|
||||
const confirm = await this.$confirm('确定要撤回该记录吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if ("confirm" === confirm) {
|
||||
const resp = await this.$axios.get(loc() + '/doRollBack',{id:id})
|
||||
if (resp.code === 0){
|
||||
this.pageData();
|
||||
this.notifySuccess(resp.msg)
|
||||
}else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.units = await this.$businessTool.listUnit(this.pageForm.unionId)
|
||||
}
|
||||
},
|
||||
},
|
||||
async created(){
|
||||
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') {
|
||||
this.unions = await this.$businessTool.listUnion()
|
||||
} else {
|
||||
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
|
||||
this.$set(this.pageForm, 'unionId', this.unions ? this.unions[0].id : null)
|
||||
this.flushUnits()
|
||||
}
|
||||
this.unions.unshift({id:'校工会',unionname:'校工会'})
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+385
@@ -0,0 +1,385 @@
|
||||
const ADD_REVIEW_PROXY = {
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<el-form class="el_form" :model="data" ref="addForm" :rules="formRules" label-width="120px">
|
||||
<vi-title title="指标信息"></vi-title>
|
||||
<el-row gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="annual" label="年  度" class="is-required">
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
:disabled="is_view"
|
||||
:picker-options="pickerOptions"
|
||||
v-model="data.annual"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="选择年度">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="assessment" label="评测名称" class="is-required">
|
||||
<el-input maxlength="30" :disabled="is_view" v-model="data.assessment"
|
||||
placeholder="请填写评测名称"
|
||||
type="text">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="zbId" label="以往评议指标" v-if="data.isEvaluationIndex">
|
||||
<el-select v-model="data.zbId" placeholder="请选择" filterable clearable
|
||||
style="width: 100%" @change="getByZbData">
|
||||
<el-option
|
||||
v-for="item in zbList"
|
||||
:key="item.id"
|
||||
:label="item.annual+item.assessment"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="assessmentMode" label="评议选项" class="is-required">
|
||||
<el-radio-group v-model="data.assessmentMode" :disabled="is_view">
|
||||
<el-radio-button :label="1">工会评议</el-radio-button>
|
||||
<el-radio-button :label="2">主席/副主席评议</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="reviewMode" label="评议模式" class="is-required">
|
||||
<el-radio-group v-model="data.reviewMode" :disabled="is_view">
|
||||
<el-tooltip content="由校工会/分工会管理员自我测评"
|
||||
placement="top">
|
||||
<el-radio-button :label="1">自我评议</el-radio-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip content="由教职工对选择的工会/主席进行评议"
|
||||
placement="top">
|
||||
<el-radio-button :label="2">教工评议</el-radio-button>
|
||||
</el-tooltip>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="scoringMode" label="打分模式" class="is-required">
|
||||
<el-radio-group v-model="data.scoringMode" :disabled="is_view">
|
||||
<el-radio-button :label="1">评分模式</el-radio-button>
|
||||
<el-radio-button :label="2">满意度模式</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row gutter="20">
|
||||
<el-col :span="8" v-if="data.assessmentMode">
|
||||
<el-form-item prop="scoringMode" label="评议范围" class="is-required">
|
||||
<el-radio-group v-model="data.commentTarget" :disabled="is_view">
|
||||
<el-tooltip :content="schoolContent" placement="top">
|
||||
<el-radio-button :disabled="!$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')" :label="1">校工会</el-radio-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip :content="allUnionContent" placement="top">
|
||||
<el-radio-button :disabled="!$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')" :label="2">全部分工会
|
||||
</el-radio-button>
|
||||
</el-tooltip>
|
||||
<el-tooltip :content="selectUnionContent" placement="top">
|
||||
<el-radio-button :label="3">自选分工会</el-radio-button>
|
||||
</el-tooltip>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<template v-if="data.commentTarget && data.reviewMode == 2 && data.commentTarget == 1">
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="activityGroupId" label="可评议人员" class="is-required">
|
||||
<div style="display: flex; justify-content: space-between">
|
||||
<div style="width: 99%">
|
||||
<el-select clearable filterable placeholder="请选择可评议人员"
|
||||
style="width: 99%" v-model="data.activityGroupId"
|
||||
:disabled="is_view">
|
||||
<el-option :key="item.groupId"
|
||||
:label="item.groupName"
|
||||
:value="item.groupId"
|
||||
v-for="item in activityGroupList"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div>
|
||||
<el-button
|
||||
@click="$refs.drawerUserScope.userScopeDialog = true"
|
||||
:disabled="is_view"
|
||||
type="primary">设置
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</template>
|
||||
|
||||
<template v-if="data.commentTarget && data.commentTarget == 3">
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="unionIds" label="自选分工会" class="is-required">
|
||||
<el-select v-model="data.unionIds" style="width: 100%"
|
||||
:disabled="is_view"
|
||||
multiple clearable filterable
|
||||
placeholder="请选择分工会">
|
||||
<el-option
|
||||
v-for="item in reviewUnions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</template>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="applyTime" label="评议时间" class="is-required">
|
||||
<el-date-picker
|
||||
end-placeholder="结束时间"
|
||||
range-separator="-"
|
||||
start-placeholder="开始时间"
|
||||
style="width: 100%"
|
||||
:disabled="is_view"
|
||||
type="datetimerange"
|
||||
v-model="data.applyTime"
|
||||
value-format="yyyy-MM-dd HH:mm:ss">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
<vi-title2 title="测评内容"></vi-title2>
|
||||
|
||||
<el-form-item label="" label-width="0" v-for="(nr,idx) in data.nrs">
|
||||
|
||||
<el-row type="flex" align="middle" justify="space-between">
|
||||
<el-input v-model="nr.content" :disabled="is_view" maxlength="30" style="width: 50%"
|
||||
placeholder="请填写测评内容">
|
||||
<template slot="prepend">
|
||||
<span>{{ nr.contentNumber = idx + 1 }}</span>
|
||||
</template>
|
||||
</el-input>
|
||||
<el-button v-if="!is_view" size="medium" :disabled="data.nrs.length<=1" type="danger"
|
||||
@click="data.nrs.splice(idx,1)"
|
||||
icon="el-icon-delete"></el-button>
|
||||
</el-row>
|
||||
|
||||
<el-row style="margin-top: 20px">
|
||||
<el-table :data="nr.bzs" style="width: 100%" border show-summary
|
||||
:summary-method="getSummaries" size="small">
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index"
|
||||
width="100px">
|
||||
<template scope="{$index,row}">
|
||||
{{ row.contentNumber = $index + 1 }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="测评标准" prop="inspection">
|
||||
<template scope="{row}">
|
||||
<el-input v-if="!is_view" v-model="row.inspection" placeholder="请填写测评标准"
|
||||
type="textarea"
|
||||
rows="2"></el-input>
|
||||
<div v-else style="white-space:break-spaces">{{ row.inspection }}</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="标准分" prop="score" header-align="center" align="center"
|
||||
width="100px" v-if="data.scoringMode===1">
|
||||
<template scope="{row}">
|
||||
<el-input v-if="!is_view" v-model.number="row.score" maxlength="4"
|
||||
placeholder="请填写标准分"></el-input>
|
||||
<span v-else>{{ row.score }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column v-if="!is_view" label="操作" header-align="center" align="center"
|
||||
width="200px">
|
||||
<template scope="{row,$index}">
|
||||
<el-button size="mini" :disabled="nr.bzs.length<=1 || (!row.canDelete && row.id)"
|
||||
type="danger" icon="el-icon-delete"
|
||||
@click="nr.bzs.splice($index,1)"></el-button>
|
||||
<el-button size="mini"
|
||||
type="primary" icon="el-icon-plus"
|
||||
@click="nr.bzs.splice($index+1,0,{inspection:null,score:null,isEvidence:true})"></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-row>
|
||||
|
||||
<el-row class="mt10 mb10" style="border-top: 1px dashed rgb(229, 225, 225)"></el-row>
|
||||
</el-form-item>
|
||||
|
||||
<el-row type="flex" justify="center">
|
||||
<el-button v-if="!is_view"
|
||||
type="primary"
|
||||
@click="data.nrs.push({bzs:[{inspection:null,score:null,isEvidence:true}]})">
|
||||
添加测评内容
|
||||
</el-button>
|
||||
</el-row>
|
||||
|
||||
<div>
|
||||
<drawer-user-scope
|
||||
@group_change="getActivityGroup"
|
||||
ref="drawerUserScope"
|
||||
:group_id.sync="data.activityGroupId"
|
||||
></drawer-user-scope>
|
||||
</div>
|
||||
|
||||
</el-form>
|
||||
</div>
|
||||
`,
|
||||
props: {
|
||||
is_view: {type: Boolean, default: false},
|
||||
data: {
|
||||
type: Object,
|
||||
default: {
|
||||
nrs: [{
|
||||
bzs: [{}]
|
||||
}],
|
||||
unionIds: []
|
||||
}
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
activityGroupList: [],
|
||||
isEvaluationIndex: false,
|
||||
zbList: [],
|
||||
formRules: {
|
||||
xxx: [{required: true, message: '请填写年度', trigger: ['blur', 'change']}],
|
||||
},
|
||||
pickerOptions: {
|
||||
disabledDate(time) {
|
||||
return (
|
||||
time.getFullYear() > new Date().getFullYear()
|
||||
);
|
||||
}
|
||||
},
|
||||
relationData: [
|
||||
{moduleName: '提案系统模块', id: 'proposal'},
|
||||
{moduleName: '二级教代会', id: 'secteameet'},
|
||||
{moduleName: '慰问/补助', id: 'ConandDif'},
|
||||
],
|
||||
roleDataReview: {},
|
||||
reviewUnions: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'drawer-user-scope': httpVueLoader('/components/module/activity/DrawerUserScope.vue'),
|
||||
},
|
||||
methods: {
|
||||
async getActivityGroup() {
|
||||
const {data} = await this.$axios.get('/platform/activity/basic/scope/getActivityUserScopeGroup')
|
||||
this.activityGroupList = data
|
||||
},
|
||||
async getByZbData() {
|
||||
const {
|
||||
code,
|
||||
data,
|
||||
msg
|
||||
} = await this.$axios.get('/platform/wakeshome/review/viewZb/edit', {id: this.data.zbId})
|
||||
if (data) {
|
||||
this.$set(this.data, "nrs", data.nrs)
|
||||
} else {
|
||||
this.$set(this.data, "nrs", [{bzs: [{}]}])
|
||||
}
|
||||
},
|
||||
async getZbList() {
|
||||
const res = await this.$axios.get("/platform/wakeshome/review/Xjkhzb/getZbList")
|
||||
this.zbList = res.data
|
||||
},
|
||||
getSummaries(param) {
|
||||
const {columns, data} = param;
|
||||
const sums = [];
|
||||
columns.forEach((column, index) => {
|
||||
if (index === 0 && this.data.scoringMode === 1) {
|
||||
sums[index] = '小计';
|
||||
return;
|
||||
} else if ([1, 3, 4].includes(index) && this.data.scoringMode === 1) {
|
||||
sums[index] = '';
|
||||
return;
|
||||
} else if ([1, 2, 3].includes(index) && this.data.scoringMode === 2) {
|
||||
sums[index] = '';
|
||||
return;
|
||||
}
|
||||
const values = data.map(item => Number(item[column.property]));
|
||||
if (!values.every(value => isNaN(value))) {
|
||||
sums[index] = values.reduce((prev, curr) => {
|
||||
const value = Number(curr);
|
||||
if (!isNaN(value)) {
|
||||
return prev + curr;
|
||||
} else {
|
||||
return prev;
|
||||
}
|
||||
}, 0);
|
||||
sums[index] += ' 分';
|
||||
} else {
|
||||
sums[index] = '';
|
||||
}
|
||||
});
|
||||
return sums;
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
await this.getActivityGroup()
|
||||
await this.getZbList()
|
||||
if (!this.data || !Object.keys(this.data).length) {
|
||||
this.data = {
|
||||
nrs: [{
|
||||
bzs: [{inspection: null, score: null, isEvidence: true}]
|
||||
}],
|
||||
}
|
||||
}
|
||||
|
||||
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')) {
|
||||
this.reviewUnions = await this.$businessTool.listUnion()
|
||||
} else {
|
||||
this.reviewUnions = await this.$businessTool.listUnion(this.unionId)
|
||||
this.$set(this.data, "unionIds", this.reviewUnions[0].id)
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
data: {
|
||||
deep: true,
|
||||
handler(val) {
|
||||
this.$emit('change', val)
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
schoolContent() {
|
||||
if (this.data.reviewMode == 1) {
|
||||
return '勾选后,仅校工会管理员可参加测评'
|
||||
} else if (this.data.reviewMode == 2) {
|
||||
return '勾选后,全校所有人员可评议校工会,也可根据右侧选框【可评议人员】指定评议人员范围'
|
||||
} else {
|
||||
return '请选择评议模式'
|
||||
}
|
||||
},
|
||||
allUnionContent() {
|
||||
if (this.data.reviewMode == 1) {
|
||||
return '勾选后,仅各工会管理员可对本分工会进行自我评议'
|
||||
} else if (this.data.reviewMode == 2) {
|
||||
return '勾选后,所有分工会人员对本分工会进行评议,不可跨工会评议'
|
||||
} else {
|
||||
return '请选择评议模式'
|
||||
}
|
||||
},
|
||||
selectUnionContent() {
|
||||
if (this.data.reviewMode == 1) {
|
||||
return '勾选后,仅右侧选择的分工会管理员可对本分工会进行自我评议'
|
||||
} else if (this.data.reviewMode == 2) {
|
||||
return '勾选后,可根据右侧选框【自选分工会】指定分工会评议范围'
|
||||
} else {
|
||||
return '请选择评议模式'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+113
@@ -0,0 +1,113 @@
|
||||
const REVIEW_RESULT = {
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<el-form label-width="120px">
|
||||
<template v-if="viewInfo.zbxx.assessmentMode === 2">
|
||||
<div class="process-title">评议对象选择</div>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12" v-if="viewInfo.zbxx.assessmentMode===2">
|
||||
<el-form-item prop="evaluatedPersonName" label="被测评人姓名">
|
||||
{{viewInfo.commentPeo.evaluatedPersonName}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12" v-if="viewInfo.zbxx.assessmentMode===2">
|
||||
<el-form-item prop="evaluatedPersonName" label="现任职务">
|
||||
{{viewInfo.commentPeo.evaluatedPersonName}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="evaluatedPersonName" label="测评结果">
|
||||
{{viewInfo.commentPeo.reviewResult}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24" v-if="viewInfo.zbxx.assessmentMode===2">
|
||||
<el-form-item prop="presidentOpinions" label="意见建议">
|
||||
{{viewInfo.commentPeo.presidentOpinions}}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<vi-title2 title="评议内容"></vi-title2>
|
||||
<el-form-item label="" label-width="0" v-for="(nr,idx) in viewInfo.zbxx.nrs" :key="nr.id">
|
||||
<el-row type="flex" align="middle" justify="space-between">
|
||||
<el-input v-model="nr.content" readonly maxlength="30" style="width: 50%">
|
||||
<template slot="prepend"><span>{{ idx + 1 }}</span></template>
|
||||
</el-input>
|
||||
</el-row>
|
||||
|
||||
<el-row style="margin-top: 20px">
|
||||
<el-table :data="nr.bzs" style="width: 100%" border :show-summary = "viewInfo.zbxx.scoringMode !== 2 ? 'always' : false">
|
||||
<el-table-column align="center" header-align="center" label="序号"
|
||||
type="index"
|
||||
width="100px">
|
||||
<template scope="{$index,row}">
|
||||
{{ row.contentNumber = $index + 1 }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="主要评比内容" disabled prop="inspection" header-align="center" align="center"></el-table-column>
|
||||
<template v-if="viewInfo.zbxx.scoringMode === 1">
|
||||
<el-table-column label="标准分" prop="score" header-align="center" align="center" width="250px"></el-table-column>
|
||||
<el-table-column label="评议分" prop="resultScore" header-align="center" align="center" width="250px"></el-table-column>
|
||||
</template>
|
||||
<template v-if="viewInfo.zbxx.scoringMode === 2">
|
||||
<el-table-column label="满意度" prop="resultScore" header-align="center" align="center" width="350px">
|
||||
<template slot-scope="{row}">
|
||||
<el-radio-group v-model="row.resultScore" size="small">
|
||||
<el-radio disabled label="非常满意">非常满意</el-radio>
|
||||
<el-radio disabled label="满意">满意</el-radio>
|
||||
<el-radio disabled label="良好">良好</el-radio>
|
||||
<el-radio disabled label="一般">一般</el-radio>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
</el-table>
|
||||
</el-row>
|
||||
|
||||
<div v-if="viewInfo.zbxx.scoringMode===1">
|
||||
<el-divider content-position="left">简述工作情况</el-divider>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-input type="textarea" :rows="2" maxlength="300" show-word-limit readonly
|
||||
v-model="nr.bzs[0].options" placeholder="请简述工作情况"></el-input>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<template v-if="viewInfo.zbxx.scoringMode === 2">
|
||||
<div class="process-title">简述工作情况</div>
|
||||
<el-input type="textarea" :rows="2" maxlength="300" show-word-limit disabled
|
||||
v-model="viewInfo.commentPeo.presidentOpinions" placeholder="请简述工作情况"></el-input>
|
||||
</template>
|
||||
|
||||
<template v-if="viewInfo.zbxx.scoringMode === 1 && viewInfo.zbxx.reviewMode === 1">
|
||||
<div class="process-title">职工评家总结</div>
|
||||
<file-upload v-if="viewInfo.commentPeo.files && viewInfo.commentPeo.files.length > 0" :files.sync="viewInfo.commentPeo.files" view></file-upload>
|
||||
<el-empty v-else :image-size="100" description="未上传总结"></el-empty>
|
||||
</template>
|
||||
|
||||
</el-form>
|
||||
</div>
|
||||
`,
|
||||
props: {
|
||||
id: {type: String, default: ''}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
viewInfo: {
|
||||
commentPeo: {},
|
||||
zbxx: []
|
||||
}
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
async findOne(peoId){
|
||||
const resp = await this.$axios.get('/platform/wakeshome/review/statistics/getBzById',{peoId:peoId})
|
||||
if (resp.code === 0) {
|
||||
this.viewInfo = resp.data
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+444
@@ -0,0 +1,444 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
#app {
|
||||
height: 100%;
|
||||
overflow-y: unset !important;
|
||||
}
|
||||
|
||||
.el-form {
|
||||
height: calc(100vh - 100px) !important;
|
||||
}
|
||||
|
||||
.el-divider {
|
||||
background-color: #1867b0;
|
||||
}
|
||||
|
||||
.el-divider__text {
|
||||
color: #1867b0;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度">
|
||||
<el-date-picker
|
||||
:picker-options="pickerOptions"
|
||||
v-model="pageForm.annual"
|
||||
type="year"
|
||||
style="width: 100%"
|
||||
value-format="yyyy"
|
||||
placeholder="选择年度">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="评议名称">
|
||||
<el-input v-model="pageForm.assessment" placeholder="根据测评名称查询"></el-input>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<table-tool label="项目列表">
|
||||
<!--<el-button type="primary" size="small">添加信息</el-button>-->
|
||||
</table-tool>
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id"
|
||||
v-loading="tabLoading">
|
||||
<el-table-column align="center" header-align="center" label="序号" width="100px">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="年度" prop="annual" header-align="center" width="300px"
|
||||
sortable align="center">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="考核名称" prop="assessment" header-align="center"
|
||||
show-overflow-tooltipalign="center"></el-table-column>
|
||||
|
||||
<el-table-column label="评测模式" prop="assessmentMode" header-align="center"
|
||||
show-overflow-tooltipalign="center">
|
||||
<template scope="{row}">
|
||||
{{row.assessmentMode===1?'工会评家':'主席/副主席评家'}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="打分模式" prop="scoringMode" header-align="center"
|
||||
show-overflow-tooltipalign="center">
|
||||
<template scope="{row}">
|
||||
{{row.scoringMode===1?'评分模式':'选择模式'}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
<el-table-column align="center" header-align="center" label="操作" fixed="right"
|
||||
width="250px">
|
||||
<template scope="scope">
|
||||
<el-button size="mini" type="primary" @click="openView(scope.row.id)">
|
||||
查看
|
||||
</el-button>
|
||||
<template v-if="!scope.row.isReview">
|
||||
<el-tooltip content="评议页面的提交按钮在右上角哦" placement="top">
|
||||
<el-button size="mini" type="primary" @click="doReview(scope.row)">
|
||||
自评
|
||||
</el-button>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-button size="mini" type="primary" @click="openReview(scope.row)">评议结果</el-button>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
|
||||
<template #edit_func>
|
||||
<el-button type="primary" style="float: right;margin-top: 5px;margin-left: 10px;"
|
||||
@click="doSubmit()">提交
|
||||
</el-button>
|
||||
<!-- <el-button type="primary" plain style="float: right;margin-top: 5px" @click="doSaveOrSubmit('save')">保存</el-button>-->
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<el-form :model="formData" ref="form" label-width="100px"
|
||||
style="height: calc(100vh - 50px);overflow-y: scroll;padding: 10px 15px">
|
||||
|
||||
<template v-if="formData.assessmentMode==2">
|
||||
<div class="process-title">评议对象选择</div>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="president" label-width="0px">
|
||||
<el-select v-model="formData.president" placeholder="请选择主席/副主席进行评议"
|
||||
style="width: 100%">
|
||||
<el-option v-for="o in userList" :key="o.id" :label="o.presidents" :value="o.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<div style="margin: 8px 10px">
|
||||
<span style="color: #ac2925">如已完成该对象的评议,请您手动更换评议对象</span>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
|
||||
<div class="process-title">评议内容</div>
|
||||
|
||||
<el-form-item label="" label-width="0" v-for="o,idx in formData.nrs" :key="o.id">
|
||||
|
||||
<el-row type="flex" align="middle" justify="space-between">
|
||||
<el-input v-model="o.content" readonly maxlength="30" style="width: 50%">
|
||||
<template slot="prepend"><span>{{ idx + 1 }}</span></template>
|
||||
</el-input>
|
||||
</el-row>
|
||||
|
||||
<el-row style="margin-top: 20px">
|
||||
<el-table :data="o.bzs" style="width: 100%" border :show-summary = "formData.scoringMode !== 2 ? 'always' : false">
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index"
|
||||
width="100px">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="主要评比内容" disabled prop="inspection" header-align="center"
|
||||
align="center">
|
||||
<template scope="{row}">
|
||||
<el-input v-model="row.inspection"
|
||||
readonly type="textarea" rows="2"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<template v-if="formData.scoringMode===1">
|
||||
<el-table-column label="标准分" prop="score" header-align="center" align="center"
|
||||
width="250px">
|
||||
<template scope="{row}">
|
||||
<el-input v-model.number="row.score" readonly></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="评议分" prop="resultScore" header-align="center"
|
||||
align="center" width="250px">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.resultScore" maxlength="4" @blur="changeScore(row)"
|
||||
placeholder="请填写评议分"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
|
||||
<template v-if="formData.scoringMode===2">
|
||||
<el-table-column label="满意度" prop="resultScore" header-align="center"
|
||||
align="center" width="350px">
|
||||
<template slot-scope="{row}">
|
||||
<el-radio-group v-model="row.resultScore" size="small">
|
||||
<el-radio label="非常满意">非常满意</el-radio>
|
||||
<el-radio label="满意">满意</el-radio>
|
||||
<el-radio label="良好">良好</el-radio>
|
||||
<el-radio label="一般">一般</el-radio>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
</el-table>
|
||||
</el-row>
|
||||
<div v-if="formData.scoringMode===1">
|
||||
<el-divider content-position="left">简述工作情况</el-divider>
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<el-input type="textarea" :rows="2" maxlength="300" show-word-limit
|
||||
v-model="o.remark" placeholder="请简述工作情况"></el-input>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<template v-if="formData.scoringMode===2">
|
||||
<div class="process-title">简述工作情况</div>
|
||||
<el-form-item prop="options" label-width="0px">
|
||||
<el-input type="textarea" :rows="2" maxlength="300" show-word-limit
|
||||
v-model="presidentOpinions" placeholder="请简述工作情况"></el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
|
||||
<template v-if="formData.reviewMode===1 && formData.scoringMode===1">
|
||||
<div class="process-title">职工评家总结</div>
|
||||
<el-form-item prop="files" label-width="0px">
|
||||
<file-upload :value.sync="formData.files" accept=".doc, .docx, .xls, .xlsx, .pdf, .ppt, .jpg, .jpeg, .png"
|
||||
upload_mode="drag"
|
||||
:upload_number="3" upload_result_category="array"
|
||||
complete_result></file-upload>
|
||||
</el-form-item>
|
||||
</template>
|
||||
|
||||
</el-form>
|
||||
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<review-proxy :data="viewData" :is_view="true"></review-proxy>
|
||||
</template>
|
||||
|
||||
|
||||
<template #public>
|
||||
<review-result ref="reviewResultRef"></review-result>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("../components/addReviewProxy.js"){}#-->
|
||||
<!--#include("../components/reviewResult.js"){}#-->
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
tabLoading: false,
|
||||
loading: true,
|
||||
activeName: '1',
|
||||
tableData: [],
|
||||
formData: {},
|
||||
viewData: {
|
||||
nrs: [{
|
||||
bzs: [{}]
|
||||
}],
|
||||
},
|
||||
pageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
},
|
||||
pickerOptions: {
|
||||
disabledDate(time) {
|
||||
return (
|
||||
time.getFullYear() > new Date().getFullYear()
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
id:'',
|
||||
presidentOpinions: '',
|
||||
isShowSubmit: true,
|
||||
isReadOnly: true,
|
||||
userList: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'review-proxy': ADD_REVIEW_PROXY,
|
||||
'review-result': REVIEW_RESULT
|
||||
},
|
||||
methods: {
|
||||
async openReview(row){
|
||||
const resp = await this.$axios.get(loc() + "/getPeoId",{id:row.id})
|
||||
if (resp.code === 0) {
|
||||
this.$refs.guava.public()
|
||||
this.$refs.reviewResultRef.findOne(resp.data)
|
||||
}
|
||||
},
|
||||
changeScore(row) {
|
||||
if (Number(row.score) < Number(row.resultScore)) {
|
||||
row.resultScore = null;
|
||||
this.$message.warning('评议分不能超过标准分');
|
||||
}
|
||||
},
|
||||
async doReview(o) {
|
||||
//自评模式
|
||||
if (o.reviewMode == 1 && !o.canJoin) {
|
||||
this.$message.warning('您不在自评人员范围中');
|
||||
return
|
||||
}
|
||||
|
||||
const isExist = await getScopeUser(o.activityGroupId)
|
||||
if ((o.commentTarget == 1 && !isExist) || (o.commentTarget == 3 && !o.canJoin)) {
|
||||
this.$message.warning('您不在自评人员范围中');
|
||||
return
|
||||
}
|
||||
|
||||
const res = await this.$axios.get('/mobile/workershome/review/appraisal/isAssess',{id:o.id})
|
||||
if (res.data > 0){
|
||||
this.$message.warning('您已经填写过该评议,请点击评议结果可查看评议详情')
|
||||
return
|
||||
}
|
||||
|
||||
const resp = await this.$axios.get('/mobile/workershome/review/appraisal/getById', {id: o.id})
|
||||
if (resp.code === 0) {
|
||||
this.id = o.id
|
||||
this.formData = resp.data
|
||||
if (this.formData.assessmentMode === 2) {
|
||||
this.formData.nrs.forEach(v => {
|
||||
v.bzs.forEach(o => {
|
||||
o.resultScore = '满意'
|
||||
})
|
||||
})
|
||||
await this.getPresidents()
|
||||
}
|
||||
this.$refs.guava.edit()
|
||||
}
|
||||
},
|
||||
async getPresidents() {
|
||||
const resp = await this.$axios.get('/mobile/workershome/review/appraisal/getPresidents')
|
||||
if (resp.code === 0) {
|
||||
this.userList = resp.data
|
||||
}
|
||||
if (this.userList && this.userList.length > 0) {
|
||||
this.president = this.userList[0].id
|
||||
await this.presidentChange();
|
||||
}
|
||||
},
|
||||
async presidentChange() {
|
||||
const resp = await this.$axios.get('/mobile/workershome/review/appraisal/isAssess', {
|
||||
id: this.id,
|
||||
evaluatedPersonId: this.president,
|
||||
})
|
||||
if (resp.data > 0) {
|
||||
this.$message.warning('您已经评测过该主席(副主席),请在点击评议结果可查看评议信息,或更换主席(副主席)进行测评')
|
||||
this.isShowSubmit = true;
|
||||
this.isReadOnly = true
|
||||
}
|
||||
},
|
||||
async openView(id) {
|
||||
this.$refs.guava.view()
|
||||
this.loading = true;
|
||||
const {code, data, msg} = await this.$axios.get('/platform/workershome/review/khzb/edit', {id})
|
||||
if (code === 0) {
|
||||
this.viewData = data
|
||||
this.viewData.applyTime = [this.viewData.startTime,this.viewData.endTime]
|
||||
}
|
||||
this.loading = false;
|
||||
},
|
||||
async assignment(){
|
||||
const self = this;
|
||||
const bzList = [];
|
||||
this.formData.nrs.forEach(v => {
|
||||
v.bzs.forEach(o => {
|
||||
if (self.formData.assessmentMode === 1 && v.remark){
|
||||
o.options = v.remark
|
||||
}
|
||||
bzList.push(o)
|
||||
})
|
||||
})
|
||||
this.formData.bzList = bzList
|
||||
this.formData.id = this.id
|
||||
this.formData.president = this.president
|
||||
this.formData.files = JSON.stringify(this.formData.files)
|
||||
},
|
||||
async doSubmit(){
|
||||
const validate = await this.$refs.form.validate()
|
||||
if (!validate) {
|
||||
return
|
||||
}
|
||||
|
||||
this.$confirm('确定要提交该测评结果吗?提交后不可修改,请仔细检查后提交', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
await this.assignment()
|
||||
if (!this.formData.reviewResult) {
|
||||
await this.createdReviewResult()
|
||||
}
|
||||
this.formData.bzList = JSON.stringify(this.formData.bzList)
|
||||
const resp = await this.$axios.post('/mobile/workershome/review/appraisal/doSubmit',this.formData)
|
||||
if (resp.code === 0) {
|
||||
this.$message.success('提交成功')
|
||||
this.$refs.guava.index()
|
||||
this.formData = {}
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
async createdReviewResult(){
|
||||
if (this.formData.assessmentMode === 1) {
|
||||
let source = 0; // 标准分
|
||||
let resultScore = 0; // 评议分
|
||||
this.formData.bzList.forEach(v => {
|
||||
source += Number(v.score)
|
||||
resultScore += Number(v.resultScore)
|
||||
})
|
||||
const result = (resultScore / source) * 100
|
||||
|
||||
if (result > 95) {
|
||||
this.formData.reviewResult = '非常满意'
|
||||
} else if (result > 80 && result <= 94) {
|
||||
this.formData.reviewResult = '满意'
|
||||
} else if (result > 60 && result <= 79) {
|
||||
this.formData.reviewResult = '良好'
|
||||
} else {
|
||||
this.formData.reviewResult = '一般'
|
||||
}
|
||||
} else if (this.formData.assessmentMode === 2) {
|
||||
const result = this.formData.bzList.filter(v => v.resultScore === '满意' || v.resultScore === '基本满意')
|
||||
const satisfactionPercentage = (result.length / this.formData.bzList.length) * 100;
|
||||
|
||||
if (satisfactionPercentage > 95) {
|
||||
this.formData.reviewResult = '非常满意'
|
||||
} else if (satisfactionPercentage > 80 && satisfactionPercentage <= 94) {
|
||||
this.formData.reviewResult = '满意'
|
||||
} else if (satisfactionPercentage > 60 && satisfactionPercentage <= 79) {
|
||||
this.formData.reviewResult = '良好'
|
||||
} else {
|
||||
this.formData.reviewResult = '一般'
|
||||
}
|
||||
|
||||
const user = this.userList.find(v=> v.id === this.president)
|
||||
this.formData.evaluatedPersonName = user.username
|
||||
this.formData.evaluatedPersonType = user.evaluatedPersonType
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,211 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
#app {
|
||||
overflow-y: unset !important;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度">
|
||||
<el-date-picker
|
||||
:picker-options="pickerOptions"
|
||||
v-model="pageForm.annual"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="选择年度">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
<search-item label="测评名称">
|
||||
<el-input v-model="pageForm.assessment" placeholder="根据测评名称查询"></el-input>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id"
|
||||
v-loading="tabLoading">
|
||||
<el-table-column align="center" header-align="center" label="序号" width="100px">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="年度" prop="annual" header-align="center" width="300px"
|
||||
sortable align="center">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="考核名称" prop="assessment" header-align="center"
|
||||
show-overflow-tooltipalign="center"></el-table-column>
|
||||
|
||||
<el-table-column label="评测模式" prop="assessmentMode" header-align="center"
|
||||
show-overflow-tooltipalign="center">
|
||||
<template scope="{row}">
|
||||
{{row.assessmentMode===1?'工会评家':'主席/副主席评家'}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="打分模式" prop="scoringMode" header-align="center"
|
||||
show-overflow-tooltipalign="center">
|
||||
<template scope="{row}">
|
||||
{{row.scoringMode===1?'评分模式':'选择模式'}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
<el-table-column align="center" header-align="center" label="操作" fixed="right"
|
||||
width="250px">
|
||||
<template scope="scope">
|
||||
<el-button size="mini" type="primary" @click="openView(scope.row.id)">
|
||||
查看
|
||||
</el-button>
|
||||
<el-button size="mini" type="primary" @click="openEdit(scope.row.id)">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button size="mini" type="danger" @click="doDelete(scope.row.id)">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
<template #edit_func>
|
||||
<el-button type="primary" style="float: right;margin-top: 5px"
|
||||
@click="doEdit()">提交
|
||||
</el-button>
|
||||
</template>
|
||||
<template #edit>
|
||||
<review-proxy :data="formData" @change="v=>{this.formData=v}"></review-proxy>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<review-proxy :data="viewData" :is_view="true"></review-proxy>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("../components/addReviewProxy.js"){}#-->
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
tabLoading: false,
|
||||
loading: true,
|
||||
activeName: '1',
|
||||
tableData: [],
|
||||
formData: {
|
||||
applyTime: []
|
||||
},
|
||||
viewData: {
|
||||
nrs: [{
|
||||
bzs: [{}]
|
||||
}],
|
||||
},
|
||||
pageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
},
|
||||
pickerOptions: {
|
||||
disabledDate(time) {
|
||||
return (
|
||||
time.getFullYear() > new Date().getFullYear()
|
||||
);
|
||||
}
|
||||
},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'review-proxy': ADD_REVIEW_PROXY
|
||||
},
|
||||
methods: {
|
||||
async openEdit(id) {
|
||||
const {code, data, msg} = await this.$axios.get(loc() + '/edit', {id})
|
||||
if (code === 0) {
|
||||
this.formData = data
|
||||
if (data.startTime && data.endTime) {
|
||||
this.$set(this.formData, 'applyTime', [data.startTime, data.endTime])
|
||||
// this.formData.applyTime = [this.formData.startTime, this.formData.endTime]
|
||||
}
|
||||
this.$refs.guava.edit()
|
||||
}
|
||||
},
|
||||
doEdit() {
|
||||
if (this.formData.applyTime && this.formData.applyTime.length > 0) {
|
||||
this.formData.startTime = this.formData.applyTime[0]
|
||||
this.formData.endTime = this.formData.applyTime[1]
|
||||
}
|
||||
this.$axios.post(loc() + "/doEdit", {kh_zb: JSON.stringify(this.formData)}, (res) => {
|
||||
const {code, data, msg} = res
|
||||
if (code == 0) {
|
||||
this.$message({
|
||||
message: msg,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
this.$message({
|
||||
message: msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
this.$refs.guava.index()
|
||||
this.pageData()
|
||||
},
|
||||
)
|
||||
},
|
||||
doDelete(id) {
|
||||
this.$confirm('您确定要删除吗!', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: (a, b) => {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
this.$axios.post(loc() + "/delete", {id: id}, (data) => {
|
||||
if (data.code === 0) {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
this.pageData();
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
async openView(id) {
|
||||
this.$refs.guava.view()
|
||||
this.loading = true;
|
||||
const {code, data, msg} = await this.$axios.get(loc() + '/edit', {id})
|
||||
if (code === 0) {
|
||||
this.viewData = data
|
||||
if (data.startTime && data.endTime) {
|
||||
this.$set(this.viewData, 'applyTime', [data.startTime, data.endTime])
|
||||
// this.formData.applyTime = [this.formData.startTime, this.formData.endTime]
|
||||
}
|
||||
}
|
||||
this.loading = false;
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+421
@@ -0,0 +1,421 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<search search="doSearch">
|
||||
<search-item label="年度">
|
||||
<el-date-picker
|
||||
:picker-options="pickerOptions"
|
||||
@change="getZbList"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.annual"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="选择年度">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="评测名称">
|
||||
<el-select v-model="pageForm.zbId" placeholder="请选择评测名称" filterable
|
||||
clearable
|
||||
@change="doSearch();zbData = zbList.find(v => v.id === pageForm.zbId)"
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in zbList"
|
||||
:key="item.id"
|
||||
:label="item.annual+item.assessment"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
|
||||
<search-item label="所属工会" v-if="$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')">
|
||||
<el-select placeholder="所属工会" v-model="pageForm.unionId"
|
||||
style="width: 100%;"
|
||||
clearable
|
||||
@change="doSearch"
|
||||
filterable>
|
||||
<el-option v-for="item in unions" :label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
</search>
|
||||
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<table-tool label="工会列表">
|
||||
</table-tool>
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
|
||||
:size="tableSize"
|
||||
v-loading="tableLoading" ref="table" class="vi-table">
|
||||
<el-table-column align="center" header-align="center" type="index"
|
||||
:index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
show-overflow-tooltip
|
||||
:sortable="column.sortable"
|
||||
:label="column.label"
|
||||
:prop="column.prop" :width="column.width" min-width="100px">
|
||||
<template v-if="column.prop=='isGrading'" scope="{row}">
|
||||
<el-tag v-if="row.isGrading" type="success">是</el-tag>
|
||||
<el-tag v-else type="danger">否</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
|
||||
width="380px" fixed="right">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" @click="openView(row)">查看</el-button>
|
||||
<el-button
|
||||
v-if="!row.isGrading && row.num > 0 && ${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}"
|
||||
size="mini" type="primary"
|
||||
@click="openGrading(row)">定级
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="row.isGrading && row.num > 0 && ${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}"
|
||||
size="mini" type="primary"
|
||||
@click="editGrading(row)">修改定级
|
||||
</el-button>
|
||||
<el-tooltip
|
||||
:content="canDownload ? ('导出【'+ row.unionName +'】管理员自我评议的评议结果') : ('导出【'+ row.unionName +'】下所有评议结果的压缩包') "
|
||||
placement="top">
|
||||
<el-button v-if="canDownload && row.num > 0" size="mini" type="primary"
|
||||
@click="doDownLoad(row,canDownload)">导出
|
||||
</el-button>
|
||||
</el-tooltip>
|
||||
<el-button size="mini" type="primary" @click="downloadFilesByUnion(row)">导出附件</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<template #view>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">工号/姓名:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input placeholder="请输入工号/姓名" v-model="userPageForm.searchKeyword">
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item" style="width: 480px !important;">
|
||||
<div class="search-item-option">
|
||||
<el-radio-group v-model="userPageForm.reviewResult"
|
||||
@change="doUserSearch">
|
||||
<el-radio-button label="">
|
||||
全部
|
||||
<span class="ml2">
|
||||
{{reviewResultData.fcmy + reviewResultData.my + reviewResultData.lh + reviewResultData.yb}}
|
||||
</span>
|
||||
</el-radio-button>
|
||||
<el-radio-button label="非常满意">非常满意
|
||||
<span class="ml2">{{reviewResultData.fcmy || 0}}</span>
|
||||
</el-radio-button>
|
||||
<el-radio-button label="满意">满意
|
||||
<span class="ml2">{{reviewResultData.my || 0}}</span>
|
||||
</el-radio-button>
|
||||
<el-radio-button label="良好">良好
|
||||
<span class="ml2">{{reviewResultData.lh || 0}}</span>
|
||||
</el-radio-button>
|
||||
<el-radio-button label="一般">一般
|
||||
<span class="ml2">{{reviewResultData.yb || 0}}</span>
|
||||
</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doUserSearch">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<el-table :data="userTableData" style="width: 100%" row-key="id"
|
||||
:size="tableSize" v-loading="tableLoading" ref="table" class="vi-table">
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index"
|
||||
:index="indexMethod" label="序号" width="80px"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in userTableColumns"
|
||||
show-overflow-tooltip
|
||||
:sortable="column.sortable"
|
||||
:label="column.label"
|
||||
:prop="column.prop" :width="column.width" min-width="100px">
|
||||
</el-table-column>
|
||||
<el-table-column prop="evaluatedPersonName" align="center" show-overflow-tooltip
|
||||
label="被测评人" v-if="zbData.assessmentMode==2"></el-table-column>
|
||||
<el-table-column prop="presidentOpinions" align="center" show-overflow-tooltip
|
||||
label="意见建议" v-if="zbData.assessmentMode==2"></el-table-column>
|
||||
<el-table-column prop="reviewTime" align="center"
|
||||
label="测评时间"></el-table-column>
|
||||
<el-table-column prop="userOnline" align="center" header-align="center"
|
||||
label="操作" width="240px" fixed="right">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" @click="openUserView(row)">查看</el-button>
|
||||
<el-button v-if="canDownload" size="mini" type="primary" @click="downloadByPeoId(row)">导出</el-button>
|
||||
<el-button v-if="canDownload" size="mini" type="primary" @click="downloadFilesByPeoId(row)">导出附件</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<el-row class="el-pagination-container" style="margin-bottom: 0px">
|
||||
<el-pagination
|
||||
@size-change="userPageSizeChange"
|
||||
@current-change="userPageNumberChange"
|
||||
:current-page="userPageForm.pageNumber"
|
||||
:page-sizes="[5,10, 20, 30, 50]"
|
||||
:page-size="userPageForm.pageSize"
|
||||
layout="total, sizes, prev, pager, next"
|
||||
:total="userPageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog title="评议结果" :visible.sync="userDrawer" close-on-press-escape>
|
||||
<review-result ref="reviewResultRef"></review-result>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog :title="gradingTitle" :visible.sync="gradingDialog" width="40%" :close-on-press-escape="false">
|
||||
<el-form :model="gradingData" ref="gradingForm" :rules="gradingRules" label-width="120px">
|
||||
<el-form-item prop="zbName" label="评测名称">
|
||||
<el-input readonly v-model="gradingData.zbName"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="unionName" label="定级分工会">
|
||||
<el-input readonly v-model="gradingData.unionName"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="gradingName" label="定级结果">
|
||||
<dict-select v-model="gradingData.gradingName" code="GRADING_TYPE" clearable
|
||||
placeholder="请选择定级结果" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="gradingDialog = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doGrading">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
<!--#include("../components/reviewResult.js"){}#-->
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
userDrawer: false,
|
||||
zbData: {},
|
||||
zpxx: {
|
||||
commentPeo: {},
|
||||
zbxx: []
|
||||
},
|
||||
unions: [],
|
||||
zbList: [],
|
||||
pageForm: {
|
||||
annual: new Date().getFullYear() + ''
|
||||
},
|
||||
pickerOptions: {
|
||||
disabledDate(time) {
|
||||
return (
|
||||
time.getFullYear() > new Date().getFullYear()
|
||||
);
|
||||
}
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'unionName', label: '分工会名称'},
|
||||
{prop: 'num', label: '测评人数'},
|
||||
{prop: 'isGrading', label: '是否定级'},
|
||||
{prop: 'gradingName', label: '定级结果'},
|
||||
],
|
||||
tableData: [],
|
||||
userTableData: [],
|
||||
userTableColumns: [
|
||||
{prop: 'loginName', label: '工号'},
|
||||
{prop: 'userName', label: '姓名'},
|
||||
{prop: 'unitName', label: '单位'},
|
||||
{prop: 'reviewResult', label: '测评结果'},
|
||||
],
|
||||
userPageForm: {
|
||||
reviewResult: "",
|
||||
searchName: "",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: ""
|
||||
},
|
||||
reviewResultData: {},
|
||||
|
||||
gradingDialog: false,
|
||||
gradingTitle: '',
|
||||
gradingData: {
|
||||
unionName: '',
|
||||
unionId: '',
|
||||
zbId: '',
|
||||
zbName: '',
|
||||
},
|
||||
gradingRules: {
|
||||
gradingName: [ {required: true, message: '请选择定级结果', trigger: 'blur'} ]
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'review-result': REVIEW_RESULT
|
||||
},
|
||||
methods: {
|
||||
editGrading(row) {
|
||||
this.gradingData = {...row}
|
||||
this.$set(this.gradingData, 'zbId', this.pageForm.zbId)
|
||||
this.$set(this.gradingData, 'zbName', this.zbList.find(v => v.id === this.pageForm.zbId).assessment)
|
||||
this.gradingDialog = true
|
||||
},
|
||||
doGrading() {
|
||||
this.$refs['gradingForm'].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const resp = await this.$axios.post(loc() + '/doGrading', this.gradingData)
|
||||
if (resp.code === 0) {
|
||||
this.gradingDialog = false
|
||||
this.pageData()
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
openGrading(row) {
|
||||
this.$set(this.gradingData, 'unionId', row.id)
|
||||
this.$set(this.gradingData, 'unionName', row.unionName)
|
||||
this.$set(this.gradingData, 'zbId', this.pageForm.zbId)
|
||||
this.$set(this.gradingData, 'zbName', this.zbList.find(v => v.id === this.pageForm.zbId).assessment)
|
||||
this.gradingDialog = true
|
||||
},
|
||||
doDownLoad(row, flag) {
|
||||
if (flag) {
|
||||
// 为true,自我评议
|
||||
window.open(loc() + '/doDownLoadSingleByUnionId?zbId=' + this.pageForm.zbId + '&unionId=' + row.id)
|
||||
} else {
|
||||
// false, 会员评议,导出压缩包
|
||||
window.open(loc() + '/doDownLoadZipByUnionId?zbId=' + this.pageForm.zbId + '&unionId=' + row.id)
|
||||
}
|
||||
},
|
||||
async downloadFilesByUnion(row) {
|
||||
const result = await this.validateHasFiles({unionId: row.id, zbId: this.pageForm.zbId})
|
||||
if (result) {
|
||||
window.open(loc() + '/exportFilesByUnionId?zbId=' + this.pageForm.zbId + '&unionId=' + row.id)
|
||||
}
|
||||
},
|
||||
downloadByPeoId(row) {
|
||||
window.open(loc() + '/exportByPeoId?peoId=' + row.id)
|
||||
},
|
||||
async downloadFilesByPeoId(row) {
|
||||
const result = await this.validateHasFiles({peoId: row.id})
|
||||
if (result) {
|
||||
window.open(loc() + '/exportFilesByPeoId?peoId=' + row.id)
|
||||
}
|
||||
},
|
||||
async validateHasFiles(data) {
|
||||
const res = await this.$axios.post('/platform/workershome/review/statistics/validateHasFiles', {
|
||||
peoId: data.peoId ? data.peoId : '',
|
||||
zbId: data.zbId ? data.zbId : '',
|
||||
unionId: data.unionId ? data.unionId : ''
|
||||
})
|
||||
if (res.code === 0) {
|
||||
return true
|
||||
} else {
|
||||
this.$message.warning("未上传附件,无法导出")
|
||||
return false
|
||||
}
|
||||
},
|
||||
async getReviewResultNum(row) {
|
||||
const res = await this.$axios.post(loc() + "/getReviewResultNum", {
|
||||
zbId: this.userPageForm.zbId,
|
||||
unionId: row.id
|
||||
})
|
||||
this.reviewResultData = res.data
|
||||
},
|
||||
async openUserView(row) {
|
||||
this.userDrawer = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.reviewResultRef.findOne(row.id)
|
||||
})
|
||||
},
|
||||
doUserSearch() {
|
||||
this.tableKey = new Date().getTime()
|
||||
this.userPageForm.pageNumber = 1
|
||||
this.userPageData()
|
||||
},
|
||||
userPageNumberChange(val) {
|
||||
this.userPageForm.pageNumber = val;
|
||||
this.userPageData();
|
||||
},
|
||||
userPageSizeChange(val) {
|
||||
this.userPageForm.pageSize = val;
|
||||
this.userPageData();
|
||||
},
|
||||
userPageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
this.$axios.post(loc() + "/getUserPeoByZbIdOrUnionId", this.userPageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.userTableData = data.data.list;
|
||||
this.userPageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
async openView(row) {
|
||||
this.userPageForm.searchKeyword = ''
|
||||
this.userPageForm.unionId = row.id
|
||||
this.userPageForm.zbId = this.pageForm.zbId
|
||||
this.userPageData()
|
||||
await this.getReviewResultNum(row)
|
||||
this.$refs.guava.view()
|
||||
|
||||
},
|
||||
async getZbList() {
|
||||
const res = await this.$axios.get("/platform/workershome/review/Xjkhzb/getZbList", {year: this.pageForm.annual})
|
||||
this.zbList = res.data
|
||||
if (res.data && res.data.length > 0) {
|
||||
this.$set(this.pageForm, "zbId", res.data[0].id)
|
||||
|
||||
} else {
|
||||
this.$set(this.pageForm, "zbId", null)
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
canDownload() {
|
||||
const data = this.zbList.find(v => v.id === this.pageForm.zbId)
|
||||
return data.scoringMode == 1
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await this.getZbList()
|
||||
this.unions = await this.$businessTool.listUnion()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
@@ -0,0 +1,137 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
|
||||
.el-card__header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<div>
|
||||
<h3 style="color: #1867b0">新建考核指标</h3>
|
||||
</div>
|
||||
<div>
|
||||
<el-button type="primary" @click="doAdd()">
|
||||
提交
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
<template>
|
||||
<review-proxy ref="unionZb" :data="formData" @change="v=>{this.formData=v}"></review-proxy>
|
||||
</template>
|
||||
</el-card>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
<!--#include("../components/addReviewProxy.js"){}#-->
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
v: 'index',
|
||||
formData: {},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'review-proxy': ADD_REVIEW_PROXY
|
||||
},
|
||||
methods: {
|
||||
async doAdd() {
|
||||
const {
|
||||
annual,
|
||||
assessment,
|
||||
assessmentMode,
|
||||
scoringMode,
|
||||
commentTarget,
|
||||
activityGroupId
|
||||
} = this.formData
|
||||
let flag = true
|
||||
if (!annual) {
|
||||
this.$message.warning("年度不能为空")
|
||||
return
|
||||
}
|
||||
if (!assessment) {
|
||||
this.$message.warning("测评名称不能为空")
|
||||
return
|
||||
}
|
||||
if (!scoringMode) {
|
||||
this.$message.warning("打分模式不能为空")
|
||||
return
|
||||
}
|
||||
if (!assessmentMode) {
|
||||
this.$message.warning("评测模式不能为空")
|
||||
return
|
||||
}
|
||||
if (!commentTarget) {
|
||||
this.$message.warning("测评对象不能为空")
|
||||
return
|
||||
}
|
||||
if (commentTarget == 1 && !activityGroupId) {
|
||||
this.$message.warning("发送人员范围不能为空")
|
||||
return
|
||||
}
|
||||
this.formData.nrs.forEach(nr => {
|
||||
nr.bzs.forEach(bz => {
|
||||
if (!nr.content) {
|
||||
this.$message.error("测评内容不能为空")
|
||||
flag = false;
|
||||
throw Error()
|
||||
} else if (!bz.inspection) {
|
||||
this.$message.error("测评标准不能为空")
|
||||
flag = false;
|
||||
throw Error()
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
if (!(this.formData.applyTime && this.formData.applyTime.length > 0)) {
|
||||
this.$message.warning('评议时间不能为空')
|
||||
return
|
||||
}
|
||||
|
||||
if (this.formData.commentTarget == 3 && !(this.formData.unionIds && this.formData.unionIds.length > 0)) {
|
||||
this.$message.warning('请选择评议分工会')
|
||||
return
|
||||
}
|
||||
|
||||
if (flag) {
|
||||
if (this.formData.applyTime && this.formData.applyTime.length > 0) {
|
||||
this.formData.startTime = this.formData.applyTime[0]
|
||||
this.formData.endTime = this.formData.applyTime[1]
|
||||
}
|
||||
|
||||
const res = await this.$axios.post(loc() + "/doAdd", {kh_zb: JSON.stringify(this.formData)})
|
||||
if (res.code === 0) {
|
||||
this.$set(this.formData, "nrs", [{bzs: [{}]}])
|
||||
this.$set(this.formData, "annual", null)
|
||||
this.$set(this.formData, "assessment", null)
|
||||
this.$set(this.formData, "assessmentMode", null)
|
||||
this.$set(this.formData, "workersNum", null)
|
||||
this.$set(this.formData, "scoringMode", null)
|
||||
this.$set(this.formData, "activityGroupId", null)
|
||||
this.$set(this.formData, "commentTarget", null)
|
||||
this.$set(this.formData, "zbId", null)
|
||||
this.$set(this.formData, "applyTime", undefined)
|
||||
this.$message.success(res.msg);
|
||||
} else {
|
||||
this.$message.error(res.msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,541 @@
|
||||
<div id="difficult_help_apply">
|
||||
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="0" label-suffix=":" class="flow-task-form">
|
||||
<el-descriptions :column="3" border>
|
||||
<el-descriptions-item label="填写人姓名">
|
||||
<el-form-item prop="proxyUserName">
|
||||
<el-input readonly v-model="formData.proxyUserName"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="填写人工号">
|
||||
<el-form-item prop="proxyLoginName">
|
||||
<el-input readonly v-model="formData.proxyLoginName"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="申请模式">
|
||||
<el-form-item prop="mode">
|
||||
<el-select v-model="formData.mode" placeholder="申请模式"
|
||||
@change="modeChange"
|
||||
:disabled="formData.id" style="width: 100%">
|
||||
<el-option label="本人申请" value="1"></el-option>
|
||||
<el-option v-if="$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN, BRANCH_UNION_CHAIRMAN, BRANCH_UNION_OPERATOR')"
|
||||
label="替他人申请" value="2"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="受补助人">
|
||||
<template v-if="formData.mode == 2">
|
||||
<el-select :remote-method="queryRecipients"
|
||||
@change="userChange" clearable filterable
|
||||
placeholder="输入工号或者姓名查找" remote
|
||||
style="width: 100%" v-model="formData.userId">
|
||||
<el-option :key="o.id"
|
||||
:label="o.username+'('+o.loginname+')'"
|
||||
:value="o.id"
|
||||
v-for="o in subsidizedList"></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-input readonly maxlength="100" type="text"
|
||||
v-model="formData.userName"></el-input>
|
||||
</template>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">
|
||||
<el-form-item prop="sex">
|
||||
<el-select v-model="formData.sex" placeholder="请选择性别" clearable style="width: 100%">
|
||||
<el-option v-for="item in ['男性','女性']" :key="item" :label="item" :value="item">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="出生年月">
|
||||
<el-form-item prop="birthday">
|
||||
<el-date-picker
|
||||
clearable
|
||||
style="width: 100%"
|
||||
v-model="formData.birthday"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="选择出生年月">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="所属单位">
|
||||
<el-form-item prop="unitName">
|
||||
<el-input maxlength="50" clearable placeholder="所在单位"
|
||||
readonly v-model="formData.unitName"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
<el-form-item prop="unionName">
|
||||
<el-input maxlength="50" clearable placeholder="所属工会"
|
||||
readonly v-model="formData.unionName"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="职务职称">
|
||||
<el-form-item prop="officialCapacity">
|
||||
<el-input maxlength="20" clearable placeholder="请填写职务职称"
|
||||
v-model="formData.officialCapacity"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="手机号码">
|
||||
<el-form-item prop="mobile">
|
||||
<el-input maxlength="11" clearable placeholder="请填写手机号码"
|
||||
v-model="formData.mobile" maxlength="11"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="身份证号" :span="2">
|
||||
<el-form-item prop="idCard">
|
||||
<el-input maxlength="20" clearable placeholder="请填写身份证号"
|
||||
v-model="formData.idCard" maxlength="18"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="本人月收入">
|
||||
<el-form-item prop="monthlyIncome">
|
||||
<el-input-number clearable
|
||||
style="width: 100%"
|
||||
v-model="formData.monthlyIncome"
|
||||
:min="0"
|
||||
:max="9999999"
|
||||
placeholder="请填写本人月收入">
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="收款账户" :span="2">
|
||||
<el-form-item prop="bankCardNum">
|
||||
<el-input maxlength="20" clearable placeholder="请填写华夏银行工资卡号"
|
||||
v-model="formData.bankCardNum"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="困难类型" :span="3">
|
||||
<el-form-item prop="subsidyStandards">
|
||||
<el-select v-model="formData.subsidyStandards" style="width: 100%">
|
||||
<el-option v-for="(item,index) in subsidyStandards" :key="index" :label="item"
|
||||
:value="item">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="申请原因" :span="3">
|
||||
<el-form-item prop="reason">
|
||||
<el-input maxlength="500" :autosize="{ minRows: 5, maxRows: 10}"
|
||||
placeholder="请简述申请原因"
|
||||
clearable
|
||||
show-word-limit
|
||||
v-model="formData.reason"
|
||||
type="textarea"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="家庭成员经济收入" :span="3">
|
||||
<el-form-item prop="familyList">
|
||||
<el-table :data="formData.familyList" border max-height="500" size="mini" style="width: 100%">
|
||||
<el-table-column type="index" label="序号" width="50" align="center"></el-table-column>
|
||||
<el-table-column prop="name" label="姓名">
|
||||
<template slot-scope="{row,$index}">
|
||||
<el-form-item label-width="0"
|
||||
:prop="'familyList.'+$index+'.name'"
|
||||
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-input v-model="row.name" placeholder="请输入姓名" clearable></el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="relation" label="年龄(岁)">
|
||||
<template slot-scope="{row,$index}">
|
||||
<el-form-item label-width="0"
|
||||
:prop="'familyList.'+$index+'.age'"
|
||||
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-input-number v-model="row.age" placeholder="请输入年龄" :min="1"
|
||||
:max="100" :step="1" style="width: 100%" clearable></el-input-number>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="relation" label="关系">
|
||||
<template slot-scope="{row,$index}">
|
||||
<el-form-item label-width="0"
|
||||
:prop="'familyList.'+$index+'.relation'"
|
||||
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-input v-model="row.relation" placeholder="请输入关系" clearable></el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="monthlyIncome" label="月收入(元)">
|
||||
<template slot-scope="{row,$index}">
|
||||
<el-form-item label-width="0"
|
||||
:prop="'familyList.'+$index+'.monthlyIncome'"
|
||||
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-input-number v-model="row.monthlyIncome" placeholder="请输入月收入"
|
||||
:min="1" :step="1" style="width: 100%" clearable></el-input-number>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="操作" width="150px">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<el-button @click="formData.familyList.push({})" icon="el-icon-plus" type="primary"
|
||||
size="mini">添加
|
||||
</el-button>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-button :disabled="formData.familyList.length==1"
|
||||
@click="formData.familyList.splice(scope.$index,1)"
|
||||
size="mini"
|
||||
icon="el-icon-delete"
|
||||
type="danger"></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="附件" :span="3">
|
||||
<el-form-item prop="files">
|
||||
<file-upload :value.sync="formData.files"
|
||||
upload_mode="drag"
|
||||
:upload_number="10" upload_result_category="array"
|
||||
complete_result></file-upload>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="签字" :span="3">
|
||||
<el-form-item prop="signature">
|
||||
<pc-signature v-model="formData.sign"></pc-signature>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-form>
|
||||
|
||||
<snaker-flow-task-form-action @task-action="handleTaskAction" @save-draft="handleSaveDraft"></snaker-flow-task-form-action>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
new Vue({
|
||||
el: '#difficult_help_apply',
|
||||
store,
|
||||
data() {
|
||||
return {
|
||||
businessId: GetQueryString("businessId"),
|
||||
instanceId: GetQueryString("instanceId"),
|
||||
formData: {
|
||||
id: GetQueryString("businessId"),
|
||||
mode: '1'
|
||||
},
|
||||
subsidyStandards: [
|
||||
'患重大疾病(癌症)',
|
||||
'本人家庭(仅指代本人及其配偶、子女共同组成的家庭)人均月收入低于1300元或本人配偶、子女患有重大疾病且自付医疗费用超过家庭年收入的80%',
|
||||
'患精神类疾病',
|
||||
'长期病休',
|
||||
'其他特殊情况'
|
||||
],
|
||||
formRules: {
|
||||
proxyUserName: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
proxyLoginName: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
sex: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
unitName: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
unionName: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
monthlyIncome: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
mobile: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
idCard: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
bankCardNum: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
officialCapacity: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
subsidyStandards: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
reason: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
sign: [{required: true, message: '必填', trigger: ['blur', 'change']}]
|
||||
},
|
||||
|
||||
// 替他人申请相关
|
||||
subsidizedList: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 查询受助人
|
||||
queryRecipients(key) {
|
||||
this.$axios.get("/platform/difficultHelp/apply/queryRecipients", {
|
||||
key
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.subsidizedList = res.data
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 提交
|
||||
handleTaskAction(val) {
|
||||
this.$refs.formRef.validate((valid) => {
|
||||
if (valid) {
|
||||
const result = this.isValidIdCard(this.formData.idCard)
|
||||
if (result.status === 0) {
|
||||
this.$message.warning(result.msg)
|
||||
return
|
||||
}
|
||||
const bankRes = this.validateCard(this.formData.bankCardNum)
|
||||
if (bankRes.status === 0) {
|
||||
this.$message.warning(bankRes.msg)
|
||||
return
|
||||
}
|
||||
|
||||
if (!this.instanceId) {
|
||||
this.handleApply(val)
|
||||
} else {
|
||||
this.handleReApply(val)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 提交申请
|
||||
handleApply(val) {
|
||||
this.$confirm("您确定要提交吗?", "提示", { type: "warning" })
|
||||
.then(() => {
|
||||
this.$refs.formRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$axios
|
||||
.post("/flow/common/startInstanceAndExecute", {
|
||||
...val,
|
||||
bizData: JSON.stringify(this.formData)
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success("操作成功")
|
||||
// 发送完成消息
|
||||
window.GlobalBroadcastChannel.postMessage({
|
||||
type: "task-complete"
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// 重新提交申请
|
||||
handleReApply(val) {
|
||||
this.$confirm("您确定要提交吗?", "提示", { type: "warning" })
|
||||
.then(() => {
|
||||
this.$axios
|
||||
.post("/flow/common/executeTask", {
|
||||
data: JSON.stringify({
|
||||
processTaskId: val.taskId,
|
||||
processInstanceId: val.instanceId,
|
||||
submitType: val.submitType,
|
||||
f_data: JSON.stringify(this.formData)
|
||||
})
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
window.GlobalBroadcastChannel.postMessage({
|
||||
type: "task-complete"
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// 保存
|
||||
handleSaveDraft(val) {
|
||||
this.$confirm("您确定要保存吗?", "提示", { type: "warning" })
|
||||
.then(() => {
|
||||
this.$axios
|
||||
.post("/flow/common/startInstance", {
|
||||
...val,
|
||||
bizData: JSON.stringify(this.formData)
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success("操作成功")
|
||||
// 发送完成消息
|
||||
window.parent.postMessage(
|
||||
{
|
||||
type: "task-complete"
|
||||
},
|
||||
"*"
|
||||
)
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
// 取消
|
||||
handleCancel() {
|
||||
|
||||
},
|
||||
findOne(id) {
|
||||
this.$axios.post('/platform/difficultyHelp/view/findOne', { id }).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.formData = res.data
|
||||
}
|
||||
})
|
||||
},
|
||||
async userChange() {
|
||||
const user = this.subsidizedList.find(item => item.id === this.formData.userId)
|
||||
if (user) {
|
||||
this.$set(this.formData, 'userId', user.id)
|
||||
this.$set(this.formData, 'userName', user.username)
|
||||
this.$set(this.formData, 'loginName', user.loginname)
|
||||
this.$set(this.formData, 'sex', user.sex)
|
||||
this.$set(this.formData, 'unitId', user.unitId)
|
||||
this.$set(this.formData, 'unitName', user.unitName)
|
||||
this.$set(this.formData, 'unionId', user.unionId)
|
||||
this.$set(this.formData, 'unionName', user.unionName)
|
||||
this.$set(this.formData, 'birthday', user.birthday)
|
||||
this.$set(this.formData, 'mobile', user.mobile)
|
||||
} else {
|
||||
this.$set(this.formData, 'userId', null)
|
||||
this.$set(this.formData, 'userName', null)
|
||||
this.$set(this.formData, 'loginName', null)
|
||||
this.$set(this.formData, 'sex', null)
|
||||
this.$set(this.formData, 'unitId', null)
|
||||
this.$set(this.formData, 'unitName', null)
|
||||
this.$set(this.formData, 'unionId', null)
|
||||
this.$set(this.formData, 'unionName', null)
|
||||
this.$set(this.formData, 'birthday', null)
|
||||
this.$set(this.formData, 'mobile', null)
|
||||
}
|
||||
},
|
||||
// 申请模式
|
||||
modeChange(val) {
|
||||
const user = this.$store.state.user
|
||||
if (val === "1") {
|
||||
this.$set(this.formData, 'userId', user.id)
|
||||
this.$set(this.formData, 'userName', user.username)
|
||||
this.$set(this.formData, 'loginName', user.loginname)
|
||||
this.$set(this.formData, 'proxyUserId', user.id)
|
||||
this.$set(this.formData, 'proxyUserName', user.username)
|
||||
this.$set(this.formData, 'proxyLoginName', user.loginname)
|
||||
this.$set(this.formData, 'mode', "1")
|
||||
this.$set(this.formData, 'sex', user.sex)
|
||||
this.$set(this.formData, 'unitId', user.unit.id)
|
||||
this.$set(this.formData, 'unitName', user.unit.name)
|
||||
this.$set(this.formData, 'unionId', user.union.id)
|
||||
this.$set(this.formData, 'unionName', user.union.name)
|
||||
this.$set(this.formData, 'monthlyIncome', null)
|
||||
this.$set(this.formData, 'birthday', user.birthday)
|
||||
this.$set(this.formData, 'mobile', user.mobile)
|
||||
this.$set(this.formData, 'homeAddress', user.homeAddress)
|
||||
this.$set(this.formData, 'subsidyStandards', null)
|
||||
this.$set(this.formData, 'reason', null)
|
||||
this.$set(this.formData, 'remarks', null)
|
||||
this.$set(this.formData, 'familyList', [])
|
||||
this.$set(this.formData, 'files', [])
|
||||
this.queryRecipients(user.loginname)
|
||||
} else {
|
||||
this.formData = {}
|
||||
this.$set(this.formData, 'proxyUserId', user.id)
|
||||
this.$set(this.formData, 'proxyUserName', user.username)
|
||||
this.$set(this.formData, 'proxyLoginName', user.loginname)
|
||||
this.$set(this.formData, 'mode', "2")
|
||||
this.$set(this.formData, 'familyList', [])
|
||||
this.$set(this.formData, 'files', [])
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 检验身份证号
|
||||
* @param idCard
|
||||
* @returns {{status: number, msg: string}}
|
||||
*/
|
||||
isValidIdCard(idCard) {
|
||||
// 校验18位身份证号
|
||||
const format18 = /^(((([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([5][0-4])|([6][1-5])|([7][1])|([8][1-2]))\d{4})|(([9](([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([5][0-4])|([6][1-5])|([7][1])|([8][1-2])))\d{3}))(([1][9]\d{2})|([2]\d{3}))(([0][1-9])|([1][0-2]))(([0][1-9])|([1-2][0-9])|([3][0-1]))\d{3}[0-9xX]$/;
|
||||
// 校验15位身份证号
|
||||
const format15 = /^\d{15}$/;
|
||||
// 校验外国人永久居留身份证号
|
||||
const format15Foreign = /^[a-zA-Z]{3}[0-9]{4}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{2}$/;
|
||||
|
||||
// 校验格式
|
||||
if (!(format18.test(idCard) || format15.test(idCard) || format15Foreign.test(idCard))) {
|
||||
return { status: 0, msg: '身份证号码格式不正确' };
|
||||
}
|
||||
|
||||
// 校验出生日期
|
||||
let year, month, day;
|
||||
if (idCard.length === 18) {
|
||||
year = idCard.substr(6, 4);
|
||||
month = idCard.substr(10, 2);
|
||||
day = idCard.substr(12, 2);
|
||||
} else if (idCard.length === 15) {
|
||||
year = '19' + idCard.substr(6, 2);
|
||||
month = idCard.substr(8, 2);
|
||||
day = idCard.substr(10, 2);
|
||||
} else {
|
||||
return { status: 0, msg: '身份证号码格式不正确' };
|
||||
}
|
||||
|
||||
const date = new Date(year, month - 1, day);
|
||||
if (date.getFullYear() !== parseInt(year, 10) || date.getMonth() + 1 !== parseInt(month, 10) || date.getDate() !== parseInt(day, 10)) {
|
||||
return { status: 0, msg: '身份证出生日期不正确' };
|
||||
}
|
||||
|
||||
// 校验18位身份证号的校验码
|
||||
if (idCard.length === 18) {
|
||||
const coefficients = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
|
||||
const checkCodeMap = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
|
||||
let sum = 0;
|
||||
for (let i = 0; i < 17; i++) {
|
||||
sum += parseInt(idCard.charAt(i), 10) * coefficients[i];
|
||||
}
|
||||
const checkCode = checkCodeMap[sum % 11];
|
||||
if (checkCode.toUpperCase() !== idCard.charAt(17).toUpperCase()) {
|
||||
return { status: 0, msg: '身份证校验码不正确' };
|
||||
}
|
||||
}
|
||||
|
||||
return { status: 1, msg: '校验通过' };
|
||||
},
|
||||
/**
|
||||
* 校验银行卡号
|
||||
* @param bankCardNum
|
||||
* @returns {{status: number, msg: string}}
|
||||
*/
|
||||
validateCard(bankCardNum) {
|
||||
// 移除所有空格
|
||||
bankCardNum = bankCardNum.replace(/\s+/g, '');
|
||||
// 检查格式
|
||||
const cardRegex = /^\d{13,19}$/;
|
||||
if (!cardRegex.test(bankCardNum)) {
|
||||
return { status: 0, msg: "银行卡号格式不正确,请输入13到19位数字。" };
|
||||
}
|
||||
// 检查Luhn算法
|
||||
if (!/^\d+$/.test(bankCardNum)) {
|
||||
return { status: 0, msg: "无效的卡号,请检查后再试。" };
|
||||
}
|
||||
let sum = 0;
|
||||
let shouldDouble = false;
|
||||
for (let i = bankCardNum.length - 1; i >= 0; i--) {
|
||||
let digit = parseInt(bankCardNum.charAt(i));
|
||||
if (shouldDouble) {
|
||||
digit *= 2;
|
||||
if (digit > 9) {
|
||||
digit -= 9;
|
||||
}
|
||||
}
|
||||
sum += digit;
|
||||
shouldDouble = !shouldDouble;
|
||||
}
|
||||
if ((sum % 10) !== 0) {
|
||||
return { status: 0, msg: "无效的卡号,请检查后再试。" };
|
||||
}
|
||||
return { status: 200, msg: "卡号有效。" };
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
if (this.businessId) {
|
||||
this.findOne(this.businessId)
|
||||
} else {
|
||||
this.modeChange("1")
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
@@ -0,0 +1,177 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度">
|
||||
<el-date-picker
|
||||
placeholder="年度"
|
||||
type="year"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="受助人">
|
||||
<el-input placeholder="请输入受助人工号或姓名" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="flushUnits" @clear="flushUnits" clearable
|
||||
filterable
|
||||
placeholder="所属工会"
|
||||
style="width: 100%;"
|
||||
v-model="pageForm.unionId">
|
||||
<el-option :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
|
||||
<search-item label="所属单位">
|
||||
<el-select clearable filterable 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>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool :app="this" label="申请记录">
|
||||
<el-button size="small" type="primary" @click="onApply">帮扶申请</el-button>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
|
||||
ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column :index="indexMethod" header-align="center" label="序号"
|
||||
type="index" width="60px"></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='instanceState'">
|
||||
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
|
||||
size="small"></enum-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220" fixed="right">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">
|
||||
查看
|
||||
</el-button>
|
||||
<el-button v-if="row.taskKey === 'startTask'" @click="onEdit(row)" size="mini" type="primary">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">
|
||||
撤回
|
||||
</el-button>
|
||||
<el-button @click="onDelete(row.id)" size="mini" type="danger">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
store,
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
year: this.$moment().format("YYYY")
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "loginName", label: "工号", sortable: true },
|
||||
{ prop: "userName", label: "姓名", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "subsidyStandards", label: "困难类型", sortable: true },
|
||||
{ prop: "applyTime", label: "申请时间", sortable: true },
|
||||
{ prop: "taskName", label: "当前节点"},
|
||||
{ prop: "instanceState", label: "流程状态"}
|
||||
],
|
||||
unions: [],
|
||||
units: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onApply() {
|
||||
window.open("/flow/common/approval/form?defineKey=KNBF")
|
||||
},
|
||||
openView(row) {
|
||||
window.open("/flow/common/approval/form?instanceId=" + (row.instanceId || "") + "&businessId=" + row.id + "&defineKey=KNBF")
|
||||
},
|
||||
onEdit(row) {
|
||||
window.open(
|
||||
"/flow/common/approval/form?taskId=" +
|
||||
(row.taskId || "") +
|
||||
"&instanceId=" +
|
||||
(row.instanceId || "") +
|
||||
"&businessId=" +
|
||||
row.id +
|
||||
"&defineKey=HYRH"
|
||||
)
|
||||
},
|
||||
onRevoke(row) {
|
||||
this.$confirm("您确定要撤回吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.$axios.post("/flow/common/revokeTask", { taskId: row.startTaskId }).then((resp) => {
|
||||
this.$message.success(resp.msg)
|
||||
this.pageData()
|
||||
})
|
||||
})
|
||||
},
|
||||
onDelete(id) {
|
||||
this.$confirm("您确定要删除吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.$axios.post("/platform/difficultHelp/apply/onDelete", { id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.doSearch()
|
||||
this.$message.success(res.msg)
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
async flushUnits(){
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')) {
|
||||
this.units = await this.$businessTool.listUnit(this.pageForm.unionId)
|
||||
} else {
|
||||
this.units = await this.$businessTool.listUnit(this.$store.state.user.union.id)
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')) {
|
||||
this.unions = await this.$businessTool.listUnion()
|
||||
} else {
|
||||
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
<div id="difficult_help_branch_union_approval_form">
|
||||
<el-form :model="formData" ref="formRef" label-width="0" label-suffix=":" class="flow-task-form">
|
||||
<el-form-item label="审批意见" prop="tf_opinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<snaker-flow-task-form-action @task-action="handleTaskAction" @cancel="handleCancel"></snaker-flow-task-form-action>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#difficult_help_branch_union_approval_form",
|
||||
data() {
|
||||
return {
|
||||
businessId: GetQueryString("businessId"),
|
||||
formData: {
|
||||
tf_opinion: ""
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleTaskAction(val) {
|
||||
console.log(val)
|
||||
this.$axios.post("/flow/common/executeTask", {
|
||||
data: JSON.stringify({
|
||||
...val,
|
||||
...this.formData
|
||||
})
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success("操作成功")
|
||||
// 发送完成消息
|
||||
window.GlobalBroadcastChannel.postMessage({
|
||||
type: "task-complete",
|
||||
payload: val
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
handleCancel(val) {
|
||||
console.log(val)
|
||||
},
|
||||
}
|
||||
})
|
||||
</script>
|
||||
+141
@@ -0,0 +1,141 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度">
|
||||
<el-date-picker
|
||||
placeholder="年度"
|
||||
type="year"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="受助人">
|
||||
<el-input placeholder="请输入受助人工号或姓名" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="flushUnits" @clear="flushUnits" clearable
|
||||
filterable
|
||||
placeholder="所属工会"
|
||||
style="width: 100%;"
|
||||
v-model="pageForm.unionId">
|
||||
<el-option :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
|
||||
<search-item label="所属单位">
|
||||
<el-select clearable filterable 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>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool :app="this" label="审批列表">
|
||||
<el-radio-group @change="doSearch" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
|
||||
ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column :index="indexMethod" header-align="center" label="序号"
|
||||
type="index" width="60px"></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='instanceState'">
|
||||
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
|
||||
size="small"></enum-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" fixed="right" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
|
||||
<el-button v-if="row.taskState === 10" @click="openApproval(row)" size="mini" type="primary">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button v-if="row.canRevoke" @click="openRevoke(row)" size="mini" type="danger">
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
store,
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
year: this.$moment().format("YYYY"),
|
||||
audit: false
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "loginName", label: "工号", sortable: true },
|
||||
{ prop: "userName", label: "姓名", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "subsidyStandards", label: "困难类型", sortable: true },
|
||||
{ prop: "applyTime", label: "申请时间", sortable: true },
|
||||
{ prop: "taskName", label: "当前节点"},
|
||||
{ prop: "instanceState", label: "流程状态"}
|
||||
],
|
||||
unions: [],
|
||||
units: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
window.open("/flow/common/approval/form?instanceId=" + (row.instanceId || "") + "&businessId=" + row.id + "&defineKey=KNBF")
|
||||
},
|
||||
openApproval(row) {
|
||||
window.open("/flow/common/approval/form?taskId=" + row.taskId + "&instanceId=" + row.instanceId + "&businessId=" + row.businessNo)
|
||||
},
|
||||
openRevoke(row) {
|
||||
console.log(row)
|
||||
},
|
||||
async flushUnits(){
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')) {
|
||||
this.units = await this.$businessTool.listUnit(this.pageForm.unionId)
|
||||
} else {
|
||||
this.units = await this.$businessTool.listUnit(this.$store.state.user.union.id)
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')) {
|
||||
this.unions = await this.$businessTool.listUnion()
|
||||
} else {
|
||||
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
<div id="difficult_help_school_union_approval_form">
|
||||
<el-form :model="formData" ref="formRef" label-width="0" label-suffix=":" class="flow-task-form">
|
||||
<el-form-item label="审核金额" prop="tf_money" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-input-number placeholder="请输入金额" v-model="formData.tf_money"></el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="审批意见" prop="tf_opinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<snaker-flow-task-form-action @task-action="handleTaskAction" @cancel="handleCancel"></snaker-flow-task-form-action>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#difficult_help_school_union_approval_form",
|
||||
data() {
|
||||
return {
|
||||
businessId: GetQueryString("businessId"),
|
||||
formData: {
|
||||
tf_money: 0,
|
||||
tf_opinion: "",
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleTaskAction(val) {
|
||||
console.log(val)
|
||||
this.$axios.post("/flow/common/executeTask", {
|
||||
data: JSON.stringify({
|
||||
...val,
|
||||
...this.formData
|
||||
})
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success("操作成功")
|
||||
// 发送完成消息
|
||||
window.GlobalBroadcastChannel.postMessage({
|
||||
type: "task-complete",
|
||||
payload: val
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
handleCancel(val) {
|
||||
console.log(val)
|
||||
},
|
||||
}
|
||||
})
|
||||
</script>
|
||||
+141
@@ -0,0 +1,141 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度">
|
||||
<el-date-picker
|
||||
placeholder="年度"
|
||||
type="year"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="受助人">
|
||||
<el-input placeholder="请输入受助人工号或姓名" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="flushUnits" @clear="flushUnits" clearable
|
||||
filterable
|
||||
placeholder="所属工会"
|
||||
style="width: 100%;"
|
||||
v-model="pageForm.unionId">
|
||||
<el-option :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
|
||||
<search-item label="所属单位">
|
||||
<el-select clearable filterable 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>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool :app="this" label="审批列表">
|
||||
<el-radio-group @change="doSearch" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
|
||||
ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column :index="indexMethod" header-align="center" label="序号"
|
||||
type="index" width="60px"></el-table-column>
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='instanceState'">
|
||||
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
|
||||
size="small"></enum-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" fixed="right" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
|
||||
<el-button v-if="row.taskState === 10" @click="openApproval(row)" size="mini" type="primary">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button v-if="row.canRevoke" @click="openRevoke(row)" size="mini" type="danger">
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
store,
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
year: this.$moment().format("YYYY"),
|
||||
audit: false
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "loginName", label: "工号", sortable: true },
|
||||
{ prop: "userName", label: "姓名", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "subsidyStandards", label: "困难类型", sortable: true },
|
||||
{ prop: "applyTime", label: "申请时间", sortable: true },
|
||||
{ prop: "taskName", label: "当前节点"},
|
||||
{ prop: "instanceState", label: "流程状态"}
|
||||
],
|
||||
unions: [],
|
||||
units: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
window.open("/flow/common/approval/form?instanceId=" + (row.instanceId || "") + "&businessId=" + row.id + "&defineKey=KNBF")
|
||||
},
|
||||
openApproval(row) {
|
||||
window.open("/flow/common/approval/form?taskId=" + row.taskId + "&instanceId=" + row.instanceId + "&businessId=" + row.businessNo)
|
||||
},
|
||||
openRevoke(row) {
|
||||
console.log(row)
|
||||
},
|
||||
async flushUnits(){
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')) {
|
||||
this.units = await this.$businessTool.listUnit(this.pageForm.unionId)
|
||||
} else {
|
||||
this.units = await this.$businessTool.listUnit(this.$store.state.user.union.id)
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')) {
|
||||
this.unions = await this.$businessTool.listUnion()
|
||||
} else {
|
||||
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,126 @@
|
||||
<div id="difficult_help_view">
|
||||
<el-descriptions :column="3" border>
|
||||
<el-descriptions-item label="填写人姓名">{{ viewData.proxyUserName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="填写人工号">{{ viewData.proxyLoginName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="申请模式">{{ viewData.mode == 1 ? '本人申请' : '替他人申请' }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="受助人">{{ viewData.userName + '(' + viewData.loginName + ')' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
|
||||
<el-descriptions-item label="出生年月">{{ viewData.birthday }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="所属工会">{{ viewData.unionName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属单位">{{ viewData.unitName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="职务职称">{{ viewData.officialCapacity }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="手机号码">{{ viewData.mobile }}</el-descriptions-item>
|
||||
<el-descriptions-item label="身份证号" :span="2">{{ viewData.idCard }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="月收入">{{ viewData.monthlyIncome }}</el-descriptions-item>
|
||||
<el-descriptions-item label="收款账户" :span="2">{{ viewData.bankCardNum }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="困难类型" :span="3">{{ viewData.subsidyStandards }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="申请原因" :span="3">{{ viewData.reason }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="家庭成员经济收入" :span="3">
|
||||
<el-table :data="viewData.familyList" border style="width: 92%">
|
||||
<el-table-column label="序号" type="index" width="50"></el-table-column>
|
||||
<el-table-column label="姓名" prop="name"></el-table-column>
|
||||
<el-table-column prop="relation" label="年龄(岁)"></el-table-column>
|
||||
<el-table-column prop="relation" label="关系"></el-table-column>
|
||||
<el-table-column prop="monthlyIncome" label="月收入(元)"></el-table-column>
|
||||
</el-table>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="附件" :span="3">
|
||||
<file-preview v-if="viewData.files && viewData.files.length > 0" :files="viewData.files" complete_result></file-preview>
|
||||
<span v-else>暂无</span>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="签字" :span="3">
|
||||
<el-image v-if="viewData.sign"
|
||||
:src="viewData.sign"
|
||||
class="signature-image"></el-image>
|
||||
<span v-else>暂无</span>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
|
||||
<template v-for="task in doneTasks">
|
||||
<div class="task-panel mt10">
|
||||
<div class="task-panel-header">{{ 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>
|
||||
|
||||
<template v-if="task.taskFormData.tf_money">
|
||||
<el-descriptions-item label="审批金额">{{ task.tf_money }}</el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<el-descriptions-item label="办理意见" :span="3" v-if="!task.ext.isFirstTaskNode">{{ task.taskFormData.opinion }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#difficult_help_view",
|
||||
data() {
|
||||
return {
|
||||
businessId: GetQueryString("businessId"),
|
||||
instanceId: GetQueryString("instanceId"),
|
||||
viewData: {},
|
||||
doneTasks: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
info() {
|
||||
this.$axios.post("/platform/difficultHelp/view/findOne", { id: this.businessId }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.viewData = res.data
|
||||
}
|
||||
})
|
||||
},
|
||||
getDoneTasks() {
|
||||
this.$axios.post("/flow/common/doneTasks", { instanceId: this.instance})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.info()
|
||||
this.getDoneTasks()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.task-panel {
|
||||
background: white;
|
||||
border-radius: 4px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.task-panel-header {
|
||||
background: rgb(250, 250, 250);
|
||||
border: 1px solid rgb(228, 231, 237);
|
||||
border-bottom: none;
|
||||
padding: 12px 16px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.el-descriptions-item__label.is-bordered-label {
|
||||
width: 15%;
|
||||
}
|
||||
</style>
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
<div id="member_apply_branch_union_approval_form">
|
||||
<el-form :model="formData" ref="formRef" label-width="0" label-suffix=":" class="flow-task-form">
|
||||
<el-form-item label="审批意见" prop="tf_opinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<snaker-flow-task-form-action @task-action="handleTaskAction" @cancel="handleCancel"></snaker-flow-task-form-action>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#member_apply_branch_union_approval_form",
|
||||
data() {
|
||||
return {
|
||||
businessId: GetQueryString("businessId"),
|
||||
formData: {
|
||||
tf_opinion: ""
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleTaskAction(val) {
|
||||
console.log(val)
|
||||
this.$axios.post("/flow/common/executeTask", {
|
||||
data: JSON.stringify({
|
||||
...val,
|
||||
...this.formData
|
||||
})
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success("操作成功")
|
||||
// 发送完成消息
|
||||
window.GlobalBroadcastChannel.postMessage({
|
||||
type: "task-complete",
|
||||
payload: val
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
handleCancel(val) {
|
||||
console.log(val)
|
||||
},
|
||||
}
|
||||
})
|
||||
</script>
|
||||
+126
@@ -0,0 +1,126 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="申请列表">
|
||||
<el-radio-group @change="doSearch" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<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"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='sign'">
|
||||
<el-image v-if="row.sign" :src="row.sign" style="height: 60px"></el-image>
|
||||
<el-tag type="warning" v-else>暂无</el-tag>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='instanceState'">
|
||||
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
|
||||
size="small"></enum-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" fixed="right" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
|
||||
<el-button v-if="row.taskState === 10" @click="openApproval(row)" size="mini" type="primary">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button v-if="row.canRevoke" @click="openRevoke(row)" size="mini" type="danger">
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
audit: false
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "loginName", label: "工号", sortable: true },
|
||||
{ prop: "userName", label: "姓名", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "preparedBy", label: "聘用方式", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "sign", label: "签字" },
|
||||
{ prop: "taskName", label: "当前节点" },
|
||||
{ prop: "instanceState", label: "流程状态" }
|
||||
],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'common-query': COMMON_QUERY,
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
window.open("/flow/common/approval/form?instanceId=" + (row.instanceId || "") + "&businessId=" + row.id + "&defineKey=HYRH")
|
||||
},
|
||||
openApproval(row) {
|
||||
window.open("/flow/common/approval/form?taskId=" + row.taskId + "&instanceId=" + row.instanceId + "&businessId=" + row.businessNo)
|
||||
},
|
||||
openRevoke(taskId) {
|
||||
this.$confirm("您确定要撤回吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "info"
|
||||
}).then(() => {
|
||||
// this.$axios.post("/platform/member/apply/branchUnionAudit/revoke", { taskId }).then((res) => {
|
||||
// if (res.code === 0) {
|
||||
// this.$message.success(res.msg)
|
||||
// this.doSearch()
|
||||
// } else {
|
||||
// this.$message.warning(res.msg)
|
||||
// }
|
||||
// })
|
||||
})
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
-233
@@ -1,233 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名/工号">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
<search-item label="所属工会">
|
||||
<el-select
|
||||
@change="flushUnits"
|
||||
@clear="flushUnits"
|
||||
clearable
|
||||
filterable
|
||||
placeholder="所属工会"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.unionId"
|
||||
>
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="所属单位">
|
||||
<el-select clearable filterable placeholder="请选择" style="width: 100%" v-model="pageForm.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch" code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="聘用方式">
|
||||
<dict-select v-model="pageForm.preparedBy" placeholder="聘用方式" @change="doSearch" code="PREPARED_BY"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch" code="PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="申请列表">
|
||||
<el-radio-group @change="doSearch" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<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"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" fixed="right" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" type="primary" @click="openChangeView(row)">查看</el-button>
|
||||
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete"
|
||||
@click="openRevoke(row.processInstanceTaskId)"
|
||||
size="mini"
|
||||
type="danger"
|
||||
>
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
<template #view>
|
||||
<member-info ref="memberInfoRef"></member-info>
|
||||
</template>
|
||||
<template #public>
|
||||
<member-audit-change-info ref="memberAuditChangeInfoRef"></member-audit-change-info>
|
||||
<div v-if="showApprovalForm">
|
||||
<div class="process-title">{{formData.processInstanceNodeName}}</div>
|
||||
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
|
||||
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
|
||||
</el-form-item>
|
||||
<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
|
||||
<pc-signature v-model="formData.approvalSignature"></pc-signature>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button plain @click="$refs.guava.index()">取消</el-button>
|
||||
<el-button type="danger" @click="doApproval('BACK')">退回重新申请</el-button>
|
||||
<el-button type="danger" @click="doApproval('REJECT')">拒绝申请</el-button>
|
||||
<el-button type="primary" @click="doApproval('PASS')">同意申请</el-button>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("../../common/info/memberInfo.js"){}#-->
|
||||
<!--#include("../../common/audit/memberAuditChangeInfo.js"){}#-->
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
audit: false
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "preparedBy", label: "聘用方式", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "processInstanceNodeName", label: "当前节点", sortable: true }
|
||||
],
|
||||
unions: [],
|
||||
units: [],
|
||||
showApprovalForm: false
|
||||
}
|
||||
},
|
||||
components: {
|
||||
"member-info": MEMBER_INFO,
|
||||
"member-audit-change-info": MEMBER_AUDIT_CHANGE_INFO
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.memberInfoRef.onOpen(row.userId)
|
||||
})
|
||||
},
|
||||
openChangeView(row) {
|
||||
this.$refs.guava.public(() => {
|
||||
this.showApprovalForm = false
|
||||
this.$refs.memberAuditChangeInfoRef.onOpen({ recordId: row.id, userId: row.userId })
|
||||
})
|
||||
},
|
||||
openApproval(row) {
|
||||
this.$refs.guava.public(() => {
|
||||
this.showApprovalForm = true
|
||||
this.formData = row.approvalParam
|
||||
this.$refs.memberAuditChangeInfoRef.onOpen({ recordId: row.id, userId: row.userId })
|
||||
})
|
||||
},
|
||||
doApproval(approvalType) {
|
||||
this.formData.bpmTaskApprovalType = approvalType
|
||||
this.$refs.approvalFormRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$axios
|
||||
.post(loc() + "/approval", {
|
||||
approval: JSON.stringify(this.formData)
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$refs.guava.index()
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
openRevoke(taskId) {
|
||||
this.$confirm("您确定要撤回吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "info"
|
||||
}).then(() => {
|
||||
this.$axios.post(loc() + "/revoke", { taskId }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
initData() {
|
||||
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
|
||||
this.$businessTool.listUnion(this.pageForm.unionId).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
this.$businessTool.listUnit().then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
} else {
|
||||
this.$businessTool.listUnion(this.$store.state.user.union.id).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
this.$businessTool.listUnit(this.$store.state.user.union.id).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.initData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,85 @@
|
||||
const COMMON_QUERY = {
|
||||
template: /*language=HTML*/ `
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名/工号">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
<template v-if="$auth.hasRoleOr(['SYSADMIN', 'SCHOOL_UNION_ADMIN', 'BRANCH_UNION_CHAIRMAN'])">
|
||||
<search-item label="所属工会">
|
||||
<el-select
|
||||
@change="flushUnits"
|
||||
@clear="flushUnits"
|
||||
clearable
|
||||
filterable
|
||||
placeholder="所属工会"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.unionId"
|
||||
>
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="所属单位">
|
||||
<el-select clearable filterable placeholder="请选择" style="width: 100%" v-model="pageForm.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch" code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="聘用方式">
|
||||
<dict-select v-model="pageForm.preparedBy" placeholder="聘用方式" @change="doSearch" code="PREPARED_BY"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch" code="PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</template>
|
||||
</search>
|
||||
`,
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return{
|
||||
unions: [],
|
||||
units: [],
|
||||
pageForm: {
|
||||
searchKeyword: '',
|
||||
unionId: '',
|
||||
unitId: '',
|
||||
userState: '',
|
||||
personType: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doSearch(){
|
||||
this.$emit('search', this.pageForm)
|
||||
},
|
||||
async initData(){
|
||||
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
|
||||
this.$businessTool.listUnion(this.pageForm.unionId).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
this.$businessTool.listUnit().then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
} else if (this.$auth.hasRole("BRANCH_UNION_CHAIRMAN")) {
|
||||
this.$businessTool.listUnion(this.$store.state.user.union.id).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
this.$businessTool.listUnit(this.$store.state.user.union.id).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
},
|
||||
async flushUnits(){
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.units = await this.$businessTool.listUnit(this.pageForm.unionId)
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.initData()
|
||||
}
|
||||
}
|
||||
+127
@@ -0,0 +1,127 @@
|
||||
const MEMBER_APPLY_AUDIT_INFO = {
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<el-tabs v-model="activeName">
|
||||
<el-tab-pane label="申请信息" name="basicInfo">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="工号">{{ viewData.loginname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">{{ viewData.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">{{ viewData.nation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="出生日期">{{ moment(viewData.birthday).format("YYYY年MM月DD日") }}</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="学历">{{ viewData.education }}</el-descriptions-item>
|
||||
<el-descriptions-item label="学位">{{ viewData.academicDegree }}</el-descriptions-item>
|
||||
<el-descriptions-item label="党政职务">{{ viewData.position }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="工作单位">{{ viewData.userUnitName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">{{ viewData.userUnionName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属校区">{{ viewData.campus }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">{{ viewData.idCard }}</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.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-table v-if="viewData.families&&viewData.families.length"
|
||||
:data="viewData.families" size="mini" border
|
||||
:header-cell-style="{background:'#eff3f6'}"
|
||||
style="width: 100%">
|
||||
<el-table-column prop="relation" label="与本人关系" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="姓名" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="unit" label="单位" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="remark" label="备注" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-empty v-else :image-size="50" description="暂无家庭成员信息"></el-empty>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="个人简况" :span="3">
|
||||
<div v-if="viewData.vita" class="text-left" v-html="viewData.vita"></div>
|
||||
<el-tag type="warning" v-else>暂无</el-tag>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="签字信息" :span="3">
|
||||
<el-image v-if="viewData.sign" :src="viewData.sign"
|
||||
class="signature-image"></el-image>
|
||||
<el-tag type="warning" v-else>暂无</el-tag>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane v-if="viewData.nodeTasks && viewData.nodeTasks.length > 0" label="审核信息" name="audit">
|
||||
<div>
|
||||
<div v-for="nodeTask in viewData.nodeTasks" :key="nodeTask.id">
|
||||
<div class="process-title">
|
||||
{{nodeTask.nodeName}}
|
||||
</div>
|
||||
<el-descriptions :column="3" border v-for="task in nodeTask.tasks" :key="task.id"
|
||||
style="margin-bottom: 10px">
|
||||
<el-descriptions-item label="审核人">
|
||||
{{ task.actualOwnerLoginName + '-' + task.actualOwnerUserName}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核时间">{{ task.endOn}}</el-descriptions-item>
|
||||
<el-descriptions-item label="审核结果">
|
||||
<div v-if="task.extVariable">
|
||||
<el-tag type="success" size="mini"
|
||||
v-if="task.extVariable.bpmTaskApprovalType === 'PASS'">同意
|
||||
</el-tag>
|
||||
<el-tag type="danger" size="mini"
|
||||
v-if="task.extVariable.bpmTaskApprovalType === 'BACK'">退回
|
||||
</el-tag>
|
||||
<el-tag type="danger" size="mini"
|
||||
v-if="task.extVariable.bpmTaskApprovalType === 'REJECT'">拒绝
|
||||
</el-tag>
|
||||
</div>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核意见" :span="3">
|
||||
{{ task.extVariable.approvalOpinion }}
|
||||
</el-descriptions-item>
|
||||
<template v-if="$auth.hasRoleOr('SYSADMIN') && task.extVariable.approvalRemark">
|
||||
<el-descriptions-item label="审核说明" :span="3">
|
||||
{{ task.extVariable.approvalRemark }}
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<el-descriptions-item label="签字" :span="3">
|
||||
<el-image :src="task.extVariable.approvalSignature"
|
||||
v-if="task.extVariable && task.extVariable.approvalSignature"
|
||||
class="signature-image"></el-image>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
`,
|
||||
data() {
|
||||
return{
|
||||
activeName: "basicInfo",
|
||||
viewData: {
|
||||
nodeTasks: {}
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async onOpen(id){
|
||||
const resp = await $.post('/platform/member/apply/mine/findMemberApplyRecord', {id})
|
||||
if (resp.code === 0) {
|
||||
this.viewData = resp.data
|
||||
this.$emit('union-name', this.viewData.userUnionName)
|
||||
if (this.viewData.families) {
|
||||
this.viewData.families = JSON.parse(this.viewData.families)
|
||||
} else {
|
||||
this.viewData.families = []
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,40 +5,7 @@ layout("/layouts/platform.html"){
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名/工号">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
<template v-if="$auth.hasRoleOr(['SYSADMIN', 'SCHOOL_UNION_ADMIN', 'BRANCH_UNION_CHAIRMAN'])">
|
||||
<search-item label="所属工会">
|
||||
<el-select
|
||||
@change="flushUnits"
|
||||
@clear="flushUnits"
|
||||
clearable
|
||||
filterable
|
||||
placeholder="所属工会"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.unionId"
|
||||
>
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="所属单位">
|
||||
<el-select clearable filterable placeholder="请选择" style="width: 100%" v-model="pageForm.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch" code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="聘用方式">
|
||||
<dict-select v-model="pageForm.preparedBy" placeholder="聘用方式" @change="doSearch" code="PREPARED_BY"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch" code="PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</template>
|
||||
</search>
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
@@ -67,6 +34,11 @@ layout("/layouts/platform.html"){
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='sign'">
|
||||
<el-image v-if="row.sign" :src="row.sign"
|
||||
class="signature-image"></el-image>
|
||||
<el-tag type="warning" v-else>暂无</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220">
|
||||
<template slot-scope="{row}">
|
||||
@@ -98,18 +70,14 @@ layout("/layouts/platform.html"){
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<member-info ref="memberInfoRef"></member-info>
|
||||
</template>
|
||||
|
||||
<template #public>
|
||||
<member-audit-change-info ref="memberAuditChangeInfoRef"></member-audit-change-info>
|
||||
<member-apply-audit-info ref="memberApplyAuditInfoRef"></member-apply-audit-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
<!--#include("../../common/info/memberInfo.js"){}#-->
|
||||
<!--#include("../../common/audit/memberAuditChangeInfo.js"){}#-->
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
<!--#include("../common/memberApplyAuditInfo.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: "#app",
|
||||
@@ -125,6 +93,7 @@ layout("/layouts/platform.html"){
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "sign", label: "签字" },
|
||||
{ prop: "processInstanceNodeName", label: "当前节点", sortable: true }
|
||||
],
|
||||
unions: [],
|
||||
@@ -132,75 +101,53 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
},
|
||||
components: {
|
||||
"member-info": MEMBER_INFO,
|
||||
"member-audit-change-info": MEMBER_AUDIT_CHANGE_INFO
|
||||
'common-query': COMMON_QUERY,
|
||||
'member-apply-audit-info': MEMBER_APPLY_AUDIT_INFO
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.memberApplyAuditInfoRef.onOpen(row.userId)
|
||||
})
|
||||
},
|
||||
openRevoke(row) {
|
||||
this.$confirm("您确定要撤销申请吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.$axios.post("/platform/member/apply/mine/revokeApply", { id: row.id }).then((resp) => {
|
||||
this.$message.success(resp.msg)
|
||||
this.doSearch()
|
||||
})
|
||||
})
|
||||
},
|
||||
doDelete(row) {
|
||||
this.$confirm("您确定要删除吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.$axios.post(loc() + "/delete", { id: row.id }).then((resp) => {
|
||||
this.$axios.post("/platform/member/apply/mine/delete", { id: row.id }).then((resp) => {
|
||||
this.$message.success(resp.msg)
|
||||
this.doSearch()
|
||||
})
|
||||
})
|
||||
},
|
||||
openRevoke(row) {
|
||||
this.$confirm("您确定要撤销申请吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.$axios.post(loc() + "/revokeApply", { id: row.id }).then((resp) => {
|
||||
this.$message.success(resp.msg)
|
||||
this.doSearch()
|
||||
})
|
||||
})
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.memberInfoRef.onOpen(row.userId)
|
||||
})
|
||||
},
|
||||
openChangeView(row) {
|
||||
this.$refs.guava.public(() => {
|
||||
this.$refs.memberAuditChangeInfoRef.onOpen({ recordId: row.id, userId: row.userId })
|
||||
})
|
||||
},
|
||||
initData() {
|
||||
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
|
||||
this.$businessTool.listUnion(this.pageForm.unionId).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
this.$businessTool.listUnit().then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
} else if (this.$auth.hasRole("BRANCH_UNION_CHAIRMAN")) {
|
||||
this.$businessTool.listUnion(this.$store.state.user.union.id).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
this.$businessTool.listUnit(this.$store.state.user.union.id).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
}
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
},
|
||||
created() {
|
||||
debugger
|
||||
this.initData()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
+84
@@ -0,0 +1,84 @@
|
||||
<div id="member_apply_school_union_approval_form">
|
||||
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="110px">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="分配工会关系" prop="tf_allocation_unionId"
|
||||
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-select clearable filterable placeholder="请选择工会" style="width: 100%;"
|
||||
@change="assignmentUnionName"
|
||||
v-model="formData.tf_allocation_unionId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="当前所在工会" prop="tf_self_unionName">
|
||||
<el-input v-model="formData.tf_self_unionName" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item label="审批意见" prop="tf_opinion"
|
||||
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">-->
|
||||
<!-- <pc-signature v-model="formData.approvalSignature"></pc-signature>-->
|
||||
<!-- </el-form-item>-->
|
||||
</el-form>
|
||||
<snaker-flow-task-form-action @task-action="handleTaskAction"
|
||||
@cancel="handleCancel">
|
||||
</snaker-flow-task-form-action>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#member_apply_school_union_approval_form",
|
||||
store,
|
||||
data() {
|
||||
return {
|
||||
businessId: GetQueryString("businessId"),
|
||||
formData: {
|
||||
tf_opinion: "",
|
||||
tf_self_unionName: this.$store.state.user.union.name
|
||||
},
|
||||
unions: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleTaskAction(val) {
|
||||
console.log(val)
|
||||
const data = {
|
||||
...val,
|
||||
...this.formData
|
||||
}
|
||||
|
||||
this.$axios.post("/flow/common/executeTask", {
|
||||
data: JSON.stringify(data)
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success("操作成功")
|
||||
// 发送完成消息
|
||||
window.GlobalBroadcastChannel.postMessage({
|
||||
type: "task-complete",
|
||||
payload: val
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
handleCancel(val) {
|
||||
console.log(val)
|
||||
},
|
||||
// 分配工会名称
|
||||
assignmentUnionName(val) {
|
||||
const union = this.unions.find(item => item.id === val)
|
||||
this.$set(this.formData, "tf_allocation_unionName", union.name)
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.$businessTool.listUnion().then(data => {
|
||||
this.unions = data
|
||||
})
|
||||
}
|
||||
})
|
||||
</script>
|
||||
+125
@@ -0,0 +1,125 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="申请列表">
|
||||
<el-radio-group @change="doSearch" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<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"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='sign'">
|
||||
<el-image v-if="row.sign" :src="row.sign" style="height: 60px"></el-image>
|
||||
<el-tag type="warning" v-else>暂无</el-tag>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='instanceState'">
|
||||
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
|
||||
size="small"></enum-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" fixed="right" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
|
||||
<el-button v-if="row.taskState === 10" @click="openApproval(row)" size="mini" type="primary">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button v-if="row.canRevoke" @click="openRevoke(row)" size="mini" type="danger">
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
audit: false
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "loginName", label: "工号", sortable: true },
|
||||
{ prop: "userName", label: "姓名", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "preparedBy", label: "聘用方式", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "sign", label: "签字" },
|
||||
{ prop: "taskName", label: "当前节点" },
|
||||
{ prop: "instanceState", label: "流程状态" }
|
||||
],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'common-query': COMMON_QUERY,
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
window.open("/flow/common/approval/form?instanceId=" + (row.instanceId || "") + "&businessId=" + row.id + "&defineKey=HYRH")
|
||||
},
|
||||
openApproval(row) {
|
||||
window.open("/flow/common/approval/form?taskId=" + row.taskId + "&instanceId=" + row.instanceId + "&businessId=" + row.businessNo)
|
||||
},
|
||||
openRevoke(taskId) {
|
||||
this.$confirm("您确定要撤回吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "info"
|
||||
}).then(() => {
|
||||
this.$axios.post("/platform/member/apply/schoolUnionAudit/revoke", { taskId }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
-236
@@ -1,236 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名/工号">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
<search-item label="所属工会">
|
||||
<el-select
|
||||
@change="flushUnits"
|
||||
@clear="flushUnits"
|
||||
clearable
|
||||
filterable
|
||||
placeholder="所属工会"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.unionId"
|
||||
>
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="所属单位">
|
||||
<el-select clearable filterable placeholder="请选择" style="width: 100%" v-model="pageForm.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch" code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="聘用方式">
|
||||
<dict-select v-model="pageForm.preparedBy" placeholder="聘用方式" @change="doSearch" code="PREPARED_BY"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch" code="PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="申请列表">
|
||||
<el-radio-group @change="doSearch" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<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"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" fixed="right" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" type="primary" @click="openChangeView(row)">查看</el-button>
|
||||
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
|
||||
审核
|
||||
</el-button>
|
||||
<!--<el-button
|
||||
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete"
|
||||
@click="openRevoke(row.processInstanceTaskId)"
|
||||
size="mini"
|
||||
type="danger"
|
||||
>
|
||||
撤回
|
||||
</el-button>-->
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
<template #view>
|
||||
<member-info ref="memberInfoRef"></member-info>
|
||||
</template>
|
||||
<template #public>
|
||||
<member-audit-change-info ref="memberAuditChangeInfoRef"></member-audit-change-info>
|
||||
<div v-if="showApprovalForm">
|
||||
<div class="process-title">{{formData.processInstanceNodeName}}</div>
|
||||
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
|
||||
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
|
||||
</el-form-item>
|
||||
<el-form-item label="审核说明" prop="approvalRemark">
|
||||
<el-input v-model="formData.approvalRemark" type="textarea" :rows="4" placeholder="请输入审核说明"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
|
||||
<pc-signature v-model="formData.approvalSignature"></pc-signature>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button plain @click="$refs.guava.index()">取消</el-button>
|
||||
<el-button type="danger" @click="doApproval('BACK')">退回重新申请</el-button>
|
||||
<el-button type="danger" @click="doApproval('REJECT')">拒绝申请</el-button>
|
||||
<el-button type="primary" @click="doApproval('PASS')">同意申请</el-button>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("../../common/info/memberInfo.js"){}#-->
|
||||
<!--#include("../../common/audit/memberAuditChangeInfo.js"){}#-->
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
audit: false
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "preparedBy", label: "聘用方式", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "processInstanceNodeName", label: "当前节点", sortable: true }
|
||||
],
|
||||
unions: [],
|
||||
units: [],
|
||||
showApprovalForm: false
|
||||
}
|
||||
},
|
||||
components: {
|
||||
"member-info": MEMBER_INFO,
|
||||
"member-audit-change-info": MEMBER_AUDIT_CHANGE_INFO
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.memberInfoRef.onOpen(row.userId)
|
||||
})
|
||||
},
|
||||
openChangeView(row) {
|
||||
this.$refs.guava.public(() => {
|
||||
this.showApprovalForm = false
|
||||
this.$refs.memberAuditChangeInfoRef.onOpen({ recordId: row.id, userId: row.userId })
|
||||
})
|
||||
},
|
||||
openApproval(row) {
|
||||
this.$refs.guava.public(() => {
|
||||
this.showApprovalForm = true
|
||||
this.formData = row.approvalParam
|
||||
this.$refs.memberAuditChangeInfoRef.onOpen({ recordId: row.id, userId: row.userId })
|
||||
})
|
||||
},
|
||||
doApproval(approvalType) {
|
||||
this.formData.bpmTaskApprovalType = approvalType
|
||||
this.$refs.approvalFormRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$axios
|
||||
.post(loc() + "/approval", {
|
||||
approval: JSON.stringify(this.formData)
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$refs.guava.index()
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
openRevoke(taskId) {
|
||||
this.$confirm("您确定要撤回吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "info"
|
||||
}).then(() => {
|
||||
this.$axios.post(loc() + "/revoke", { taskId }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
initData() {
|
||||
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
|
||||
this.$businessTool.listUnion(this.pageForm.unionId).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
this.$businessTool.listUnit().then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
} else {
|
||||
this.$businessTool.listUnion(this.$store.state.user.union.id).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
this.$businessTool.listUnit(this.$store.state.user.union.id).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.initData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,466 @@
|
||||
<div id="member_apply">
|
||||
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="0" label-suffix=":" class="flow-task-form">
|
||||
<el-descriptions :column="3" border>
|
||||
<el-descriptions-item label="工号">
|
||||
<el-form-item prop="loginname">
|
||||
<el-input v-model="formData.loginname" readonly size="small"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">
|
||||
<el-form-item prop="username">
|
||||
<el-input v-model="formData.username" readonly size="small"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">
|
||||
<el-form-item prop="sex">
|
||||
<el-radio-group v-model="formData.sex" size="small">
|
||||
<el-radio border label="男性">男</el-radio>
|
||||
<el-radio border label="女性">女</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">
|
||||
<el-form-item prop="nation">
|
||||
<dict-select style="width: 100%" placeholder="请选择民族" v-model="formData.nation"
|
||||
code="USER_NATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="出生日期">
|
||||
<el-form-item prop="birthday">
|
||||
<el-date-picker v-model="formData.birthday" type="date"
|
||||
placeholder="请选择出生日期"
|
||||
value-format="yyyy-MM-dd"
|
||||
style="width: 100%"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">
|
||||
<el-form-item prop="political">
|
||||
<dict-select style="width: 100%" placeholder="请选择政治面貌" v-model="formData.political"
|
||||
code="POLITICAL_STATUS"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="学历">
|
||||
<el-form-item prop="education">
|
||||
<dict-select style="width: 100%" placeholder="请选择学历" v-model="formData.education"
|
||||
code="USER_EDUCATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="学位">
|
||||
<el-form-item prop="academicDegree">
|
||||
<dict-select style="width: 100%" placeholder="请选择学位" v-model="formData.academicDegree"
|
||||
code="USER_ACADEMIC_DEGREE"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="党政职务">
|
||||
<el-form-item prop="position">
|
||||
<el-input v-model="formData.position" placeholder="请输入党政职务"
|
||||
maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<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-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
<el-form-item prop="unionName">
|
||||
<el-input v-model="formData.unionName" disabled placeholder="请输入所属工会"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属校区">
|
||||
<el-form-item prop="campus">
|
||||
<dict-select style="width: 100%" placeholder="请选择所属校区" v-model="formData.campus"
|
||||
code="USER_CAMPUS"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="在职状态">
|
||||
<el-form-item prop="userState">
|
||||
<dict-select v-model="formData.userState" code="USER_STATE"
|
||||
disabled style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">
|
||||
<el-form-item prop="personType">
|
||||
<dict-select v-model="formData.personType" code="PERSON_TYPE"
|
||||
disabled style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">
|
||||
<el-form-item prop="idCard">
|
||||
<el-input v-model="formData.idCard" disabled placeholder="请输入身份证号码" maxlength="18"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="联系电话">
|
||||
<el-form-item prop="mobile">
|
||||
<el-input v-model="formData.mobile" disabled placeholder="请输入联系电话" maxlength="32"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">
|
||||
<el-form-item prop="email">
|
||||
<el-input v-model="formData.email" placeholder="请输入电子邮箱" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-form-item prop="families">
|
||||
<el-table :data="formData.families" border size="small">
|
||||
<el-table-column label="关系" prop="relation">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.relation" maxlength="50"
|
||||
placeholder="请输入与本人关系"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="姓名" prop="name">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.name" maxlength="50" placeholder="请输入姓名"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工作单位" prop="unit">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.unit" maxlength="100"
|
||||
placeholder="请输入工作单位"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" prop="remark">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.remark" maxlength="100" placeholder="请输入备注"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column width="100px">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<el-button type="primary" size="mini"
|
||||
@click="formData.families.push({})">添加
|
||||
</el-button>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="danger"
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="formData.families.length===0"
|
||||
@click="formData.families.splice(scope.$index,1)"
|
||||
></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="个人简况" :span="3">
|
||||
<el-form-item prop="personalData">
|
||||
<text-editor v-model="formData.personalData"></text-editor>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="入会意愿" :span="3">
|
||||
<el-form-item prop="isVoluntary">
|
||||
<el-checkbox
|
||||
size="medium"
|
||||
style="width: 95%; color: #F56C6C; display: flex; align-items: center;"
|
||||
v-model="formData.isVoluntary">
|
||||
<div>
|
||||
<span style="flex: 1; word-wrap: break-word; word-break: break-all; white-space: normal;">
|
||||
我自愿申请加入学校工会,并委托学校按规定代为扣缴工会会员会费。
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<span style="flex: 1; word-wrap: break-word; word-break: break-all; white-space: normal;">
|
||||
我将严格遵守工会章程,认真执行工会决议,积极参与工会活动,主动融入“学校健康幸福家”建设,为营造温暖、和谐、奋进的校园氛围贡献力量,以实际行动助力学校各项事业发展。
|
||||
</span>
|
||||
</div>
|
||||
</el-checkbox>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="签字" :span="3">
|
||||
<el-form-item prop="sign">
|
||||
<pc-signature v-model="formData.sign"></pc-signature>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-form>
|
||||
|
||||
<snaker-flow-task-form-action @task-action="handleTaskAction" @save-draft="handleSaveDraft"></snaker-flow-task-form-action>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#member_apply",
|
||||
store,
|
||||
data() {
|
||||
return {
|
||||
businessId: GetQueryString("businessId"),
|
||||
instanceId: GetQueryString("instanceId"),
|
||||
units: [],
|
||||
formData: {
|
||||
families: []
|
||||
},
|
||||
formRules: {
|
||||
username: [{required: false, message: "必填", trigger: ["change", "blur"]}],
|
||||
sex: [{required: false, message: "必填", trigger: ["change", "blur"]}],
|
||||
isVoluntary: [{required: true, message: "必填", trigger: ["change", "blur"]}],
|
||||
sign: [{required: true, message: "必填", trigger: ["change", "blur"]}],
|
||||
email: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
callback();
|
||||
} else if (/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(value)) {
|
||||
callback();
|
||||
} else {
|
||||
callback(new Error("邮箱格式错误"));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
],
|
||||
idCard: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
// 如果值为空,直接通过校验
|
||||
callback();
|
||||
} else if (/^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}(\d|[Xx])$/.test(value)) {
|
||||
// 18位身份证号码格式正确
|
||||
callback();
|
||||
} else if (/^[1-9]\d{7}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 15位身份证号码格式正确
|
||||
callback();
|
||||
} else if (/^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 外国人身份证号码格式正确(18位)
|
||||
callback();
|
||||
} else if (/^[1-9]\d{7}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 外国人身份证号码格式正确(15位)
|
||||
callback();
|
||||
} else {
|
||||
// 格式错误,返回错误信息
|
||||
callback(new Error("身份证号码格式错误"));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
],
|
||||
mobile: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
// 如果值为空,直接通过校验
|
||||
callback();
|
||||
} else if (/^[1][345789][0-9]{9}$/.test(value)) {
|
||||
// 手机号格式正确
|
||||
callback();
|
||||
} else if (/^\d+-\d+$/.test(value) && value.length <= 16) {
|
||||
// 座机号格式正确
|
||||
callback();
|
||||
} else {
|
||||
// 格式错误,返回错误信息
|
||||
callback(new Error(value.includes('-') ? '座机号码格式错误' : '手机号码格式错误'));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
]
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 提交
|
||||
handleTaskAction(val) {
|
||||
this.$refs.formRef.validate((valid) => {
|
||||
if (valid) {
|
||||
if (!this.instanceId) {
|
||||
this.handleApply(val)
|
||||
} else {
|
||||
this.handleReApply(val)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
// 提交申请
|
||||
handleApply(val) {
|
||||
this.$confirm("您确定要提交吗?", "提示", { type: "warning" })
|
||||
.then(() => {
|
||||
this.$refs.formRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$axios
|
||||
.post("/flow/common/startInstanceAndExecute", {
|
||||
...val,
|
||||
bizData: JSON.stringify(this.formData)
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success("操作成功")
|
||||
// 发送完成消息
|
||||
window.GlobalBroadcastChannel.postMessage({
|
||||
type: "task-complete"
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// 重新提交申请
|
||||
handleReApply(val) {
|
||||
this.$confirm("您确定要提交吗?", "提示", { type: "warning" })
|
||||
.then(() => {
|
||||
this.$axios
|
||||
.post("/flow/common/executeTask", {
|
||||
data: JSON.stringify({
|
||||
processTaskId: val.taskId,
|
||||
processInstanceId: val.instanceId,
|
||||
submitType: val.submitType,
|
||||
f_data: JSON.stringify(this.formData)
|
||||
})
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
window.GlobalBroadcastChannel.postMessage({
|
||||
type: "task-complete"
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
// 保存
|
||||
handleSaveDraft(val) {
|
||||
this.$confirm("您确定要保存吗?", "提示", { type: "warning" })
|
||||
.then(() => {
|
||||
this.$axios
|
||||
.post("/flow/common/startInstance", {
|
||||
...val,
|
||||
bizData: JSON.stringify(this.formData)
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success("操作成功")
|
||||
// 发送完成消息
|
||||
window.parent.postMessage(
|
||||
{
|
||||
type: "task-complete"
|
||||
},
|
||||
"*"
|
||||
)
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
// 取消
|
||||
handleCancel() {
|
||||
|
||||
},
|
||||
async validateApply() {
|
||||
if (this.formData.id) {
|
||||
return
|
||||
}
|
||||
// const resp = await $.post('/platform/member/apply/submit/validateApply')
|
||||
// if (resp.code === 0 && resp.data > 0) {
|
||||
// this.$confirm("您有其他入会流程正在进行中,请勿重复申请,如需查看详情,可前往我的申请界面,是否前往?", "提示", { type: "warning" })
|
||||
// .then(() => {
|
||||
// this.member = true
|
||||
// this.$store.dispatch("pjaxRoute", "/platform/member/apply/mine")
|
||||
// })
|
||||
// .catch(() => {
|
||||
// this.member = true
|
||||
// })
|
||||
// }
|
||||
},
|
||||
async init() {
|
||||
let user
|
||||
const resp = await $.post('/platform/member/apply/submit/getSelfUserInfo')
|
||||
if (resp.code === 0) {
|
||||
if (!resp.data) {
|
||||
user = this.$store.state.user
|
||||
} else {
|
||||
user = resp.data
|
||||
}
|
||||
} else {
|
||||
user = this.$store.state.user
|
||||
}
|
||||
this.member = user.member
|
||||
|
||||
if (this.id) {
|
||||
this.$axios.post("/platform/member/apply/submit/findApplyById", { id: this.id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.formData = res.data
|
||||
}
|
||||
})
|
||||
} else {
|
||||
const {
|
||||
id,
|
||||
username,
|
||||
loginname,
|
||||
sex,
|
||||
nation,
|
||||
birthday,
|
||||
political,
|
||||
education,
|
||||
academicDegree,
|
||||
position,
|
||||
unitId,
|
||||
unitName,
|
||||
unit,
|
||||
unionId,
|
||||
unionName,
|
||||
union,
|
||||
campus,
|
||||
userState,
|
||||
personType,
|
||||
idCard,
|
||||
mobile,
|
||||
email,
|
||||
families,
|
||||
personalData
|
||||
} = user
|
||||
|
||||
this.$set(this.formData, "userId", id)
|
||||
this.$set(this.formData, "username", username)
|
||||
this.$set(this.formData, "loginname", loginname)
|
||||
this.$set(this.formData, "birthday", birthday)
|
||||
this.$set(this.formData, "sex", sex)
|
||||
this.$set(this.formData, "idCard", idCard)
|
||||
this.$set(this.formData, "nation", nation)
|
||||
this.$set(this.formData, "political", political)
|
||||
this.$set(this.formData, "position", position)
|
||||
this.$set(this.formData, "education", education)
|
||||
this.$set(this.formData, "academicDegree", academicDegree)
|
||||
this.$set(this.formData, "campus", campus)
|
||||
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, "unionName", union ? union.name : unionName)
|
||||
this.$set(this.formData, "unionId", union ? union.id : unionId)
|
||||
|
||||
this.$set(this.formData, "mobile", mobile)
|
||||
this.$set(this.formData, "email", email)
|
||||
this.$set(this.formData, "families", families ? families : [])
|
||||
this.$set(this.formData, "personalData", personalData)
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.init()
|
||||
this.units = await this.$businessTool.listUnit()
|
||||
await this.validateApply()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
+142
-262
@@ -1,271 +1,151 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
<el-card shadow="never">
|
||||
<h3 style="color: var(--color-primary)" slot="header">入会申请</h3>
|
||||
<el-form :model="formData" ref="formRef" label-width="0" :rules="formRules" size="small">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="姓名">
|
||||
<el-form-item prop="username">
|
||||
<el-input v-model="formData.username" readonly size="small"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">
|
||||
<el-form-item prop="sex">
|
||||
<el-radio-group v-model="formData.sex" size="small">
|
||||
<el-radio border label="男"></el-radio>
|
||||
<el-radio border label="女"></el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="身份证号码">
|
||||
<el-form-item prop="idCard">
|
||||
<el-input v-model="formData.idCard" placeholder="请输入身份证号码" maxlength="18"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="民族">
|
||||
<el-form-item prop="nation">
|
||||
<dict-select style="width: 100%" placeholder="请选择民族" v-model="formData.nation" code="USER_NATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">
|
||||
<el-form-item prop="political">
|
||||
<dict-select
|
||||
style="width: 100%"
|
||||
placeholder="请选择政治面貌"
|
||||
v-model="formData.political"
|
||||
code="POLITICAL_STATUS"
|
||||
></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="学历">
|
||||
<el-form-item prop="education">
|
||||
<dict-select style="width: 100%" placeholder="请选择学历" v-model="formData.education" code="USER_EDUCATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<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-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
<el-form-item prop="unionName">
|
||||
<el-input v-model="formData.unionName" readonly placeholder="请输入所属工会"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="职务">
|
||||
<el-form-item prop="governmentPosition">
|
||||
<el-input v-model="formData.governmentPosition" placeholder="请输入职务" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="在职状态">
|
||||
<el-form-item prop="userState">
|
||||
<dict-select v-model="formData.userState" code="USER_STATE" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="聘用方式">
|
||||
<el-form-item prop="preparedBy">
|
||||
<dict-select v-model="formData.preparedBy" code="PREPARED_BY" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">
|
||||
<el-form-item prop="personType">
|
||||
<dict-select v-model="formData.personType" code="PERSON_TYPE" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="联系电话">
|
||||
<el-form-item prop="mobile">
|
||||
<el-input v-model="formData.mobile" placeholder="请输入联系电话" maxlength="32"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">
|
||||
<el-form-item prop="email">
|
||||
<el-input v-model="formData.email" placeholder="请输入电子邮箱" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="家庭主要成员及其工作单位" :span="3">
|
||||
<el-form-item prop="families">
|
||||
<el-table :data="formData.families" border size="small">
|
||||
<el-table-column label="关系" prop="relation">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.relation" maxlength="50" placeholder="请输入与本人关系"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="姓名" prop="name">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.name" maxlength="50" placeholder="请输入姓名"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工作单位" prop="unit">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.unit" maxlength="100" placeholder="请输入工作单位"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" prop="remark">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.remark" maxlength="100" placeholder="请输入备注"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column width="100px">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<el-button type="primary" size="mini" @click="formData.families.push({})">添加</el-button>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="danger"
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="formData.families.length===0"
|
||||
@click="formData.families.splice(scope.$index,1)"
|
||||
></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="个人简况(简历、获奖情况、有何特长)" :span="3">
|
||||
<el-form-item prop="personalData">
|
||||
<text-editor v-model="formData.personalData"></text-editor>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-form>
|
||||
<el-row v-if="!this.$store.state.user.member" justify="end" type="flex" class="mt10">
|
||||
<!-- <el-row justify="end" type="flex" class="mt10">-->
|
||||
<el-button v-if="formData.id" @click="$store.dispatch('pjaxRoute', '/platform/member/apply/mine')">返回</el-button>
|
||||
<el-button @click="doSave" type="primary">保存申请</el-button>
|
||||
<el-button @click="doSubmit" type="primary">提交申请</el-button>
|
||||
</el-row>
|
||||
</el-card>
|
||||
<div id="app" v-cloak>
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="申请列表">
|
||||
<el-button size="small" type="primary" @click="onApply">申请入会</el-button>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<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"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='sign'">
|
||||
<el-image v-if="row.sign" :src="row.sign" style="height: 60px"></el-image>
|
||||
<el-tag type="warning" v-else>暂无</el-tag>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop=='instanceState'">
|
||||
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
|
||||
size="small"></enum-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220" fixed="right">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">
|
||||
查看
|
||||
</el-button>
|
||||
<el-button v-if="row.taskKey === 'startTask'" @click="onEdit(row)" size="mini" type="primary">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">
|
||||
撤回
|
||||
</el-button>
|
||||
<el-button @click="onDelete(row.id)" size="mini" type="danger">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
id: GetQueryString("id"),
|
||||
formDisabled: false,
|
||||
units: [],
|
||||
formData: {
|
||||
families: []
|
||||
},
|
||||
formRules: {
|
||||
username: [{ required: false, message: "必填", trigger: "change" }],
|
||||
sex: [{ required: false, message: "必填", trigger: "change" }],
|
||||
idCard: [
|
||||
{ required: false, message: "身份证号不能为空", trigger: "blur" },
|
||||
{
|
||||
pattern: /(^\d{6}(18|19|20)\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}([0-9xX])$)/,
|
||||
message: "身份证号格式不正确",
|
||||
trigger: "blur"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
init() {
|
||||
if (this.id) {
|
||||
this.$axios.post(loc() + "/findApplyById", { id: this.id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.formData = res.data
|
||||
}
|
||||
})
|
||||
} else {
|
||||
const {
|
||||
id,
|
||||
username,
|
||||
loginname,
|
||||
sex,
|
||||
idCard,
|
||||
nation,
|
||||
political,
|
||||
education,
|
||||
governmentPosition,
|
||||
mobile,
|
||||
email,
|
||||
wantJoinLoveMutualAidAssociation,
|
||||
families,
|
||||
personalData,
|
||||
unit,
|
||||
union
|
||||
} = this.$store.state.user
|
||||
|
||||
this.$set(this.formData, "userId", id)
|
||||
this.$set(this.formData, "username", username)
|
||||
this.$set(this.formData, "loginname", loginname)
|
||||
this.$set(this.formData, "sex", sex)
|
||||
this.$set(this.formData, "idCard", idCard)
|
||||
this.$set(this.formData, "nation", nation)
|
||||
this.$set(this.formData, "political", political)
|
||||
this.$set(this.formData, "education", education)
|
||||
this.$set(this.formData, "unitName", unit ? unit.name : null)
|
||||
this.$set(this.formData, "unitId", unit ? unit.id : null)
|
||||
this.$set(this.formData, "unionName", union ? union.name : null)
|
||||
this.$set(this.formData, "unionId", union ? union.id : null)
|
||||
|
||||
this.$set(this.formData, "governmentPosition", governmentPosition)
|
||||
this.$set(this.formData, "mobile", mobile)
|
||||
this.$set(this.formData, "email", email)
|
||||
this.$set(this.formData, "wantJoinLoveMutualAidAssociation", wantJoinLoveMutualAidAssociation)
|
||||
this.$set(this.formData, "families", families ? families : [])
|
||||
this.$set(this.formData, "personalData", personalData)
|
||||
}
|
||||
},
|
||||
doSave() {
|
||||
this.$confirm("保存后可在我的申请里面再次编辑,您确定要保存吗?", "提示", { type: "warning" })
|
||||
.then(() => {
|
||||
this.$axios.post(loc() + "/doSave", this.formData).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.$store.dispatch("pjaxRoute", "/platform/member/apply/mine")
|
||||
}
|
||||
})
|
||||
})
|
||||
.catch()
|
||||
},
|
||||
doSubmit() {
|
||||
this.$confirm("您确定要提交申请吗?", "提示", { type: "warning" })
|
||||
.then(() => {
|
||||
this.$axios
|
||||
.post(loc() + "/doSubmit", {
|
||||
...this.formData
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.$store.dispatch("pjaxRoute", "/platform/member/apply/mine")
|
||||
}
|
||||
})
|
||||
})
|
||||
.catch()
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.init()
|
||||
this.units = await this.$businessTool.listUnit()
|
||||
}
|
||||
})
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{ prop: "loginName", label: "工号", sortable: true },
|
||||
{ prop: "userName", label: "姓名", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "preparedBy", label: "聘用方式", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "sign", label: "签字" },
|
||||
{ prop: "taskName", label: "当前节点"},
|
||||
{ prop: "instanceState", label: "流程状态"}
|
||||
],
|
||||
unions: [],
|
||||
units: []
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'common-query': COMMON_QUERY,
|
||||
},
|
||||
methods: {
|
||||
onApply() {
|
||||
window.open("/flow/common/approval/form?defineKey=HYRH")
|
||||
},
|
||||
openView(row) {
|
||||
window.open("/flow/common/approval/form?instanceId=" + (row.instanceId || "") + "&businessId=" + row.id + "&defineKey=HYRH")
|
||||
},
|
||||
onEdit(row) {
|
||||
window.open(
|
||||
"/flow/common/approval/form?taskId=" +
|
||||
(row.taskId || "") +
|
||||
"&instanceId=" +
|
||||
(row.instanceId || "") +
|
||||
"&businessId=" +
|
||||
row.id +
|
||||
"&defineKey=HYRH"
|
||||
)
|
||||
},
|
||||
onRevoke(row) {
|
||||
this.$confirm("您确定要撤回吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.$axios.post("/flow/common/revokeTask", { taskId: row.startTaskId }).then((resp) => {
|
||||
this.$message.success(resp.msg)
|
||||
this.pageData()
|
||||
})
|
||||
})
|
||||
},
|
||||
onDelete(id) {
|
||||
this.$confirm("您确定要删除吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.$axios.post("/platform/member/apply/submit/onDelete", { id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.doSearch()
|
||||
this.$message.success(res.msg)
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
|
||||
@@ -0,0 +1,144 @@
|
||||
<div id="member_apply_view">
|
||||
<el-descriptions :column="3" border>
|
||||
<el-descriptions-item label="工号">{{ viewData.loginname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">{{ viewData.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">{{ viewData.nation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="出生日期">{{ $moment(viewData.birthday).format("YYYY年MM月DD日") }}</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="学历">{{ viewData.education }}</el-descriptions-item>
|
||||
<el-descriptions-item label="学位">{{ viewData.academicDegree }}</el-descriptions-item>
|
||||
<el-descriptions-item label="党政职务">{{ viewData.position }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="工作单位">{{ viewData.unitName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">{{ viewData.unionName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属校区">{{ viewData.campus }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">{{ viewData.idCard }}</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.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-table v-if="viewData.families&&viewData.families.length"
|
||||
:data="viewData.families" size="mini" border
|
||||
:header-cell-style="{background:'#eff3f6'}"
|
||||
style="width: 100%">
|
||||
<el-table-column prop="relation" label="与本人关系" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="姓名" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="unit" label="单位" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="remark" label="备注" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-empty v-else :image-size="50" description="暂无家庭成员信息"></el-empty>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="个人简况" :span="3">
|
||||
<div v-if="viewData.personalData" class="text-left" v-html="viewData.personalData"></div>
|
||||
<el-tag type="warning" v-else>暂无</el-tag>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="签字信息" :span="3">
|
||||
<el-image v-if="viewData.sign" :src="viewData.sign"
|
||||
class="signature-image"></el-image>
|
||||
<el-tag type="warning" v-else>暂无</el-tag>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
|
||||
<template v-for="task in doneTasks">
|
||||
<div class="task-panel mt10">
|
||||
<div class="task-panel-header">{{ 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>
|
||||
|
||||
<template v-if="task.taskFormData.tf_allocation_unionId">
|
||||
<el-descriptions-item label="分配工会" :span="1.5">
|
||||
{{ task.taskFormData.tf_allocation_unionName }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="分配前工会" :span="1.5">
|
||||
{{ task.taskFormData.tf_self_unionName }}
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<el-descriptions-item label="办理意见" :span="3" v-if="!task.ext.isFirstTaskNode">{{ task.taskFormData.opinion }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#member_apply_view",
|
||||
store,
|
||||
dicts: ["PROCESS_TASK_SUBMIT_TYPE"],
|
||||
data() {
|
||||
return {
|
||||
businessId: GetQueryString("businessId"),
|
||||
instanceId: GetQueryString("instanceId"),
|
||||
viewData: {},
|
||||
doneTasks: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
info() {
|
||||
this.$axios.post("/platform/member/apply/view/findMemberApplyRecord", { id: this.businessId }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.viewData = res.data
|
||||
}
|
||||
})
|
||||
},
|
||||
getDoneTasks() {
|
||||
this.$axios.post("/flow/common/doneTasks", { instanceId: this.instanceId }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.doneTasks = res.data
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.info()
|
||||
this.getDoneTasks()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.task-panel {
|
||||
background: white;
|
||||
border-radius: 4px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.task-panel-header {
|
||||
background: rgb(250, 250, 250);
|
||||
border: 1px solid rgb(228, 231, 237);
|
||||
border-bottom: none;
|
||||
padding: 12px 16px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.el-descriptions-item__label.is-bordered-label {
|
||||
width: 15%;
|
||||
}
|
||||
</style>
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
<div id="member_change_branch_union_approval">
|
||||
<el-form :model="formData" ref="formRef" label-width="0" label-suffix=":" class="flow-task-form">
|
||||
<el-form-item label="审批意见" prop="tf_opinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<snaker-flow-task-form-action @task-action="handleTaskAction" @cancel="handleCancel"></snaker-flow-task-form-action>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#member_change_branch_union_approval",
|
||||
store,
|
||||
data() {
|
||||
return {
|
||||
formData: {
|
||||
tf_opinion: ""
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleTaskAction(val) {
|
||||
const data = {
|
||||
...val,
|
||||
...this.formData
|
||||
}
|
||||
this.$axios.post("/flow/common/executeTask", {
|
||||
data: JSON.stringify(data)
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success("操作成功")
|
||||
// 发送完成消息
|
||||
window.parent.postMessage({
|
||||
type: "task-complete"
|
||||
}, "*")
|
||||
}
|
||||
})
|
||||
},
|
||||
handleCancel(val) {
|
||||
console.log(val)
|
||||
},
|
||||
}
|
||||
})
|
||||
</script>
|
||||
+214
@@ -0,0 +1,214 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="审核列表">
|
||||
<el-radio-group @change="search" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<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"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openUserView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='changeTypes'">
|
||||
<span style="color: #0e78c5;cursor: pointer" @click="openView(row)">
|
||||
{{getChangeTypes(row.changeTypes)}}
|
||||
</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='instanceState'">
|
||||
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
|
||||
size="small"></enum-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
|
||||
<el-button v-if="row.taskState === 10" @click="openApproval(row)" size="mini" type="primary">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete"
|
||||
@click="openRevoke(row.processInstanceTaskId)"
|
||||
size="mini"
|
||||
type="danger">
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<!-- <template #view>-->
|
||||
<!-- <member-info ref="memberInfoRef"></member-info>-->
|
||||
<!-- </template>-->
|
||||
<!-- -->
|
||||
<!-- <template #public>-->
|
||||
<!-- <member-change-audit-info ref="memberChangeAuditInfoRef"></member-change-audit-info>-->
|
||||
<!-- <div v-if="showApprovalForm">-->
|
||||
<!-- <el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">-->
|
||||
<!-- <el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">-->
|
||||
<!-- <user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">-->
|
||||
<!-- <pc-signature v-model="formData.approvalSignature"></pc-signature>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- </el-form>-->
|
||||
<!-- <el-row type="flex" justify="end">-->
|
||||
<!-- <el-button plain @click="$refs.guava.index()">取消</el-button>-->
|
||||
<!-- <el-button type="danger" @click="doApproval('BACK')">退回重新填写</el-button>-->
|
||||
<!-- <el-button type="danger" @click="doApproval('REJECT')">拒绝</el-button>-->
|
||||
<!-- <el-button type="primary" @click="doApproval('PASS')">同意</el-button>-->
|
||||
<!-- </el-row>-->
|
||||
<!-- </div>-->
|
||||
<!-- </template>-->
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
audit: false
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "loginName", label: "工号", sortable: true },
|
||||
{ prop: "userName", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "changeTypes", label: "变更类型", sortable: true, width: 200 },
|
||||
{ prop: "applyDateTime", label: "申请时间", sortable: true },
|
||||
{ prop: "taskName", label: "当前节点"},
|
||||
{ prop: "instanceState", label: "流程状态"}
|
||||
],
|
||||
|
||||
changeTypeData: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'common-query': COMMON_QUERY,
|
||||
},
|
||||
methods: {
|
||||
openView(row){
|
||||
this.$refs.guava.public(() => {
|
||||
this.$refs.memberInfoRef.onOpen(row.userId)
|
||||
})
|
||||
},
|
||||
openUserView(row){
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.memberChangeAuditInfoRef.onOpen(row.userId)
|
||||
})
|
||||
},
|
||||
openApproval(row) {
|
||||
window.open("/flow/common/approval/form?taskId=" + row.taskId + "&instanceId=" + row.instanceId + "&businessId=" + row.businessNo)
|
||||
// this.$refs.guava.public(() => {
|
||||
// this.showApprovalForm = true
|
||||
// this.formData = row.approvalParam
|
||||
// this.$refs.memberChangeAuditInfoRef.onOpen(data.id)
|
||||
// })
|
||||
},
|
||||
doApproval(approvalType) {
|
||||
let msg = '确定要同意此条申请吗?'
|
||||
if (approvalType === 'REJECT') {
|
||||
msg = '确定要拒绝此教工的入会申请吗?'
|
||||
} else if (approvalType === 'BACK') {
|
||||
msg = '确定要退回此条申请吗?'
|
||||
}
|
||||
|
||||
|
||||
this.$confirm(msg, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
this.formData.bpmTaskApprovalType = approvalType
|
||||
this.$refs.approvalFormRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$axios
|
||||
.post(loc() + "/platform/member/change/branchUnion/audit/approval", {
|
||||
approval: JSON.stringify(this.formData)
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$refs.guava.index()
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
} else {
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
openRevoke(taskId) {
|
||||
this.$confirm("您确定要撤回吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.$axios.post("/platform/member/change/branchUnion/audit/revoke", { taskId }).then((resp) => {
|
||||
this.$message.success(resp.msg)
|
||||
this.doSearch()
|
||||
})
|
||||
})
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
getChangeTypes(changeTypes) {
|
||||
const changeTypesList = JSON.parse(changeTypes)
|
||||
if (changeTypesList) {
|
||||
if (!changeTypesList || changeTypesList.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return changeTypesList
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.name === v).changeTypeName
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.changeTypeData = await this.$businessTool.getEnumOptions("MemberChangeType")
|
||||
this.pageData()
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+87
@@ -0,0 +1,87 @@
|
||||
const COMMON_QUERY = {
|
||||
template: /*language=HTML*/ `
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名/工号">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="flushUnits" @clear="flushUnits" clearable filterable
|
||||
placeholder="所属工会" style="width: 100%;" v-model="pageForm.unionId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="所属单位">
|
||||
<el-select clearable filterable placeholder="请选择" style="width: 100%"
|
||||
v-model="pageForm.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人事编制">
|
||||
<dict-select v-model="pageForm.preparedBy" placeholder="人事编制" @change="doSearch"
|
||||
code="PREPARED_BY"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch"
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="变更类型">
|
||||
<dict-select v-model="pageForm.changeType" placeholder="人员类型" @change="doSearch"
|
||||
code="MEMBER_CHANGE_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
`,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return{
|
||||
unions: [],
|
||||
units: [],
|
||||
pageForm: {
|
||||
searchKeyword: '',
|
||||
unionId: '',
|
||||
unitId: '',
|
||||
userState: '',
|
||||
personType: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doSearch(){
|
||||
this.$emit('search', this.pageForm)
|
||||
},
|
||||
async initData(){
|
||||
if (this.$auth.hasRoleOr("SYSADMIN, SCHOOL_UNION_ADMIN, SCHOOL_UNION_MEMBER_ADMIN")) {
|
||||
this.$businessTool.listUnion(this.pageForm.unionId).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
this.$businessTool.listUnit().then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
} else {
|
||||
this.$businessTool.listUnion(this.$store.state.user.union.id).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
this.$businessTool.listUnit(this.$store.state.user.union.id).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
},
|
||||
async flushUnits(){
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.initData()
|
||||
}
|
||||
}
|
||||
+109
@@ -0,0 +1,109 @@
|
||||
const MEMBER_ALL_CHANGE_INFO = {
|
||||
template: /*language=HTML*/ `
|
||||
<el-tabs v-model="activeName">
|
||||
<el-tab-pane label="基础信息" name="basicInfo">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="工号">{{ viewData.loginname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">{{ viewData.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">{{ viewData.nation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="出生日期">{{ moment(viewData.birthday).format("YYYY年MM月DD日") }}</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="学历">{{ viewData.education }}</el-descriptions-item>
|
||||
<el-descriptions-item label="学位">{{ viewData.academicDegree }}</el-descriptions-item>
|
||||
<el-descriptions-item label="党政职务">{{ viewData.position }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="工作单位">{{ viewData.unitname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">{{ viewData.unionname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属校区">{{ viewData.campus }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">{{ viewData.idCard }}</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.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="进校时间">{{ viewData.schoolTime }}</el-descriptions-item>
|
||||
|
||||
<template v-if="viewData.userState == '退休'">
|
||||
<el-descriptions-item label="退休日期">{{ viewData.retireDate ? moment(viewData.retireDate).format("YYYY-MM-DD") : '暂无' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="福利享受截止日期">{{ moment(viewData.welfareStopDate).format("YYYY-MM-DD") }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<el-descriptions-item label="会员状态">{{ viewData.member ? '会员' : '非会员' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="福利会员状态">{{ viewData.welfareMember ? '福利会员' : '非福利会员' }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-table v-if="viewData.families&&viewData.families.length"
|
||||
:data="viewData.families" size="mini" border
|
||||
:header-cell-style="{background:'#eff3f6'}"
|
||||
style="width: 100%">
|
||||
<el-table-column prop="relation" label="与本人关系" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="姓名" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="unit" label="单位" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="remark" label="备注" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-empty v-else :image-size="50" description="暂无家庭成员信息"></el-empty>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="个人简况" :span="3">
|
||||
<template slot="label">个人简况</template>
|
||||
<div v-if="viewData.vita" class="text-left" v-html="viewData.vita"></div>
|
||||
<span v-else>无数据</span>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="历史变更记录" name="changeInfo" v-if="viewData.allChangeInfo">
|
||||
<el-timeline>
|
||||
<el-timeline-item placement="top" v-for="(changeData, index) in viewData.allChangeInfo"
|
||||
:key="index" :timestamp="changeData.timestamp">
|
||||
<el-card>
|
||||
<h4>{{ changeData.changeOriginName }}</h4>
|
||||
<el-table :data="changeData.changeInfos" size="mini" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号" type="index" width="80px"></el-table-column>
|
||||
<el-table-column prop="fieldName" label="变更字段" header-align="center"></el-table-column>
|
||||
<el-table-column prop="sourceValue" label="原数据" header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<div v-html="row.sourceValue"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="newValue" label="新数据" header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<div v-html="row.newValue"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</el-timeline-item>
|
||||
</el-timeline>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
`,
|
||||
mixins: [initTableMixins],
|
||||
data(){
|
||||
return{
|
||||
viewData: {},
|
||||
activeName: "basicInfo"
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
onOpen(userId){
|
||||
$.post('/platform/member/change/mange/getAllChangeMemberInfo', {userId})
|
||||
.then(resp => {
|
||||
if (resp.code === 0) {
|
||||
this.viewData = resp.data
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
+519
@@ -0,0 +1,519 @@
|
||||
const MEMBER_CHANGE = {
|
||||
template: /*language=HTML*/ `
|
||||
<el-card shadow="never">
|
||||
<div class="process-title">会员变更</div>
|
||||
<el-form :model="formData" ref="formRef" label-width="0" :rules="formRules" size="small">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="工号">
|
||||
<el-form-item prop="loginname">
|
||||
<el-input v-model="formData.loginname" readonly size="small"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">
|
||||
<el-form-item prop="username">
|
||||
<el-input v-model="formData.username" readonly size="small"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">
|
||||
<el-form-item prop="sex">
|
||||
<el-radio-group :disabled="allowFields('sex')" v-model="formData.sex" size="small">
|
||||
<el-radio border label="男"></el-radio>
|
||||
<el-radio border label="女"></el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">
|
||||
<el-form-item prop="nation">
|
||||
<dict-select style="width: 100%" placeholder="请选择民族" v-model="formData.nation"
|
||||
:disabled="allowFields('nation')" code="USER_NATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="出生日期">
|
||||
<el-form-item prop="birthday">
|
||||
<el-date-picker v-model="formData.birthday"
|
||||
type="date"
|
||||
:disabled="allowFields('birthday')"
|
||||
placeholder="请选择出生日期"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
style="width: 100%"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">
|
||||
<el-form-item prop="political">
|
||||
<dict-select style="width: 100%" placeholder="请选择政治面貌" v-model="formData.political"
|
||||
:disabled="allowFields('political')" code="USER_POLITICAL"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="学历">
|
||||
<el-form-item prop="education">
|
||||
<dict-select style="width: 100%" placeholder="请选择学历" v-model="formData.education"
|
||||
:disabled="allowFields('education')" code="USER_EDUCATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="学位">
|
||||
<el-form-item prop="academicDegree">
|
||||
<dict-select style="width: 100%" placeholder="请选择学位" v-model="formData.academicDegree"
|
||||
:disabled="allowFields('academicDegree')" code="USER_ACADEMIC_DEGREE"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="党政职务">
|
||||
<el-form-item prop="position">
|
||||
<el-input v-model="formData.position" placeholder="请输入党政职务"
|
||||
:disabled="allowFields('position')" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<template v-if="$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN, SCHOOL_UNION_MEMBER_ADMIN')">
|
||||
<el-descriptions-item label="工作单位">
|
||||
<el-form-item prop="unitId">
|
||||
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%"
|
||||
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-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
<el-form-item prop="unionId">
|
||||
<el-select clearable filterable placeholder="请选择所属工会" style="width: 100%"
|
||||
v-model="formData.unionId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<template v-else>
|
||||
<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-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
<el-form-item prop="unionName">
|
||||
<el-input v-model="formData.unionName" disabled placeholder="请输入所属工会"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<el-descriptions-item label="所属校区">
|
||||
<el-form-item prop="campus">
|
||||
<dict-select style="width: 100%" placeholder="请选择所属校区" v-model="formData.campus"
|
||||
:disabled="allowFields('campus')" code="USER_CAMPUS"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">
|
||||
<el-form-item prop="idCard">
|
||||
<el-input v-model="formData.idCard" :disabled="allowFields('idCard')" placeholder="请输入身份证号码" maxlength="18"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="联系电话">
|
||||
<el-form-item prop="mobile">
|
||||
<el-input v-model="formData.mobile" :disabled="allowFields('mobile')" placeholder="请输入联系电话" maxlength="15"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">
|
||||
<el-form-item prop="email">
|
||||
<el-input v-model="formData.email" :disabled="allowFields('email')" placeholder="请输入电子邮箱" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="在职状态">
|
||||
<el-form-item prop="userState">
|
||||
<dict-select v-model="formData.userState" code="USER_STATE"
|
||||
:disabled="allowFields('userState')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">
|
||||
<el-form-item prop="personType">
|
||||
<dict-select v-model="formData.personType" code="PERSON_TYPE"
|
||||
:disabled="allowFields('personType')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<template v-if="formData.userState == '退休'">
|
||||
<el-descriptions-item label="退休日期">
|
||||
<el-form-item prop="retireDate">
|
||||
<el-date-picker v-model="formData.retireDate"
|
||||
type="date"
|
||||
placeholder="请选择出生日期"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
style="width: 100%"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="福利享受截止日期">
|
||||
<el-form-item prop="welfareStopDate">
|
||||
<el-date-picker v-model="formData.welfareStopDate"
|
||||
type="date"
|
||||
:disabled="isView"
|
||||
placeholder="请选择福利享受截止日期"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
style="width: 100%"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<el-descriptions-item label="会员状态">
|
||||
<el-form-item prop="member">
|
||||
<el-radio-group v-model="formData.member" size="small">
|
||||
<el-radio border :label="true">会员</el-radio>
|
||||
<el-radio border :label="false">非会员</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<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>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
|
||||
<!--<template v-if="formData.member == 1">
|
||||
<el-descriptions-item label="是否加入会员组别">
|
||||
<el-form-item prop="member">
|
||||
<el-radio-group v-model="formData.isJoinActivityMemberScope" size="small">
|
||||
<el-radio border :label="true">是</el-radio>
|
||||
<el-radio border :label="false">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<template v-if="formData.member == 0">
|
||||
<el-descriptions-item label="是否退出会员组别">
|
||||
<el-form-item prop="member">
|
||||
<el-radio-group v-model="formData.isExitActivityMemberScope" size="small">
|
||||
<el-radio border :label="true">是</el-radio>
|
||||
<el-radio border :label="false">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<template v-if="formData.member != null && !formData.welfareMember">
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<template v-if="formData.welfareMember == true">
|
||||
<el-descriptions-item label="是否加入福利项目">
|
||||
<el-form-item prop="isJoinWelfareProject">
|
||||
<el-radio-group v-model="formData.isJoinWelfareProject" size="small">
|
||||
<el-radio border :label="true">是</el-radio>
|
||||
<el-radio border :label="false">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<template v-if="formData.isJoinWelfareProject">
|
||||
<el-descriptions-item label="选择福利项目">
|
||||
<el-form-item prop="welfareProjectId">
|
||||
<el-select clearable filterable placeholder="请选择福利项目" style="width: 100%"
|
||||
v-model="formData.welfareProjectId">
|
||||
<el-option v-for="item in welfareProjectList"
|
||||
:key="id" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
</template>-->
|
||||
|
||||
<template v-if="formData.loginname == $store.state.user.loginname">
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-form-item prop="families">
|
||||
<el-table :data="formData.families" border size="small">
|
||||
<el-table-column label="关系" prop="relation">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.relation" maxlength="50"
|
||||
placeholder="请输入与本人关系"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="姓名" prop="name">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.name" maxlength="50" placeholder="请输入姓名"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工作单位" prop="unit">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.unit" maxlength="100"
|
||||
placeholder="请输入工作单位"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" prop="remark">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.remark" maxlength="100" placeholder="请输入备注"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column width="100px">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<el-button type="primary" size="mini" :disabled="allowFields('families')"
|
||||
@click="formData.families.push({})">添加
|
||||
</el-button>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="danger"
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="formData.families.length===0 || allowFields('families')"
|
||||
@click="formData.families.splice(scope.$index,1)"
|
||||
></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="个人简历" :span="3">
|
||||
<el-form-item prop="personalData">
|
||||
<text-editor v-model="formData.personalData"></text-editor>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
</el-descriptions>
|
||||
</el-form>
|
||||
<el-row justify="end" type="flex" class="mt10">
|
||||
<el-button @click="$emit('do-back')" v-if="formData.id || !isShow" type="primary">返 回</el-button>
|
||||
<template v-if="isShow">
|
||||
<el-button @click="doSave" type="primary">保存变更</el-button>
|
||||
</template>
|
||||
<el-button @click="doSubmit" type="primary">提交变更</el-button>
|
||||
</el-row>
|
||||
</el-card>
|
||||
`,
|
||||
props: {
|
||||
id: { type: String, default: '' },
|
||||
},
|
||||
mixins: [initTableMixins],
|
||||
store,
|
||||
data(){
|
||||
return{
|
||||
isShow: true,
|
||||
user: {},
|
||||
units: [],
|
||||
unions: [],
|
||||
// 允许变更的字段
|
||||
allowChangeFields: [],
|
||||
formData: {
|
||||
families: [],
|
||||
},
|
||||
formRules: {
|
||||
username: [{required: false, message: "必填", trigger: ["change", "blur"]}],
|
||||
sex: [{required: false, message: "必填", trigger: ["change", "blur"]}],
|
||||
email: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
callback();
|
||||
} else if (/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(value)) {
|
||||
callback();
|
||||
} else {
|
||||
callback(new Error("邮箱格式错误"));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
],
|
||||
idCard: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
// 如果值为空,直接通过校验
|
||||
callback();
|
||||
} else if (/^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}(\d|[Xx])$/.test(value)) {
|
||||
// 18位身份证号码格式正确
|
||||
callback();
|
||||
} else if (/^[1-9]\d{7}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 15位身份证号码格式正确
|
||||
callback();
|
||||
} else if (/^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 外国人身份证号码格式正确(18位)
|
||||
callback();
|
||||
} else if (/^[1-9]\d{7}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 外国人身份证号码格式正确(15位)
|
||||
callback();
|
||||
} else {
|
||||
// 格式错误,返回错误信息
|
||||
callback(new Error("身份证号码格式错误"));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
],
|
||||
mobile: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
// 如果值为空,直接通过校验
|
||||
callback();
|
||||
} else if (/^[1][345789][0-9]{9}$/.test(value)) {
|
||||
// 手机号格式正确
|
||||
callback();
|
||||
} else if (/^\d+-\d+$/.test(value) && value.length <= 16) {
|
||||
// 座机号格式正确
|
||||
callback();
|
||||
} else {
|
||||
// 格式错误,返回错误信息
|
||||
callback(new Error(value.includes('-') ? '座机号码格式错误' : '手机号码格式错误'));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
welfareProjectList: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getUnionName(val){
|
||||
const data = this.units.find(v => v.id === val)
|
||||
this.$set(this.formData, 'unionName', data ? data.unionname : '')
|
||||
},
|
||||
allowFields(prop) {
|
||||
return !this.allowChangeFields.map(v => v.code).includes(prop)
|
||||
},
|
||||
doSave(){
|
||||
this.$confirm("保存后可在我的申请里面再次编辑,您确定要保存吗?", "提示", { type: "warning" })
|
||||
.then(() => {
|
||||
const formData = this.formData
|
||||
if (formData.families) {
|
||||
formData.families = JSON.stringify(this.formData.families)
|
||||
}
|
||||
this.$emit('do-save', formData)
|
||||
})
|
||||
.catch()
|
||||
},
|
||||
doSubmit() {
|
||||
this.$refs.formRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$confirm("提交后将进入审核流程,无法再进行编辑,您确定要提交申请吗?", "提示", { type: "warning" })
|
||||
.then(() => {
|
||||
const formData = this.formData
|
||||
if (formData.families) {
|
||||
formData.families = JSON.stringify(this.formData.families)
|
||||
}
|
||||
this.$emit('do-submit', formData)
|
||||
})
|
||||
.catch()
|
||||
}
|
||||
})
|
||||
},
|
||||
async init(userId){
|
||||
if (userId) {
|
||||
this.isShow = false
|
||||
await this.getUserById(userId)
|
||||
} else {
|
||||
this.isShow = true
|
||||
this.user = this.$store.state.user
|
||||
}
|
||||
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)
|
||||
}
|
||||
},
|
||||
async getUserById(userId){
|
||||
const resp = await $.post("/platform/member/change/apply/getUserByIdForMemberChange", { userId })
|
||||
if (resp.code === 0) {
|
||||
this.user = resp.data
|
||||
}
|
||||
},
|
||||
getFormDataValue(id){
|
||||
if (id) {
|
||||
$.post("/platform/member/change/apply/findChangeById", { id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.formData = res.data
|
||||
this.formData.unionid = this.user.unionid
|
||||
if (this.formData.families) {
|
||||
this.formData.families = JSON.parse(this.formData.families)
|
||||
} else {
|
||||
this.formData.families = []
|
||||
}
|
||||
}
|
||||
})
|
||||
} else {
|
||||
const {
|
||||
id,
|
||||
username,
|
||||
loginname,
|
||||
sex,
|
||||
member,
|
||||
welfareMember,
|
||||
nation,
|
||||
birthday,
|
||||
political,
|
||||
education,
|
||||
academicDegree,
|
||||
position,
|
||||
unit,
|
||||
union,
|
||||
campus,
|
||||
userState,
|
||||
personType,
|
||||
preparedBy,
|
||||
idCard,
|
||||
mobile,
|
||||
email,
|
||||
families,
|
||||
personalData
|
||||
} = this.user
|
||||
|
||||
this.$set(this.formData, "userId", id)
|
||||
this.$set(this.formData, "username", username)
|
||||
this.$set(this.formData, "loginname", loginname)
|
||||
this.$set(this.formData, "birthday", birthday)
|
||||
this.$set(this.formData, "sex", sex)
|
||||
this.$set(this.formData, "member", member === 1)
|
||||
this.$set(this.formData, "welfareMember", welfareMember === 1)
|
||||
this.$set(this.formData, "idCard", idCard)
|
||||
this.$set(this.formData, "nation", nation)
|
||||
this.$set(this.formData, "political", political)
|
||||
this.$set(this.formData, "position", position)
|
||||
this.$set(this.formData, "education", education)
|
||||
this.$set(this.formData, "academicDegree", academicDegree)
|
||||
this.$set(this.formData, "campus", campus)
|
||||
this.$set(this.formData, "userState", userState)
|
||||
this.$set(this.formData, "personType", personType)
|
||||
this.$set(this.formData, "preparedBy", preparedBy)
|
||||
this.$set(this.formData, "unitName", unit ? unit.name : null)
|
||||
this.$set(this.formData, "unitId", unit ? unit.id : null)
|
||||
this.$set(this.formData, "unionName", union ? union.name : null)
|
||||
this.$set(this.formData, "unionId", union ? union.id : null)
|
||||
|
||||
this.$set(this.formData, "mobile", mobile)
|
||||
this.$set(this.formData, "email", email)
|
||||
this.$set(this.formData, "families", families ? families : [])
|
||||
this.$set(this.formData, "personalData", personalData)
|
||||
}
|
||||
}
|
||||
},
|
||||
created(){
|
||||
this.init()
|
||||
}
|
||||
}
|
||||
+144
@@ -0,0 +1,144 @@
|
||||
const MEMBER_CHANGE_AUDIT_INFO = {
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<el-tabs v-model="activeName">
|
||||
<el-tab-pane label="基础信息" name="basicInfo">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="工号">{{ viewData.loginname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">{{ viewData.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">{{ viewData.nation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="出生日期">{{ viewData.birthday ? moment(viewData.birthday).format("YYYY年MM月DD日") : '暂无' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="学历">{{ viewData.education }}</el-descriptions-item>
|
||||
<el-descriptions-item label="学位">{{ viewData.academicDegree }}</el-descriptions-item>
|
||||
<el-descriptions-item label="党政职务">{{ viewData.position }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="工作单位">{{ viewData.unitname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">{{ viewData.unionname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属校区">{{ viewData.campus }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">{{ viewData.idCard }}</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.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="进校时间">{{ viewData.schoolTime }}</el-descriptions-item>
|
||||
|
||||
<template v-if="viewData.userState == '退休'">
|
||||
<el-descriptions-item label="退休日期">{{ viewData.retireDate ? moment(viewData.retireDate).format("YYYY-MM-DD") : '暂无' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="福利享受截止日期">{{ moment(viewData.welfareStopDate).format("YYYY-MM-DD") }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<el-descriptions-item label="会员状态">{{ viewData.member ? '会员' : '非会员' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="福利会员状态">{{ viewData.welfareMember ? '福利会员' : '非福利会员' }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-table v-if="viewData.families&&viewData.families.length"
|
||||
:data="viewData.families" size="mini" border
|
||||
:header-cell-style="{background:'#eff3f6'}"
|
||||
style="width: 100%">
|
||||
<el-table-column prop="relation" label="与本人关系" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="姓名" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="unit" label="单位" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="remark" label="备注" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-empty v-else :image-size="50" description="暂无家庭成员信息"></el-empty>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="个人简况" :span="3">
|
||||
<template slot="label">个人简况</template>
|
||||
<div v-if="viewData.vita" class="text-left" v-html="viewData.vita"></div>
|
||||
<span v-else>无数据</span>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="变更信息" name="changeInfo" v-if="viewData.changeInfos">
|
||||
<el-table :data="viewData.changeInfos" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号" type="index" width="80px"></el-table-column>
|
||||
<el-table-column prop="fieldName" label="变更字段" header-align="center"></el-table-column>
|
||||
<el-table-column prop="sourceValue" label="原数据" header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<div v-html="row.sourceValue"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="newValue" label="新数据" header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<div v-html="row.newValue"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane v-if="viewData.nodeTasks && viewData.nodeTasks.length > 0" label="审核信息" name="audit">
|
||||
<div>
|
||||
<div v-for="nodeTask in viewData.nodeTasks" :key="nodeTask.id">
|
||||
<div class="process-title">
|
||||
{{nodeTask.nodeName}}
|
||||
</div>
|
||||
<el-descriptions :column="3" border v-for="task in nodeTask.tasks" :key="task.id"
|
||||
style="margin-bottom: 10px">
|
||||
<el-descriptions-item label="审核人">
|
||||
{{ task.actualOwnerLoginName + '-' + task.actualOwnerUserName}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核时间">{{ task.endOn}}</el-descriptions-item>
|
||||
<el-descriptions-item label="审核结果">
|
||||
<div v-if="task.extVariable">
|
||||
<el-tag type="success" size="mini"
|
||||
v-if="task.extVariable.bpmTaskApprovalType === 'PASS'">同意
|
||||
</el-tag>
|
||||
<el-tag type="danger" size="mini"
|
||||
v-if="task.extVariable.bpmTaskApprovalType === 'BACK'">退回
|
||||
</el-tag>
|
||||
<el-tag type="danger" size="mini"
|
||||
v-if="task.extVariable.bpmTaskApprovalType === 'REJECT'">拒绝
|
||||
</el-tag>
|
||||
</div>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核意见" :span="3">
|
||||
{{ task.extVariable.approvalOpinion }}
|
||||
</el-descriptions-item>
|
||||
<template v-if="$auth.hasRoleOr('SYSADMIN') && task.extVariable.approvalRemark">
|
||||
<el-descriptions-item label="审核说明" :span="3">
|
||||
{{ task.extVariable.approvalRemark }}
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<el-descriptions-item label="签字" :span="3">
|
||||
<el-image :src="task.extVariable.approvalSignature"
|
||||
v-if="task.extVariable && task.extVariable.approvalSignature"
|
||||
class="signature-image"></el-image>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
`,
|
||||
mixins: [initTableMixins],
|
||||
data(){
|
||||
return{
|
||||
activeName: "basicInfo",
|
||||
viewData: {
|
||||
changeInfos: [],
|
||||
nodeTasks: {},
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async onOpen(id){
|
||||
const resp = await $.post('/platform/member/change/mine/findMemberChangeRecord', {id})
|
||||
if (resp.code === 0) {
|
||||
this.viewData = resp.data
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+15
-22
@@ -68,7 +68,6 @@ layout("/layouts/platform.html"){
|
||||
code="UserType"></dict-select>
|
||||
</div>-->
|
||||
|
||||
<el-button @click="addMember" type="primary" size="small">新增会员</el-button>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
|
||||
@@ -150,15 +149,11 @@ layout("/layouts/platform.html"){
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<member-info :id="id"></member-info>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<member-apply :admin-operate="true"></member-apply>
|
||||
<member-info ref="memberInfoRef"></member-info>
|
||||
</template>
|
||||
|
||||
<template #public>
|
||||
<member-change :id="id" :url="url" ref="memberChangeRef"></member-change>
|
||||
<member-change ref="memberChangeRef" @do-back="$refs.guava.index()" @do-submit="doSubmit"></member-change>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
@@ -166,8 +161,7 @@ layout("/layouts/platform.html"){
|
||||
<script>
|
||||
|
||||
<!--#include("../../common/info/memberInfo.js"){}#-->
|
||||
<!--#include("../../common/apply/memberApply.js"){}#-->
|
||||
<!--#include("../../common/change/memberChange.js"){}#-->
|
||||
<!--#include("../common/memberChange.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: "#app",
|
||||
@@ -203,10 +197,10 @@ layout("/layouts/platform.html"){
|
||||
}]
|
||||
},
|
||||
pageForm: {
|
||||
unionId: null,
|
||||
unitId: null,
|
||||
sex: null,
|
||||
searchKeyword: null,
|
||||
unionId: "",
|
||||
unitId: "",
|
||||
sex: "",
|
||||
searchKeyword: "",
|
||||
changed: 2,
|
||||
isMember: 1,
|
||||
changeTypes: [],
|
||||
@@ -229,7 +223,6 @@ layout("/layouts/platform.html"){
|
||||
},
|
||||
components: {
|
||||
"member-info": MEMBER_INFO,
|
||||
"member-apply": MEMBER_APPLY,
|
||||
"member-change": MEMBER_CHANGE,
|
||||
},
|
||||
methods: {
|
||||
@@ -242,17 +235,17 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
},
|
||||
openChange(id) {
|
||||
this.id = null
|
||||
this.id = id
|
||||
this.$refs.guava.public()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.memberChangeRef.findOne(id)
|
||||
this.$refs.guava.public(() => {
|
||||
this.$refs.memberChangeRef.init(id)
|
||||
})
|
||||
},
|
||||
doSubmit(){
|
||||
|
||||
},
|
||||
openView(id) {
|
||||
this.id = null
|
||||
this.id = id
|
||||
this.$refs.guava.view()
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.memberInfoRef.onOpen(id)
|
||||
})
|
||||
},
|
||||
addMember() {
|
||||
this.$refs.guava.edit()
|
||||
|
||||
@@ -0,0 +1,148 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool :app="this" label="申请列表">
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<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"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='changeTypes'">
|
||||
<span style="color: #0e78c5;cursor: pointer" @click="openView(row)">
|
||||
{{getChangeTypes(row.changeTypes)}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button v-if="row.applyStateId === 10010"
|
||||
@click="sublime.jumpPagePjax('/platform/member/change/apply?id=' + row.id)"
|
||||
size="mini" type="primary">编辑</el-button>
|
||||
<!-- <el-button v-if="row.applyStateId === 20" @click="doRevoke(row)" size="mini" type="warning">撤销</el-button>-->
|
||||
<el-button v-if="row.applyStateId === 10010" @click="doDelete(row)" size="mini" type="danger">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<member-change-audit-info ref="memberChangeAuditInfoRef"></member-change-audit-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
<!--#include("../common/memberChangeAuditInfo.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data(){
|
||||
return{
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "changeTypes", label: "变更类型", sortable: true, width: 200 },
|
||||
{ prop: "applyDateTime", label: "申请时间", sortable: true },
|
||||
{ prop: "stateName", label: "当前节点", sortable: true }
|
||||
],
|
||||
changeTypeData: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'common-query': COMMON_QUERY,
|
||||
'member-change-audit-info': MEMBER_CHANGE_AUDIT_INFO
|
||||
},
|
||||
methods: {
|
||||
openView(row){
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.memberChangeAuditInfoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
async doRevoke(row){
|
||||
const confirm = await this.$confirm('确定要撤销该条申请吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post("/platform/member/change/mine/doRevoke", { id: row.id })
|
||||
if (resp.code === 0) {
|
||||
this.pageData()
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
async doDelete(row){
|
||||
const confirm = await this.$confirm('确定要删除该条申请吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post("/platform/member/change/mine/doDelete", { id: row.id })
|
||||
if (resp.code === 0) {
|
||||
this.pageData()
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
getChangeTypes(changeTypes){
|
||||
const changeTypesList = JSON.parse(changeTypes)
|
||||
if (changeTypesList) {
|
||||
if (!changeTypesList || changeTypesList.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return changeTypesList
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.type === v).changeTypeName
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
}
|
||||
},
|
||||
async created(){
|
||||
this.pageData()
|
||||
this.changeTypeData = await this.$businessTool.getEnumOptions("MemberChangeType")
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+138
-97
@@ -37,74 +37,85 @@ layout("/layouts/platform.html"){
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never">
|
||||
<table-tool label="变更列表"></table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
|
||||
class="vi-table" ref="table" row-key="id" style="width: 100%">
|
||||
<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" :width="column.width"
|
||||
align="center" header-align="center" min-width="100px"
|
||||
show-overflow-tooltip v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row.id)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column header-align="center" label="异动信息">
|
||||
<el-table-column align="center" header-align="center" label="更新时间"
|
||||
min-width="145px" prop="changeTime"
|
||||
show-overflow-tooltip sortable>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="异动类型"
|
||||
prop="changeType" show-overflow-tooltip sortable>
|
||||
<template scope="{row}">
|
||||
<!--<span style="color: #0e78c5;cursor: pointer" @click="openUserChangeInfo(row)">
|
||||
{{getChangeTypes(row.changeTypes)}}
|
||||
</span>-->
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
|
||||
<!--<el-table-column align="center" header-align="center" label="操作"
|
||||
prop="userOnline"
|
||||
width="100px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain 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-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>-->
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<member-info :id="userId"></member-info>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="变更列表" :app="this"></table-tool>
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id"
|
||||
@sort-change="pageOrder"
|
||||
resizable
|
||||
v-loading="tableLoading" :size="tableSize" class="vi-table">
|
||||
<el-table-column align="center" header-align="center" type="index"
|
||||
:index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
show-overflow-tooltip
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
>
|
||||
<template v-if="column.prop=='loginname'" scope="{row}">
|
||||
<el-link type="primary" @click="openUserView(row)">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="异动信息" header-align="center">
|
||||
<el-table-column label="更新时间" prop="applyDateTime" min-width="145px"
|
||||
header-align="center"
|
||||
sortable
|
||||
align="center" show-overflow-tooltip>
|
||||
</el-table-column>
|
||||
<el-table-column label="异动类型" prop="changeTypes" header-align="center"
|
||||
width="150px"
|
||||
align="center" show-overflow-tooltip sortable>
|
||||
<template scope="{row}">
|
||||
<span style="color: #0e78c5;cursor: pointer" @click="openView(row)">
|
||||
{{ getChangeTypes(row.changeTypes) }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
|
||||
<!-- <el-table-column label="审核状态">-->
|
||||
<!-- <template scope="{row}">-->
|
||||
<!-- <vi-table-state v-if="row.stateId" :state="row"></vi-table-state>-->
|
||||
<!-- <vi-table-state v-else :state="{stateColor:'#1890ff',stateName:'暂无'}"></vi-table-state>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column prop="userOnline" align="center" header-align="center"
|
||||
label="操作"
|
||||
width="100px" fixed="right">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" type="primary" @click="openView(row.userId)">查看</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<member-change-audit-info ref="memberChangeAuditInfoRef"></member-change-audit-info>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<member-info ref="memberInfoRef"></member-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
|
||||
<!--#include("../../common/info/memberInfo.js"){}#-->
|
||||
|
||||
<!--#include("../../common/info/memberInfo.js"){}#-->
|
||||
<!--#include("../common/memberChangeAuditInfo.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el:'#app',
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
"member-info": MEMBER_INFO,
|
||||
},
|
||||
data(){
|
||||
return{
|
||||
userId:'',
|
||||
@@ -119,46 +130,76 @@ layout("/layouts/platform.html"){
|
||||
{prop: 'unitName', label: '所属单位', sortable: true},
|
||||
],
|
||||
unions: [],
|
||||
units: []
|
||||
units: [],
|
||||
changeTypeData: [],
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
getChangeTypes(changeTypes) {
|
||||
if (changeTypes) {
|
||||
const c = JSON.parse(changeTypes)
|
||||
return this.userChangeTypeOptions.filter(v => c.includes(v.code)).map(v => v.description).join()
|
||||
}
|
||||
return null
|
||||
},
|
||||
openView(userId) {
|
||||
this.id = userId
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
async initData() {
|
||||
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
|
||||
this.$businessTool.listUnion().then(data => {
|
||||
this.unions = data
|
||||
})
|
||||
} else {
|
||||
this.$businessTool.listUnion(this.$store.state.user.union.id).then(data => {
|
||||
this.unions = data
|
||||
})
|
||||
}
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.$businessTool.listUnit(this.pageForm.unionId).then(data => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
created(){
|
||||
this.pageData()
|
||||
this.initData()
|
||||
}
|
||||
components: {
|
||||
'member-info': MEMBER_INFO,
|
||||
'member-change-audit-info': MEMBER_CHANGE_AUDIT_INFO,
|
||||
},
|
||||
methods: {
|
||||
openUserView(row){
|
||||
this.$refs.guava.edit(() => {
|
||||
this.$refs.memberInfoRef.onOpen(row.userId)
|
||||
})
|
||||
},
|
||||
openView(row){
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.memberChangeAuditInfoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
getChangeTypes(changeTypes){
|
||||
const changeTypesList = JSON.parse(changeTypes)
|
||||
if (changeTypesList) {
|
||||
if (!changeTypesList || changeTypesList.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return changeTypesList
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.name === v).changeTypeName
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
},
|
||||
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.units = await this.$businessTool.listUnit(this.pageForm.unionId)
|
||||
}
|
||||
},
|
||||
|
||||
pageData() {
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.userStates = JSON.stringify(pageForm.userStates)
|
||||
pageForm.personTypes = JSON.stringify(pageForm.personTypes)
|
||||
pageForm.changeTypes = JSON.stringify(pageForm.changeTypes)
|
||||
pageForm.changeOrigins = JSON.stringify(pageForm.changeOrigins)
|
||||
|
||||
this.$axios.post(loc() + '/pageData', pageForm)
|
||||
.then(res => {
|
||||
if (res.code === 0) {
|
||||
this.tableData = res.data.list
|
||||
this.pageForm.totalCount = res.data.totalCount
|
||||
} else {
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
|
||||
},
|
||||
async created() {
|
||||
|
||||
this.pageData();
|
||||
if (this.$auth.hasRoleOr("SYSADMIN, SCHOOL_UNION_ADMIN")) {
|
||||
this.unions = await this.$businessTool.listUnion()
|
||||
} else {
|
||||
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
|
||||
}
|
||||
|
||||
this.changeTypeData = await this.$businessTool.getEnumOptions("MemberChangeType")
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
<div id="member_change_school_union_approval">
|
||||
<el-form :model="formData" ref="formRef" label-width="0" label-suffix=":" class="flow-task-form">
|
||||
<el-form-item label="审批意见" prop="tf_opinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<snaker-flow-task-form-action @task-action="handleTaskAction" @cancel="handleCancel"></snaker-flow-task-form-action>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#member_change_school_union_approval",
|
||||
store,
|
||||
data() {
|
||||
return {
|
||||
formData: {
|
||||
tf_opinion: ""
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleTaskAction(val) {
|
||||
const data = {
|
||||
...val,
|
||||
...this.formData
|
||||
}
|
||||
this.$axios.post("/flow/common/executeTask", {
|
||||
data: JSON.stringify(data)
|
||||
}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success("操作成功")
|
||||
// 发送完成消息
|
||||
window.parent.postMessage({
|
||||
type: "task-complete"
|
||||
}, "*")
|
||||
}
|
||||
})
|
||||
},
|
||||
handleCancel(val) {
|
||||
console.log(val)
|
||||
},
|
||||
}
|
||||
})
|
||||
</script>
|
||||
+209
@@ -0,0 +1,209 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="审核列表">
|
||||
<el-radio-group @change="search" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<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"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openUserView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='changeTypes'">
|
||||
<span style="color: #0e78c5;cursor: pointer" @click="openView(row)">
|
||||
{{getChangeTypes(row.changeTypes)}}
|
||||
</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='instanceState'">
|
||||
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
|
||||
size="small"></enum-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
|
||||
<el-button v-if="row.taskState === 10" @click="openApproval(row)" size="mini" type="primary">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete"
|
||||
@click="openRevoke(row.processInstanceTaskId)"
|
||||
size="mini"
|
||||
type="danger">
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<!-- <template #view>-->
|
||||
<!-- <member-info ref="memberInfoRef"></member-info>-->
|
||||
<!-- </template>-->
|
||||
<!-- -->
|
||||
<!-- <template #public>-->
|
||||
<!-- <member-change-audit-info ref="memberChangeAuditInfoRef"></member-change-audit-info>-->
|
||||
<!-- <div v-if="showApprovalForm">-->
|
||||
<!-- <el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">-->
|
||||
<!-- <el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">-->
|
||||
<!-- <user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- <el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">-->
|
||||
<!-- <pc-signature v-model="formData.approvalSignature"></pc-signature>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- </el-form>-->
|
||||
<!-- <el-row type="flex" justify="end">-->
|
||||
<!-- <el-button plain @click="$refs.guava.index()">取消</el-button>-->
|
||||
<!-- <el-button type="danger" @click="doApproval('BACK')">退回重新填写</el-button>-->
|
||||
<!-- <el-button type="danger" @click="doApproval('REJECT')">拒绝</el-button>-->
|
||||
<!-- <el-button type="primary" @click="doApproval('PASS')">同意</el-button>-->
|
||||
<!-- </el-row>-->
|
||||
<!-- </div>-->
|
||||
<!-- </template>-->
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
audit: false
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "loginName", label: "工号", sortable: true },
|
||||
{ prop: "userName", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "changeTypes", label: "变更类型", sortable: true, width: 200 },
|
||||
{ prop: "applyDateTime", label: "申请时间", sortable: true },
|
||||
{ prop: "taskName", label: "当前节点"},
|
||||
{ prop: "instanceState", label: "流程状态"}
|
||||
],
|
||||
|
||||
changeTypeData: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'common-query': COMMON_QUERY,
|
||||
},
|
||||
methods: {
|
||||
openView(row){
|
||||
this.$refs.guava.public(() => {
|
||||
this.$refs.memberInfoRef.onOpen(row.userId)
|
||||
})
|
||||
},
|
||||
openUserView(row){
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.memberChangeAuditInfoRef.onOpen(row.userId)
|
||||
})
|
||||
},
|
||||
openApproval(row) {
|
||||
window.open("/flow/common/approval/form?taskId=" + row.taskId + "&instanceId=" + row.instanceId + "&businessId=" + row.businessNo)
|
||||
},
|
||||
doApproval(approvalType) {
|
||||
let msg = '确定要同意此条申请吗?'
|
||||
if (approvalType === 'REJECT') {
|
||||
msg = '确定要拒绝此教工的入会申请吗?'
|
||||
} else if (approvalType === 'BACK') {
|
||||
msg = '确定要退回此条申请吗?'
|
||||
}
|
||||
|
||||
|
||||
this.$confirm(msg, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
this.formData.bpmTaskApprovalType = approvalType
|
||||
this.$refs.approvalFormRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$axios
|
||||
.post(loc() + "/platform/member/change/schoolUnion/audit/approval", {
|
||||
approval: JSON.stringify(this.formData)
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$refs.guava.index()
|
||||
this.$message.success(res.msg)
|
||||
this.doSearch()
|
||||
} else {
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
openRevoke(taskId) {
|
||||
this.$confirm("您确定要撤回吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.$axios.post("/platform/member/change/schoolUnion/audit/revoke", { taskId }).then((resp) => {
|
||||
this.$message.success(resp.msg)
|
||||
this.doSearch()
|
||||
})
|
||||
})
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
getChangeTypes(changeTypes) {
|
||||
const changeTypesList = JSON.parse(changeTypes)
|
||||
if (changeTypesList) {
|
||||
if (!changeTypesList || changeTypesList.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return changeTypesList
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.name === v).changeTypeName
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.changeTypeData = await this.$businessTool.getEnumOptions("MemberChangeType")
|
||||
this.pageData()
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,532 @@
|
||||
<div id="member_change">
|
||||
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="0" label-suffix=":" class="flow-task-form">
|
||||
<el-descriptions :column="3" border>
|
||||
<el-descriptions-item label="工号">
|
||||
<el-form-item prop="loginname">
|
||||
<el-input v-model="formData.loginname" readonly size="small"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">
|
||||
<el-form-item prop="username">
|
||||
<el-input v-model="formData.username" readonly size="small"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">
|
||||
<el-form-item prop="sex">
|
||||
<el-radio-group :disabled="allowFields('sex')" v-model="formData.sex" size="small">
|
||||
<el-radio border label="男性">男</el-radio>
|
||||
<el-radio border label="女性">女</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">
|
||||
<el-form-item prop="nation">
|
||||
<dict-select style="width: 100%" placeholder="请选择民族" v-model="formData.nation"
|
||||
:disabled="allowFields('nation')" code="USER_NATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="出生日期">
|
||||
<el-form-item prop="birthday">
|
||||
<el-date-picker v-model="formData.birthday"
|
||||
type="date"
|
||||
:disabled="allowFields('birthday')"
|
||||
placeholder="请选择出生日期"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
style="width: 100%"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">
|
||||
<el-form-item prop="political">
|
||||
<dict-select style="width: 100%" placeholder="请选择政治面貌" v-model="formData.political"
|
||||
:disabled="allowFields('political')" code="USER_POLITICAL"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="学历">
|
||||
<el-form-item prop="education">
|
||||
<dict-select style="width: 100%" placeholder="请选择学历" v-model="formData.education"
|
||||
:disabled="allowFields('education')" code="USER_EDUCATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="学位">
|
||||
<el-form-item prop="academicDegree">
|
||||
<dict-select style="width: 100%" placeholder="请选择学位" v-model="formData.academicDegree"
|
||||
:disabled="allowFields('academicDegree')" code="USER_ACADEMIC_DEGREE"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="党政职务">
|
||||
<el-form-item prop="position">
|
||||
<el-input v-model="formData.position" placeholder="请输入党政职务"
|
||||
:disabled="allowFields('position')" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<template v-if="$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN, SCHOOL_UNION_MEMBER_ADMIN')">
|
||||
<el-descriptions-item label="工作单位">
|
||||
<el-form-item prop="unitId">
|
||||
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%"
|
||||
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-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
<el-form-item prop="unionId">
|
||||
<el-select clearable filterable placeholder="请选择所属工会" style="width: 100%"
|
||||
v-model="formData.unionId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<template v-else>
|
||||
<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-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
<el-form-item prop="unionName">
|
||||
<el-input v-model="formData.unionName" disabled placeholder="请输入所属工会"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<el-descriptions-item label="所属校区">
|
||||
<el-form-item prop="campus">
|
||||
<dict-select style="width: 100%" placeholder="请选择所属校区" v-model="formData.campus"
|
||||
:disabled="allowFields('campus')" code="USER_CAMPUS"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">
|
||||
<el-form-item prop="idCard">
|
||||
<el-input v-model="formData.idCard" :disabled="allowFields('idCard')" placeholder="请输入身份证号码" maxlength="18"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="联系电话">
|
||||
<el-form-item prop="mobile">
|
||||
<el-input v-model="formData.mobile" :disabled="allowFields('mobile')" placeholder="请输入联系电话" maxlength="15"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">
|
||||
<el-form-item prop="email">
|
||||
<el-input v-model="formData.email" :disabled="allowFields('email')" placeholder="请输入电子邮箱" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="在职状态">
|
||||
<el-form-item prop="userState">
|
||||
<dict-select v-model="formData.userState" code="USER_STATE"
|
||||
:disabled="allowFields('userState')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">
|
||||
<el-form-item prop="personType">
|
||||
<dict-select v-model="formData.personType" code="PERSON_TYPE"
|
||||
:disabled="allowFields('personType')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<template v-if="formData.userState == '退休'">
|
||||
<el-descriptions-item label="退休日期">
|
||||
<el-form-item prop="retireDate">
|
||||
<el-date-picker v-model="formData.retireDate"
|
||||
type="date"
|
||||
placeholder="请选择出生日期"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
style="width: 100%"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="福利享受截止日期">
|
||||
<el-form-item prop="welfareStopDate">
|
||||
<el-date-picker v-model="formData.welfareStopDate"
|
||||
type="date"
|
||||
:disabled="isView"
|
||||
placeholder="请选择福利享受截止日期"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
style="width: 100%"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<el-descriptions-item label="会员状态" :span="1.5">
|
||||
<el-form-item prop="member">
|
||||
<el-radio-group v-model="formData.member" size="small">
|
||||
<el-radio border :label="true">会员</el-radio>
|
||||
<el-radio border :label="false">非会员</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="福利会员状态" :span="1.5">
|
||||
<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>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<!--<template v-if="formData.member == 1">
|
||||
<el-descriptions-item label="是否加入会员组别">
|
||||
<el-form-item prop="member">
|
||||
<el-radio-group v-model="formData.isJoinActivityMemberScope" size="small">
|
||||
<el-radio border :label="true">是</el-radio>
|
||||
<el-radio border :label="false">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<template v-if="formData.member == 0">
|
||||
<el-descriptions-item label="是否退出会员组别">
|
||||
<el-form-item prop="member">
|
||||
<el-radio-group v-model="formData.isExitActivityMemberScope" size="small">
|
||||
<el-radio border :label="true">是</el-radio>
|
||||
<el-radio border :label="false">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<template v-if="formData.member != null && !formData.welfareMember">
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<template v-if="formData.welfareMember == true">
|
||||
<el-descriptions-item label="是否加入福利项目">
|
||||
<el-form-item prop="isJoinWelfareProject">
|
||||
<el-radio-group v-model="formData.isJoinWelfareProject" size="small">
|
||||
<el-radio border :label="true">是</el-radio>
|
||||
<el-radio border :label="false">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<template v-if="formData.isJoinWelfareProject">
|
||||
<el-descriptions-item label="选择福利项目">
|
||||
<el-form-item prop="welfareProjectId">
|
||||
<el-select clearable filterable placeholder="请选择福利项目" style="width: 100%"
|
||||
v-model="formData.welfareProjectId">
|
||||
<el-option v-for="item in welfareProjectList"
|
||||
:key="id" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
</template>-->
|
||||
|
||||
<template v-if="">
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-form-item prop="families">
|
||||
<el-table :data="formData.families" border size="small">
|
||||
<el-table-column label="关系" prop="relation">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.relation" maxlength="50"
|
||||
placeholder="请输入与本人关系"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="姓名" prop="name">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.name" maxlength="50" placeholder="请输入姓名"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工作单位" prop="unit">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.unit" maxlength="100"
|
||||
placeholder="请输入工作单位"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" prop="remark">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.remark" maxlength="100" placeholder="请输入备注"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column width="100px">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<el-button type="primary" size="mini" :disabled="allowFields('families')"
|
||||
@click="formData.families.push({})">添加
|
||||
</el-button>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="danger"
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="formData.families.length===0 || allowFields('families')"
|
||||
@click="formData.families.splice(scope.$index,1)"
|
||||
></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="个人简历" :span="3">
|
||||
<el-form-item prop="personalData">
|
||||
<text-editor v-model="formData.personalData"></text-editor>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
</el-descriptions>
|
||||
</el-form>
|
||||
|
||||
<snaker-flow-task-form-action @task-action="handleTaskAction" @save-draft="handleSaveDraft" @cancel="handleCancel"></snaker-flow-task-form-action>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
new Vue({
|
||||
el: '#member_change',
|
||||
store,
|
||||
data() {
|
||||
return {
|
||||
units: [],
|
||||
unions: [],
|
||||
// 允许变更的字段
|
||||
allowChangeFields: [],
|
||||
formData: {
|
||||
families: [],
|
||||
},
|
||||
formRules: {
|
||||
username: [{required: false, message: "必填", trigger: ["change", "blur"]}],
|
||||
sex: [{required: false, message: "必填", trigger: ["change", "blur"]}],
|
||||
email: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
callback();
|
||||
} else if (/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(value)) {
|
||||
callback();
|
||||
} else {
|
||||
callback(new Error("邮箱格式错误"));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
],
|
||||
idCard: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
// 如果值为空,直接通过校验
|
||||
callback();
|
||||
} else if (/^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}(\d|[Xx])$/.test(value)) {
|
||||
// 18位身份证号码格式正确
|
||||
callback();
|
||||
} else if (/^[1-9]\d{7}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 15位身份证号码格式正确
|
||||
callback();
|
||||
} else if (/^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 外国人身份证号码格式正确(18位)
|
||||
callback();
|
||||
} else if (/^[1-9]\d{7}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 外国人身份证号码格式正确(15位)
|
||||
callback();
|
||||
} else {
|
||||
// 格式错误,返回错误信息
|
||||
callback(new Error("身份证号码格式错误"));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
],
|
||||
mobile: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
// 如果值为空,直接通过校验
|
||||
callback();
|
||||
} else if (/^[1][345789][0-9]{9}$/.test(value)) {
|
||||
// 手机号格式正确
|
||||
callback();
|
||||
} else if (/^\d+-\d+$/.test(value) && value.length <= 16) {
|
||||
// 座机号格式正确
|
||||
callback();
|
||||
} else {
|
||||
// 格式错误,返回错误信息
|
||||
callback(new Error(value.includes('-') ? '座机号码格式错误' : '手机号码格式错误'));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
]
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 提交
|
||||
handleTaskAction(val) {
|
||||
this.$confirm("您确定要提交吗?", "提示", { type: "warning" })
|
||||
.then(() => {
|
||||
this.$refs.formRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$axios
|
||||
.post("/flow/common/startInstanceAndExecute", {
|
||||
...val,
|
||||
bizData: JSON.stringify(this.formData)
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success("操作成功")
|
||||
// 发送完成消息
|
||||
window.parent.postMessage(
|
||||
{
|
||||
type: "task-complete"
|
||||
},
|
||||
"*"
|
||||
)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
// 保存
|
||||
handleSaveDraft(val) {
|
||||
this.$confirm("您确定要保存吗?", "提示", { type: "warning" })
|
||||
.then(() => {
|
||||
this.$axios
|
||||
.post("/flow/common/startInstance", {
|
||||
...val,
|
||||
bizData: JSON.stringify(this.formData)
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success("操作成功")
|
||||
// 发送完成消息
|
||||
window.parent.postMessage(
|
||||
{
|
||||
type: "task-complete"
|
||||
},
|
||||
"*"
|
||||
)
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
// 取消
|
||||
handleCancel() {
|
||||
|
||||
},
|
||||
getUnionName(val){
|
||||
const data = this.units.find(v => v.id === val)
|
||||
this.$set(this.formData, 'unionName', data ? data.unionname : '')
|
||||
},
|
||||
allowFields(prop) {
|
||||
return !this.allowChangeFields.map(v => v.code).includes(prop)
|
||||
},
|
||||
async init(userId){
|
||||
if (userId) {
|
||||
this.isShow = false
|
||||
await this.getUserById(userId)
|
||||
} else {
|
||||
this.isShow = true
|
||||
this.user = this.$store.state.user
|
||||
}
|
||||
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)
|
||||
}
|
||||
},
|
||||
async getUserById(userId){
|
||||
const resp = await this.$axios.post("/platform/member/change/apply/getUserByIdForMemberChange", { userId })
|
||||
if (resp.code === 0) {
|
||||
this.user = resp.data
|
||||
}
|
||||
},
|
||||
getFormDataValue(id){
|
||||
if (id) {
|
||||
this.$axios.post("/platform/member/change/apply/findChangeById", { id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.formData = res.data
|
||||
this.formData.unionid = this.user.unionid
|
||||
if (this.formData.families) {
|
||||
this.formData.families = JSON.parse(this.formData.families)
|
||||
} else {
|
||||
this.formData.families = []
|
||||
}
|
||||
}
|
||||
})
|
||||
} else {
|
||||
const {
|
||||
id,
|
||||
username,
|
||||
loginname,
|
||||
sex,
|
||||
member,
|
||||
welfareMember,
|
||||
nation,
|
||||
birthday,
|
||||
political,
|
||||
education,
|
||||
academicDegree,
|
||||
position,
|
||||
unit,
|
||||
union,
|
||||
campus,
|
||||
userState,
|
||||
personType,
|
||||
preparedBy,
|
||||
idCard,
|
||||
mobile,
|
||||
email,
|
||||
families,
|
||||
personalData
|
||||
} = this.user
|
||||
|
||||
this.$set(this.formData, "userId", id)
|
||||
this.$set(this.formData, "username", username)
|
||||
this.$set(this.formData, "loginname", loginname)
|
||||
this.$set(this.formData, "birthday", birthday)
|
||||
this.$set(this.formData, "sex", sex)
|
||||
this.$set(this.formData, "member", member === 1)
|
||||
this.$set(this.formData, "welfareMember", welfareMember === 1)
|
||||
this.$set(this.formData, "idCard", idCard)
|
||||
this.$set(this.formData, "nation", nation)
|
||||
this.$set(this.formData, "political", political)
|
||||
this.$set(this.formData, "position", position)
|
||||
this.$set(this.formData, "education", education)
|
||||
this.$set(this.formData, "academicDegree", academicDegree)
|
||||
this.$set(this.formData, "campus", campus)
|
||||
this.$set(this.formData, "userState", userState)
|
||||
this.$set(this.formData, "personType", personType)
|
||||
this.$set(this.formData, "preparedBy", preparedBy)
|
||||
this.$set(this.formData, "unitName", unit ? unit.name : null)
|
||||
this.$set(this.formData, "unitId", unit ? unit.id : null)
|
||||
this.$set(this.formData, "unionName", union ? union.name : null)
|
||||
this.$set(this.formData, "unionId", union ? union.id : null)
|
||||
|
||||
this.$set(this.formData, "mobile", mobile)
|
||||
this.$set(this.formData, "email", email)
|
||||
this.$set(this.formData, "families", families ? families : [])
|
||||
this.$set(this.formData, "personalData", personalData)
|
||||
}
|
||||
}
|
||||
},
|
||||
created(){
|
||||
this.init()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
@@ -0,0 +1,155 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool :app="this" label="申请列表">
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<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"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='changeTypes'">
|
||||
<span style="color: #0e78c5;cursor: pointer" @click="openView(row)">
|
||||
{{getChangeTypes(row.changeTypes)}}
|
||||
</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='instanceState'">
|
||||
<enum-tag :value="row.instanceState" name="ProcessInstanceStateEnum" label_key="message"
|
||||
size="small"></enum-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button v-if="row.applyStateId === 10010"
|
||||
@click="sublime.jumpPagePjax('/platform/member/change/apply?id=' + row.id)"
|
||||
size="mini" type="primary">编辑</el-button>
|
||||
<el-button v-if="row.taskKey === 'apply'" size="mini"
|
||||
@click="onDelete(row)" type="danger">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<member-change-audit-info ref="memberChangeAuditInfoRef"></member-change-audit-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
<!--#include("../common/memberChangeAuditInfo.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data(){
|
||||
return{
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "changeTypes", label: "变更类型", sortable: true, width: 200 },
|
||||
{ prop: "applyDateTime", label: "申请时间", sortable: true },
|
||||
{ prop: "taskName", label: "当前节点"},
|
||||
{ prop: "instanceState", label: "流程状态"}
|
||||
],
|
||||
changeTypeData: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'common-query': COMMON_QUERY,
|
||||
'member-change-audit-info': MEMBER_CHANGE_AUDIT_INFO
|
||||
},
|
||||
methods: {
|
||||
openView(row){
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.memberChangeAuditInfoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
async doRevoke(row){
|
||||
const confirm = await this.$confirm('确定要撤销该条申请吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post("/platform/member/change/mine/doRevoke", { id: row.id })
|
||||
if (resp.code === 0) {
|
||||
this.pageData()
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
async onDelete(row){
|
||||
const confirm = await this.$confirm('确定要删除该条申请吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post("/platform/member/change/mine/doDelete", { id: row.id })
|
||||
if (resp.code === 0) {
|
||||
this.pageData()
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
getChangeTypes(changeTypes){
|
||||
const changeTypesList = JSON.parse(changeTypes)
|
||||
if (changeTypesList) {
|
||||
if (!changeTypesList || changeTypesList.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return changeTypesList
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.name === v).changeTypeName
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
}
|
||||
},
|
||||
async created(){
|
||||
this.pageData()
|
||||
this.changeTypeData = await this.$businessTool.getEnumOptions("MemberChangeType")
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,60 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
<member-change ref="memberChange" :id="id" @do-save="doSave" @do-submit="doSubmit"
|
||||
@do-back="sublime.jumpPagePjax('/platform/member/change/mine')"></member-change>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("../common/memberChange.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data(){
|
||||
return{
|
||||
id: GetQueryString('id')
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'member-change': MEMBER_CHANGE,
|
||||
},
|
||||
methods: {
|
||||
async doSave(formData){
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '数据保存中请稍后...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
const resp = await $.post('/platform/member/change/apply/doSave', formData)
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.$store.dispatch("pjaxRoute", "/platform/member/change/mine")
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
},
|
||||
async doSubmit(formData){
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '数据保存中请稍后...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
const resp = await $.post('/platform/member/change/apply/doSubmit', formData)
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.$store.dispatch("pjaxRoute", "/platform/member/change/mine")
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
},
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,165 @@
|
||||
<div id="member_change_view">
|
||||
<el-tabs v-model="activeName">
|
||||
<el-tab-pane label="基础信息" name="basicInfo">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="工号">{{ viewData.loginname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">{{ viewData.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">{{ viewData.nation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="出生日期">{{ viewData.birthday ? $moment(viewData.birthday).format("YYYY年MM月DD日") : '暂无' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="学历">{{ viewData.education }}</el-descriptions-item>
|
||||
<el-descriptions-item label="学位">{{ viewData.academicDegree }}</el-descriptions-item>
|
||||
<el-descriptions-item label="党政职务">{{ viewData.position }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="工作单位">{{ viewData.unitname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">{{ viewData.unionname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属校区">{{ viewData.campus }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">{{ viewData.idCard }}</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.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="进校时间">{{ viewData.schoolTime }}</el-descriptions-item>
|
||||
|
||||
<template v-if="viewData.userState == '退休'">
|
||||
<el-descriptions-item label="退休日期">{{ viewData.retireDate ? $moment(viewData.retireDate).format("YYYY-MM-DD") : '暂无' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="福利享受截止日期">{{ $moment(viewData.welfareStopDate).format("YYYY-MM-DD") }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<el-descriptions-item label="会员状态">{{ viewData.member ? '会员' : '非会员' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="福利会员状态">{{ viewData.welfareMember ? '福利会员' : '非福利会员' }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-table v-if="viewData.families&&viewData.families.length"
|
||||
:data="viewData.families" size="mini" border
|
||||
:header-cell-style="{background:'#eff3f6'}"
|
||||
style="width: 100%">
|
||||
<el-table-column prop="relation" label="与本人关系" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="姓名" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="unit" label="单位" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="remark" label="备注" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-empty v-else :image-size="50" description="暂无家庭成员信息"></el-empty>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="个人简况" :span="3">
|
||||
<template slot="label">个人简况</template>
|
||||
<div v-if="viewData.vita" class="text-left" v-html="viewData.vita"></div>
|
||||
<span v-else>无数据</span>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="变更信息" name="changeInfo" v-if="viewData.changeInfos">
|
||||
<el-table :data="viewData.changeInfos" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号" type="index" width="80px"></el-table-column>
|
||||
<el-table-column prop="fieldName" label="变更字段" header-align="center"></el-table-column>
|
||||
<el-table-column prop="sourceValue" label="原数据" header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<div v-html="row.sourceValue"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="newValue" label="新数据" header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<div v-html="row.newValue"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
||||
|
||||
<template v-for="task in doneTasks">
|
||||
<div class="task-panel mt10">
|
||||
<div class="task-panel-header">{{ 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="办理意见" :span="3" v-if="!task.ext.isFirstTaskNode">{{ task.taskFormData.opinion }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#member_change_view",
|
||||
mixins: [initTableMixins],
|
||||
dicts: ["PROCESS_TASK_SUBMIT_TYPE"],
|
||||
data() {
|
||||
return {
|
||||
activeName: "basicInfo",
|
||||
businessId: GetQueryString("businessId"),
|
||||
instanceId: GetQueryString("instanceId"),
|
||||
viewData: {
|
||||
changeInfos: [],
|
||||
},
|
||||
doneTasks: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
info() {
|
||||
this.$axios.post("/platform/member/change/view/findMemberChangeRecord", { id: this.businessId }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.viewData = res.data
|
||||
}
|
||||
})
|
||||
},
|
||||
getDoneTasks() {
|
||||
this.$axios.post("/flow/common/doneTasks", { instanceId: this.instanceId }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.doneTasks = res.data
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.info()
|
||||
this.getDoneTasks()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.task-panel {
|
||||
background: white;
|
||||
border-radius: 4px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.task-panel-header {
|
||||
background: rgb(250, 250, 250);
|
||||
border: 1px solid rgb(228, 231, 237);
|
||||
border-bottom: none;
|
||||
padding: 12px 16px;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.el-descriptions-item__label.is-bordered-label {
|
||||
width: 15%;
|
||||
}
|
||||
</style>
|
||||
-252
@@ -1,252 +0,0 @@
|
||||
const MEMBER_APPLY = {
|
||||
template: `
|
||||
<!-- <flow-start @task_id="(val)=>{this.TASK_ID = val}" @business_id="(val)=>{this.id = val}">-->
|
||||
<el-card shadow="never">
|
||||
<h3 style="color: var(--color-primary)" slot="header">入会申请</h3>
|
||||
<el-form :model="formData" ref="formRef" label-width="0" :rules="formRules" size="small">
|
||||
<el-descriptions :column="3" border>
|
||||
<el-descriptions-item label="姓名">
|
||||
<template v-if="adminOperate">
|
||||
<el-form-item prop="userId">
|
||||
<user-select v-model="formData.userId"
|
||||
api="/platform/member/apply/submit/getApplyUserByUnionOperate"
|
||||
api_input_key_name="keyWord"
|
||||
placeholder="请输入工号或姓名进行查询"
|
||||
:option_label_func="(item)=>{return item.userName + item.loginName + '(' + item.unitName + ')'}"
|
||||
@change="findOne(formData.userId)"
|
||||
style="width: 100%"></user-select>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-form-item prop="userName">
|
||||
<el-input :value="formData.userName" readonly size="small"></el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">
|
||||
<el-form-item prop="sex">
|
||||
<el-radio-group v-model="formData.sex" size="small">
|
||||
<el-radio border label="男"></el-radio>
|
||||
<el-radio border label="女"></el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="身份证号码">
|
||||
<el-form-item prop="idCard">
|
||||
<el-input v-model="formData.idCard" placeholder="请输入身份证号码" maxlength="18"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">
|
||||
<el-form-item prop="nation">
|
||||
<dict-select style="width: 100%" placeholder="请选择民族" v-model="formData.nation" code="USER_NATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">
|
||||
<el-form-item prop="political">
|
||||
<dict-select style="width: 100%" placeholder="请选择政治面貌" v-model="formData.political" code="POLITICAL_STATUS"></dict-select>
|
||||
<!-- <el-input v-model="formData.political" maxlength="100"></el-input>-->
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="学历">
|
||||
<el-form-item prop="education">
|
||||
<dict-select style="width: 100%" placeholder="请选择学历" v-model="formData.education" code="USER_EDUCATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="工作单位">
|
||||
<el-form-item prop="unitId">
|
||||
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%" :disabled="isAdmin"
|
||||
@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" placeholder="请输入工作单位" readonly maxlength="100"></el-input>-->
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
<el-form-item prop="unionName">
|
||||
<el-input v-model="formData.unionName" readonly placeholder="请输入所属工会"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="职务">
|
||||
<el-form-item prop="governmentPosition">
|
||||
<el-input v-model="formData.governmentPosition" placeholder="请输入职务" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="联系电话">
|
||||
<el-form-item prop="mobile">
|
||||
<el-input v-model="formData.mobile" placeholder="请输入联系电话" maxlength="32"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">
|
||||
<el-form-item prop="email">
|
||||
<el-input v-model="formData.email" placeholder="请输入电子邮箱" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="是否愿意加入重大疾病爱心互助会" :span="3">
|
||||
<el-form-item prop="wantJoinLoveMutualAidAssociation">
|
||||
<el-radio-group v-model="formData.wantJoinLoveMutualAidAssociation" size="small">
|
||||
<el-radio :label="true" border>是</el-radio>
|
||||
<el-radio :label="false" border>否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="家庭主要成员及其工作单位" :span="3">
|
||||
<el-form-item prop="families">
|
||||
<el-table :data="formData.families" border size="small">
|
||||
<el-table-column label="关系" prop="relation">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.relation" maxlength="50" placeholder="请输入与本人关系"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="姓名" prop="name">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.name" maxlength="50" placeholder="请输入姓名"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工作单位" prop="unit">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.unit" maxlength="100" placeholder="请输入工作单位"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" prop="remark">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.remark" maxlength="100" placeholder="请输入备注"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column width="100px">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<el-button type="primary" size="mini" @click="formData.families.push({})">添加</el-button>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="danger"
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="formData.families.length===0"
|
||||
@click="formData.families.splice(scope.$index,1)"
|
||||
></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="个人简况(简历、获奖情况、有何特长)" :span="3">
|
||||
<el-form-item prop="personalData">
|
||||
<el-input type="textarea" placeholder="请输入个人简况(简历、获奖情况、有何特长)" v-model="formData.personalData" clearable></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-form>
|
||||
</el-card>
|
||||
`,
|
||||
props: {
|
||||
adminOperate: { type: Boolean, default: false },
|
||||
id: { type: String },
|
||||
url: { type: String, default: "/platform/member/apply/submit/doSubmit" }
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
formDisabled: false,
|
||||
formData: {
|
||||
families: []
|
||||
},
|
||||
formRules: {
|
||||
userId: [{ required: true, message: "必填", trigger: "change" }],
|
||||
userName: [{ required: true, message: "必填", trigger: "change" }],
|
||||
sex: [{ required: true, message: "必填", trigger: "change" }],
|
||||
idCard: [
|
||||
{ required: true, message: "身份证号不能为空", trigger: "blur" },
|
||||
{
|
||||
pattern: /(^\d{6}(18|19|20)\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}([0-9xX])$)/,
|
||||
message: "身份证号格式不正确",
|
||||
trigger: "blur"
|
||||
}
|
||||
],
|
||||
nation: [{ required: true, message: "必填", trigger: "change" }],
|
||||
political: [{ required: true, message: "必填", trigger: "change" }],
|
||||
education: [{ required: true, message: "必填", trigger: "change" }],
|
||||
// unitName: [{ required: true, message: "必填", trigger: "change" }],
|
||||
governmentPosition: [{ required: true, message: "必填", trigger: "change" }],
|
||||
mobile: [
|
||||
{ required: true, message: "手机号不能为空", trigger: "blur" },
|
||||
{ pattern: /^1[3-9]\d{9}$/, message: "手机号格式不正确", trigger: "blur" }
|
||||
],
|
||||
email: [{ required: true, message: "必填", trigger: "change" }],
|
||||
wantJoinLoveMutualAidAssociation: [{ required: true, message: "必填", trigger: "change" }],
|
||||
personalData: [{ required: true, message: "必填", trigger: "change" }]
|
||||
},
|
||||
units: [],
|
||||
isAdmin: false
|
||||
// id: GetQueryString("id"),
|
||||
// TASK_ID: parseInt(GetQueryString("TASK_ID"))
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getUnionName() {
|
||||
const data = this.units.find((v) => v.id === unitId)
|
||||
this.$set(this.formData, "unionName", data.unionName)
|
||||
},
|
||||
init() {
|
||||
if (this.id) {
|
||||
this.findOne(this.id)
|
||||
} else {
|
||||
this.assignmentFormData()
|
||||
}
|
||||
this.$businessTool.listUnit().then((data) => {
|
||||
debugger
|
||||
this.units = data
|
||||
})
|
||||
this.isAdmin = this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN", "BRANCH_UNION_CHAIRMAN"])
|
||||
},
|
||||
findOne(id) {
|
||||
this.$axios.post("/platform/member/apply/submit/findOne", { id: id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.assignmentFormData(res.data)
|
||||
}
|
||||
})
|
||||
},
|
||||
doSubmit(sequenceFlowName) {
|
||||
this.$axios
|
||||
.post(this.url, {
|
||||
...this.formData,
|
||||
TASK_ID: this.TASK_ID,
|
||||
sequenceFlowName
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
// location.href = "/platform/member/apply/mine"
|
||||
}
|
||||
})
|
||||
},
|
||||
assignmentFormData(data) {
|
||||
const source = data
|
||||
// 特定字段的默认值映射
|
||||
const defaultValues = {
|
||||
families: []
|
||||
}
|
||||
|
||||
const setField = (key) => {
|
||||
// 检查字段是否在 defaultValues 映射中,如果在,则使用其默认值,否则从 source 获取值
|
||||
const value = defaultValues.hasOwnProperty(key) ? defaultValues[key] : source[key]
|
||||
this.$set(this.formData, key, value)
|
||||
}
|
||||
// 遍历表单项并设置值
|
||||
this.$refs.formRef.fields.forEach((formItem) => {
|
||||
setField(formItem.prop)
|
||||
})
|
||||
this.$set(this.formData, "loginname", data.loginname)
|
||||
this.$set(this.formData, "userId", data.id)
|
||||
}
|
||||
},
|
||||
created() {
|
||||
// this.init()
|
||||
}
|
||||
}
|
||||
-158
@@ -1,158 +0,0 @@
|
||||
const MEMBER_AUDIT_CHANGE_INFO = {
|
||||
template:
|
||||
/*language=HTML*/
|
||||
`
|
||||
<el-card shadow="never">
|
||||
|
||||
<el-tabs v-model="activeName">
|
||||
<el-tab-pane label="基础信息及变更信息" name="basicInfo">
|
||||
<div>
|
||||
<div class="process-title">
|
||||
当前信息
|
||||
</div>
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="姓名">{{ viewData.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
|
||||
<el-descriptions-item label="民族">{{ viewData.nation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<template v-if="viewData.retireDate">
|
||||
<el-descriptions-item label="退休时间">{{ $moment(viewData.retireDate).format('YYYY-MM-DD') }}</el-descriptions-item>
|
||||
</template>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="学历">{{ viewData.education }}</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
|
||||
<el-descriptions-item label="婚姻状况">{{ viewData.marriage || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="证件号码" span="2">{{ viewData.idCard }}</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.member ? '是' : '否' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="是否福利会员">{{ viewData.welfareMember ? '是' : '否' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会、工作部门(学院)及职务" span="3">
|
||||
<template slot="label">工作部门(学院)及岗位</template>
|
||||
<div class="text-left">
|
||||
{{ viewData.unionName + '-' + viewData.unitName + ( viewData.governmentPosition ? ( '('
|
||||
+ viewData.governmentPosition + ')' ) : '' ) }}
|
||||
</div>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
|
||||
<div v-if="changeList && changeList.length > 0">
|
||||
<div class="process-title">
|
||||
{{ '变更记录' + (remark ? ('(变更/审核说明:' + remark + ')') : '') }}
|
||||
</div>
|
||||
<el-table ref="changeTable" :data="changeList" row-key="id" style="width: 100%" border>
|
||||
<el-table-column label="序号" type="index" width="50"></el-table-column>
|
||||
<el-table-column label="变更字段" prop="name"></el-table-column>
|
||||
<el-table-column label="原数据" prop="value">
|
||||
<template slot-scope="scope">
|
||||
<div v-html="scope.row.value"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="新数据" prop="newValue">
|
||||
<template slot-scope="scope">
|
||||
<div v-html="scope.row.newValue"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane v-if="nodeTasks && nodeTasks.length > 0" label="审核信息" name="audit">
|
||||
<div>
|
||||
<div v-for="nodeTask in nodeTasks" :key="nodeTask.id">
|
||||
<div class="process-title">
|
||||
{{nodeTask.nodeName}}
|
||||
</div>
|
||||
<el-descriptions :column="3" border v-for="task in nodeTask.tasks" :key="task.id"
|
||||
style="margin-bottom: 10px">
|
||||
<el-descriptions-item label="审核人">
|
||||
{{ task.actualOwnerLoginName + '-' + task.actualOwnerUserName}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核时间">{{ task.endOn}}</el-descriptions-item>
|
||||
<el-descriptions-item label="审核结果">
|
||||
<div v-if="task.extVariable">
|
||||
<el-tag type="success" size="mini"
|
||||
v-if="task.extVariable.bpmTaskApprovalType === 'PASS'">同意
|
||||
</el-tag>
|
||||
<el-tag type="danger" size="mini"
|
||||
v-if="task.extVariable.bpmTaskApprovalType === 'BACK'">退回
|
||||
</el-tag>
|
||||
<el-tag type="danger" size="mini"
|
||||
v-if="task.extVariable.bpmTaskApprovalType === 'REJECT'">拒绝
|
||||
</el-tag>
|
||||
</div>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核意见" :span="3">
|
||||
{{ task.extVariable.approvalOpinion }}
|
||||
</el-descriptions-item>
|
||||
<template v-if="$auth.hasRoleOr('SYSADMIN') && task.extVariable.approvalRemark">
|
||||
<el-descriptions-item label="审核说明" :span="3">
|
||||
{{ task.extVariable.approvalRemark }}
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<el-descriptions-item label="签字" :span="3">
|
||||
<el-image :src="task.extVariable.approvalSignature"
|
||||
v-if="task.extVariable && task.extVariable.approvalSignature"
|
||||
class="signature-image"></el-image>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-card>
|
||||
`,
|
||||
props: {
|
||||
is_default_url: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
activeName: "basicInfo",
|
||||
changeList: [],
|
||||
nodeTasks: [],
|
||||
viewData: {},
|
||||
remark: ""
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
findAuditChangeInfo(recordId) {
|
||||
if (!recordId) {
|
||||
return
|
||||
}
|
||||
let url = loc() + "/findAuditChangeInfo"
|
||||
if (this.is_default_url) {
|
||||
url = "/platform/sourcechange/manage/findAuditChangeInfo"
|
||||
}
|
||||
this.$axios.post(url, { recordId: recordId }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.changeList = res.data.changeList
|
||||
this.nodeTasks = res.data.nodeTasks
|
||||
this.remark = res.data.remark
|
||||
}
|
||||
})
|
||||
},
|
||||
findUserInfo(userId) {
|
||||
if (!userId) {
|
||||
return
|
||||
}
|
||||
this.$axios.post("/platform/member/apply/common/findOne", { id: userId }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.viewData = res.data
|
||||
}
|
||||
})
|
||||
},
|
||||
onOpen(data) {
|
||||
this.findAuditChangeInfo(data.recordId)
|
||||
this.$nextTick(() => {
|
||||
this.findUserInfo(data.userId)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
-71
@@ -1,71 +0,0 @@
|
||||
const MEMBER_AUDIT_RECORD = {
|
||||
template: `
|
||||
<div class="process-task-record">
|
||||
<template v-if="approvalRecord.length > 0" v-for="item in approvalRecord">
|
||||
<div v-if="item.taskName === '2a9632c6-710f-4d3b-89e4-86566238ce8e'" class="mb25">
|
||||
<div class="process-title">
|
||||
{{item.displayName}}
|
||||
</div>
|
||||
<el-descriptions :column="3" border :key="item.displayName + item.taskParentId">
|
||||
<template v-for="task in item.processTaskVOList">
|
||||
<el-descriptions-item label="姓名">{{task.taskActor?.actorUserName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="工号">{{task.taskActor?.actorId}}</el-descriptions-item>
|
||||
<el-descriptions-item label="填写时间">{{$moment(task.createdAt).format('YYYY-MM-DD HH:mm:ss')}}</el-descriptions-item>
|
||||
</template>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
<div v-else>
|
||||
<div class="process-title">
|
||||
{{item.displayName}}
|
||||
</div>
|
||||
<el-descriptions :column="3" border :key="item.displayName + item.taskParentId">
|
||||
<template v-for="task in item.processTaskVOList">
|
||||
<el-descriptions-item label="姓名">{{task.taskActor?.actorUserName}}</el-descriptions-item>
|
||||
<el-descriptions-item label="工号">{{task.taskActor?.actorId}}</el-descriptions-item>
|
||||
<el-descriptions-item label="审核时间">{{task.finishTime ? task.finishTime : '暂无'}}</el-descriptions-item>
|
||||
<el-descriptions-item label="审核结果">
|
||||
{{Object.keys(task.ext.submitTypeText).length !== 0 ? task.ext.submitTypeText : '暂无'}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核意见" :span="3">{{task.ext.comment ? task.ext.comment : '暂无'}}</el-descriptions-item>
|
||||
</template>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
</template>
|
||||
<el-empty v-else description="暂无审核记录"></el-empty>
|
||||
</div>
|
||||
`,
|
||||
dicts: ["PROCESS_TASK_SUBMIT_TYPE"],
|
||||
props: {
|
||||
id: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
id: {
|
||||
handler: function (val) {
|
||||
if (val) {
|
||||
this.findOne()
|
||||
}
|
||||
},
|
||||
immediate: true
|
||||
}
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
approvalRecord: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
findOne() {
|
||||
if (!this.id) {
|
||||
return
|
||||
}
|
||||
this.$axios.post("/platform/wf/processCommon/approvalRecord", { businessNo: this.id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.approvalRecord = res.data
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
-201
@@ -1,201 +0,0 @@
|
||||
const MEMBER_AUDIT_TABLE = {
|
||||
template: `
|
||||
<div>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名/工号">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="flushUnits" @clear="flushUnits" clearable filterable
|
||||
placeholder="所属工会" style="width: 100%;" v-model="pageForm.unionId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="所属单位">
|
||||
<el-select clearable filterable placeholder="请选择" style="width: 100%"
|
||||
v-model="pageForm.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="聘用方式">
|
||||
<dict-select v-model="pageForm.preparedBy" placeholder="聘用方式" @change="doSearch"
|
||||
code="PREPARED_BY"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch"
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="变更类型">
|
||||
<dict-select v-model="pageForm.changeType" placeholder="人员类型" @change="doSearch"
|
||||
code="MEMBER_CHANGE_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
<el-card shadow="never">
|
||||
<table-tool label="审核列表">
|
||||
<el-radio-group @change="doSearch" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<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" :width="column.width"
|
||||
align="center" header-align="center" min-width="100px"
|
||||
show-overflow-tooltip v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row.userId)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column header-align="center" label="变更类型" prop="changeType" show-overflow-tooltip sortable>
|
||||
<template scope="{row}">
|
||||
<span style="color: #0e78c5;cursor: pointer" @click="openChangeView(row)">
|
||||
{{getChangeTypes(row.changeTypes)}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column header-align="center" label="变更时间" prop="applyDateTime" show-overflow-tooltip sortable>
|
||||
<template scope="{row}">
|
||||
<span>{{ row.applyDateTime }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" fixed="right" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" type="primary" @click="openChangeView(row)">查看</el-button>
|
||||
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'
|
||||
&& !(row.processInstanceNodeCode == 10 && row.changeOrigin == 'BRANCH_UNION')"
|
||||
@click="openApproval(row)"
|
||||
size="mini"
|
||||
type="primary">
|
||||
审核
|
||||
</el-button>
|
||||
<el-button v-if="(row.processInstanceTaskStatus==='ACTIVE' || row.processInstanceStatus==='RUNNING')
|
||||
&& [10,40].includes(row.processInstanceNodeCode) && $auth.hasRole('BRANCH_UNION_CHAIRMAN')"
|
||||
@click="openEdit(row)"
|
||||
size="mini"
|
||||
type="primary">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete && row.processInstanceNodeCode != 50"
|
||||
@click="openRevoke(row.processInstanceTaskId)"
|
||||
size="mini"
|
||||
type="danger">
|
||||
撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</div>
|
||||
`,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
audit: false
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "preparedBy", label: "聘用方式", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "processInstanceNodeName", label: "当前节点", sortable: true }
|
||||
],
|
||||
unions: [],
|
||||
units: [],
|
||||
changeTypeData: [],
|
||||
auditChangeVisible: false,
|
||||
userId: "",
|
||||
recordId: ""
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 审核
|
||||
openApproval(row) {
|
||||
this.$emit("open-approval", row)
|
||||
},
|
||||
// 退回
|
||||
openRevoke(taskId) {
|
||||
this.$confirm("您确定要撤回吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.$axios.post(loc() + "/revoke", { taskId }).then((resp) => {
|
||||
this.$message.success(resp.msg)
|
||||
this.doSearch()
|
||||
})
|
||||
})
|
||||
},
|
||||
openEdit(row) {
|
||||
this.$emit("open-edit", row)
|
||||
},
|
||||
openUserChangeInfo(row) {
|
||||
this.$emit("open-change-view", row)
|
||||
},
|
||||
getChangeTypes(changeTypes) {
|
||||
if (changeTypes) {
|
||||
if (!changeTypes || changeTypes.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return changeTypes
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.code === v).name
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
},
|
||||
openView(userId) {
|
||||
this.$emit("open-view", userId)
|
||||
},
|
||||
openChangeView(row) {
|
||||
this.$emit("open-change-view", row)
|
||||
},
|
||||
pageData() {
|
||||
this.$axios.post(loc() + "/pageData", this.pageForm).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.tableData = res.data.list
|
||||
this.pageForm.totalCount = res.data.totalCount
|
||||
}
|
||||
})
|
||||
},
|
||||
initData() {
|
||||
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
|
||||
this.$businessTool.listUnion(this.pageForm.unionId).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
} else {
|
||||
this.$businessTool.listUnion(this.$store.state.user.union.id).then((data) => {
|
||||
this.unions = data
|
||||
})
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.initData()
|
||||
this.changeTypeData = await this.$businessTool.getAllDictOptions("MEMBER_CHANGE_TYPE")
|
||||
}
|
||||
}
|
||||
-368
@@ -1,368 +0,0 @@
|
||||
const MEMBER_CHANGE = {
|
||||
template: /*language=HTML*/ `
|
||||
<el-card shadow="never">
|
||||
<h3 style="color: var(--color-primary)" slot="header">信息变更</h3>
|
||||
<el-form :model="formData" ref="formRef" label-width="0" :rules="formRules" size="small">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="姓名">
|
||||
<el-form-item prop="username">
|
||||
<el-input :value="formData.username" readonly size="small"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">
|
||||
<el-form-item prop="sex">
|
||||
<el-radio-group :disabled="allowFields('sex')" v-model="formData.sex" size="small">
|
||||
<el-radio border label="男"></el-radio>
|
||||
<el-radio border label="女"></el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="身份证号码">
|
||||
<el-form-item prop="idCard">
|
||||
<el-input v-model="formData.idCard" :disabled="allowFields('idCard')" placeholder="请输入身份证号码" maxlength="18"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="民族">
|
||||
<el-form-item prop="nation">
|
||||
<dict-select style="width: 100%" placeholder="请选择民族" :disabled="allowFields('nation')" v-model="formData.nation" code="USER_NATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">
|
||||
<el-form-item prop="political">
|
||||
<dict-select style="width: 100%" placeholder="请选择政治面貌" :disabled="allowFields('political')" v-model="formData.political" code="POLITICAL_STATUS"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="学历">
|
||||
<el-form-item prop="education">
|
||||
<dict-select style="width: 100%" placeholder="请选择学历" :disabled="allowFields('education')" v-model="formData.education" code="USER_EDUCATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="工作单位">
|
||||
<el-form-item prop="unitId">
|
||||
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%"
|
||||
@change="getUnionName(formData.unitId)"
|
||||
:disabled="allowFields('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-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
<el-form-item prop="unionName">
|
||||
<el-input v-model="formData.unionName" readonly placeholder="请输入所属工会"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="职务">
|
||||
<el-form-item prop="governmentPosition">
|
||||
<el-input v-model="formData.governmentPosition" :disabled="allowFields('governmentPosition')" placeholder="请输入职务" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="在职状态">
|
||||
<el-form-item prop="userState">
|
||||
<dict-select v-model="formData.userState" code="USER_STATE"
|
||||
style="width: 100%"
|
||||
:disabled="allowFields('userState')"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="聘用方式">
|
||||
<el-form-item prop="preparedBy">
|
||||
<dict-select v-model="formData.preparedBy" code="PREPARED_BY" style="width: 100%"
|
||||
:disabled="allowFields('preparedBy')"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">
|
||||
<el-form-item prop="personType">
|
||||
<dict-select v-model="formData.personType" code="PERSON_TYPE" style="width: 100%"
|
||||
:disabled="allowFields('personType')"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="进站时间" v-show="formData.preparedBy === '博士后'">
|
||||
<el-form-item prop="postDoctoralJoinDate">
|
||||
<el-date-picker
|
||||
v-model="formData.postDoctoralJoinDate"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="选择日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="联系电话">
|
||||
<el-form-item prop="mobile">
|
||||
<el-input v-model="formData.mobile" :disabled="allowFields('mobile')" placeholder="请输入联系电话" maxlength="32"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">
|
||||
<el-form-item prop="email">
|
||||
<el-input v-model="formData.email" :disabled="allowFields('email')" placeholder="请输入电子邮箱" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="是否会员">
|
||||
<el-form-item prop="member">
|
||||
<span style="color: #0e9558" v-if="formData.member">是</span>
|
||||
<span style="color: #ac2925" v-else>否</span>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<!-- <el-descriptions-item label="是否福利会员">-->
|
||||
<!-- <el-form-item prop="welfareMember">-->
|
||||
<!-- <span style="color: #0e9558" v-if="formData.welfareMember">是</span>-->
|
||||
<!-- <span style="color: #ac2925" v-else>否</span>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- </el-descriptions-item>-->
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
<!--<el-descriptions-item label="是否重大疾病爱心互助会会员">
|
||||
<el-form-item prop="wantJoinLoveMutualAidAssociation">
|
||||
<span style="color: #0e9558" v-if="formData.wantJoinLoveMutualAidAssociation">是</span>
|
||||
<span style="color: #ac2925" v-else>否</span>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>-->
|
||||
|
||||
<el-descriptions-item label="变更类型" :span="3">
|
||||
<el-form-item prop="changeType">
|
||||
<el-radio-group v-model="formData.changeType">
|
||||
<el-radio v-for="item in changeTypeOptions" border size="small"
|
||||
@click.native.prevent="clickDataType(item.code)"
|
||||
:key="item.id" :label="item.code">{{item.name}}</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<template v-if="formData.changeType">
|
||||
<el-descriptions-item label="会员状态" :span="1.5">
|
||||
<el-form-item prop="changeMember">
|
||||
<el-radio-group v-model="formData.changeMember" size="mini">
|
||||
<el-radio :label="true" border>{{ formData.member ? '保留' : '成为' }}会员</el-radio>
|
||||
<el-radio :label="false" border>取消会员</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="福利会员状态" :span="1.5">
|
||||
<el-form-item prop="changeWelfareMember">
|
||||
<el-radio-group v-model="formData.changeWelfareMember" size="mini">
|
||||
<el-radio :label="true" border>{{ formData.welfareMember ? '保留' : '成为' }}会员</el-radio>
|
||||
<el-radio :label="false" border>取消会员</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<template v-if="formData.loginname == $store.state.user.loginname">
|
||||
<el-descriptions-item label="家庭主要成员及其工作单位" :span="3">
|
||||
<el-form-item prop="families">
|
||||
<el-table :data="formData.families" border size="small">
|
||||
<el-table-column label="关系" prop="relation">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.relation" maxlength="50" placeholder="请输入与本人关系"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="姓名" prop="name">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.name" maxlength="50" placeholder="请输入姓名"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工作单位" prop="unit">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.unit" maxlength="100" placeholder="请输入工作单位"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" prop="remark">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.remark" maxlength="100" placeholder="请输入备注"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column width="100px">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<el-button type="primary" size="mini" :disabled="allowFields('families')"
|
||||
@click="formData.families.push({})">添加</el-button>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="danger"
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="formData.families.length===0 || allowFields('families')"
|
||||
@click="formData.families.splice(scope.$index,1)"
|
||||
></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="个人简况(简历、获奖情况、有何特长)" :span="3">
|
||||
<el-form-item prop="personalData">
|
||||
<text-editor v-model="formData.personalData"></text-editor>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<el-descriptions-item label="变更说明" :span="3">
|
||||
<el-form-item prop="approvalRemark">
|
||||
<el-input v-model="formData.approvalRemark" type="textarea" :rows="4" placeholder="请输入变更说明"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
</el-descriptions>
|
||||
</el-form>
|
||||
<el-row justify="end" type="flex" class="mt10">
|
||||
<el-button v-if="showClose" @click="$emit('close')">关 闭</el-button>
|
||||
<el-button @click="doSubmit" type="primary">提 交</el-button>
|
||||
</el-row>
|
||||
</el-card>
|
||||
`,
|
||||
props: {
|
||||
id: { type: String, required: true },
|
||||
url: { type: String, required: true },
|
||||
edit: { type: Boolean, default: false },
|
||||
showClose: { type: Boolean, default: false }
|
||||
},
|
||||
store,
|
||||
data() {
|
||||
return {
|
||||
formDisabled: false,
|
||||
formData: {
|
||||
families: [],
|
||||
changeMember: null,
|
||||
changeWelfareMember: null,
|
||||
changeWantJoinLoveMutualAidAssociation: null,
|
||||
verificationProjectId: ""
|
||||
},
|
||||
formRules: {
|
||||
username: [{ required: false, message: "必填", trigger: "change" }],
|
||||
sex: [{ required: false, message: "必填", trigger: "change" }],
|
||||
idCard: [
|
||||
{ required: false, message: "身份证号不能为空", trigger: "blur" },
|
||||
{
|
||||
pattern: /(^\d{6}(18|19|20)\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}([0-9xX])$)/,
|
||||
message: "身份证号格式不正确",
|
||||
trigger: "blur"
|
||||
}
|
||||
],
|
||||
nation: [{ required: false, message: "必填", trigger: "change" }],
|
||||
political: [{ required: false, message: "必填", trigger: "change" }],
|
||||
education: [{ required: false, message: "必填", trigger: "change" }],
|
||||
unitName: [{ required: false, message: "必填", trigger: "change" }],
|
||||
governmentPosition: [{ required: false, message: "必填", trigger: "change" }],
|
||||
mobile: [
|
||||
{ required: true, message: "手机号不能为空", trigger: "blur" },
|
||||
{ pattern: /^1[3-9]\d{9}$/, message: "手机号格式不正确", trigger: "blur" }
|
||||
],
|
||||
email: [{ required: false, message: "必填", trigger: "change" }],
|
||||
changeWantJoinLoveMutualAidAssociation: [{ required: false, message: "必填", trigger: "change" }],
|
||||
personalData: [{ required: false, message: "必填", trigger: "change" }]
|
||||
},
|
||||
allowChangeFields: [],
|
||||
units: [],
|
||||
changeTypeOptions: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
clickDataType(e) {
|
||||
e === this.formData.changeType ? (this.formData.changeType = "") : (this.formData.changeType = e)
|
||||
this.doSetMemberStatus(e)
|
||||
},
|
||||
doSetMemberStatus(name) {
|
||||
this.$set(this.formData, "changeMember", name ? name === "RESTORE" : "")
|
||||
this.$set(this.formData, "changeWelfareMember", name ? name === "RESTORE" : "")
|
||||
this.$set(this.formData, "changeWantJoinLoveMutualAidAssociation", name ? name === "RESTORE" : "")
|
||||
},
|
||||
init() {
|
||||
if (this.id) {
|
||||
this.findOne(this.id, this.edit)
|
||||
}
|
||||
if (!this.allowChangeFields || this.allowChangeFields.length === 0) {
|
||||
this.$businessTool.getDictOptions("MEMBER_ALLOW_CHANGES_FIELD").then((data) => {
|
||||
this.allowChangeFields = data.map((v) => v.code)
|
||||
})
|
||||
}
|
||||
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
|
||||
this.$businessTool.listUnit().then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
} else {
|
||||
this.$businessTool.listUnit(this.$store.state.user.union.id).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
this.$businessTool.getDictOptions("MEMBER_CHANGE_TYPE").then((data) => {
|
||||
this.changeTypeOptions = data
|
||||
})
|
||||
},
|
||||
assignmentFormData(data) {
|
||||
const source = data
|
||||
// 特定字段的默认值映射
|
||||
const defaultValues = {
|
||||
families: []
|
||||
}
|
||||
|
||||
const setField = (key) => {
|
||||
// 检查字段是否在 defaultValues 映射中,如果在,则使用其默认值,否则从 source 获取值
|
||||
const value = defaultValues.hasOwnProperty(key) ? defaultValues[key] : source[key]
|
||||
this.$set(this.formData, key, value)
|
||||
}
|
||||
// 遍历表单项并设置值
|
||||
this.$refs.formRef.fields.forEach((formItem) => {
|
||||
setField(formItem.prop)
|
||||
})
|
||||
this.$set(this.formData, "loginname", data.loginname)
|
||||
this.$set(this.formData, "userId", data.id)
|
||||
},
|
||||
findOne(id, isEdit) {
|
||||
this.$axios.post("/platform/member/apply/submit/findOne", { id: id, isEdit: isEdit }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.assignmentFormData(res.data)
|
||||
}
|
||||
})
|
||||
},
|
||||
allowFields(prop) {
|
||||
return !this.allowChangeFields.includes(prop)
|
||||
},
|
||||
getUnionName(unitId) {
|
||||
const data = this.units.find((v) => v.id === unitId)
|
||||
this.$set(this.formData, "unionName", data.unionName)
|
||||
},
|
||||
doSubmit() {
|
||||
//是否确认提交?
|
||||
this.$confirm("是否确认提交?提交后将进入审核流程,请仔细核对变更数据是否准确!", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.setSubmitUserMemberStatus()
|
||||
if (this.edit) {
|
||||
this.formData.edit = this.edit
|
||||
this.formData.id = this.id
|
||||
}
|
||||
this.$axios
|
||||
.post(this.url, {
|
||||
record: JSON.stringify(this.formData),
|
||||
approvalRemark: this.formData.approvalRemark
|
||||
})
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
this.$emit("submit-ready", null)
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
setSubmitUserMemberStatus() {
|
||||
if (this.formData.changeType) {
|
||||
this.formData.member = this.formData.changeMember
|
||||
this.formData.welfareMember = this.formData.changeWelfareMember
|
||||
}
|
||||
},
|
||||
verificationInit(data) {
|
||||
this.allowChangeFields = data.renewFields
|
||||
this.$set(this.formData, "changeOrigin", data.changeOrigin)
|
||||
this.$set(this.formData, "verificationProjectId", data.verificationProjectId)
|
||||
this.init()
|
||||
}
|
||||
},
|
||||
created() {}
|
||||
}
|
||||
-108
@@ -1,108 +0,0 @@
|
||||
const MEMBER_CHANGE_INFO = {
|
||||
template: /*language=html*/ `
|
||||
<el-card shadow="never">
|
||||
<div>
|
||||
<div class="process-title">
|
||||
当前信息
|
||||
</div>
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="姓名">{{ viewData.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
|
||||
<el-descriptions-item label="民族">{{ viewData.nation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<template v-if="viewData.retireDate">
|
||||
<el-descriptions-item label="退休时间">{{ $moment(viewData.retireDate).format('YYYY-MM-DD') }}</el-descriptions-item>
|
||||
</template>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="学历">{{ viewData.education }}</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
|
||||
<el-descriptions-item label="婚姻状况">{{ viewData.marriage || '' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="证件号码" span="2">{{ viewData.idCard }}</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.member ? '是' : '否' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="是否福利会员">{{ viewData.welfareMember ? '是' : '否' }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会、工作部门(学院)及职务" span="3">
|
||||
<template slot="label">工作部门(学院)及岗位</template>
|
||||
<div class="text-left">
|
||||
{{ viewData.unionName + '-' + viewData.unitName + ( viewData.governmentPosition ? ( '(' + viewData.governmentPosition + ')' ) : '' ) }}
|
||||
</div>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
|
||||
<div style="margin-top: 20px">
|
||||
<div class="process-title">
|
||||
变更信息
|
||||
</div>
|
||||
<el-tabs tab-position="left" style="height: 300px;" v-model="activeName">
|
||||
<el-tab-pane :key="item.changeTime" v-for="(item, index) in viewList"
|
||||
:name="item.changeTime">
|
||||
<span slot="label" style="display: flex; align-items: center;" v-html="formattedTitle(item.title)">
|
||||
<i class="el-icon-date"></i>
|
||||
</span>
|
||||
|
||||
<div style="padding: 0 30px;display: flex;justify-content: flex-start;align-content: center" v-if="item.remark">
|
||||
<div>
|
||||
<h5 style="color: var(--color-primary);font-weight: bolder">变更/审核说明:</h5>
|
||||
</div>
|
||||
<div style="margin-top: 5px">
|
||||
<span>{{ item.remark }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-table v-if="item.changeList && item.changeList.length > 0" ref="changeTable" :data="item.changeList" row-key="id"
|
||||
style="width: 95%;margin-left: 20px" border>
|
||||
<el-table-column label="序号" type="index" width="50"></el-table-column>
|
||||
<el-table-column label="变更字段" prop="name"></el-table-column>
|
||||
<el-table-column label="原数据" prop="newValue">
|
||||
<template slot-scope="scope">
|
||||
<div v-html="scope.row.newValue"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="新数据" prop="value">
|
||||
<template slot-scope="scope">
|
||||
<div v-html="scope.row.value"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-empty v-else :image-size="50" description="未获取到变更信息"></el-empty>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
</el-card>
|
||||
`,
|
||||
data() {
|
||||
return {
|
||||
viewList: [],
|
||||
activeName: "",
|
||||
viewData: {}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
formattedTitle(title) {
|
||||
const datePattern = /\(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\)/
|
||||
return title.replace(datePattern, '<span style="display: block;">$&</span>')
|
||||
},
|
||||
onOpen(id, changeTime) {
|
||||
if (!id) {
|
||||
return
|
||||
}
|
||||
this.$axios.post(loc() + "/getChangeInfoByUserId", { userId: id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.viewList = res.data.sort((a, b) => new Date(b.title) - new Date(a.title))
|
||||
this.activeName = changeTime || (this.viewList && this.viewList.length > 0 ? this.viewList[0].changeTime : "")
|
||||
this.findUserInfo(id)
|
||||
}
|
||||
})
|
||||
},
|
||||
findUserInfo(id) {
|
||||
this.$axios.post("/platform/member/apply/common/findOne", { id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.viewData = res.data
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
+53
-51
@@ -5,60 +5,62 @@
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="工号">{{ viewData.loginname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">{{ viewData.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">{{ viewData.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
|
||||
<el-descriptions-item label="出生日期">{{ viewData.birthday ? $moment(viewData.birthday).format('YYYY-MM-DD') : null }}</el-descriptions-item>
|
||||
<el-descriptions-item label="民族">{{ viewData.nation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="籍贯">{{ viewData.nativePlace }}</el-descriptions-item>
|
||||
<el-descriptions-item label="国籍">{{ viewData.nationality }}</el-descriptions-item>
|
||||
<el-descriptions-item label="证件类别">{{ viewData.idCardType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="证件号码">{{ viewData.idCard }}</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
|
||||
<el-descriptions-item label="入党时间">{{ viewData.joinPartyDate ? $moment(viewData.joinPartyDate).format('YYYY-MM-DD') : null }}</el-descriptions-item>
|
||||
<el-descriptions-item label="来校时间">{{ viewData.arrivalAtSchoolDate ? $moment(viewData.arrivalAtSchoolDate).format('YYYY-MM-DD') : null}}</el-descriptions-item>
|
||||
<el-descriptions-item label="身份类别">{{ viewData.identityType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="聘用方式">{{ viewData.preparedBy }}</el-descriptions-item>
|
||||
<el-descriptions-item label="教职工类别">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="预计离退休时间">{{ viewData.retireDate ?
|
||||
$moment(viewData.retireDate).format('YYYY-MM-DD') : null }}
|
||||
</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.nation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="出生日期">{{ viewData.birthday ? $moment(viewData.birthday).format('YYYY-MM-DD') : null }}</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="学历">{{ viewData.education }}</el-descriptions-item>
|
||||
<el-descriptions-item label="学位">{{ viewData.academicDegree }}</el-descriptions-item>
|
||||
<el-descriptions-item label="党政职务">{{ viewData.position }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="工作单位">{{ viewData.unitName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">{{ viewData.unionName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属校区">{{ viewData.campus }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">{{ viewData.idcard }}</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.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="进校时间">{{ viewData.arrivalAtSchoolDate ? $moment(viewData.arrivalAtSchoolDate).format('YYYY-MM-DD') : null}}</el-descriptions-item>
|
||||
|
||||
<template v-if="viewData.userState == '退休'">
|
||||
<el-descriptions-item label="退休日期">{{ viewData.retireDate ? moment(viewData.retireDate).format("YYYY-MM-DD") : '暂无' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="福利享受截止日期">{{ moment(viewData.welfareStopDate).format("YYYY-MM-DD") }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<el-descriptions-item label="会员状态">{{ viewData.member ? '会员' : '非会员' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="福利会员状态">{{ viewData.welfareMember ? '福利会员' : '非福利会员' }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-table v-if="viewData.families&&viewData.families.length"
|
||||
:data="viewData.families" size="mini" border
|
||||
:header-cell-style="{background:'#eff3f6'}"
|
||||
style="width: 100%">
|
||||
<el-table-column prop="relation" label="与本人关系" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="姓名" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="unit" label="单位" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="remark" label="备注" align="center" header-align="center">
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-empty v-else :image-size="50" description="暂无家庭成员信息"></el-empty>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="个人简况" :span="3">
|
||||
<template slot="label">个人简况</template>
|
||||
<div v-if="viewData.personalData" class="text-left" v-html="viewData.personalData"></div>
|
||||
<span v-else>无数据</span>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
|
||||
<div class="process-title">会员信息</div>
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="是否会员">
|
||||
<el-tag v-if="viewData.member===1" size="mini" type="success">是</el-tag>
|
||||
<el-tag v-else type="info" size="mini">否</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属单位">{{ viewData.unitName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属分工会">{{ viewData.unionName }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
|
||||
<div class="process-title">学历信息</div>
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="最高学历">{{ viewData.education }}</el-descriptions-item>
|
||||
<el-descriptions-item label="最高学位">{{ viewData.academicDegree }}</el-descriptions-item>
|
||||
<el-descriptions-item label=""></el-descriptions-item>
|
||||
</el-descriptions>
|
||||
|
||||
<div class="process-title">职称信息</div>
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="职称">{{ viewData.technicalTitle }}</el-descriptions-item>
|
||||
<el-descriptions-item label="职称级别">{{ viewData.technicalTitleLevel }}</el-descriptions-item>
|
||||
<el-descriptions-item label=""></el-descriptions-item>
|
||||
</el-descriptions>
|
||||
|
||||
<div class="process-title">职务信息</div>
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="现聘职务">{{ viewData.position }}</el-descriptions-item>
|
||||
<el-descriptions-item label="现聘职级">{{ viewData.positionLevel }}</el-descriptions-item>
|
||||
<el-descriptions-item label="职员等级">{{ viewData.employeeLevel }}</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
|
||||
|
||||
</div>
|
||||
`,
|
||||
data() {
|
||||
|
||||
-143
@@ -1,143 +0,0 @@
|
||||
const MEMBER_RECORD = {
|
||||
template: `
|
||||
<div>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名/工号">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</search-item>
|
||||
<search-item label="所属工会">
|
||||
<el-select @change="flushUnits" @clear="flushUnits" clearable filterable
|
||||
placeholder="所属工会" style="width: 100%;" v-model="pageForm.unionId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="所属单位">
|
||||
<el-select clearable filterable placeholder="请选择" style="width: 100%"
|
||||
v-model="pageForm.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch"
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="聘用方式">
|
||||
<dict-select v-model="pageForm.preparedBy" placeholder="聘用方式" @change="doSearch"
|
||||
code="PREPARED_BY"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="变更类型">
|
||||
<dict-select v-model="pageForm.changeType" placeholder="变更类型" @change="doSearch"
|
||||
code="MEMBER_CHANGE_TYPE"></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never">
|
||||
<table-tool label="变更列表"></table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
|
||||
class="vi-table" ref="table" row-key="id" style="width: 100%">
|
||||
<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" :width="column.width"
|
||||
align="center" header-align="center" min-width="100px"
|
||||
show-overflow-tooltip v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row.userId)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column header-align="center" label="异动信息">
|
||||
<el-table-column align="center" header-align="center" label="更新时间"
|
||||
min-width="145px" prop="changeTime"
|
||||
show-overflow-tooltip sortable>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="异动类型"
|
||||
prop="changeType" show-overflow-tooltip sortable>
|
||||
<template scope="{row}">
|
||||
<span style="color: var(--color-primary);cursor: pointer" @click="openUserChangeInfo(row)">
|
||||
{{getChangeTypes(row.changeTypes)}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</div>
|
||||
`,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
userId: "",
|
||||
recordId: "",
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号" },
|
||||
{ prop: "username", label: "姓名" },
|
||||
{ prop: "sex", label: "性别", sortable: true, width: "100px" },
|
||||
{ prop: "birthday", label: "出生年月", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "remark", label: "变更说明", sortable: true }
|
||||
],
|
||||
unions: [],
|
||||
units: [],
|
||||
changeTypeData: [],
|
||||
changeInfoVisible: false,
|
||||
changeTime: ""
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openUserChangeInfo(row) {
|
||||
this.$emit("open-change-info", row)
|
||||
},
|
||||
getChangeTypes(changeTypes) {
|
||||
if (changeTypes) {
|
||||
const c = JSON.parse(changeTypes)
|
||||
if (!c || c.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return c
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.code === v).name
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
},
|
||||
openView(userId) {
|
||||
this.$emit("open-view", userId)
|
||||
},
|
||||
async initData() {
|
||||
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
|
||||
this.unions = await this.$businessTool.listUnion(this.pageForm.unionId)
|
||||
this.units = await this.$businessTool.listUnit()
|
||||
} else {
|
||||
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
|
||||
this.units = await this.$businessTool.listUnit(this.$store.state.user.union.id)
|
||||
}
|
||||
this.pageData()
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.pageData()
|
||||
this.$businessTool.getAllDictOptions("MEMBER_CHANGE_TYPE").then((res) => {
|
||||
this.changeTypeData = res
|
||||
})
|
||||
}
|
||||
}
|
||||
+376
@@ -0,0 +1,376 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.top_block {
|
||||
width: 100%;
|
||||
padding: 20px 80px;
|
||||
border-bottom: 10px solid rgb(240, 240, 240);
|
||||
}
|
||||
|
||||
.top_title {
|
||||
font-size: 14px;
|
||||
color: #808492;
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.top_num {
|
||||
font-size: 26px;
|
||||
}
|
||||
|
||||
.cut-off-line {
|
||||
width: 1px;
|
||||
height: 70%;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
margin: auto;
|
||||
background-color: rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.chartTitle {
|
||||
font-size: 14px;
|
||||
color: #808492;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
|
||||
<div class="p10">
|
||||
<el-card shadow="never">
|
||||
<div class="top_block" v-loading="top_block_loading">
|
||||
<el-row gutter="60">
|
||||
<div style="position: absolute; top: -35px; right: -8px">
|
||||
<el-date-picker
|
||||
class="year"
|
||||
style="width: 120px"
|
||||
size="mini"
|
||||
v-model="numForm.startYear"
|
||||
type="year"
|
||||
:clearable="false"
|
||||
value-format="yyyy"
|
||||
@change="if(numForm.endYear){getNumData();}"
|
||||
placeholder="选择年"
|
||||
></el-date-picker>
|
||||
-
|
||||
<el-date-picker
|
||||
class="year"
|
||||
style="width: 120px"
|
||||
size="mini"
|
||||
v-model="numForm.endYear"
|
||||
type="year"
|
||||
:clearable="false"
|
||||
value-format="yyyy"
|
||||
@change="if(numForm.startYear){getNumData();}"
|
||||
placeholder="选择年"
|
||||
></el-date-picker>
|
||||
</div>
|
||||
<el-col :span="6" style="position: relative">
|
||||
<div class="top_title">总缴费金额</div>
|
||||
<div class="top_num">{{numData.payMoney?numData.payMoney:'0'}}</div>
|
||||
<div class="cut-off-line"></div>
|
||||
</el-col>
|
||||
<el-col :span="6" style="position: relative">
|
||||
<div class="top_title">退款金额</div>
|
||||
<div class="top_num">{{numData.refundMoney?numData.refundMoney:'0'}}</div>
|
||||
<div class="cut-off-line"></div>
|
||||
</el-col>
|
||||
<el-col :span="6" style="position: relative">
|
||||
<div class="top_title">退款订单数</div>
|
||||
<div class="top_num">{{numData.refundSize?numData.refundSize:'0'}}</div>
|
||||
<div class="cut-off-line"></div>
|
||||
</el-col>
|
||||
<el-col :span="6" style="position: relative">
|
||||
<div class="top_title">总缴费人数</div>
|
||||
<div class="top_num">{{numData.paySize?numData.paySize:'0'}}</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<el-row style="padding: 30px 0; border-bottom: 10px solid rgb(240, 240, 240)">
|
||||
<div style="position: absolute; top: 25px; right: 40px; z-index: 200">
|
||||
<el-date-picker
|
||||
class="year"
|
||||
style="width: 120px"
|
||||
size="mini"
|
||||
v-model="oneForm.startYear"
|
||||
type="year"
|
||||
:clearable="false"
|
||||
value-format="yyyy"
|
||||
@change="if(oneForm.endYear){getPayProjectChart();getPayMoneyChart();}"
|
||||
placeholder="选择年"
|
||||
></el-date-picker>
|
||||
-
|
||||
<el-date-picker
|
||||
class="year"
|
||||
style="width: 120px"
|
||||
size="mini"
|
||||
v-model="oneForm.endYear"
|
||||
type="year"
|
||||
:clearable="false"
|
||||
value-format="yyyy"
|
||||
@change="if(oneForm.startYear){getPayProjectChart();getPayMoneyChart();}"
|
||||
placeholder="选择年"
|
||||
></el-date-picker>
|
||||
</div>
|
||||
<el-col :span="12" style="padding: 0 20px" v-loading="payProjectLoading">
|
||||
<div class="chartTitle">已缴人数</div>
|
||||
<div id="payProjectChart" style="width: 100%; height: 330px"></div>
|
||||
</el-col>
|
||||
<el-col :span="12" style="padding: 0 20px" v-loading="payMoneyLoading">
|
||||
<div class="chartTitle">已缴金额</div>
|
||||
<div id="payMoneyChart" style="width: 100%; height: 330px"></div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-row style="padding: 30px 0; border-bottom: 10px solid rgb(240, 240, 240)">
|
||||
<div style="position: absolute; top: 25px; right: 250px; z-index: 999">
|
||||
<el-date-picker
|
||||
class="year"
|
||||
style="width: 120px"
|
||||
size="mini"
|
||||
v-model="unionForm.year"
|
||||
type="year"
|
||||
:clearable="false"
|
||||
value-format="yyyy"
|
||||
@change="getProjectList"
|
||||
placeholder="选择年"
|
||||
></el-date-picker>
|
||||
</div>
|
||||
<div style="position: absolute; top: 25px; right: 40px; z-index: 999">
|
||||
<el-select
|
||||
placeholder="请选择项目"
|
||||
v-model="unionForm.paymentProjectId"
|
||||
style="width: 100%"
|
||||
size="mini"
|
||||
:clearable="false"
|
||||
@change="doSearch"
|
||||
@clear="doSearch"
|
||||
filterable="true"
|
||||
>
|
||||
<el-option v-for="item in paymentProjectList"
|
||||
:label="item.projectName" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<el-col :span="24" style="padding: 0 20px" v-loading="all_union_loading">
|
||||
<div class="chartTitle" style="margin-bottom: 50px">
|
||||
</div>
|
||||
<div id="allUnionChart" style="width: 100%; height: 300px"></div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
oneForm: {
|
||||
startYear: new Date().getFullYear() - 2 + "",
|
||||
endYear: new Date().getFullYear() + ""
|
||||
},
|
||||
twoForm: {
|
||||
startYear: new Date().getFullYear() - 2 + "",
|
||||
endYear: new Date().getFullYear() + ""
|
||||
},
|
||||
numForm: {
|
||||
startYear: new Date().getFullYear() - 2 + "",
|
||||
endYear: new Date().getFullYear() + ""
|
||||
},
|
||||
payProjectLoading: false,
|
||||
refundProjectLoading: false,
|
||||
payMoneyLoading: false,
|
||||
top_block_loading: false,
|
||||
numData: {},
|
||||
all_union_loading: false,
|
||||
unionForm: {
|
||||
year: new Date().getFullYear() + ""
|
||||
},
|
||||
paymentProjectList: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async getNumData() {
|
||||
this.top_block_loading = true
|
||||
const resp = await this.$axios.post("/platform/member/payment/chartSummary/getNumData", this.numForm)
|
||||
if (resp.code === 0) {
|
||||
this.numData = resp.data
|
||||
}
|
||||
this.top_block_loading = false
|
||||
},
|
||||
async getPayProjectChart() {
|
||||
this.payProjectLoading = true
|
||||
const resp = await this.$axios.post("/platform/member/payment/chartSummary/getPayProjectChart", this.oneForm)
|
||||
if (resp.code === 0) {
|
||||
let { data } = resp
|
||||
|
||||
document.getElementById("payProjectChart").innerHTML = ""
|
||||
const config = {
|
||||
xField: "projectName",
|
||||
yField: "num",
|
||||
label: {
|
||||
position: "middle", // 'top', 'bottom', 'middle',
|
||||
style: {
|
||||
fill: "#FFFFFF",
|
||||
opacity: 0.6
|
||||
}
|
||||
},
|
||||
xAxis: {
|
||||
label: {
|
||||
autoHide: true,
|
||||
autoRotate: false
|
||||
}
|
||||
},
|
||||
meta: {
|
||||
projectName: {
|
||||
alias: "项目"
|
||||
},
|
||||
num: {
|
||||
alias: "缴费人数"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const plot = new G2Plot.Column(document.getElementById("payProjectChart"), {
|
||||
data,
|
||||
...config
|
||||
})
|
||||
plot.render()
|
||||
}
|
||||
this.payProjectLoading = false
|
||||
},
|
||||
async getPayMoneyChart() {
|
||||
this.payMoneyLoading = true
|
||||
const resp = await this.$axios.post("/platform/member/payment/chartSummary/getPayMoneyChart", this.oneForm)
|
||||
if (resp.code === 0) {
|
||||
let { data } = resp
|
||||
document.getElementById("payMoneyChart").innerHTML = ""
|
||||
const config = {
|
||||
xField: "projectName",
|
||||
yField: "money",
|
||||
label: {
|
||||
position: "middle", // 'top', 'bottom', 'middle',
|
||||
style: {
|
||||
fill: "#FFFFFF",
|
||||
opacity: 0.6
|
||||
}
|
||||
},
|
||||
xAxis: {
|
||||
label: {
|
||||
autoHide: true,
|
||||
autoRotate: false
|
||||
}
|
||||
},
|
||||
meta: {
|
||||
projectName: {
|
||||
alias: "项目"
|
||||
},
|
||||
money: {
|
||||
alias: "金额(元)"
|
||||
}
|
||||
}
|
||||
}
|
||||
const plot = new G2Plot.Column(document.getElementById("payMoneyChart"), {
|
||||
data,
|
||||
...config
|
||||
})
|
||||
plot.render()
|
||||
}
|
||||
this.payMoneyLoading = false
|
||||
},
|
||||
async allUnionMoney() {
|
||||
this.all_union_loading = true
|
||||
const resp = await this.$axios.post("/platform/member/payment/chartSummary/allUnionMoney", {
|
||||
paymentProjectId: this.unionForm.paymentProjectId
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
let { data } = resp
|
||||
document.getElementById("allUnionChart").innerHTML = ""
|
||||
const config = {
|
||||
isStack: true,
|
||||
legend: {
|
||||
position: "top-right",
|
||||
flipPage: false
|
||||
},
|
||||
autoFit: true,
|
||||
title: {
|
||||
visible: true,
|
||||
text: ""
|
||||
},
|
||||
description: {
|
||||
visible: true,
|
||||
text: "单位(元)"
|
||||
},
|
||||
xField: "unionname",
|
||||
yField: "money",
|
||||
stackField: "type",
|
||||
color: ["#5B8FF9", "#5AD8A6"],
|
||||
xAxis: {
|
||||
label: {
|
||||
formatter: (v) => {
|
||||
if (data.length > 30 && v.length > 3) {
|
||||
return v.substr(0, 2) + "..."
|
||||
} else if (data.length > 20 && v.length > 4) {
|
||||
return v.substr(0, 3) + "..."
|
||||
} else if (data.length > 10 && v.length > 6) {
|
||||
return v.substr(0, 5) + "..."
|
||||
}
|
||||
return v
|
||||
}
|
||||
}
|
||||
},
|
||||
yAxis: {},
|
||||
meta: {
|
||||
unionname: {
|
||||
alias: "工会"
|
||||
},
|
||||
money: {
|
||||
alias: "金额"
|
||||
}
|
||||
},
|
||||
connectedArea: {
|
||||
visible: true,
|
||||
triggerOn: false
|
||||
}
|
||||
}
|
||||
const plot = new G2Plot.Column(document.getElementById("allUnionChart"), {
|
||||
data,
|
||||
...config
|
||||
})
|
||||
plot.render()
|
||||
}
|
||||
this.all_union_loading = false
|
||||
},
|
||||
async getProjectList() {
|
||||
const resp = await this.$axios.post("/platform/member/payment/project/getAllProject", { year: this.unionForm.year })
|
||||
if (resp.code === 0) {
|
||||
this.paymentProjectList = resp.data
|
||||
this.$set(this.unionForm, "paymentProjectId", (this.paymentProjectList && this.paymentProjectList.length > 0) ? this.paymentProjectList[0].id : null)
|
||||
await this.allUnionMoney()
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await this.getPayProjectChart()
|
||||
await this.getPayMoneyChart()
|
||||
await this.getNumData()
|
||||
await this.getProjectList()
|
||||
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,370 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-input-group__append {
|
||||
border-left: 0;
|
||||
padding: 0 13px;
|
||||
height: 40px;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
|
||||
<search @search="doSearch" ref="search">
|
||||
<search-item label="缴费配置">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.name">
|
||||
</el-input>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool label="缴费配置列表">
|
||||
<el-button @click="openAdd" size="small" type="primary">
|
||||
新增缴费配置
|
||||
</el-button>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize"
|
||||
@sort-change="pageOrder"
|
||||
class="vi-table"
|
||||
ref="table" row-key="id" style="width: 100%"
|
||||
v-loading="tableLoading">
|
||||
<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==='isDisabled'">
|
||||
<el-switch
|
||||
:active-value="false"
|
||||
:inactive-value="true"
|
||||
@change="(val)=>{configStatusChange(row.id)}"
|
||||
active-color="#13ce66"
|
||||
inactive-color="#ff4949"
|
||||
v-model="row.isDisabled">
|
||||
</el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center"
|
||||
label="操作"
|
||||
width="100px">
|
||||
<template scope="scope">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button :loading="submitLoading" plain 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:'edit',data:scope.row}">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'remove',data:scope.row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
<template #view>
|
||||
|
||||
|
||||
<el-form :model="formData" ref="addForm" :rules="rules"
|
||||
label-width="120px"
|
||||
style="margin: 10px 0 0 0">
|
||||
<div class="process-title">缴费配置</div>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="配置名称" prop="name">
|
||||
<el-input v-model="formData.name"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="缴费月份" prop="paymentMonth" size="medium">
|
||||
<el-date-picker
|
||||
v-model="formData.paymentMonth"
|
||||
type="monthrange"
|
||||
range-separator="至"
|
||||
style="width: 100%"
|
||||
value-format="yyyy-MM"
|
||||
start-placeholder="开始月份"
|
||||
end-placeholder="结束月份">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<div class="process-title">缴纳标准</div>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-form-item class="is-required" label="会费缴纳情况" prop="payStandard">
|
||||
<el-button @click="formData.payStandards.push({payPersonnel: null, payMode: '1', personTypes: null, payModeValue: null,payModeValueList:[{name:'',value:''}]})" icon="el-icon-plus" size="mini"
|
||||
style="float: right;margin-bottom: 10px">
|
||||
添加
|
||||
</el-button>
|
||||
<span style="color: red">说明:不同人员类型可根据不同缴费模式设置缴费标准。</span>
|
||||
|
||||
<el-table
|
||||
:data="formData.payStandards"
|
||||
border
|
||||
v-fit-columns
|
||||
size="mini"
|
||||
style="width: 100%">
|
||||
<el-table-column label="缴费人员" prop="payPersonnel" width="200">
|
||||
<template scope="{row,$index}">
|
||||
<el-form-item :prop="'payStandards.'+$index+'.payPersonnel'"
|
||||
:rules="[{required:true,message:'必填',trigger:['change','blur']}]"
|
||||
label-width="0">
|
||||
<el-select placeholder="请选择在职状态" v-model="row.payPersonnel"
|
||||
style="width: 100%" clearable>
|
||||
<el-option v-for="item in userStateList" :label="item.name" :value="item.code"></el-option>
|
||||
</el-select>
|
||||
<!-- <el-input clearable maxlength="100" placeholder="请输入缴费人员"
|
||||
v-model="row.payPersonnel"></el-input>-->
|
||||
<!--<el-select placeholder="请选择人员类型" v-model="row.payPersonnel"
|
||||
style="width: 100%" clearable>
|
||||
<el-option v-for="item in memberTypeList" :label="item.name" :value="item.code"></el-option>
|
||||
</el-select>-->
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="人员类型" prop="personType" >
|
||||
<template slot-scope="{row,$index}">
|
||||
<el-select @change="row.payMode=null" placeholder="请选择人员类型" v-model="row.personType"
|
||||
style="width: 100%" clearable>
|
||||
<el-option v-for="item in personTypeList" :label="item.name" :value="item.code"></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="缴费模式" prop="payMode" >
|
||||
<template scope="{row,$index}">
|
||||
<el-form-item :prop="'payStandards.'+$index+'.payMode'"
|
||||
:rules="[{required:true,message:'必填',trigger:['change','blur']}]"
|
||||
label-width="0">
|
||||
<el-select placeholder="请选择缴费模式" v-model="row.payMode"
|
||||
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>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<!-- <el-table-column label="在职状态" prop="userState" >
|
||||
<template slot-scope="{row,$index}">
|
||||
<el-select placeholder="请选择在职状态" v-model="row.userState"
|
||||
style="width: 100%" clearable>
|
||||
<el-option v-for="item in userStateList" :label="item.name" :value="item.code"></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>-->
|
||||
<el-table-column label="缴费标准" prop="payModeValue" width="650">
|
||||
<template scope="{row,$index}">
|
||||
|
||||
<div v-if="row.payMode=='2'">
|
||||
<el-form-item :prop="'payStandards.'+$index+'.payModeValueList'"
|
||||
:rules="[{required:true,message:'必填',trigger:['change','blur']}]"
|
||||
label-width="0">
|
||||
<div style="display:flex;justify-content: space-between;margin-left: 30px">
|
||||
(
|
||||
<template v-for="(o,i) in row.payModeValueList" >
|
||||
<el-input placeholder="" style="width: 100px;"
|
||||
v-model="o.name">
|
||||
<el-button @click="row.payModeValueList.splice(i, 1)" slot="append" style="padding: 0 7px;"
|
||||
icon="el-icon-circle-close"></el-button>
|
||||
</el-input>
|
||||
|
||||
<span v-if="i !== row.payModeValueList.length - 1">+</span>
|
||||
</template>
|
||||
) * 0.5%
|
||||
<div>
|
||||
<el-button @click="row.payModeValueList.push({name: '',value:''})" size="mini">新增</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div v-else-if="row.payMode == '1' || row.payMode == '3'">
|
||||
<el-form-item :prop="'payStandards.'+$index+'.payModeValue'"
|
||||
:rules="[{required:true,message:'必填',trigger:['change','blur']}]"
|
||||
label-width="0">
|
||||
|
||||
<div v-if="row.payMode == '1'">
|
||||
<el-input clearable maxlength="5" type="number" placeholder="请输入缴费金额"
|
||||
v-model="row.payModeValue"></el-input>
|
||||
</div>
|
||||
<div v-if="row.payMode == '3'" style="text-align: center">
|
||||
<span>导入名单</span>
|
||||
</div>
|
||||
<!-- <el-input clearable maxlength="100" placeholder="请填写缴费标准"-->
|
||||
<!-- v-model="row.payModeValue"></el-input>-->
|
||||
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="操作" width="80">
|
||||
<template slot-scope="scope">
|
||||
<el-button :disabled="formData.payStandards.length<=1"
|
||||
@click="formData.payStandards.splice(scope.$index,1)" circle
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
type="danger"></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
|
||||
<div>
|
||||
<el-button @click="doSubmit" v-if="isSubmit" v-loading="submitLoading" style="float: right"
|
||||
type="primary">
|
||||
提交
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
payModeList:[{code:'1',value:'固定金额缴纳'},{code:'2',value:'按比例缴纳'},{code:'3',value:'导入'}],
|
||||
formData: {
|
||||
payStandards: [{payPersonnel: null, payMode: null, personTypes: null, payModeValue: null,payModeValueList:[{name:'',value:''}]}]
|
||||
},
|
||||
rules: {
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
paymentMonth: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
exit: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
},
|
||||
personTypeList:[],
|
||||
userStateList:[],
|
||||
memberTypeList:[],
|
||||
pageForm:{},
|
||||
tableData:[],
|
||||
tableColumns:[
|
||||
{prop: 'name', label: '配置名称'},
|
||||
{prop: 'paymentStartMonth', label: '缴费起始月份'},
|
||||
{prop: 'paymentEndMonth', label: '缴费截止月份'},
|
||||
{prop: 'isDisabled', label: '开启状态'},
|
||||
],
|
||||
isSubmit: true,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'view') {
|
||||
this.openView(data)
|
||||
} else if (type === 'edit') {
|
||||
this.openEdit(data)
|
||||
} else if (type === 'remove') {
|
||||
this.doRemove(data.id)
|
||||
}
|
||||
},
|
||||
openAdd(){
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
async doRemove(id) {
|
||||
const confirm = await this.$confirm('您确定要删除吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === 'confirm') {
|
||||
const resp = await this.$axios.post(loc() + '/doRemove', {id: id})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.pageData()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
async configStatusChange(id) {
|
||||
const resp = await this.$axios.post(loc() + '/openClosedConfig', { id: id })
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.pageData()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
},
|
||||
openEdit(data) {
|
||||
this.formData = {}
|
||||
this.formData = {
|
||||
...data,
|
||||
paymentMonth:[data.paymentStartMonth, data.paymentEndMonth],
|
||||
}
|
||||
this.formData.payStandards= JSON.parse(this.formData.payStandards)
|
||||
this.isSubmit = true
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
async doSubmit(){
|
||||
this.formData.paymentStartMonth = this.formData.paymentMonth[0]
|
||||
this.formData.paymentEndMonth = this.formData.paymentMonth[1]
|
||||
const formData = clone(this.formData)
|
||||
formData.payStandards = JSON.stringify(this.formData.payStandards)
|
||||
const resp = await this.$axios.post(loc() + '/doAddOrModify',formData)
|
||||
if (resp.code === 0){
|
||||
this.$refs.guava.index()
|
||||
await this.getPaymentConfig()
|
||||
this.pageData()
|
||||
this.notifySuccess(resp.msg)
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
},
|
||||
async getPaymentConfig(){
|
||||
const resp = await this.$axios.post(loc() + '/getPaymentConfig')
|
||||
if (resp.code === 0){
|
||||
this.formData = {...resp.data}
|
||||
if (!this.formData.payStandards){
|
||||
this.formData = {
|
||||
payStandards: [{payPersonnel: null, payMode: '1', personTypes: null, payModeValue: null,payModeValueList:[{name:'',value:''}]}]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
this.personTypeList = await this.$businessTool.getDictOptions('PERSON_TYPE')
|
||||
//在职状态
|
||||
this.userStateList = await this.$businessTool.getDictOptions('USER_STATE')
|
||||
//会员类型
|
||||
// this.memberTypeList = await getDictOptions('memberType')
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,368 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.payForm .el-form-item__label {
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度">
|
||||
<el-date-picker
|
||||
:clearable="false"
|
||||
@change="doSearch"
|
||||
placeholder="选择年度"
|
||||
type="year"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
></el-date-picker>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="缴费列表">
|
||||
<el-radio-group @change="doSearch" class="mr10" size="small"
|
||||
v-model="pageForm.isPay">
|
||||
<el-radio-button :label="true">已缴</el-radio-button>
|
||||
<el-radio-button :label="false">未缴</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table
|
||||
:data="tableData"
|
||||
:size="tableSize"
|
||||
@sort-change="pageOrder"
|
||||
class="vi-table"
|
||||
ref="table"
|
||||
row-key="id"
|
||||
style="width: 100%"
|
||||
v-loading="tableLoading"
|
||||
>
|
||||
<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==='isPayment'">
|
||||
<template v-if="row.isPayment">
|
||||
<el-tag v-if="row.isPayment && !row.isRefund" type="success">已缴费</el-tag>
|
||||
<el-tag v-else type="danger">
|
||||
{{ getRefundStates(row.refundState) }}
|
||||
</el-tag>
|
||||
</template>
|
||||
<el-tag v-else type="danger">未缴费</el-tag>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop==='paymentStartMonth'">
|
||||
{{row.paymentStartMonth}}至{{row.paymentEndMonth}}
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop==='paymentMoney'">
|
||||
{{ row.payMoney ? (Number(row.paymentMoney) / 100) : 0 }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="操作"
|
||||
prop="userOnline" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="showPayInfo(row)" size="mini" type="primary">查看详情</el-button>
|
||||
<el-button v-if="!row.isPayment" @click="openPay(row)" size="mini" type="primary">缴费</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<pay-info :trading-states="tradingStates" :refund-states="refundStates"
|
||||
:trading-channels="tradingChannels" ref="payInfoRef"></pay-info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
|
||||
<el-diaLog :close-on-click-modal="false" :visible.sync="payVisible" title="缴费" width="50%"
|
||||
:before-close="clickClose">
|
||||
<el-form ref="form" :model="formData" :rules="formRules" label-width="170px"
|
||||
label-suffix=":" class="payForm">
|
||||
|
||||
<el-steps :active="payActive" finish-status="success">
|
||||
<el-step title="计算缴费金额"></el-step>
|
||||
<el-step title="生成缴费二维码"></el-step>
|
||||
<el-step title="完成"></el-step>
|
||||
</el-steps>
|
||||
<div v-if="payActive===0" class="mt25">
|
||||
<el-form-item label="缴费所属时间">
|
||||
<div>{{formData.paymentStartMonth}}至{{formData.paymentEndMonth}}</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="缴费标准">
|
||||
<div style="color: red"
|
||||
v-if="formData.payModeValueList&&formData.payModeValueList.length>0">
|
||||
(
|
||||
<template v-for="(o,i) in formData.payModeValueList">
|
||||
{{o.name}}
|
||||
<template v-if="i !=formData.payModeValueList.length-1">+</template>
|
||||
</template>
|
||||
) * 0.5% * {{formData.paymentMonth}}个月
|
||||
</div>
|
||||
<div v-else>固定金额缴费</div>
|
||||
</el-form-item>
|
||||
<!--如果是根据比例算的-->
|
||||
<div v-if="formData.payModeValueList&&formData.payModeValueList.length>0">
|
||||
|
||||
<div v-for="(o,i) in formData.payModeValueList" :key="o.id">
|
||||
<el-form-item :label="o.name">
|
||||
<el-input-number v-model="o.value" :min="0" :max="1000000"
|
||||
:precision="2"
|
||||
placeholder="请输入缴费金额"
|
||||
@change="changePayModeValue(o)"></el-input-number>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</div>
|
||||
<el-form-item label="支付金额">
|
||||
<div style="color: #2cd000;font-size: 25px">¥ {{formData.paymentMoney}}</div>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
<div v-if="payActive===1" class="mt25">
|
||||
<el-form-item label="商品订单">
|
||||
{{formData.transactionId}}
|
||||
</el-form-item>
|
||||
<el-form-item label="支付金额">
|
||||
<div style="color: #2cd000;font-size: 25px">¥ {{formData.paymentMoney}}</div>
|
||||
</el-form-item>
|
||||
<div style="width: 100%;">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12" v-loading="qrcodeLoading">
|
||||
<div style="text-align: center">
|
||||
<image :src="paySrc" style="width: 60%;left: 0;right: 0;margin: auto"></image>
|
||||
<div style="display: flex;justify-content: center">
|
||||
<span
|
||||
style="font-weight: bold;
|
||||
font-size: 15px;
|
||||
color: #fbfbfb;
|
||||
background-color: rgb(44, 208, 0);
|
||||
height: 30px;
|
||||
width: 60%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;">
|
||||
请打开手机微信,扫一扫完成支付</span>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<div>
|
||||
<el-image src="/assets/mobile/svg/memberPay/wx_img.png"></el-image>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="payActive===3">
|
||||
<div v-loading="submitLoading">
|
||||
<div style="margin-top: 35px;background-color: RGB(245, 254, 243);">
|
||||
<div
|
||||
style="display: flex;align-items: center;height: 100px;margin-left: 10%">
|
||||
<div>
|
||||
<el-image
|
||||
src="/assets/mobile/svg/memberPay/pcPaySuccess.svg"></el-image>
|
||||
</div>
|
||||
<div style="font-weight: bold;font-size: 25px;margin-left: 10px;">
|
||||
支付成功!
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<el-form-item label="商品订单">
|
||||
{{formData.transactionId}}
|
||||
</el-form-item>
|
||||
<el-form-item label="支付金额">
|
||||
<div style="color: #2cd000;font-size: 25px">¥ {{formData.paymentMoney}}
|
||||
</div>
|
||||
</el-form-item>
|
||||
</div>
|
||||
</div>
|
||||
</el-form>
|
||||
<div style="text-align: right">
|
||||
<span>
|
||||
<el-button @click="clickClose">关 闭</el-button>
|
||||
<el-button @click="next" v-if="payActive===0&&formData.paymentMoney>0"
|
||||
type="primary">下一步</el-button>
|
||||
</span>
|
||||
</div>
|
||||
</el-diaLog>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="${base!}/assets/platform/plugins/jr-qrcode/jr-qrcode.js"></script>
|
||||
<script>
|
||||
<!--#include("minePayInfo.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'pay-info': MINE_PAY_INFO,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
tableColumns: [
|
||||
{ prop: "year", label: "年度", sortable: true },
|
||||
{ prop: "projectName", label: "项目名称", sortable: true },
|
||||
{ prop: "startTime", label: "缴费开始时间", sortable: true },
|
||||
{ prop: "endTime", label: "缴费截止时间", sortable: true },
|
||||
{ prop: "paymentStartMonth", label: "缴费所属时间", sortable: true },
|
||||
{ prop: "paymentMoney", label: "缴费金额(元)", sortable: true },
|
||||
{ prop: "isPayment", label: "缴费状态", sortable: true }
|
||||
],
|
||||
pageForm: {
|
||||
isPay: false,
|
||||
year: moment().format("YYYY")
|
||||
},
|
||||
payVisible: false,
|
||||
payActive: 0,
|
||||
intervalTimer: null,
|
||||
qrcodeLoading: false,
|
||||
payInfo: {},
|
||||
|
||||
tradingStates: [],
|
||||
refundStates: [],
|
||||
tradingChannels: [],
|
||||
|
||||
paySrc: ''
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async showPayInfo(row) {
|
||||
this.$refs.guava.view(() => {
|
||||
this.$refs.payInfoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
clickClose() {
|
||||
if (this.payActive === 3) {
|
||||
this.payVisible = false
|
||||
} else {
|
||||
this.$confirm("您确定要关闭当前缴费吗?关闭后将不会保存当前数据", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.payVisible = false
|
||||
})
|
||||
}
|
||||
clearInterval(this.intervalTimer)
|
||||
},
|
||||
next() {
|
||||
this.$confirm("您确定要生成缴费二维码吗?当前需缴费【" + this.formData.paymentMoney + "】元", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(async () => {
|
||||
this.qrcodeLoading = true
|
||||
const paymentMoney = Math.floor(this.formData.paymentMoney * 100)
|
||||
this.payActive = this.payActive + 1
|
||||
const resp = await $.post("/platform/member/payment/mine/pcOrderPay", {
|
||||
paymentMoney: paymentMoney,
|
||||
paymentInfoId: this.formData.paymentInfoId
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
const data = JSON.parse(resp.data)
|
||||
this.$nextTick(() => {
|
||||
// $("#qrcode").html("")
|
||||
// $("#qrcode").qrcode({
|
||||
// render: "canvas",
|
||||
// width: $("#qrcode").width(),
|
||||
// height: $("#qrcode").width(),
|
||||
// text: data.code_url,
|
||||
// correctLevel: 3
|
||||
// })
|
||||
this.paySrc = jrQrcode.getQrBase64(data.code_url, {
|
||||
padding: 10, // 内边距
|
||||
width: 200, // 图片宽度
|
||||
height: 200, // 图片高度
|
||||
correctLevel: 2, // 容错级别 0-3
|
||||
foreground: '#000', // 前景色
|
||||
background: '#fff' // 背景色
|
||||
})
|
||||
})
|
||||
this.formData.transactionId = data.transactionId
|
||||
await this.getIsPay()
|
||||
}
|
||||
this.qrcodeLoading = false
|
||||
})
|
||||
},
|
||||
async getIsPay() {
|
||||
this.intervalTimer = setInterval(async () => {
|
||||
const resp = await this.$axios.post(loc() + "/getIsPay", { paymentInfoId: this.formData.paymentInfoId })
|
||||
if (resp.code === 0) {
|
||||
if (resp.data) {
|
||||
this.payActive = 3
|
||||
this.submitLoading = true
|
||||
clearInterval(this.intervalTimer)
|
||||
setTimeout(() => {
|
||||
this.submitLoading = false
|
||||
this.pageData()
|
||||
}, 1500)
|
||||
}
|
||||
}
|
||||
}, 4000)
|
||||
},
|
||||
changePayModeValue() {
|
||||
let paymentMoney = this.formData.payModeValueList.reduce((a, b) => {
|
||||
return a + b.value
|
||||
}, 0)
|
||||
this.$set(this.formData, "paymentMoney", parseFloat((paymentMoney * 0.005 * this.formData.paymentMonth).toFixed(2)))
|
||||
},
|
||||
openPay(row) {
|
||||
debugger
|
||||
this.payActive = 0
|
||||
const payStandards = JSON.parse(row.payStandards)
|
||||
const payStandard = payStandards.find(p => p.payPersonnel === row.userState && p.personType === row.personType)
|
||||
this.$set(this.formData, "paymentMonth", row.paymentMonth)
|
||||
this.$set(this.formData, "paymentStartMonth", row.paymentStartMonth)
|
||||
this.$set(this.formData, "paymentEndMonth", row.paymentEndMonth)
|
||||
this.$set(this.formData, "paymentInfoId", row.id)
|
||||
if (payStandard && payStandard.payModeValue) {
|
||||
this.$set(this.formData, "payModeValueList", [])
|
||||
this.$set(this.formData, "paymentMoney", payStandard.payModeValue)
|
||||
} else {
|
||||
this.$set(this.formData, "payModeValueList", payStandard.payModeValueList)
|
||||
this.$set(this.formData, "paymentMoney", 0)
|
||||
}
|
||||
this.payVisible = true
|
||||
},
|
||||
getRefundStates(data) {
|
||||
if (!data) {
|
||||
return
|
||||
}
|
||||
return this.refundStates.find(item => item.name === data).refundStateName
|
||||
},
|
||||
async getPaymentEnums() {
|
||||
this.tradingStates = await this.$businessTool.getEnumOptions("TradingStateEnum")
|
||||
this.refundStates = await this.$businessTool.getEnumOptions("RefundStateEnum")
|
||||
this.tradingChannels = await this.$businessTool.getEnumOptions("TradingChannelEnum")
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.pageData()
|
||||
this.getPaymentEnums()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,125 @@
|
||||
const MINE_PAY_INFO = {
|
||||
template: /*language=html*/ `
|
||||
<div>
|
||||
<el-descriptions title="缴费信息" :column="3" border>
|
||||
<el-descriptions-item label="工号">{{ viewData.loginname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">{{ viewData.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="缴费项目">{{ viewData.projectName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所在工会">{{ viewData.unionname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所在单位">{{ viewData.unitname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="缴费情况">
|
||||
<el-tag v-if="viewData.personType">已缴费</el-tag>
|
||||
<el-tag v-else type="warning">未缴费</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="缴费金额">{{ viewData.paymentMoney }}</el-descriptions-item>
|
||||
<el-descriptions-item label="缴费月份时长">{{ viewData.paymentMonth }}</el-descriptions-item>
|
||||
|
||||
<template v-if="viewData.transList">
|
||||
<el-descriptions-item label="缴费订单详情" :span="3">
|
||||
<el-table :data="viewData.transList" class="vi-table" ref="table" row-key="id"
|
||||
style="width: 100%" border>
|
||||
<el-table-column label="系统单号" prop="outTradeNo"></el-table-column>
|
||||
<el-table-column label="商户订单号" prop="transactionId"></el-table-column>
|
||||
<el-table-column label="付款方式" prop="tradingChannel">
|
||||
<template scope="{row}">
|
||||
{{ getTradingChannel(row.tradingChannel) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="订单金额(¥)" prop="tradingAmount">
|
||||
<template scope="{row}">
|
||||
{{ row.tradingAmount ? (Number(row.tradingAmount) / 100 ) : 0 }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="下单时间" prop="createdAt">
|
||||
<template scope="{row}">
|
||||
{{ moment(row.createdAt).format("YYYY-MM-DD HH:mm:ss") }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="订单状态" prop="tradingState">
|
||||
<template scope="{row}">
|
||||
{{ getTradingStates(row.tradingState) }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="退款详情" prop="isRefund" width="200">
|
||||
<template scope="{row}">
|
||||
<el-tag v-if="!row.isRefund">未退款</el-tag>
|
||||
<el-tag v-else type="danger" style="cursor: pointer;"
|
||||
@click="showRefundInfo(row)">此订单有退款,点我查看详情</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
|
||||
</el-descriptions>
|
||||
|
||||
<el-dialog title="退款详情" :visible.sync="refundDialogVisible" width="50%" append-to-body>
|
||||
<el-descriptions :column="1" border>
|
||||
<el-descriptions-item label="退款单号">{{ refundData.outRefundTradeNo }}</el-descriptions-item>
|
||||
<el-descriptions-item label="退款商户号">{{ refundData.refundNo }}</el-descriptions-item>
|
||||
<el-descriptions-item label="退款金额(¥)">
|
||||
{{ refundData.total ? (Number(refundData.total) / 100) : 0 }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="退款时间">{{ moment(refundData.updatedAt).format("YYYY-MM-DD HH:mm:ss") }}</el-descriptions-item>
|
||||
<el-descriptions-item label="退款状态">
|
||||
{{ getRefundStates(refundData.refundState) }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="refundDialogVisible = false;refundData = {}">关 闭</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
`,
|
||||
props: {
|
||||
tradingStates: { type: Array, default: () => [] },
|
||||
refundStates: { type: Array, default: () => [] },
|
||||
tradingChannels: { type: Array, default: () => [] },
|
||||
},
|
||||
data() {
|
||||
return{
|
||||
viewData: {},
|
||||
refundData: {},
|
||||
refundDialogVisible: false
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
showRefundInfo(row) {
|
||||
this.refundData = {}
|
||||
this.refundData = this.viewData.refundRecordList.find(item => item.paymentTransactionId === row.id)
|
||||
if (this.refundData) {
|
||||
this.refundDialogVisible = true
|
||||
} else {
|
||||
this.$message.error("此订单无退款记录")
|
||||
}
|
||||
},
|
||||
async onOpen(id) {
|
||||
const resp = await $.post('/platform/member/payment/mine/getPaymentInfoById', {id})
|
||||
if (resp.code === 0) {
|
||||
this.viewData = resp.data
|
||||
} else {
|
||||
this.$message.error("操作失败")
|
||||
}
|
||||
},
|
||||
getTradingStates(data) {
|
||||
if (!data) {
|
||||
return
|
||||
}
|
||||
return this.tradingStates.find(item => item.name === data).tradingStateName
|
||||
},
|
||||
getRefundStates(data) {
|
||||
if (!data) {
|
||||
return
|
||||
}
|
||||
debugger
|
||||
return this.refundStates.find(item => item.name === data).refundStateName
|
||||
},
|
||||
getTradingChannel(data) {
|
||||
if (!data) {
|
||||
return
|
||||
}
|
||||
return this.tradingChannels.find(item => item.name === data).tradingChannelName
|
||||
},
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,410 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.el-input-group__append {
|
||||
border-left: 0;
|
||||
padding: 0 7px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
|
||||
<search @search="doSearch" ref="searchRef">
|
||||
<search-item label="年度">
|
||||
<el-date-picker
|
||||
:clearable="false"
|
||||
clearable
|
||||
@change="doSearch"
|
||||
placeholder="选择年度"
|
||||
type="year" style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="缴费项目">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.projectName">
|
||||
</el-input>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool label="缴费项目列表">
|
||||
<el-button @click="openAdd" size="small" type="primary">
|
||||
新增缴费项目
|
||||
</el-button>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize"
|
||||
@sort-change="pageOrder"
|
||||
class="vi-table"
|
||||
ref="table" row-key="id" style="width: 100%"
|
||||
v-loading="tableLoading">
|
||||
<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==='isDisabled'">
|
||||
<el-switch
|
||||
:active-value="false"
|
||||
:inactive-value="true"
|
||||
@change="(val)=>{projectStatusChange(row.id)}"
|
||||
active-color="#13ce66"
|
||||
inactive-color="#ff4949"
|
||||
v-model="row.isDisabled">
|
||||
</el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center"
|
||||
label="操作"
|
||||
width="100px">
|
||||
<template scope="scope">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button :loading="submitLoading" plain 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:'openCode',data:scope.row}">
|
||||
二维码
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'view',data:scope.row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'edit',data:scope.row}">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'doRenew',data:scope.row}"
|
||||
v-if="scope.row.created">
|
||||
更新缴费人员
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'doSet',data:scope.row}">
|
||||
{{scope.row.created?'重置缴费人员':'生成缴费人员'}}
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'remove',data:scope.row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<el-form :model="formData" :rules="formRules" label-width="100px" ref="form">
|
||||
<div class="process-title">缴费项目信息</div>
|
||||
<el-form-item label="项目名称" prop="projectName">
|
||||
<el-input maxlength="100" placeholder="项目名称" v-model="formData.projectName"></el-input>
|
||||
</el-form-item>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="缴费年度" prop="year">
|
||||
<el-date-picker
|
||||
:clearable="false"
|
||||
placeholder="选择年度"
|
||||
type="year" style="width: 100%"
|
||||
v-model="formData.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12">
|
||||
<el-form-item label="创建日期" prop="createTime">
|
||||
<el-date-picker
|
||||
placeholder="创建日期"
|
||||
readonly
|
||||
style="width: 100%"
|
||||
type="date"
|
||||
v-model="formData.createTime"
|
||||
value-format="yyyy-MM-dd">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="缴费配置" prop="configId" size="medium">
|
||||
<el-select placeholder="请选择缴费配置" v-model="formData.configId"
|
||||
style="width: 100%" clearable>
|
||||
<el-option
|
||||
v-for="item in configList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="缴费时间" prop="paymentTime" size="medium">
|
||||
<el-date-picker
|
||||
v-model="formData.paymentTime"
|
||||
type="daterange"
|
||||
value-format="yyyy-MM-dd"
|
||||
range-separator="至"
|
||||
style="width: 100%"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
<div>
|
||||
<el-button @click="doSave" v-if="isSubmit" v-loading="submitLoading" style="float: right"
|
||||
type="primary">
|
||||
提交
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<!-- <open-qr-code ref="openQRCode"></open-qr-code>-->
|
||||
</guava>
|
||||
|
||||
<el-dialog title="二维码" width="30%" :visible.sync="dialogVisible" style="text-align: center">
|
||||
<img :src="qrSrc" alt="二维码" />
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="${base!}/assets/platform/plugins/jr-qrcode/jr-qrcode.js"></script>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
isSubmit: true,
|
||||
pageForm: {
|
||||
year: moment().format('YYYY'),
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'year', label: '年度', sortable: true},
|
||||
{prop: 'projectName', label: '项目名称', sortable: true},
|
||||
{prop: 'startTime', label: '缴费开始时间', sortable: true},
|
||||
{prop: 'endTime', label: '缴费截止时间', sortable: true},
|
||||
{prop: 'createTime', label: '创建时间', sortable: true},
|
||||
{prop: 'isDisabled', label: '开启状态'},
|
||||
],
|
||||
formData: {
|
||||
year: moment().format('YYYY'),
|
||||
},
|
||||
formRules: {
|
||||
projectName: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
year: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
paymentMonth: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
paymentTime: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
configId: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
},
|
||||
paymentConfig: {},
|
||||
monthSelect: [],
|
||||
configList:[],
|
||||
// 二维码展示
|
||||
dialogVisible: false,
|
||||
qrSrc: '',
|
||||
}
|
||||
},
|
||||
components: {
|
||||
// 'open-qr-code': httpVueLoader('/components/plugins/OpenQRCode.vue'),
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'openCode') {
|
||||
this.openCode(data)
|
||||
} else if (type === 'view') {
|
||||
this.openView(data)
|
||||
} else if (type === 'edit') {
|
||||
this.openEdit(data)
|
||||
} else if (type === 'doRenew') {
|
||||
this.doRenewPayment(data.id)
|
||||
} else if (type === 'doSet') {
|
||||
this.doSetPayment(data)
|
||||
} else if (type === 'remove') {
|
||||
this.doRemove(data.id)
|
||||
}
|
||||
},
|
||||
openCode(row) {
|
||||
// this.$refs.openQRCode.openCode('/mobile/memberCost/list')
|
||||
this.qrSrc = jrQrcode.getQrBase64("/mobile/memberCost/list", {
|
||||
padding: 10, // 内边距
|
||||
width: 400, // 图片宽度
|
||||
height: 400, // 图片高度
|
||||
correctLevel: 2, // 容错级别 0-3
|
||||
foreground: '#000', // 前景色
|
||||
background: '#fff' // 背景色
|
||||
})
|
||||
this.dialogVisible = true
|
||||
},
|
||||
openView(data) {
|
||||
this.formData = {}
|
||||
this.formData = {
|
||||
...data,
|
||||
paymentTime:[data.startTime, data.endTime],
|
||||
}
|
||||
this.isSubmit = false
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
openEdit(data) {
|
||||
this.formData = {}
|
||||
this.formData = {
|
||||
...data,
|
||||
paymentTime:[data.startTime, data.endTime],
|
||||
}
|
||||
this.isSubmit = true
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
async doRenewPayment(id) {
|
||||
this.$confirm('系统根据现有的会员,更新当前缴费名单,对已经缴费人员没有影响,请确认是否更新?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: async (a, b) => {
|
||||
if ("confirm" === a) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '数据保存中请稍后',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
this.submitLoading = true
|
||||
const resp = await this.$axios.post(loc() + '/doSetPayment', {id: id, isRenew: true})
|
||||
this.submitLoading = false
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
this.pageData()
|
||||
this.notifySuccess(resp.msg)
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
async doSetPayment(row) {
|
||||
let msg = row.created ? "请确认是否重新生成缴费名单,如果确认,系统将清空已缴费的人员信息!" : "确定要生成缴费名单吗?"
|
||||
this.$confirm(msg, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: async (a, b) => {
|
||||
if ("confirm" === a) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '数据保存中请稍后',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
this.submitLoading = true
|
||||
const resp = await this.$axios.post(loc() + '/doSetPayment', {id: row.id, isRenew: false})
|
||||
this.submitLoading = false
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
this.pageData()
|
||||
this.notifySuccess(resp.msg)
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
async doRemove(id) {
|
||||
const confirm = await this.$confirm('您确定要删除吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === 'confirm') {
|
||||
const resp = await this.$axios.post(loc() + '/doRemove', {id: id})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.pageData()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
openAdd() {
|
||||
this.formData = {
|
||||
createTime: moment().format('YYYY-MM-DD HH:mm:ss'),
|
||||
year: moment().format('YYYY'),
|
||||
}
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
async doSave() {
|
||||
const formValid = await this.$refs["form"].validate()
|
||||
if (formValid) {
|
||||
this.submitLoading = true
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '数据保存中请稍后',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
this.formData.startTime=this.formData.paymentTime[0]
|
||||
this.formData.endTime=this.formData.paymentTime[1]
|
||||
const formData = clone(this.formData)
|
||||
const resp = await this.$axios.post(loc() + '/doSave', formData)
|
||||
loading.close()
|
||||
this.submitLoading = false
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.$refs.guava.index()
|
||||
this.pageData()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
async projectStatusChange(id) {
|
||||
const resp = await this.$axios.post(loc() + '/openClosedProject', {id: id})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.pageData()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
},
|
||||
async getPaymentConfigList(id) {
|
||||
const resp = await this.$axios.post('/platform/member/payment/config/getPaymentConfigList')
|
||||
if (resp.code === 0) {
|
||||
this.configList = resp.data
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
await this.getPaymentConfigList()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,185 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度">
|
||||
<el-date-picker
|
||||
:clearable="false"
|
||||
@change="doSearch();getProjectList()"
|
||||
placeholder="选择年度"
|
||||
type="year"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
></el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="缴费项目">
|
||||
<el-select
|
||||
placeholder="请选择项目"
|
||||
v-model="pageForm.paymentProjectId"
|
||||
style="width: 100%"
|
||||
:clearable="false"
|
||||
@change="doSearch"
|
||||
@clear="doSearch"
|
||||
filterable="true"
|
||||
>
|
||||
<el-option v-for="item in paymentProjectList"
|
||||
:label="item.projectName" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
|
||||
<search-item label="工号/姓名">
|
||||
<el-input placeholder="请输入工号/姓名" v-model="pageForm.searchKeyword" clearable></el-input>
|
||||
</search-item>
|
||||
|
||||
<search-item label="交易单号">
|
||||
<el-input placeholder="请输入交易单号"
|
||||
v-model="pageForm.transactionId" clearable>
|
||||
</el-input>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="缴费列表">
|
||||
<el-radio-group @change="doSearch" class="mr10" size="small"
|
||||
v-model="pageForm.isRefund">
|
||||
<el-radio-button :label="3">全部</el-radio-button>
|
||||
<el-radio-button :label="0">未退款</el-radio-button>
|
||||
<el-radio-button :label="1">已退款</el-radio-button>
|
||||
</el-radio-group>
|
||||
</table-tool>
|
||||
<el-table
|
||||
:data="tableData"
|
||||
:size="tableSize"
|
||||
@sort-change="pageOrder"
|
||||
class="vi-table"
|
||||
ref="table"
|
||||
row-key="id"
|
||||
style="width: 100%"
|
||||
v-loading="tableLoading"
|
||||
>
|
||||
<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==='isRefund'">
|
||||
<span v-if="row.isRefund" style="color: red">已全额退款</span>
|
||||
<span v-else style="color: #2cd000">支付成功</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop==='tradingAmount'">
|
||||
{{row.tradingAmount*0.01}}
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop==='refundTime'">
|
||||
<span v-if="!row.refundTime"></span>
|
||||
<span
|
||||
v-else>{{moment(row.refundTime).format("YYYY-MM-DD HH:mm:ss")}}</span>
|
||||
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="操作"
|
||||
prop="userOnline" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button :disabled="row.isRefund" @click="doRefund(row)"
|
||||
size="mini" type="danger" :loading="submitLoading">退款
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
paymentProjectList: [],
|
||||
pageForm: {
|
||||
isRefund: 3,
|
||||
year: moment().format("YYYY")
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "loginName", label: "工号", sortable: true },
|
||||
{ prop: "userName", label: "姓名", sortable: true },
|
||||
{ prop: "unitName", label: "单位", sortable: true },
|
||||
{ prop: "unionName", label: "工会", sortable: true },
|
||||
{ prop: "projectName", label: "项目名称", sortable: true },
|
||||
{ prop: "tradingAmount", label: "缴费金额(元)", sortable: true },
|
||||
{ prop: "paymentTime", label: "支付时间", sortable: true },
|
||||
{ prop: "transactionId", label: "交易单号", sortable: true },
|
||||
{ prop: "isRefund", label: "是否退款", sortable: true },
|
||||
{ prop: "refundTime", label: "退款到账时间", sortable: true }
|
||||
|
||||
]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doRefund(row) {
|
||||
this.$confirm("退款将在24小时内到账,退款后将不能撤回!您确定要退款吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
}).then(async () => {
|
||||
this.submitLoading = true
|
||||
const resp = await this.$axios.post("/platform/member/payment/refund/doRefund", {
|
||||
id: row.id
|
||||
})
|
||||
this.submitLoading = false
|
||||
if (resp.code === 0) {
|
||||
this.doSearch()
|
||||
this.$message({
|
||||
type: "success",
|
||||
message: resp.msg
|
||||
})
|
||||
} else {
|
||||
this.$message({
|
||||
type: "error",
|
||||
message: resp.msg
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
async getProjectList() {
|
||||
const resp = await this.$axios.post("/platform/member/payment/project/getAllProject", { year: this.pageForm.year })
|
||||
if (resp.code === 0) {
|
||||
this.paymentProjectList = resp.data
|
||||
this.$set(this.pageForm, "paymentProjectId", this.paymentProjectList ? this.paymentProjectList[0].id : null)
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await this.getProjectList()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,483 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="年度">
|
||||
<el-date-picker
|
||||
:clearable="false"
|
||||
@change="doSearch();getProjectList()"
|
||||
placeholder="选择年度"
|
||||
type="year"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
></el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="缴费项目">
|
||||
<el-select
|
||||
placeholder="请选择项目"
|
||||
v-model="pageForm.paymentProjectId"
|
||||
style="width: 100%"
|
||||
clearable
|
||||
@change="doSearch"
|
||||
@clear="doSearch"
|
||||
filterable
|
||||
>
|
||||
<el-option v-for="item in paymentProjectList" :label="item.projectName" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
|
||||
<search-item label="职工信息">
|
||||
<el-input
|
||||
placeholder="请输入内容"
|
||||
clearable
|
||||
v-model="pageForm.searchKeyword"
|
||||
style="width: 100%"
|
||||
@keyup.enter.native="doSearch"
|
||||
>
|
||||
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型" style="width: 80px">
|
||||
<el-option label="姓名" value="u.username"></el-option>
|
||||
<el-option label="工号" value="u.loginname"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</search-item>
|
||||
|
||||
<template v-if="$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')">
|
||||
<search-item label="所属工会">
|
||||
<el-select
|
||||
placeholder="所属工会"
|
||||
v-model="pageForm.unionId"
|
||||
style="width: 100%"
|
||||
clearable
|
||||
@change="flushUnits"
|
||||
@clear="flushUnits"
|
||||
filterable
|
||||
>
|
||||
<el-option v-for="item in unions" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
|
||||
<search-item label="所属单位">
|
||||
<el-select
|
||||
placeholder="所属单位"
|
||||
v-model="pageForm.unitId"
|
||||
style="width: 100%"
|
||||
clearable
|
||||
filterable
|
||||
>
|
||||
<el-option v-for="item in units" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</search-item>
|
||||
</template>
|
||||
|
||||
<search-item label="人员类型">
|
||||
<dict-select v-model="pageForm.personType" style="width: 100%" clearable
|
||||
placeholder="人员类型" code="PERSON_TYPE"></dict-select>
|
||||
</search-item>
|
||||
|
||||
<search-item label="在职状态">
|
||||
<dict-select v-model="pageForm.userState" style="width: 100%" clearable
|
||||
placeholder="在职状态" code="UserState"></dict-select>
|
||||
</search-item>
|
||||
|
||||
<search-item label="入职时间">
|
||||
<el-date-picker
|
||||
@change="schoolDateChange"
|
||||
end-placeholder="结束日期"
|
||||
format="yyyy-MM-dd"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
style="width: 100%"
|
||||
type="datetimerange"
|
||||
v-model="pageForm.schoolTimeRange"
|
||||
value-format="yyyy-MM-dd">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="退休时间">
|
||||
<el-date-picker
|
||||
@change="retireDateChange"
|
||||
placeholder="请选择退休时间范围"
|
||||
end-placeholder="结束日期"
|
||||
format="yyyy-MM-dd"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
style="width: 100%"
|
||||
type="datetimerange"
|
||||
v-model="pageForm.retireDateRange"
|
||||
value-format="yyyy-MM-dd">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="缴费列表">
|
||||
<el-radio-group @change="doSearch" class="mr10" size="small" v-model="pageForm.isPay">
|
||||
<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>
|
||||
|
||||
<el-button @click="sendPaymentMsgAll" size="small" type="primary">一键催缴</el-button>
|
||||
|
||||
<el-button @click="openModify(false)" size="small" type="primary">批量设为已缴</el-button>
|
||||
|
||||
<el-button @click="doPaidToUnPaid(false)" size="small" type="primary">批量设为未缴</el-button>
|
||||
|
||||
<el-button v-if="$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')" icon="el-icon-s-promotion" type="primary" size="small" :loading="submitLoading" @click="openImport">
|
||||
导入
|
||||
</el-button>
|
||||
<el-button icon="el-icon-document-add" type="primary" size="small" :loading="submitLoading" @click="doExport(false)">
|
||||
导出
|
||||
</el-button>
|
||||
<el-button v-if="$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_ADMIN')" icon="el-icon-document-add" type="primary" size="small" :loading="submitLoading" @click="doExport(true)">
|
||||
按基层工会导出
|
||||
</el-button>
|
||||
</table-tool>
|
||||
|
||||
<el-table
|
||||
:data="tableData"
|
||||
:size="tableSize"
|
||||
@sort-change="pageOrder"
|
||||
class="vi-table"
|
||||
@selection-change="tableHandleSelectionChange"
|
||||
ref="table"
|
||||
row-key="id"
|
||||
style="width: 100%"
|
||||
v-loading="tableLoading"
|
||||
>
|
||||
<el-table-column :reserve-selection="true" 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==='isPayment'">
|
||||
<span style="color: #00aa3a" v-if="row.isPayment">已缴</span>
|
||||
<span style="color: red" v-else>未缴</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop==='paymentMoney'">
|
||||
<span> {{ Number(row.paymentMoney) / 100 }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="操作" prop="userOnline" width="250px">
|
||||
<template scope="{row}">
|
||||
<el-button v-if="row.isPayment" @click="doPaidToUnPaid(row.id,true)" size="mini" type="primary">设为未缴</el-button>
|
||||
<el-button v-if="!row.isPayment" @click="sendPaymentMsg(row)" size="mini" type="primary">催缴</el-button>
|
||||
<el-button v-if="!row.isPayment" @click="openModify(row.id,true)" size="mini" type="primary">设为已缴</el-button>
|
||||
<el-button @click="doDelete(row.id)" size="mini" type="danger">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<file-import
|
||||
ref="viewImport"
|
||||
temp_url="/platform/member/payment/summary/downloadImportTemp"
|
||||
post_url="/platform/member/payment/summary/doImport"
|
||||
:project_id="pageForm.paymentProjectId"
|
||||
@flush="successImport"
|
||||
></file-import>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-diaLog :close-on-click-modal="false" :visible.sync="modifyVisible" title="已缴设置" width="35%">
|
||||
<el-form ref="form" :model="formData" :rules="formRules" label-width="80px">
|
||||
<el-form-item label="缴费金额" prop="paymentMoney">
|
||||
<el-input placeholder="请输入要缴费的金额" type="number" v-model="formData.paymentMoney"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="备注" prop="remark">
|
||||
<el-input placeholder="请输入备注" type="text" v-model="formData.remark"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div style="text-align: right">
|
||||
<span>
|
||||
<el-button @click="modifyVisible = false">取 消</el-button>
|
||||
<el-button @click="doSubmit" type="primary">确 定</el-button>
|
||||
</span>
|
||||
</div>
|
||||
</el-diaLog>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
paymentProjectList: [],
|
||||
units: [],
|
||||
unions: [],
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名" },
|
||||
{ prop: "mobile", label: "联系电话" },
|
||||
{ prop: "schoolTime", label: "入职时间" },
|
||||
{ prop: "retireDate", label: "退休时间" },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "unionname", label: "所属工会", sortable: true },
|
||||
{ prop: "unitname", label: "所属单位", sortable: true },
|
||||
{ prop: "isPayment", label: "是否缴费", sortable: true },
|
||||
{ prop: "paymentMoney", label: "缴费金额", sortable: true }
|
||||
],
|
||||
pageForm: {
|
||||
year: moment().format("YYYY"),
|
||||
searchName: "u.username",
|
||||
isPay: false,
|
||||
searchKeyword: "",
|
||||
unionId: "",
|
||||
unitId: "",
|
||||
threeUnitId: "",
|
||||
unionGroupId: "",
|
||||
personType: "",
|
||||
userState: "",
|
||||
paymentProjectId: "",
|
||||
schoolTimeRange: [],
|
||||
schoolTimeStart: "",
|
||||
schoolTimeEnd: "",
|
||||
retireDateRange: [],
|
||||
retireDateStart: "",
|
||||
retireDateEnd: "",
|
||||
},
|
||||
checkUsers: [],
|
||||
|
||||
modifyVisible: false,
|
||||
formData: {
|
||||
ids: []
|
||||
},
|
||||
formRules: {
|
||||
paymentMoney: [{ required: true, message: "必填", trigger: ["blur", "change"] }]
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
"file-import": httpVueLoader("/components/plugins/sysImport/index.vue"),
|
||||
},
|
||||
methods: {
|
||||
schoolDateChange(val) {
|
||||
if (val) {
|
||||
this.pageForm.schoolTimeStart = val[0]
|
||||
this.pageForm.schoolTimeEnd = val[1]
|
||||
} else {
|
||||
this.pageForm.schoolTimeStart = ""
|
||||
this.pageForm.schoolTimeEnd = ""
|
||||
}
|
||||
},
|
||||
retireDateChange(val) {
|
||||
if (val) {
|
||||
this.pageForm.retireDateStart = val[0]
|
||||
this.pageForm.retireDateEnd = val[1]
|
||||
} else {
|
||||
this.pageForm.retireDateStart = ""
|
||||
this.pageForm.retireDateEnd = ""
|
||||
}
|
||||
},
|
||||
sendPaymentMsgAll() {},
|
||||
async sendPaymentMsg(row) {
|
||||
const confirm = await this.$confirm("您确定对【" + row.username + "】会员进行催缴吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
})
|
||||
if (confirm !== "confirm") return
|
||||
const resp = await this.$axios.post(loc() + "/sendPaymentMsg", { id: row.id })
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.pageData()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
},
|
||||
/**
|
||||
* 单个将未缴费设为已缴费
|
||||
* @param id
|
||||
* @param flag
|
||||
*/
|
||||
openModify(id, flag) {
|
||||
this.formData = {
|
||||
paymentMoney: "",
|
||||
remark: ""
|
||||
}
|
||||
if (flag) {
|
||||
this.checkUsers = []
|
||||
this.checkUsers.push(id)
|
||||
this.formData.ids = JSON.stringify(this.checkUsers)
|
||||
} else {
|
||||
const ids = this.checkUsers.map((obj) => obj.id)
|
||||
this.formData.ids = JSON.stringify(ids)
|
||||
}
|
||||
if (!this.checkUsers.length) {
|
||||
this.notifyWarning("请在左侧勾选需要进行操作的数据!")
|
||||
return
|
||||
}
|
||||
this.modifyVisible = true
|
||||
this.formData.isPay = true
|
||||
},
|
||||
async doPaidToUnPaid(id, flag) {
|
||||
this.formData = {
|
||||
paymentMoney: "",
|
||||
remark: ""
|
||||
}
|
||||
if (flag) {
|
||||
this.checkUsers = []
|
||||
this.checkUsers.push(id)
|
||||
this.formData.ids = JSON.stringify(this.checkUsers)
|
||||
} else {
|
||||
const ids = this.checkUsers.map((obj) => obj.id)
|
||||
this.formData.ids = JSON.stringify(ids)
|
||||
}
|
||||
if (!this.checkUsers.length) {
|
||||
this.notifyWarning("请在左侧勾选需要进行操作的数据!")
|
||||
return
|
||||
}
|
||||
|
||||
const confirm = await this.$confirm("您确定要设为【未缴】吗,此操作不可撤销!", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await this.$axios.post(loc() + "/modify", this.formData)
|
||||
if (resp.code === 0) {
|
||||
this.$refs.table.clearSelection()
|
||||
this.checkUsers = []
|
||||
this.notifySuccess(resp.msg)
|
||||
this.modifyVisible = false
|
||||
this.pageData()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
async doSubmit() {
|
||||
if (!this.checkUsers.length) {
|
||||
this.notifyWarning("请在左侧勾选需要进行操作的数据!")
|
||||
return
|
||||
}
|
||||
const formValid = await this.$refs["form"].validate()
|
||||
if (formValid) {
|
||||
const confirm = await this.$confirm("您确定要更改缴费信息吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await this.$axios.post(loc() + "/modify", this.formData)
|
||||
if (resp.code === 0) {
|
||||
this.$refs.table.clearSelection()
|
||||
this.checkUsers = []
|
||||
this.notifySuccess(resp.msg)
|
||||
this.modifyVisible = false
|
||||
this.pageData()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
async doDelete(id) {
|
||||
const confirm = await this.$confirm("您确定要删除吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await this.$axios.post(loc() + "/doRemoveById", { id: id })
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.pageData()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
openImport() {
|
||||
this.$refs.guava.edit(() => {
|
||||
this.$refs.viewImport.resetImportData()
|
||||
})
|
||||
},
|
||||
successImport() {
|
||||
this.$refs.guava.index()
|
||||
this.pageData()
|
||||
},
|
||||
doExport(isZip) {
|
||||
const {year, paymentProjectId, searchName, searchKeyword, unionId, unitId, personType,
|
||||
userState, isPay, schoolTimeStart, schoolTimeEnd, retireDateStart, retireDateEnd} = this.pageForm
|
||||
this.$downLoad(loc() + '/doExport', {
|
||||
searchName: searchName,
|
||||
searchKeyword: searchKeyword,
|
||||
unionId: unionId,
|
||||
unitId: unitId,
|
||||
isPay: isPay,
|
||||
year: year,
|
||||
isZip: isZip,
|
||||
paymentProjectId: paymentProjectId,
|
||||
personType: personType,
|
||||
userState: userState,
|
||||
schoolTimeStart: schoolTimeStart,
|
||||
schoolTimeEnd: schoolTimeEnd,
|
||||
retireDateStart: retireDateStart,
|
||||
retireDateEnd: retireDateEnd
|
||||
})
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.units = await this.$businessTool.listUnit(this.pageForm.unionId)
|
||||
}
|
||||
},
|
||||
tableHandleSelectionChange(val) {
|
||||
this.checkUsers = val
|
||||
},
|
||||
async getProjectList() {
|
||||
const resp = await this.$axios.post("/platform/member/payment/project/getAllProject", { year: this.pageForm.year })
|
||||
if (resp.code === 0) {
|
||||
this.paymentProjectList = resp.data
|
||||
this.$set(this.pageForm, "paymentProjectId", this.paymentProjectList ? this.paymentProjectList[0].id : null)
|
||||
}
|
||||
},
|
||||
async doSearch() {
|
||||
this.pageData()
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
if (this.$auth.hasRoleOr("SYSADMIN, SCHOOL_UNION_ADMIN")) {
|
||||
this.unions = await this.$businessTool.listUnion()
|
||||
} else {
|
||||
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
|
||||
this.$set(this.pageForm, "unionId", this.unions ? this.unions[0].id : null)
|
||||
this.flushUnits()
|
||||
}
|
||||
await this.getProjectList()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,337 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
|
||||
<search @search="search">
|
||||
<search-item label="年度">
|
||||
<el-date-picker
|
||||
:clearable="false"
|
||||
clearable
|
||||
@change="doSearch"
|
||||
placeholder="选择年度"
|
||||
type="year" style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</search-item>
|
||||
|
||||
<search-item label="缴费项目">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.projectName">
|
||||
</el-input>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool label="个人缴费列表">
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize"
|
||||
@sort-change="pageOrder"
|
||||
class="vi-table"
|
||||
ref="table" row-key="id" style="width: 100%"
|
||||
v-loading="tableLoading">
|
||||
<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==='isPayment'">
|
||||
<span style="color: #00aa3a" v-if="row.isPayment">已缴</span>
|
||||
<span style="color: red" v-else>未缴</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="是否确认金额">
|
||||
<template scope="{row}">
|
||||
<span style="color: #00aa3a" v-if="row.paymentMoney!=null">已确定</span>
|
||||
<span style="color: red" v-else>未确定</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="userOnline" align="center" header-align="center"
|
||||
label="操作"
|
||||
width="100px">
|
||||
<template scope="scope">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button :loading="submitLoading" plain 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:scope.row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item v-if="!scope.row.isPayment" :command="{type:'edit',data:scope.row}">
|
||||
设为已缴
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item v-if="scope.row.paymentMoney==null" :command="{type:'pay',data:scope.row}">
|
||||
确定缴费金额
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #pay>
|
||||
<el-form :model="formData" :rules="formRules" label-width="100px" ref="form">
|
||||
<div class="process-title">缴费信息</div>
|
||||
<el-form-item label="缴费项目" prop="projectName">
|
||||
<span>{{formData.projectName}}</span>
|
||||
</el-form-item>
|
||||
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="人员类型" size="medium">
|
||||
<span>{{formData.personType}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="会员类型" size="medium">
|
||||
<span>{{formData.payPersonnel}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="需缴费用" size="medium">
|
||||
<div v-for="item in payStandard" style="display:flex;justify-content: space-between;margin-left: 30px">
|
||||
<template v-if="item.payModeValueList.length>0" >
|
||||
(
|
||||
<template v-for="(o,i) in item.payModeValueList">
|
||||
<el-input @change="getMoney(item)" placeholder="" style="width: 200px;" v-model="o.value">
|
||||
<template slot="prepend">{{o.name}}</template>
|
||||
</el-input>
|
||||
<span v-if="(i+1)!=item.payModeValueList.length">+</span>
|
||||
</template>
|
||||
) * 0.5% *{{formData.paymentMonth}}个月
|
||||
</template>
|
||||
<template v-else>
|
||||
<span>{{item.payModeValue}}</span>*{{formData.paymentMonth}}个月
|
||||
</template>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="缴费金额" prop="paymentMoney" size="medium">
|
||||
<el-input disabled="true" placeholder="" style="width: 200px;" v-model="formData.paymentMoney">
|
||||
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
<div>
|
||||
<el-button @click="doSave" v-loading="submitLoading" style="float: right"
|
||||
type="primary">
|
||||
提交
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
<template #view>
|
||||
<el-form :model="formData" label-width="100px" ref="form">
|
||||
<div class="process-title">缴费信息</div>
|
||||
<el-form-item label="缴费项目" prop="projectName">
|
||||
<span>{{formData.projectName}}</span>
|
||||
</el-form-item>
|
||||
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="人员类型" size="medium">
|
||||
<span>{{formData.personType}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="会员类型" size="medium">
|
||||
<span>{{formData.payPersonnel}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="缴纳标准" size="medium">
|
||||
<div v-for="item in payStandard" style="display:flex;justify-content: space-between;margin-left: 30px">
|
||||
<span v-if="item.payModeValueList.length>0" >
|
||||
(
|
||||
<span v-for="(o,i) in item.payModeValueList">
|
||||
<span>{{o.name}}</span>
|
||||
<span v-if="(i+1)!=item.payModeValueList.length">+</span>
|
||||
</span>
|
||||
) * 0.5% *{{formData.paymentMonth}}个月
|
||||
</span>
|
||||
<template v-else>
|
||||
<span>{{item.payModeValue}}</span>*{{formData.paymentMonth}}个月
|
||||
</template>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="缴费金额" size="medium">
|
||||
<span>{{formData.paymentMoney}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="缴费月份" size="medium">
|
||||
<span>{{formData.paymentStartMonth}} - {{formData.paymentEndMonth}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="缴费开始时间" size="medium">
|
||||
<span>{{formData.startTime}} - {{formData.endTime}}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
</el-form>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
year: moment().format('YYYY'),
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'year', label: '年度'},
|
||||
{prop: 'projectName', label: '缴费项目名称'},
|
||||
{prop: 'paymentStartMonth', label: '缴费开始月份'},
|
||||
{prop: 'paymentEndMonth', label: '缴费截止月份'},
|
||||
{prop: 'paymentMonth', label: '需要缴费月数'},
|
||||
{prop: 'startTime', label: '缴费开始时间'},
|
||||
{prop: 'endTime', label: '缴费截止时间'},
|
||||
{prop: 'paymentMoney', label: '缴费金额'},
|
||||
{prop: "isPayment", label: "是否缴费", sortable: true},
|
||||
],
|
||||
payStandard:{},
|
||||
formRules: {
|
||||
paymentMoney: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'edit') {
|
||||
this.doPay(data)
|
||||
} else if (type === 'pay'){
|
||||
this.openPay(data)
|
||||
} else if (type === 'view'){
|
||||
this.openView(data)
|
||||
}
|
||||
},
|
||||
openPay(data){
|
||||
const payStandards=JSON.parse(data.payStandards)
|
||||
|
||||
this.payStandard=payStandards.filter(item => item.personType===data.personType&&item.payPersonnel===data.payPersonnel)
|
||||
if (this.payStandard.length>0&&this.payStandard[0].payModeValueList===null){
|
||||
this.formData.paymentMoney=+this.payStandard[0].payModeValue*+this.formData.paymentMonth
|
||||
}
|
||||
this.formData=data
|
||||
this.$refs.guava.pay()
|
||||
},
|
||||
async doPay(data) {
|
||||
const confirm = await this.$confirm("您确定要更改缴费信息吗?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning"
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const formData={
|
||||
ids:JSON.stringify([data.id]),
|
||||
paymentMoney:data.paymentMoney,
|
||||
isPay:data.isPay,
|
||||
remark:"缴费"
|
||||
}
|
||||
const resp = await this.$axios.post("/platform/member/payment/summary/modify", formData)
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.pageData()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
openView(data) {
|
||||
const payStandards=JSON.parse(data.payStandards)
|
||||
|
||||
this.payStandard=payStandards.filter(item => item.personType===data.personType&&item.payPersonnel===data.payPersonnel)
|
||||
if (this.payStandard.length>0&&this.payStandard[0].payModeValueList===null){
|
||||
this.formData.paymentMoney=+this.payStandard[0].payModeValue*+this.formData.paymentMonth
|
||||
}
|
||||
this.formData=data
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
async doSave() {
|
||||
const formValid = await this.$refs["form"].validate()
|
||||
if (formValid) {
|
||||
this.submitLoading = true
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '数据保存中请稍后',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
const formData = clone(this.formData)
|
||||
const resp = await this.$axios.post(loc() + '/doSave', formData)
|
||||
loading.close()
|
||||
this.submitLoading = false
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.$refs.guava.index()
|
||||
this.pageData()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
getMoney(item){
|
||||
this.formData.paymentMoney=0
|
||||
let money=0
|
||||
item.payModeValueList.forEach(o=>{
|
||||
money=+o.value+money
|
||||
})
|
||||
this.formData.paymentMoney=money*0.005*+this.formData.paymentMonth
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+153
-82
@@ -1,86 +1,155 @@
|
||||
const ADD_OR_MODIFY_SPECIAL_STAFF = {
|
||||
template: `
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<el-form ref="form" :model="formData" :rules="formRules" label-width="160px">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工号" prop="userId">
|
||||
<el-select v-model="formData.userId"
|
||||
:remote-method="queryUser"
|
||||
filterable
|
||||
remote
|
||||
:disabled="isView"
|
||||
reserve-keyword
|
||||
placeholder="请输入工号或者姓名查找"
|
||||
style="width: 100%"
|
||||
@change="getUserInfo">
|
||||
<el-option v-for="item in users"
|
||||
:key="item.id"
|
||||
:label="item.username+'('+item.loginname+')' + '--' + item.unionName + '('+item.unitName + ')'"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
<!-- <el-input v-model="formData.userName" :disabled="formData.userId!=null" placeholder="工号"></el-input>-->
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="姓名" prop="username">
|
||||
<el-input v-model="formData.username" placeholder="请输入工号查询,查询后自动读取" readonly :disabled="isView"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span=12>
|
||||
<el-form-item label="所属单位(人事关系)" prop="personnelRelationUnitName">
|
||||
<el-input :value="formData.personnelRelationUnitName" placeholder="请输入工号或姓名查询,查询后自动读取" readonly :disabled="isView"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span=12>
|
||||
<el-form-item label="所属工会(人事关系)" prop="personnelRelationUnionName">
|
||||
<el-input :value="formData.personnelRelationUnionName" placeholder="请输入工号或姓名查询,查询后自动读取" readonly :disabled="isView"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span=12>
|
||||
<el-form-item label="特别人员类型" prop="specialStaffType">
|
||||
<dict-select v-model="formData.specialStaffType" placeholder="特别人员所属类型" @change="changeType"
|
||||
:disabled="isView" code="SPECIAL_STAFF_TYPE"></dict-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span=12>
|
||||
<el-form-item label="备注" prop="specialStaffRemark">
|
||||
<el-input v-model="formData.specialStaffRemark" placeholder="请输入多单位人员备注" maxlength="200" show-word-limit :disabled="isView"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<template v-if="formData.isManyUnit">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span=12>
|
||||
<el-form-item label="所属单位(工会关系)" prop="unionRelationUnitId">
|
||||
<el-select
|
||||
v-model="formData.unionRelationUnitId"
|
||||
filterable
|
||||
clearable
|
||||
:disabled="isView"
|
||||
placeholder="请选择工会关系单位"
|
||||
style="width: 100%"
|
||||
@change="unionRelationUnitChange">
|
||||
<el-option v-for="unit in units" :key="unit.id"
|
||||
:label="unit.name" :value="unit.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span=12>
|
||||
<el-form-item label="所属工会(工会关系)" prop="unionRelationUnionName">
|
||||
<el-input :value="formData.unionRelationUnionName" placeholder="请选择工会关系单位查询,查询后自动读取" readonly :disabled="isView"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
</el-form>
|
||||
<el-row v-if="!isView" :gutter="10" type="flex" justify="center">
|
||||
<el-button type="primary" class="submit-btn" @click="doSubmit">提交</el-button>
|
||||
</el-row>
|
||||
<el-dialog :title="specialStaffTitle" :visible.sync="specialStaffDialog"
|
||||
:close-on-click-modal="false" width="50%">
|
||||
<el-form ref="form" :model="formData" :rules="formRules" label-width="145px">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工号" prop="userId">
|
||||
<el-select v-model="formData.userId"
|
||||
:remote-method="queryUser"
|
||||
filterable
|
||||
remote
|
||||
:disabled="isView"
|
||||
reserve-keyword
|
||||
placeholder="请输入工号或者姓名查找"
|
||||
style="width: 100%"
|
||||
@change="getUserInfo">
|
||||
<el-option v-for="item in users"
|
||||
:key="item.id"
|
||||
:label="item.username+'('+item.loginname+')' + '--' + (item.unionName || '无工会') + '('+item.unitName + ')'"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
<!-- <el-input v-model="formData.userName" :disabled="formData.userId!=null" placeholder="工号"></el-input>-->
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="姓名" prop="username">
|
||||
<el-input v-model="formData.username" placeholder="请输入工号查询,查询后自动读取" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属单位(人事关系)" prop="personnelRelationUnitName">
|
||||
<el-input v-model="formData.personnelRelationUnitName" placeholder="请输入工号或姓名查询,查询后自动读取" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属工会(人事关系)" prop="personnelRelationUnionName">
|
||||
<el-input v-model="formData.personnelRelationUnionName" placeholder="请输入工号或姓名查询,查询后自动读取" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<template v-if="isThreeUnit">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属科室(人事关系)" prop="personnelRelationThreeUnitName">
|
||||
<el-input v-model="formData.personnelRelationThreeUnitName" placeholder="请输入工号或姓名查询,查询后自动读取" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工会小组(人事关系)" prop="personnelRelationUnionGroupName">
|
||||
<el-input v-model="formData.personnelRelationUnionGroupName" placeholder="请输入工号或姓名查询,查询后自动读取" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="特殊人员类型" prop="specialStaffType">
|
||||
<dict-select v-model="formData.specialStaffType" placeholder="特别人员所属类型" @change="changeType"
|
||||
style="width: 100%" :disabled="isView" code="SPECIAL_STAFF_TYPE"></dict-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<template v-if="formData.isManyUnit">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span=12>
|
||||
<el-form-item label="所属单位(工会关系)" prop="unionRelationUnitId">
|
||||
<el-select
|
||||
v-model="formData.unionRelationUnitId"
|
||||
filterable
|
||||
clearable
|
||||
:disabled="isView"
|
||||
placeholder="请选择工会关系单位"
|
||||
style="width: 100%"
|
||||
@change="unionRelationUnitChange">
|
||||
<el-option v-for="unit in units" :key="unit.id"
|
||||
:label="unit.name" :value="unit.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span=12>
|
||||
<el-form-item label="所属工会(工会关系)" prop="unionRelationUnionName">
|
||||
<el-input v-model="formData.unionRelationUnionName" placeholder="请选择工会关系单位查询,查询后自动读取" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<template v-if="isThreeUnit">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span=12>
|
||||
<el-form-item label="所属科室(工会关系)" prop="unionRelationThreeUnitId">
|
||||
<el-select
|
||||
v-model="formData.unionRelationThreeUnitId"
|
||||
filterable
|
||||
clearable
|
||||
:disabled="isView"
|
||||
placeholder="请选择工会关系所属科室"
|
||||
style="width: 100%"
|
||||
@change="unionRelationThreeUnitChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="unit in threeUnits"
|
||||
:key="unit.id"
|
||||
:label="unit.name"
|
||||
:value="unit.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span=12>
|
||||
<el-form-item label="工会小组(工会关系)" prop="unionRelationUnionGroupName">
|
||||
<el-input :value="formData.unionRelationUnionGroupName" placeholder="请选择工会关系所属科室,查询后自动读取" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
</template>
|
||||
|
||||
<!-- 杭州医学院多单位人员 -->
|
||||
<template v-if="formData.specialStaffType == 'HMC_RELATION'">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="所属工会(工会关系)" prop="unionRelationUnionId">
|
||||
<el-select v-model="formData.unionRelationUnionId" filterable
|
||||
:disabled="isView" @change="unionRelationUnionChange"
|
||||
clearable placeholder="请选择工会关系所属工会" style="width: 100%">
|
||||
<el-option v-for="item in unionRelationUnionOptions" :key="item.id"
|
||||
:label="item.unionname" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<el-row :gutter="10">
|
||||
<el-col :span=24>
|
||||
<el-form-item label="备注" prop="specialStaffRemark">
|
||||
<el-input type="textarea" :rows="3" placeholder="请输入人员备注"
|
||||
v-model="formData.specialStaffRemark" maxlength="200" show-word-limit></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<el-row v-if="!isView" :gutter="10" style="text-align: right">
|
||||
<el-button class="submit-btn" @click="specialStaffDialog = false">关闭</el-button>
|
||||
<el-button class="submit-btn" @click="doSubmit" type="primary">提交</el-button>
|
||||
</el-row>
|
||||
</el-dialog>
|
||||
</div>
|
||||
`,
|
||||
store,
|
||||
@@ -89,13 +158,15 @@ const ADD_OR_MODIFY_SPECIAL_STAFF = {
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
isThreeUnit: false,
|
||||
formData: {},
|
||||
units: [],
|
||||
specialStaffTypeList: [],
|
||||
users: [],
|
||||
formRules: {
|
||||
userId: [{ required: true, message: "请输入工号", trigger: "change" }],
|
||||
specialStaffType: [{ required: true, message: "请选择多单位人员类型", trigger: "change" }],
|
||||
specialStaffType: [{ required: true, message: "请选择人员类型", trigger: "change" }],
|
||||
unionRelationUnionId: [{ required: true, message: "请选择工会关系所属工会", trigger: "change" }],
|
||||
specialStaffRemark: [{ required: true, message: "请填写多单位人员备注", trigger: "change" }]
|
||||
}
|
||||
}
|
||||
|
||||
+359
-93
@@ -52,9 +52,17 @@ layout("/layouts/platform.html"){
|
||||
:sortable="column.sortable"
|
||||
header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template v-if="column.prop==='specialStaffType'" scope="{row:{specialStaffType}}">
|
||||
<dict-tag :options="dict.type.SPECIAL_STAFF_TYPE" :value="specialStaffType"></dict-tag>
|
||||
</template>
|
||||
<template scope="{row}" v-if="column.prop==='personnelRelationUnionName'">
|
||||
<el-tag effect="plain">
|
||||
{{row.personnelRelationUnionName || '无工会'}}
|
||||
</el-tag>
|
||||
</template>
|
||||
|
||||
<template scope="{row}" v-else-if="column.prop==='unionRelationUnionName'">
|
||||
<el-tag>
|
||||
{{row.unionRelationUnionName || '无工会'}}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作">
|
||||
@@ -82,104 +90,362 @@ layout("/layouts/platform.html"){
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
<template #edit>
|
||||
<add-or-modify-special-staff :is-view="isView" ref="addOrModifySpecialStaffRef" @finish="$refs.guava.index();doSearch()"></add-or-modify-special-staff>
|
||||
</template>
|
||||
|
||||
|
||||
<el-dialog :title="specialStaffTitle" :visible.sync="specialStaffDialog"
|
||||
:close-on-click-modal="false" width="50%">
|
||||
<el-form ref="form" :model="formData" :rules="formRules" label-width="145px">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工号" prop="userId">
|
||||
<el-select v-model="formData.userId"
|
||||
:remote-method="queryUser"
|
||||
filterable
|
||||
remote
|
||||
:disabled="isView"
|
||||
reserve-keyword
|
||||
placeholder="请输入工号或者姓名查找"
|
||||
style="width: 100%"
|
||||
@change="getUserInfo">
|
||||
<el-option v-for="item in users"
|
||||
:key="item.id"
|
||||
:label="item.username+'('+item.loginname+')' + '--' + (item.unionName || '无工会') + '('+item.unitName + ')'"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
<!-- <el-input v-model="formData.userName" :disabled="formData.userId!=null" placeholder="工号"></el-input>-->
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="姓名" prop="username">
|
||||
<el-input v-model="formData.username" placeholder="请输入工号查询,查询后自动读取" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属单位(人事关系)" prop="personnelRelationUnitName">
|
||||
<el-input v-model="formData.personnelRelationUnitName" placeholder="请输入工号或姓名查询,查询后自动读取" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属工会(人事关系)" prop="personnelRelationUnionName">
|
||||
<el-input v-model="formData.personnelRelationUnionName" placeholder="请输入工号或姓名查询,查询后自动读取" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<template v-if="isThreeUnit">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属科室(人事关系)" prop="personnelRelationThreeUnitName">
|
||||
<el-input v-model="formData.personnelRelationThreeUnitName" placeholder="请输入工号或姓名查询,查询后自动读取" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工会小组(人事关系)" prop="personnelRelationUnionGroupName">
|
||||
<el-input v-model="formData.personnelRelationUnionGroupName" placeholder="请输入工号或姓名查询,查询后自动读取" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="特殊人员类型" prop="specialStaffType">
|
||||
<dict-select v-model="formData.specialStaffType" placeholder="特别人员所属类型" @change="changeType"
|
||||
style="width: 100%" :disabled="isView" code="SPECIAL_STAFF_TYPE"></dict-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<template v-if="formData.isManyUnit">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span=12>
|
||||
<el-form-item label="所属单位(工会关系)" prop="unionRelationUnitId">
|
||||
<el-select
|
||||
v-model="formData.unionRelationUnitId"
|
||||
filterable
|
||||
clearable
|
||||
:disabled="isView"
|
||||
placeholder="请选择工会关系单位"
|
||||
style="width: 100%"
|
||||
@change="unionRelationUnitChange">
|
||||
<el-option v-for="unit in units" :key="unit.id"
|
||||
:label="unit.name" :value="unit.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span=12>
|
||||
<el-form-item label="所属工会(工会关系)" prop="unionRelationUnionName">
|
||||
<el-input v-model="formData.unionRelationUnionName" placeholder="请选择工会关系单位查询,查询后自动读取" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<template v-if="isThreeUnit">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span=12>
|
||||
<el-form-item label="所属科室(工会关系)" prop="unionRelationThreeUnitId">
|
||||
<el-select
|
||||
v-model="formData.unionRelationThreeUnitId"
|
||||
filterable
|
||||
clearable
|
||||
:disabled="isView"
|
||||
placeholder="请选择工会关系所属科室"
|
||||
style="width: 100%"
|
||||
@change="unionRelationThreeUnitChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="unit in threeUnits"
|
||||
:key="unit.id"
|
||||
:label="unit.name"
|
||||
:value="unit.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span=12>
|
||||
<el-form-item label="工会小组(工会关系)" prop="unionRelationUnionGroupName">
|
||||
<el-input :value="formData.unionRelationUnionGroupName" placeholder="请选择工会关系所属科室,查询后自动读取" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
</template>
|
||||
|
||||
<!-- 杭州医学院多单位人员 -->
|
||||
<template v-if="formData.specialStaffType == 'HMC_RELATION'">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="所属工会(工会关系)" prop="unionRelationUnionId">
|
||||
<el-select v-model="formData.unionRelationUnionId" filterable
|
||||
:disabled="isView" @change="unionRelationUnionChange"
|
||||
clearable placeholder="请选择工会关系所属工会" style="width: 100%">
|
||||
<el-option v-for="item in unionRelationUnionOptions" :key="item.id"
|
||||
:label="item.unionname" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<el-row :gutter="10">
|
||||
<el-col :span=24>
|
||||
<el-form-item label="备注" prop="specialStaffRemark">
|
||||
<el-input type="textarea" :rows="3" placeholder="请输入人员备注"
|
||||
v-model="formData.specialStaffRemark" maxlength="200" show-word-limit></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<el-row v-if="!isView" :gutter="10" style="text-align: right">
|
||||
<el-button class="submit-btn" @click="specialStaffDialog = false">关闭</el-button>
|
||||
<el-button class="submit-btn" @click="doSubmit" type="primary">提交</el-button>
|
||||
</el-row>
|
||||
</el-dialog>
|
||||
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("addOrModifySpecialStaff.js"){}#-->
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
dicts: ['SPECIAL_STAFF_TYPE'],
|
||||
mixins: [initTableMixins],
|
||||
data: {
|
||||
isView: true,
|
||||
tableColumns: [
|
||||
{ prop: 'loginname', label: '工号' },
|
||||
{ prop: 'username', label: '姓名' },
|
||||
{ prop: 'sex', label: '性别' },
|
||||
{ prop: 'mobile', label: '联系电话' },
|
||||
{ prop: 'personType', label: '人员类型', sortable: true },
|
||||
{ prop: 'userState', label: '在职状态', sortable: true },
|
||||
{ prop: 'personnelRelationUnionName', label: '所属工会', sortable: true },
|
||||
{ prop: 'personnelRelationUnitName', label: '所属单位', sortable: true },
|
||||
{ prop: 'specialStaffType', label: '特别人员类型', sortable: true },
|
||||
// { prop: 'specialStaffRemark', label: '多单位人员备注', sortable: true, checked: 0 }
|
||||
],
|
||||
unions: [],
|
||||
units: []
|
||||
},
|
||||
components: {
|
||||
'add-or-modify-special-staff': ADD_OR_MODIFY_SPECIAL_STAFF
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const { type, data } = command
|
||||
if (type === 'view') {
|
||||
this.openView(data.userId)
|
||||
} else if (type === 'edit') {
|
||||
this.openEdit(data.userId)
|
||||
} else if (type === 'delete') {
|
||||
this.doDelete(data)
|
||||
}
|
||||
},
|
||||
doDelete(obj) {
|
||||
this.$confirm('确定要删除吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.$axios.post('/platform/staff/special/manage/removeSpecialStaff', {userId:obj.userId}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.pageData()
|
||||
this.$message.success(res.msg)
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
openEdit(userId) {
|
||||
this.isView = false
|
||||
this.$refs.guava.edit(() => {
|
||||
this.$refs.addOrModifySpecialStaffRef.getUserInfo(userId)
|
||||
})
|
||||
},
|
||||
openView(userId) {
|
||||
this.isView = true
|
||||
this.$refs.guava.edit(() => {
|
||||
this.$refs.addOrModifySpecialStaffRef.getUserInfo(userId)
|
||||
})
|
||||
},
|
||||
personnelAdd() {
|
||||
this.isView = false
|
||||
this.$refs.guava.edit(() => {
|
||||
this.$refs.addOrModifySpecialStaffRef.getUserInfo()
|
||||
})
|
||||
},
|
||||
flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
},
|
||||
async initData() {
|
||||
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
|
||||
this.unions = await this.$businessTool.listUnion(this.pageForm.unionId)
|
||||
this.units = await this.$businessTool.listUnit()
|
||||
} else {
|
||||
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
|
||||
this.units = await this.$businessTool.listUnit(this.$store.state.user.union.id)
|
||||
}
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.initData()
|
||||
this.pageData()
|
||||
},
|
||||
data() {
|
||||
return{
|
||||
isView: true,
|
||||
isThreeUnit: false,
|
||||
tableColumns: [
|
||||
{ prop: 'loginname', label: '工号' },
|
||||
{ prop: 'username', label: '姓名' },
|
||||
{ prop: 'sex', label: '性别' },
|
||||
{ prop: 'mobile', label: '联系电话' },
|
||||
{ prop: 'personType', label: '人员类型', sortable: true },
|
||||
{ prop: 'userState', label: '在职状态', sortable: true },
|
||||
{ prop: 'distSpecialStaffType', label: '特别人员类型', sortable: true },
|
||||
{ prop: 'personnelRelationUnionName', label: '人事关系工会', sortable: true, width: 180 },
|
||||
{ prop: 'personnelRelationUnitName', label: '人事关系单位', sortable: true },
|
||||
{ prop: 'unionRelationUnionName', label: '工会关系工会', sortable: true, width: 180 },
|
||||
// { prop: 'specialStaffRemark', label: '多单位人员备注', sortable: true, checked: 0 }
|
||||
],
|
||||
unions: [],
|
||||
units: [],
|
||||
threeUnits: [],
|
||||
formData: {
|
||||
personnelRelationThreeUnitName: '',
|
||||
personnelRelationUnionGroupName: '',
|
||||
},
|
||||
specialStaffTypeList: [],
|
||||
users: [],
|
||||
formRules: {
|
||||
userId: [{ required: true, message: "请输入工号", trigger: "change" }],
|
||||
specialStaffType: [{ required: true, message: "请选择人员类型", trigger: "change" }],
|
||||
unionRelationUnionId: [{ required: true, message: "请选择工会关系所属工会", trigger: "change" }],
|
||||
specialStaffRemark: [{ required: true, message: "请填写多单位人员备注", trigger: "change" }]
|
||||
},
|
||||
|
||||
specialStaffDialog: false,
|
||||
specialStaffTitle: '',
|
||||
// HMC工会关系工会
|
||||
unionRelationUnionOptions: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
unionRelationUnionChange(val){
|
||||
const unionInfo = this.unionRelationUnionOptions.find(v=> v.id === val)
|
||||
this.formData.unionRelationUnionName = unionInfo.unionname
|
||||
},
|
||||
dropdownCommand(command) {
|
||||
const { type, data } = command
|
||||
if (type === 'view') {
|
||||
this.openView(data.userId)
|
||||
} else if (type === 'edit') {
|
||||
this.openEdit(data.userId)
|
||||
} else if (type === 'delete') {
|
||||
this.doDelete(data)
|
||||
}
|
||||
},
|
||||
doDelete(obj) {
|
||||
this.$confirm('确定要删除吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
this.$axios.post('/platform/staff/special/manage/removeSpecialStaff', {userId:obj.userId}).then(res => {
|
||||
if (res.code === 0) {
|
||||
this.pageData()
|
||||
this.$message.success(res.msg)
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
openEdit(userId) {
|
||||
this.isView = false
|
||||
this.formData = {}
|
||||
this.getUserInfo(userId)
|
||||
// this.$refs.guava.edit()
|
||||
this.specialStaffDialog = true
|
||||
this.specialStaffTitle = "修改人员"
|
||||
},
|
||||
openView(userId) {
|
||||
this.isView = true
|
||||
this.formData = {}
|
||||
this.getUserInfo(userId)
|
||||
// this.$refs.guava.edit()
|
||||
this.specialStaffDialog = true
|
||||
this.specialStaffTitle = "查看人员信息"
|
||||
},
|
||||
personnelAdd() {
|
||||
this.isView = false
|
||||
this.formData = {}
|
||||
// this.$refs.guava.edit()
|
||||
this.specialStaffDialog = true
|
||||
this.specialStaffTitle = "新增人员"
|
||||
},
|
||||
getUserInfo(id) {
|
||||
if (!id && !this.formData.userId) {
|
||||
return
|
||||
}
|
||||
const url = !this.formData.userId
|
||||
? "/platform/staff/special/manage/getSpecialStaffUserInfo"
|
||||
: "/platform/staff/special/manage/getUserInfo"
|
||||
const param = id ? id : this.formData.userId
|
||||
this.$axios.post(url, { userId: param }).then((resp) => {
|
||||
if (resp.code === 0) {
|
||||
this.formData = resp.data
|
||||
if (resp.data && resp.data.unionRelationThreeUnitId) {
|
||||
this.getThreeUnits(resp.data.unionRelationUnitId)
|
||||
}
|
||||
this.queryUser(this.formData.loginname, false)
|
||||
}
|
||||
})
|
||||
},
|
||||
changeType() {
|
||||
const data = this.specialStaffTypeList.find((v) => v.code === this.formData.specialStaffType)
|
||||
if (data && data.code === "MANY_UNIT") {
|
||||
this.formData.isManyUnit = true
|
||||
}
|
||||
},
|
||||
unionRelationUnitChange(v) {
|
||||
this.$set(this.formData, 'unionRelationThreeUnitId', null)
|
||||
this.$set(this.formData, 'unionRelationUnionGroupName', null)
|
||||
this.threeUnits = []
|
||||
if (v) {
|
||||
this.getThreeUnits(v)
|
||||
}
|
||||
const unit = this.units.find((item) => item.id === v)
|
||||
if (unit) {
|
||||
this.$set(this.formData, "unionRelationUnitId", unit.id)
|
||||
this.$set(this.formData, "unionRelationUnitName", unit.name)
|
||||
this.$set(this.formData, "unionRelationUnionId", unit.unionid)
|
||||
this.$set(this.formData, "unionRelationUnionName", unit.unionname)
|
||||
} else {
|
||||
this.$set(this.formData, "unionRelationUnionId", null)
|
||||
this.$set(this.formData, "unionRelationUnionName", null)
|
||||
}
|
||||
},
|
||||
unionRelationThreeUnitChange(val) {
|
||||
if (val) {
|
||||
const threeUnit = this.threeUnits.find(v => v.id === val)
|
||||
const groupName = threeUnit.groupname ? threeUnit.groupname : null
|
||||
this.$set(this.formData, 'unionRelationThreeUnitId', threeUnit.id)
|
||||
this.$set(this.formData, 'unionRelationThreeUnitName', threeUnit.name)
|
||||
this.$set(this.formData, 'unionRelationUnionGroupId', threeUnit.uniongroupid)
|
||||
this.$set(this.formData, 'unionRelationUnionGroupName', groupName)
|
||||
} else {
|
||||
this.$set(this.formData, 'unionRelationUnionGroupName', null)
|
||||
}
|
||||
},
|
||||
async getThreeUnits(val) {
|
||||
this.threeUnits = await threeUnitsByUnionGroupOrUnitId(val)
|
||||
},
|
||||
queryUser(keyWord, flag = true) {
|
||||
if (!keyWord) {
|
||||
return
|
||||
}
|
||||
this.$axios.post("/platform/staff/special/manage/queryUser", { keyWord, flag }).then((res) => {
|
||||
this.users = res.data
|
||||
})
|
||||
},
|
||||
doSubmit() {
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
this.$axios.post("/platform/staff/special/manage/addSpecialStaff", {
|
||||
data: JSON.stringify(this.formData)
|
||||
})
|
||||
.then((resp) => {
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.formData = {}
|
||||
this.specialStaffDialog = false
|
||||
this.pageData()
|
||||
// this.$refs.guava.index()
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.unions = await getUnions()
|
||||
}
|
||||
},
|
||||
async initData() {
|
||||
this.$businessTool.getDictOptions("SPECIAL_STAFF_TYPE").then((data) => {
|
||||
this.specialStaffTypeList = data
|
||||
})
|
||||
this.unionRelationUnionOptions = await this.$businessTool.listUnion()
|
||||
this.$businessTool.listUnit().then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
// this.isThreeUnit = await getConfigKey('isThreeUnit') === 'true'
|
||||
this.initData()
|
||||
this.pageData()
|
||||
},
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
|
||||
@@ -0,0 +1,416 @@
|
||||
<!--#
|
||||
layout("/layouts/platform_h5.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
|
||||
.parent-card {
|
||||
margin: 14px;
|
||||
padding: 12px 12px;
|
||||
background-color: #fff;
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 8px 12px #ebedf0;
|
||||
line-height: 22px;
|
||||
font-size: 13px;
|
||||
position: relative;
|
||||
}
|
||||
.content-card {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.left-child-card {
|
||||
display: table;
|
||||
margin-right: 8px;
|
||||
}
|
||||
.left-child-card img {
|
||||
display: table-cell;
|
||||
width: 40px;
|
||||
}
|
||||
.footer-card {
|
||||
text-align: right;
|
||||
}
|
||||
.footer-card .van-button {
|
||||
border-radius: 6px;
|
||||
height: 28px;
|
||||
}
|
||||
.pay-content {
|
||||
|
||||
}
|
||||
.pay-content .van-cell {
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.pay-content .van-cell__title {
|
||||
color: #646566;
|
||||
}
|
||||
.pay_img {
|
||||
display: table;
|
||||
}
|
||||
.pay_img img {
|
||||
display: table-cell;
|
||||
}
|
||||
.costFormula {
|
||||
|
||||
}
|
||||
.costFormula .van-cell__title {
|
||||
max-width: 100px;
|
||||
}
|
||||
.van-action-sheet__content {
|
||||
padding-bottom: 50px;
|
||||
}
|
||||
.van-dropdown-menu__bar {
|
||||
box-shadow: none;
|
||||
}
|
||||
.van-empty {
|
||||
position: relative;
|
||||
transform: none;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<van-sticky>
|
||||
<van-nav-bar @click-left="pjaxReplace('/mobile/index')" left-arrow title="会费支付"></van-nav-bar>
|
||||
</van-sticky>
|
||||
|
||||
<van-dropdown-menu active-color="#1989fa">
|
||||
<van-dropdown-item v-model="pageForm.year" @change="doSearch" :options="yearList"></van-dropdown-item>
|
||||
<van-dropdown-item v-model="pageForm.isPay" @change="doSearch" :options="payList"></van-dropdown-item>
|
||||
</van-dropdown-menu>
|
||||
|
||||
<div class="parent-card">
|
||||
<div v-for="item in tableData">
|
||||
<div class="content-card">
|
||||
<div class="left-child-card">
|
||||
<img src="/assets/mobile/svg/memberPay/icon_xsgj.svg"/>
|
||||
</div>
|
||||
<div class="right-child-card">
|
||||
<div>
|
||||
<span>项目名称:</span>
|
||||
<span>{{item.projectName}}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span>所属时间:</span>
|
||||
<span>{{item.paymentStartMonth}} 至 {{item.paymentEndMonth}}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span>缴费时间:</span>
|
||||
<span>{{moment(item.startTime).format('MM-DD') + ' 至 ' + moment(item.endTime).format('MM-DD')}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-card">
|
||||
<van-button v-if="!item.isPayment" @click.stop="openPay(item)" color="#1867b0" size="small" type="primary">
|
||||
我要缴费
|
||||
</van-button>
|
||||
<template v-else>
|
||||
<van-button v-if="item.isPayment && !item.isRefund" size="small" type="primary" :disabled="true">
|
||||
您已缴费
|
||||
</van-button>
|
||||
<van-button v-else size="small" type="danger" :disabled="true">
|
||||
{{ getRefundStates(item.refundState) }}
|
||||
</van-button>
|
||||
|
||||
<!-- <van-button size="small" type="primary" @click.stop="showPayInfo(item)">-->
|
||||
<!-- 查看详情-->
|
||||
<!-- </van-button>-->
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
<van-empty
|
||||
class="custom-image"
|
||||
description="暂无缴费记录"
|
||||
image="https://img01.yzcdn.cn/vant/custom-empty-image.png"
|
||||
v-if="tableData && tableData.length===0"
|
||||
></van-empty>
|
||||
</div>
|
||||
|
||||
<van-action-sheet :close-on-click-overlay="false" :title="payInfo.projectName" style="height: 60%" v-model="payVisible" @close="payVisibleClose">
|
||||
<div class="pay-content">
|
||||
<template>
|
||||
<van-cell class="costFormula" title="缴费所属时间">
|
||||
<template #right-icon>
|
||||
{{formData.paymentStartMonth}} 至 {{formData.paymentEndMonth}}
|
||||
</template>
|
||||
</van-cell>
|
||||
<van-cell class="costFormula" title="缴费标准">
|
||||
<template #right-icon>
|
||||
<div style="color: red"
|
||||
v-if="formData.payModeValueList&&formData.payModeValueList.length>0">
|
||||
(
|
||||
<template v-for="(o,i) in formData.payModeValueList">
|
||||
{{o.name}}
|
||||
<template v-if="i != formData.payModeValueList.length - 1">+</template>
|
||||
</template>
|
||||
) * 0.5% * {{formData.paymentMonth}}个月
|
||||
</div>
|
||||
<div v-else>固定金额缴费</div>
|
||||
</template>
|
||||
</van-cell>
|
||||
<van-field
|
||||
:label="o.name"
|
||||
:placeholder="'请输入' + o.name"
|
||||
@input="moneyInput"
|
||||
input-align="right"
|
||||
type="number"
|
||||
v-for="(o,index) in formData.payModeValueList"
|
||||
v-model="o.value"
|
||||
>
|
||||
<template #left-icon>
|
||||
<div class="pay_img">
|
||||
<img src="/assets/mobile/svg/memberPay/money.svg"/>
|
||||
</div>
|
||||
</template>
|
||||
</van-field>
|
||||
</template>
|
||||
|
||||
<van-radio-group checked-color="#1867b0" v-model="moneyModel">
|
||||
<van-cell @click="moneyModel = 1" clickable title="支付宝">
|
||||
<template #icon>
|
||||
<div class="pay_img" style="margin-right: 4px">
|
||||
<img src="/assets/mobile/svg/memberPay/zfb.svg"/>
|
||||
</div>
|
||||
</template>
|
||||
<template #right-icon>
|
||||
<van-radio :name="1"></van-radio>
|
||||
</template>
|
||||
</van-cell>
|
||||
<van-cell @click="moneyModel = 2" clickable title="微信">
|
||||
<template #icon>
|
||||
<div class="pay_img" style="margin-right: 4px">
|
||||
<img src="/assets/mobile/svg/memberPay/wx.svg"/>
|
||||
</div>
|
||||
</template>
|
||||
<template #right-icon>
|
||||
<van-radio :name="2"></van-radio>
|
||||
</template>
|
||||
</van-cell>
|
||||
</van-radio-group>
|
||||
<van-submit-bar :loading="loading" :price="formData.paymentMoney" @submit="doPay" button-color="#1867b0" button-text="支付"></van-submit-bar>
|
||||
</div>
|
||||
|
||||
</van-action-sheet>
|
||||
|
||||
<van-popup :style="{ height: '100%', width: '100%'}" @close="imgClose" closeable position="right" v-model="payToOtherPage">
|
||||
<van-image src="/assets/mobile/svg/memberPay/zf_img.png" style="margin-top: 40px; height: 95%; width: 100%"></van-image>
|
||||
</van-popup>
|
||||
|
||||
</div>
|
||||
|
||||
<script src="https://res2.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
|
||||
<script>
|
||||
function onBridgeReady(json) {
|
||||
// const data = JSON.parse(json)
|
||||
WeixinJSBridge.invoke("getBrandWCPayRequest", JSON.parse(json), function (res) {
|
||||
if (res.err_msg === "get_brand_wcpay_request:ok") {
|
||||
// 使用以上方式判断前端返回,微信团队郑重提示:
|
||||
//res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
|
||||
}
|
||||
})
|
||||
}
|
||||
const vue = new Vue({
|
||||
el: "#app",
|
||||
mixins: [mobileMixins],
|
||||
data() {
|
||||
return {
|
||||
payToOtherPage: false,
|
||||
costFormula: "",
|
||||
payVisible: false,
|
||||
loading: false,
|
||||
viewData: {},
|
||||
tableData: [],
|
||||
payList: [
|
||||
{text: '全部', value: null},
|
||||
{text: '已缴费', value: true},
|
||||
{text: '未缴费', value: false},
|
||||
],
|
||||
pageForm: {
|
||||
year: new Date().getFullYear(),
|
||||
isPay: false
|
||||
},
|
||||
payInfo: {},
|
||||
formData: {},
|
||||
moneyModel: 2,
|
||||
intervalTimer: null,
|
||||
hasPayed: false,
|
||||
|
||||
tradingStates: [],
|
||||
refundStates: [],
|
||||
tradingChannels: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// showPayInfo(data) {
|
||||
//
|
||||
// },
|
||||
async payVisibleClose() {
|
||||
clearInterval(this.intervalTimer)
|
||||
},
|
||||
doSearch() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.tableData = []
|
||||
this.finished = false
|
||||
this.pageData()
|
||||
},
|
||||
imgClose() {
|
||||
this.loading = false
|
||||
this.payToOtherPage = false
|
||||
},
|
||||
moneyInput() {
|
||||
let paymentMoney = this.formData.payModeValueList.reduce((a, b) => {
|
||||
return Number(a) + Number(b.value)
|
||||
}, 0)
|
||||
console.log(paymentMoney)
|
||||
const pr = parseFloat((Number(paymentMoney) * 0.005 * this.formData.paymentMonth).toFixed(2))
|
||||
this.$set(this.formData, "paymentMoney", pr * 100)
|
||||
},
|
||||
async doPay() {
|
||||
if (!this.formData.paymentMoney) {
|
||||
this.$toast('请计算会费金额')
|
||||
return
|
||||
}
|
||||
if (!this.moneyModel) {
|
||||
this.$toast('请选择支付方式')
|
||||
return
|
||||
}
|
||||
if(this.moneyModel === 1) {
|
||||
this.$toast('暂未开通,敬请期待')
|
||||
return
|
||||
}
|
||||
const u = navigator.userAgent
|
||||
const isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) //ios终端
|
||||
let userAgent = window.navigator.userAgent.toLowerCase()
|
||||
if (this.moneyModel === 1) {
|
||||
//是否微信浏览器
|
||||
if (userAgent.match(/MicroMessenger/i) && userAgent.match(/MicroMessenger/i)[0] === "micromessenger") {
|
||||
this.payToOtherPage = true
|
||||
} else {
|
||||
const resp = await $.get("/mobile/memberCost/AlipayClient/tradePagePay", {
|
||||
money: paymentMoney,
|
||||
paymentProjectId: this.payInfo.id
|
||||
})
|
||||
const div = document.createElement("div")
|
||||
div.innerHTML = resp // data就是接口返回的form 表单字符串
|
||||
document.body.appendChild(div)
|
||||
//如果是ios,不新开页面直接跳转
|
||||
if (isiOS) {
|
||||
document.forms[0].submit()
|
||||
} else {
|
||||
document.forms[0].setAttribute("target", "_blank") // 新开窗口跳转
|
||||
document.forms[0].submit()
|
||||
}
|
||||
}
|
||||
} else if(this.moneyModel === 2) {
|
||||
if (userAgent.match(/MicroMessenger/i) && userAgent.match(/MicroMessenger/i)[0] === "micromessenger") {
|
||||
const confirm = await this.$dialog.confirm({
|
||||
title: '温馨提示',
|
||||
message: '您确定要支付吗?',
|
||||
})
|
||||
if (confirm === 'confirm') {
|
||||
const loading = this.$toast.loading({
|
||||
message: '支付中...',
|
||||
forbidClick: true,
|
||||
})
|
||||
this.hasPayed = false
|
||||
await this.pullWeChatPay()
|
||||
await this.getIsPay(loading)
|
||||
}
|
||||
} else {
|
||||
this.$toast('微信支付只能在微信APP中使用,请切换支付方式')
|
||||
}
|
||||
}
|
||||
},
|
||||
//拉起微信支付
|
||||
async pullWeChatPay() {
|
||||
const resp = await $.post("/mobile/memberCost/list/pullWeChatPay", {
|
||||
money: this.formData.paymentMoney,
|
||||
busId: this.payInfo.id
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
if (typeof WeixinJSBridge == "undefined") {
|
||||
if (document.addEventListener) {
|
||||
document.addEventListener("WeixinJSBridgeReady", onBridgeReady(resp.data))
|
||||
} else if (document.attachEvent) {
|
||||
document.attachEvent("WeixinJSBridgeReady", onBridgeReady(resp.data))
|
||||
document.attachEvent("onWeixinJSBridgeReady", onBridgeReady(resp.data))
|
||||
}
|
||||
} else {
|
||||
onBridgeReady(resp.data)
|
||||
}
|
||||
}
|
||||
},
|
||||
async getIsPay(loading) {
|
||||
this.intervalTimer = setInterval(async () => {
|
||||
const resp = await $.get("/platform/member/payment/mine/getIsPay", { paymentInfoId: this.payInfo.id })
|
||||
if (resp.code === 0) {
|
||||
loading.close()
|
||||
if(resp.data > 0) {
|
||||
this.hasPayed = true
|
||||
}
|
||||
}
|
||||
}, 2000)
|
||||
},
|
||||
async openPay(row) {
|
||||
this.payInfo = row
|
||||
const payStandards = JSON.parse(row.payStandards)
|
||||
const payStandard = payStandards.find(p => p.payPersonnel === row.payPersonnel && p.personType === row.personType)
|
||||
this.$set(this.formData, "paymentMonth", row.paymentMonth)
|
||||
this.$set(this.formData, "paymentStartMonth", row.paymentStartMonth)
|
||||
this.$set(this.formData, "paymentEndMonth", row.paymentEndMonth)
|
||||
this.$set(this.formData, "paymentInfoId", row.id)
|
||||
if (payStandard.payModeValue) {
|
||||
this.$set(this.formData, "payModeValueList", [])
|
||||
this.$set(this.formData, "paymentMoney", payStandard.payModeValue)
|
||||
} else {
|
||||
this.$set(this.formData, "payModeValueList", payStandard.payModeValueList)
|
||||
this.$set(this.formData, "paymentMoney", 0)
|
||||
}
|
||||
this.payVisible = true
|
||||
},
|
||||
async pageData() {
|
||||
const res = await $.post("/platform/member/payment/mine/pageData", this.pageForm)
|
||||
if (res.code === 0) {
|
||||
this.tableData = this.tableData.concat(res.data.list)
|
||||
if (this.tableData.length === res.data.totalCount) {
|
||||
this.finished = true
|
||||
} else {
|
||||
this.pageForm.pageNumber++
|
||||
}
|
||||
}
|
||||
},
|
||||
getRefundStates(data) {
|
||||
if (!data) {
|
||||
return
|
||||
}
|
||||
return this.refundStates.find(item => item.name === data).refundStateName
|
||||
},
|
||||
async getPaymentEnums() {
|
||||
this.tradingStates = await getEnumOptions("TradingStateEnum")
|
||||
this.refundStates = await getEnumOptions("RefundStateEnum")
|
||||
this.tradingChannels = await getEnumOptions("TradingChannelEnum")
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
let nowYear = new Date().getFullYear()
|
||||
for (let i = nowYear; i >= nowYear - 9; i--) {
|
||||
this.yearList.push({ text: i, value: i })
|
||||
}
|
||||
await this.pageData()
|
||||
await this.getPaymentEnums()
|
||||
},
|
||||
watch: {
|
||||
"hasPayed"(val) {
|
||||
if(val === true) {
|
||||
clearInterval(this.intervalTimer)
|
||||
this.$dialog.alert({title: '温馨提示', message: '支付成功'})
|
||||
this.doSearch()
|
||||
this.payVisible = false
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,134 @@
|
||||
<!--#
|
||||
layout("/layouts/platform_h5.html"){
|
||||
#-->
|
||||
<style>
|
||||
.head {
|
||||
position: relative;
|
||||
height: 300px;
|
||||
background-color: #02be6e;
|
||||
}
|
||||
|
||||
.head_img {
|
||||
position: absolute;
|
||||
top: 35%;
|
||||
left: 54%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
.head_zfcg {
|
||||
position: absolute;
|
||||
top: 63%;
|
||||
left: 52%;
|
||||
transform: translate(-50%, -50%);
|
||||
font-size: 20px;
|
||||
font-weight: 700;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.head_xq {
|
||||
position: absolute;
|
||||
top: 70%;
|
||||
left: 15%;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.middle_zfxx {
|
||||
background: radial-gradient(circle, transparent, transparent 8px, #FFFFFF 8px, #FFFFFF) 170px;
|
||||
height: 20vh;
|
||||
position: relative;
|
||||
top: -25px;
|
||||
margin-left: 25px;
|
||||
margin-right: 25px;
|
||||
}
|
||||
|
||||
.middle_x {
|
||||
margin-right: 20px;
|
||||
position: relative;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
.middle_jine {
|
||||
position: absolute;
|
||||
top: 25%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
font-weight: 700;
|
||||
font-size: 20px;
|
||||
color: #02be6e;
|
||||
}
|
||||
|
||||
.middle_zxxx {
|
||||
position: absolute;
|
||||
top: 55%;
|
||||
line-height: 25px;
|
||||
font-size: 13px;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
|
||||
.app {
|
||||
background-color: #f7f7f7;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
|
||||
<div class="head">
|
||||
<div>
|
||||
<van-image class="head_img"
|
||||
src="/assets/mobile/svg/memberPay/paySuccess.svg"></van-image>
|
||||
<span class="head_zfcg">支付成功</span>
|
||||
<span class="head_xq">您已付款成功,请返回查看会费情况</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="middle_zfxx">
|
||||
<div class="middle_jine">¥{{total_amount}}</div>
|
||||
<div class="middle_x">
|
||||
<van-divider dashed></van-divider>
|
||||
</div>
|
||||
<div class="middle_zxxx">
|
||||
<van-row>
|
||||
<van-col span="8" style="text-align: left;padding-left: 10px;">订单编号</van-col>
|
||||
<van-col span="16" style="text-align: right;padding-right: 10px;">
|
||||
{{out_trade_no}}
|
||||
</van-col>
|
||||
</van-row>
|
||||
<van-row>
|
||||
<van-col span="8" style="text-align: left;padding-left: 10px;">支付时间</van-col>
|
||||
<van-col span="16" style="text-align: right;padding-right: 10px;">
|
||||
{{timestamp}}
|
||||
</van-col>
|
||||
</van-row>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [mobileMixins],
|
||||
data() {
|
||||
return {
|
||||
out_trade_no: 0,
|
||||
total_amount: 0,
|
||||
timestamp: 0,
|
||||
}
|
||||
},
|
||||
methods: {},
|
||||
async created() {
|
||||
this.out_trade_no = GetQueryString("out_trade_no")
|
||||
this.total_amount = GetQueryString("total_amount")
|
||||
this.timestamp = GetQueryString("timestamp").replace("+", " ")
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,198 @@
|
||||
<!--#
|
||||
layout("/layouts/platform_h5.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<van-sticky>
|
||||
<van-nav-bar @click-left="pjaxReplace('/mobile/index')" left-arrow title="缴费汇总"></van-nav-bar>
|
||||
</van-sticky>
|
||||
|
||||
<div>
|
||||
<van-search v-model="pageForm.search" placeholder="请输入搜索关键词" @search="doSearch">
|
||||
</van-search>
|
||||
</div>
|
||||
<div>
|
||||
<van-tabs @change="doSearch" v-model="pageForm.isPay">
|
||||
<van-tab title="未缴费" :name="false"></van-tab>
|
||||
<van-tab title="已缴费" :name="true"></van-tab>
|
||||
</van-tabs>
|
||||
|
||||
<van-list
|
||||
v-model="loading"
|
||||
:finished="finished"
|
||||
finished-text="没有更多了"
|
||||
@load="pageData"
|
||||
>
|
||||
<van-cell-group>
|
||||
<van-swipe-cell v-for="item in tableData">
|
||||
<template #left>
|
||||
<van-button @click="sendPaymentMsg(item)" style="height: 100%" square type="info" text="催缴" />
|
||||
</template>
|
||||
<van-cell >
|
||||
<template #title>
|
||||
<span class="custom-title">{{item.username}}</span>({{item.loginname}})
|
||||
<van-tag :type="item.isPayment?'primary':'danger'">{{item.isPayment?'已缴':'未缴'}}</van-tag>
|
||||
</template>
|
||||
<template #label>
|
||||
<div class="custom-title">人员类型:{{item.personType}}</div>
|
||||
<div class="custom-title">在职状态:{{item.userState}}</div>
|
||||
<div class="custom-title">所属工会:{{item.unionname}}</div>
|
||||
<div class="custom-title">所属单位:{{item.unitname}}</div>
|
||||
<div class="custom-title">缴费金额:{{item.paymentMoney}}</div>
|
||||
</template>
|
||||
<template #right-icon>
|
||||
<van-button @click="openPay(item)" v-if="!item.isPayment" size="mini" plain type="info">设为已缴</van-button>
|
||||
</template>
|
||||
</van-cell>
|
||||
<template #right>
|
||||
<van-button style="height: 100%" @click="doDelete(item.id)" square type="danger" text="删除" />
|
||||
</template>
|
||||
</van-swipe-cell>
|
||||
</van-cell-group>
|
||||
</van-list>
|
||||
|
||||
<van-empty
|
||||
class="custom-image"
|
||||
description="暂无缴费记录"
|
||||
image="https://img01.yzcdn.cn/vant/custom-empty-image.png"
|
||||
v-if="tableData&&tableData.length===0"
|
||||
></van-empty>
|
||||
|
||||
<van-action-sheet v-model="show" title="标题">
|
||||
<div class="content">
|
||||
<van-form @submit="onSubmit">
|
||||
<van-field
|
||||
v-model="formData.paymentMoney"
|
||||
name="缴费金额"
|
||||
label="缴费金额"
|
||||
type="digit"
|
||||
placeholder="缴费金额"
|
||||
:rules="[{ required: true, message: '请填写缴费金额' }]"
|
||||
></van-field>
|
||||
<van-field
|
||||
v-model="formData.remark"
|
||||
name="备注"
|
||||
label="备注"
|
||||
placeholder="备注"
|
||||
></van-field>
|
||||
<div style="margin: 16px;">
|
||||
<van-button round block type="info" native-type="submit">提交</van-button>
|
||||
</div>
|
||||
</van-form>
|
||||
</div>
|
||||
</van-action-sheet>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: "#app",
|
||||
data() {
|
||||
return {
|
||||
tableData: [],
|
||||
memberActive: 0,
|
||||
loading: false,
|
||||
finished: false,
|
||||
pageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
username: "",
|
||||
isPay:false,
|
||||
search:''
|
||||
},
|
||||
option1: [
|
||||
{ text: '姓名', value: 'u.username' },
|
||||
{ text: '工号', value: 'u.loginname' },
|
||||
],
|
||||
show:false,
|
||||
formData: {}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async pageData() {
|
||||
const resp = await $.post("/platform/member/payment/summary/pageData", this.pageForm)
|
||||
if (resp.code === 0) {
|
||||
this.tableData = this.tableData.concat(resp.data.list)
|
||||
this.pageForm.totalCount = resp.data.totalCount
|
||||
if (this.tableData.length >= this.pageForm.totalCount) {
|
||||
this.finished = true
|
||||
} else {
|
||||
this.pageForm.pageNumber++
|
||||
}
|
||||
this.loading = false
|
||||
}
|
||||
},
|
||||
doSearch(){
|
||||
this.pageForm.pageNumber = 1
|
||||
if(this.tableData.length==this.pageForm.totalCount){
|
||||
this.finished = true
|
||||
}else{
|
||||
this.finished = false
|
||||
}
|
||||
this.tableData = []
|
||||
this.pageData()
|
||||
},
|
||||
async doDelete(id) {
|
||||
const loading = this.$toast.loading({
|
||||
message: "加载中...",
|
||||
forbidClick: true,
|
||||
overlay: true,
|
||||
duration: 0
|
||||
})
|
||||
const resp = await $.get("/platform/member/payment/summary/doRemoveById", { id: id })
|
||||
if (resp.code === 0) {
|
||||
this.$toast.success(resp.msg)
|
||||
await this.doSearch()
|
||||
loading.close()
|
||||
} else {
|
||||
this.$toast.fail(resp.msg)
|
||||
}
|
||||
},
|
||||
async sendPaymentMsg(row) {
|
||||
this.$dialog.confirm({
|
||||
title: '提示',
|
||||
message: "您确定对【" + row.username + "】会员进行催缴吗?",
|
||||
}).then(async () => {
|
||||
const resp = await $.get("/platform/member/payment/summary/sendPaymentMsg", { id: row.id })
|
||||
if (resp.code === 0) {
|
||||
this.$toast.success(resp.msg)
|
||||
await this.doSearch()
|
||||
} else {
|
||||
this.$toast.fail(resp.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
openPay(item){
|
||||
this.show=true
|
||||
this.formData=item
|
||||
},
|
||||
onSubmit(){
|
||||
this.$dialog.confirm({
|
||||
title: '提示',
|
||||
message: "您确定要更改缴费信息吗?",
|
||||
}).then(async () => {
|
||||
const data={
|
||||
ids:JSON.stringify([this.formData.id]),
|
||||
paymentMoney:this.formData.paymentMoney,
|
||||
remark:this.formData.remark,
|
||||
isPay:this.formData.isPayment
|
||||
}
|
||||
const resp = await $.get("/platform/member/payment/summary/modify", data)
|
||||
if (resp.code === 0) {
|
||||
this.$toast.success(resp.msg)
|
||||
await this.doSearch()
|
||||
this.show=false
|
||||
} else {
|
||||
this.$toast.fail(resp.msg)
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
Reference in New Issue
Block a user