This commit is contained in:
2025-08-29 16:19:13 +08:00
parent aa6c9c7f8e
commit 67082d07bd
58 changed files with 2501 additions and 1091 deletions
@@ -210,9 +210,12 @@ layout("/layouts/platform.html"){
honorChange(val) {
const secondList = this.honorOptions.map((item) => item.children).flat()
const honor = secondList.find((o) => o.id === val)
this.selectHonor = this.honorOptions.find((o) => o.id === honor.parentId)
this.$set(this.formData, "honorTypeId", this.selectHonor.id)
this.$set(this.formData, "honorId", honor.id)
if (honor){
this.selectHonor = this.honorOptions.find((o) => o.id === honor.parentId)
this.$set(this.formData, "honorTypeId", this.selectHonor.id)
this.$set(this.formData, "honorId", honor.id)
}
},
doSave() {},
doSubmit() {
@@ -233,9 +236,8 @@ layout("/layouts/platform.html"){
openAdd() {
this.stepActive = 0
this.dialogVisible = true
this.$nextTick(() => {
this.$refs.formRef.resetFields()
})
this.formData={}
this.$refs.formRef.clearValidate()
this.$axios.post("/platform/evaluate/activity/initQuotaAllocations").then((res) => {
if (res.code === 0) {
this.$set(this.formData, "quotaAllocations", res.data)
@@ -1,111 +1,117 @@
const apply_component = {
template: /*language=HTML*/ `
<el-dialog title="填写申请" :visible.sync="dialogVisible" width="70%" top="50px" class="ele-dialog-form">
<el-card shadow="never">
<snaker-start slot="header" label="荣誉申报" define_key="PYPX"></snaker-start>
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="120px">
<template v-if="this.formData.honorType == '个人荣誉'">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="userName" label="姓名">
<el-input :value="formData.userName" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="loginName" label="工号">
<el-input :value="formData.loginName" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="birthday" label="出生日期">
<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-col>
<el-col :span="12">
<el-form-item prop="sex" label="性别" disabled>
<el-input v-model="formData.sex" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="unitName" label="所属单位">
<el-input :value="formData.unitName" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="unionName" label="所属分工会">
<el-input :value="formData.unionName" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="民族" prop="nation">
<dict-select style="width: 100%" placeholder="请选择民族" v-model="formData.nation" code="USER_NATION"></dict-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="political" label="政治面貌">
<dict-select
style="width: 100%"
placeholder="请选择政治面貌"
v-model="formData.political"
code="POLITICAL_STATUS"
></dict-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="education" label="学历">
<dict-select style="width: 100%" placeholder="请选择学历" v-model="formData.education" code="USER_EDUCATION"></dict-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="technicalTitle" label="技术职称">
<el-input v-model="formData.technicalTitle" placeholder="填写技术职称" max="50"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="governmentPosition" label="党政职务">
<el-input v-model="formData.governmentPosition" placeholder="填写党政职务" max="50"></el-input>
</el-form-item>
</el-col>
</el-row>
<template v-if="formData.honorTypeName == '个人荣誉'">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="userName" label="姓名">
<el-input :value="formData.userName" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="loginName" label="工号">
<el-input :value="formData.loginName" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="birthday" label="出生日期">
<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-col>
<el-col :span="12">
<el-form-item prop="sex" label="性别" disabled>
<el-input v-model="formData.sex" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="unitName" label="所属单位">
<el-input :value="formData.unitName" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="unionName" label="所属分工会">
<el-input :value="formData.unionName" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="民族" prop="nation">
<dict-select style="width: 100%" placeholder="请选择民族" v-model="formData.nation"
code="USER_NATION"></dict-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="political" label="政治面貌">
<dict-select
style="width: 100%"
placeholder="请选择政治面貌"
v-model="formData.political"
code="POLITICAL_STATUS"
></dict-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="education" label="学历">
<dict-select style="width: 100%" placeholder="请选择学历" v-model="formData.education"
code="USER_EDUCATION"></dict-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="technicalTitle" label="技术职称">
<el-input v-model="formData.technicalTitle" placeholder="填写技术职称"
max="50"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="governmentPosition" label="党政职务">
<el-input v-model="formData.governmentPosition" placeholder="填写党政职务"
max="50"></el-input>
</el-form-item>
</el-col>
</el-row>
</template>
<template v-else>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="unionName" label="申报工会">
<el-input :value="formData.unionName" placeholder="请输入申报工会"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工会主席" prop="unionLeader">
<el-input placeholder="请填写工会主席" v-model="formData.unionLeader"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="会员人数" prop="memberNumber">
<el-input-number v-model="formData.memberNumber" :min="0"
placeholder="请填写会员人数"
:max="2000" style="width: 100%"></el-input-number>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="unionName" label="申报工会">
<el-input :value="formData.unionName" placeholder="请输入申报工会"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="工会主席" prop="unionLeader">
<el-input placeholder="请填写工会主席" v-model="formData.unionLeader"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="会员人数" prop="memberNumber">
<el-input-number v-model="formData.memberNumber" :min="0"
placeholder="请填写会员人数"
:max="2000" style="width: 100%"></el-input-number>
</el-form-item>
</el-col>
</el-row>
</template>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="曾获何种奖励" prop="historyHonor">
<el-input v-model="formData.historyHonor" type="textarea" rows="8" maxlength="5000"
show-word-limit></el-input>
show-word-limit></el-input>
</el-form-item>
</el-col>
</el-row>
@@ -113,77 +119,74 @@ const apply_component = {
<el-col :span="24">
<el-form-item label="简要事迹(主要成绩)" prop="briefDeeds">
<el-input v-model="formData.briefDeeds" type="textarea" rows="8" maxlength="5000"
show-word-limit></el-input>
show-word-limit></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label="附件" prop="files">
<file-upload :value.sync="formData.files" upload_result_category="array" :upload_number="5" complete_result></file-upload>
<file-upload :value.sync="formData.files" upload_result_category="array" :upload_number="5"
complete_result></file-upload>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" plain @click="save">保存</el-button>
<el-button type="primary" @click="submit">提交</el-button>
</div>
</el-dialog>
<el-row type="flex" justify="end" style="margin-top: 20px;">
<el-button type="primary" plain @click="onSave">保存</el-button>
<el-button type="primary" @click="onSubmit" v-if="!taskId" class="ml15">提交</el-button>
<el-button type="primary" @click="onFinishTask" class="ml15" v-else>提交</el-button>
</el-row>
</el-card>
`,
store,
data() {
return {
dialogVisible: false,
taskId: "",
formData: {},
formRules: {
loginName: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
userName: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
unitName: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
unionName: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
birthday: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
sex: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
nation: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
political: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
education: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
technicalTitle: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
governmentPosition: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
briefDeeds: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
historyHonor: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
unionLeader: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
memberNumber: [{ required: true, message: "必填", trigger: ["change", "blur"] }],
loginName: [{required: true, message: "必填", trigger: ["change", "blur"]}],
userName: [{required: true, message: "必填", trigger: ["change", "blur"]}],
unitName: [{required: true, message: "必填", trigger: ["change", "blur"]}],
unionName: [{required: true, message: "必填", trigger: ["change", "blur"]}],
birthday: [{required: true, message: "必填", trigger: ["change", "blur"]}],
sex: [{required: true, message: "必填", trigger: ["change", "blur"]}],
nation: [{required: true, message: "必填", trigger: ["change", "blur"]}],
political: [{required: true, message: "必填", trigger: ["change", "blur"]}],
education: [{required: true, message: "必填", trigger: ["change", "blur"]}],
technicalTitle: [{required: true, message: "必填", trigger: ["change", "blur"]}],
governmentPosition: [{required: true, message: "必填", trigger: ["change", "blur"]}],
briefDeeds: [{required: true, message: "必填", trigger: ["change", "blur"]}],
historyHonor: [{required: true, message: "必填", trigger: ["change", "blur"]}],
unionLeader: [{required: true, message: "必填", trigger: ["change", "blur"]}],
memberNumber: [{required: true, message: "必填", trigger: ["change", "blur"]}],
}
}
},
methods: {
onOpenEdit(id) {
this.dialogVisible = true
this.$nextTick(() => {
this.$axios.post("/platform/evaluate/apply/info", { id }).then((res) => {
if (res.code === 0) {
this.formData = res.data
}
})
onOpenEdit(row) {
this.taskId = row.taskId
this.$axios.post("/platform/evaluate/apply/info", {id: row.id}).then((res) => {
if (res.code === 0) {
this.formData = res.data
}
})
},
onOpen(activity) {
this.dialogVisible = true
this.$nextTick(() => {
this.initForm()
this.$set(this.formData, "evaluateId", activity.id)
this.$set(this.formData, "honorTypeId", activity.honorTypeId)
this.$set(this.formData, "honorType", activity.honorType)
this.$set(this.formData, "honorId", activity.honorId)
this.initForm()
this.$set(this.formData, "evaluateId", activity.id)
this.$set(this.formData, "honorTypeId", activity.honorTypeId)
this.$set(this.formData, "honorTypeName", activity.honorTypeName)
this.$set(this.formData, "honorId", activity.honorId)
if (activity.honorType.includes('集体')) {
this.getCollectiveInfo()
}
})
if (activity.honorTypeName.includes('集体')) {
this.getCollectiveInfo()
}
},
getCollectiveInfo() {
this.$axios.post("/platform/honor/basic/settings/getUnionInfo", { id: this.$store.state.user.union.id }).then((res) => {
this.$axios.post("/platform/honor/basic/settings/getUnionInfo", {id: this.$store.state.user.union.id}).then((res) => {
if (res.code === 0) {
this.formData.memberNumber = res.data.memberNumber
this.formData.unionLeader = res.data.username
@@ -191,41 +194,67 @@ const apply_component = {
}
})
},
save() {
this.$confirm("保存后可在我的申请里面再次编辑,您确定要保存吗?", "提示", { type: "warning" }).then(() => {
this.$axios
.post("/platform/evaluate/apply/save", {
evaluateApply: JSON.stringify(this.formData)
})
.then((res) => {
if (res.code === 0) {
this.$message.success("保存成功")
this.dialogVisible = false
this.$emit("refresh", null)
this.$store.dispatch("pjaxRoute", "/platform/evaluate/mine")
// 保存
onSave() {
this.$confirm("您确定保存吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post('/platform/evaluate/apply/save', {data: JSON.stringify(this.formData)}).then(res => {
if (res.code === 0) {
this.$message.success("保存成功")
if (this.formData.id) {
this.$emit('refresh')
} else {
window.location.href = '/platform/evaluate/mine'
}
})
}
})
})
},
submit() {
this.$refs.formRef.validate((valid) => {
if (valid) {
this.$axios
.post("/platform/evaluate/apply/submit", {
evaluateApply: JSON.stringify(this.formData)
})
.then((res) => {
if (res.code === 0) {
this.$message.success("提交成功")
this.dialogVisible = false
this.$emit("refresh", null)
this.$store.dispatch("pjaxRoute", "/platform/evaluate/mine")
}
})
}
onSubmit() {
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post('/platform/evaluate/apply/submit', {
data: JSON.stringify(this.formData),
taskId: this.taskId
}).then(res => {
if (res.code === 0) {
this.$message.success("提交成功")
if (this.formData.id) {
this.$emit('refresh')
} else {
window.location.href = '/platform/evaluate/mine'
}
}
})
})
},
onFinishTask() {
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post('/platform/evaluate/apply/submitAgain', {
data: JSON.stringify(this.formData),
taskId: this.taskId
}).then(res => {
if (res.code === 0) {
this.$message.success("提交成功")
if (this.formData.id) {
this.$emit('refresh')
} else {
window.location.href = '/platform/evaluate/mine'
}
}
})
})
},
initForm() {
const user = this.$store.state.user
this.$set(this.formData, "userName", user.username)
@@ -3,35 +3,43 @@ layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<el-card shadow="never">
<search @search="doSearch">
<search-item label="年度:">
<el-date-picker v-model="pageForm.year" type="year" value-format="yyyy" placeholder="选择年度" style="width: 100%"></el-date-picker>
</search-item>
</search>
</el-card>
<el-card shadow="never">
<table-tool>
<template slot="tool"></template>
</table-tool>
<el-table :data="tableData" @sort-change="pageOrder">
<el-table-column type="index" width="50px" label="序号" :index="indexMethod"></el-table-column>
<el-table-column prop="year" label="年份"></el-table-column>
<el-table-column prop="name" label="名称"></el-table-column>
<el-table-column prop="startTime" label="开始时间"></el-table-column>
<el-table-column prop="endTime" label="结束时间"></el-table-column>
<el-table-column prop="honorName" label="类型"></el-table-column>
<el-table-column prop="honorTypeName" label="荣誉类型"></el-table-column>
<el-table-column label="操作" width="200px">
<template slot-scope="{row}">
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
<el-button size="mini" type="primary" @click="openApply(row)">申请</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
<guava ref="guava">
<template>
<el-card shadow="never">
<search @search="doSearch">
<search-item label="年度:">
<el-date-picker v-model="pageForm.year" type="year" value-format="yyyy" placeholder="选择年度"
style="width: 100%"></el-date-picker>
</search-item>
</search>
</el-card>
<el-card shadow="never">
<table-tool>
<template slot="tool"></template>
</table-tool>
<el-table :data="tableData" @sort-change="pageOrder">
<el-table-column type="index" width="50px" label="序号" :index="indexMethod"></el-table-column>
<el-table-column prop="year" label="年份"></el-table-column>
<el-table-column prop="name" label="名称"></el-table-column>
<el-table-column prop="startTime" label="开始时间"></el-table-column>
<el-table-column prop="endTime" label="结束时间"></el-table-column>
<el-table-column prop="honorName" label="类型"></el-table-column>
<el-table-column prop="honorTypeName" label="荣誉类型"></el-table-column>
<el-table-column label="操作" width="200px">
<template slot-scope="{row}">
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
<el-button size="mini" type="primary" @click="openApply(row)">申请</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
</template>
<apply_form ref="applyFormRef" @refresh=""></apply_form>
<template #edit>
<apply_form ref="applyFormRef" @refresh=""></apply_form>
</template>
</guava>
</div>
<script>
@@ -46,22 +54,21 @@ layout("/layouts/platform.html"){
},
data() {
return {
dialogVisible: false
}
},
methods: {
openView(row) {},
openView(row) {
},
openApply(row) {
$.post("/platform/evaluate/apply/valid", { id: row.id }).then((res) => {
$.post("/platform/evaluate/apply/valid", {id: row.id}).then((res) => {
if (res.code === 0) {
const { msg, data } = res
const {msg, data} = res
if (!data) {
this.$message.warning(msg)
return
}
//可以申请
this.dialogVisible = true
this.$nextTick(() => {
this.$refs.guava.edit(()=>{
this.$refs.applyFormRef.onOpen(row)
})
}
@@ -7,24 +7,22 @@ layout("/layouts/platform.html"){
<el-card shadow="never">
<search @search="doSearch">
<search-item label="年度">
<el-date-picker v-model="pageForm.year" type="year" value-format="yyyy" placeholder="选择年度"></el-date-picker>
<el-date-picker v-model="pageForm.year" type="year" value-format="yyyy"
placeholder="选择年度"></el-date-picker>
</search-item>
<search-item label="姓名:">
<el-input placeholder="请输入姓名查询" clearable v-model="pageForm.userName"></el-input>
</search-item>
<search-item label="工号:">
<el-input placeholder="请输入工号查询" clearable v-model="pageForm.loginName"></el-input>
</search-item>
<search-item label="所属工会:">
<el-select v-model="pageForm.unionId" placeholder="请选择所属工会" filterable clearable 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-item label="所属单位:">
<el-select v-model="pageForm.unitId" placeholder="请选择所属单位" filterable clearable style="width: 100%">
<el-option v-for="item in unitList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
<search-item label="申请人">
<el-input @keyup.enter.native="doSearch" clearable
placeholder="请输入内容"
v-model="pageForm.searchKeyword">
<el-select placeholder="查询类型" slot="prepend"
style="width: 100px;"
v-model="pageForm.searchName">
<el-option label="姓名" value="info.userName"></el-option>
<el-option label="工号" value="info.loginName"></el-option>
</el-select>
</el-input>
</search-item>
</search>
</el-card>
@@ -44,20 +42,19 @@ layout("/layouts/platform.html"){
<el-table-column prop="unionName" label="分工会"></el-table-column>
<el-table-column prop="applyDateTime" label="申请时间"></el-table-column>
<el-table-column prop="honorName" label="类型" show-overflow-tooltip></el-table-column>
<el-table-column label="当前节点" prop="processInstanceNodeName" show-overflow-tooltip></el-table-column>
<el-table-column label="操作" width="300px">
<el-table-column prop="taskName" label="当前节点"></el-table-column>
<el-table-column prop="instanceState" label="流程状态">
<template v-slot="{row}">
<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="300px">
<template slot-scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
审核
<el-button v-if="row.taskState === 10" @click="openAudit(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 v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">撤回
</el-button>
</template>
</el-table-column>
@@ -65,25 +62,32 @@ layout("/layouts/platform.html"){
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #public>
<info ref="infoRef"></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 #edit>
<info ref="infoRef">
<div v-if="showApprovalForm">
<div class="process-title">
{{formData.taskName}}
</div>
<el-form :model="formData" ref="formRef" :rules="formRules" 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>
<!--:rules="[{required:true,message:'必填',trigger:['change','blur']}]"-->
<el-form-item label="签字" prop="tf_userSign"
>
<pc-signature v-model="formData.tf_userSign"></pc-signature>
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到发起人</el-button>
<el-button @click="handleTaskAction(2)" size="small" type="danger">拒绝申请</el-button>
<el-button @click="handleTaskAction(1)" size="small" type="primary">同意申请</el-button>
</el-row>
</div>
</info>
</template>
</guava>
</div>
@@ -102,10 +106,7 @@ layout("/layouts/platform.html"){
return {
pageForm: {
approval: false,
unionId: "",
unitId: "",
year: null,
searchKeyword: ""
searchName: "info.userName"
},
unionList: [],
unitList: [],
@@ -114,54 +115,61 @@ layout("/layouts/platform.html"){
},
methods: {
openView(row) {
this.$refs.guava.public(() => {
this.$refs.infoRef.onOpen(row.id)
this.$refs.guava.edit(() => {
this.$refs.infoRef.onOpen(row)
this.showApprovalForm = false
})
},
openApproval(row) {
this.$refs.guava.public(() => {
this.$refs.infoRef.onOpen(row.id)
this.formData = row.approvalParam
openAudit(row) {
this.$refs.guava.edit(() => {
this.showApprovalForm = true
this.formData = {
processTaskId: row.taskId,
taskName: row.curTaskName
}
this.$refs.infoRef.onOpen(row)
})
},
doApproval(approvalType) {
this.formData.bpmTaskApprovalType = approvalType
this.$refs.approvalFormRef.validate((valid) => {
handleTaskAction(val) {
this.$refs.formRef.validate((valid) => {
if (valid) {
this.$axios
.post(loc() + "/approval", {
approval: JSON.stringify(this.formData)
})
.then((res) => {
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/flow/common/executeTask", {
data: JSON.stringify({
...this.formData,
submitType: val
})
}).then((res) => {
if (res.code === 0) {
this.$refs.guava.index()
this.$message.success(res.msg)
this.doSearch()
}
})
})
}
})
},
openRevoke(taskId) {
onRevoke(row) {
this.$confirm("您确定要撤回吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "info"
}).then(() => {
this.$axios.post(loc() + "/revoke", { taskId }).then((res) => {
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.doSearch()
}
})
})
}
},
},
async created() {
this.unitList = await this.$businessTool.listUnit()
this.unionList = await this.$businessTool.listUnion()
this.pageData()
}
})
@@ -1,99 +1,125 @@
const info = {
template: /*language=HTML*/ `
<div>
<div>
<div class="process-title">
申请信息
<div class="process-title">
申请信息
<el-link type="primary" @click="openChart">点击查看流程图</el-link>
</div>
<el-descriptions :column="3" border>
<template v-if="!this.viewData.memberNumber">
<el-descriptions-item label="姓名">{{viewData.userName}}</el-descriptions-item>
<el-descriptions-item label="工号">{{viewData.loginName}}</el-descriptions-item>
<el-descriptions-item label="性别">{{viewData.sex}}</el-descriptions-item>
<el-descriptions-item label="出生年月">{{viewData.birthday}}</el-descriptions-item>
<el-descriptions-item label="民族">{{viewData.nation}}</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.technicalTitle}}</el-descriptions-item>
<el-descriptions-item label="党政职务">{{viewData.governmentPosition}}</el-descriptions-item>
</template>
<el-descriptions-item label="工会" :span="1.5">{{viewData.unionName}}</el-descriptions-item>
<el-descriptions-item label="单位" :span="1.5">{{viewData.unitName}}</el-descriptions-item>
<template v-if="this.viewData.memberNumber">
<el-descriptions-item label="工会主席" :span="1.5">{{viewData.unionLeader}}</el-descriptions-item>
<el-descriptions-item label="会员人数" :span="1.5">{{viewData.memberNumber}}</el-descriptions-item>
</template>
<el-descriptions-item label="曾获何种荣誉称号" :span="3">
<div style="white-space: pre-line">
{{viewData.historyHonor}}
</div>
</el-descriptions-item>
<el-descriptions-item label="简要事迹(主要成绩)" :span="3">
<div style="white-space: pre-line">{{viewData.briefDeeds}}</div>
</el-descriptions-item>
<el-descriptions-item label="附件">
<file-preview :files="viewData.files" complete_result></file-preview>
</el-descriptions-item>
</el-descriptions>
<template v-for="(task,index) 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="办理意见" v-if="!task.ext.isFirstTaskNode" :span="3">
{{
task.taskFormData.opinion
}}
</el-descriptions-item>
<el-descriptions-item label="签字" v-if="!task.ext.isFirstTaskNode" :span="3">
<el-image :src="task.ext.tf_userSign" fit="cover" style="height: 60px"
v-if="task.ext.tf_userSign"></el-image>
</el-descriptions-item>
</el-descriptions>
</div>
<el-descriptions border>
<template v-if="!this.viewData.memberNumber">
<el-descriptions-item label="姓名">{{viewData.userName}}</el-descriptions-item>
<el-descriptions-item label="工号">{{viewData.loginName}}</el-descriptions-item>
<el-descriptions-item label="性别">{{viewData.sex}}</el-descriptions-item>
<el-descriptions-item label="出生年月">{{viewData.birthday}}</el-descriptions-item>
<el-descriptions-item label="民族">{{viewData.nation}}</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.technicalTitle}}</el-descriptions-item>
<el-descriptions-item label="党政职务">{{viewData.governmentPosition}}</el-descriptions-item>
</template>
<el-descriptions-item label="工会" :span="1.5">{{viewData.unionName}}</el-descriptions-item>
<el-descriptions-item label="单位" :span="1.5">{{viewData.unitName}}</el-descriptions-item>
<template v-if="this.viewData.memberNumber">
<el-descriptions-item label="工会主席" :span="1.5">{{viewData.unionLeader}}</el-descriptions-item>
<el-descriptions-item label="会员人数" :span="1.5">{{viewData.memberNumber}}</el-descriptions-item>
</template>
<el-descriptions-item label="曾获何种荣誉称号" :span="3">{{viewData.historyHonor}}</el-descriptions-item>
<el-descriptions-item label="简要事迹(主要成绩)" :span="3">{{viewData.briefDeeds}}</el-descriptions-item>
<el-descriptions-item label="附件">
<file-preview :files="viewData.files" complete_result></file-preview>
</el-descriptions-item>
</el-descriptions>
</div>
<div>
<div v-for="nodeTask in viewData.nodeTasks" :key="nodeTask.id">
<div class="process-title">
{{nodeTask.nodeName}}
</div>
<div v-if="nodeTask.nodeCode === 20">
<el-descriptions :column="3" border v-for="task in nodeTask.tasks" :key="task.id">
<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>
<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 v-if="nodeTask.nodeCode === 50">
<el-descriptions :column="3" border v-for="task in nodeTask.tasks" :key="task.id">
<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>
<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>
</div>
</template>
<slot></slot>
<snaker-chart ref="snakerChartRef"></snaker-chart>
</div>
`,
dicts: ["PROCESS_TASK_SUBMIT_TYPE"],
data() {
return {
viewData: {}
viewData: {},
row: {},
doneTasks: []
}
},
methods: {
onOpen(id) {
this.$axios.post("/platform/evaluate/common/info", { id }).then((res) => {
// 打开
onOpen(row) {
this.row = row
this.getInfo()
this.getDoneTasks()
},
// 获取申请信息
getInfo() {
this.$axios.post("/platform/evaluate/common/info", {id: this.row.id}).then((res) => {
if (res.code === 0) {
this.viewData = res.data
}
})
},
// 获取已办任务审批记录
getDoneTasks() {
this.$axios.post("/flow/common/doneTasks", {bizId: this.row.id}).then((res) => {
if (res.code === 0) {
this.doneTasks = res.data
}
})
},
// 查看流程图
openChart() {
this.$refs.snakerChartRef.onOpenFull(this.row.instanceProcessDefineId, this.row.instanceId)
}
}
}
@@ -7,7 +7,8 @@ layout("/layouts/platform.html"){
<el-card shadow="never">
<search @search="doSearch">
<search-item label="年度">
<el-date-picker v-model="pageForm.year" type="year" placeholder="选择年度" value-format="yyyy"></el-date-picker>
<el-date-picker v-model="pageForm.year" type="year" placeholder="选择年度"
value-format="yyyy"></el-date-picker>
</search-item>
</search>
</el-card>
@@ -22,23 +23,28 @@ layout("/layouts/platform.html"){
<el-table-column prop="unionName" label="分工会"></el-table-column>
<el-table-column prop="applyDateTime" label="申请时间"></el-table-column>
<el-table-column prop="honorName" label="类型" show-overflow-tooltip></el-table-column>
<el-table-column label="当前节点" prop="processInstanceNodeName" show-overflow-tooltip></el-table-column>
<el-table-column label="操作" width="300px">
<el-table-column prop="taskName" label="当前节点"></el-table-column>
<el-table-column prop="instanceState" label="流程状态">
<template v-slot="{row}">
<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="300px">
<template slot-scope="{row}">
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
<el-button v-if="[10,40,70].includes(row.processInstanceNodeCode)" size="mini" type="primary" @click="openEdit(row)">
<el-button @click="openView(row)" size="mini" type="primary">
查看
</el-button>
<el-button @click="openEdit(row)" size="mini" type="primary"
v-if="row.taskKey === 'startTask' || !row.instanceId">
编辑
</el-button>
<el-button
v-if="[20].includes(row.processInstanceNodeCode) && !row.nextTaskIsComplete"
size="mini"
type="danger"
@click="openRevoke(row)"
>
撤销
<el-button v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">撤回
</el-button>
<el-button @click="doDelete(row.id)" size="mini" type="danger"
v-if="row.taskKey === 'startTask' || !row.instanceId">
删除
</el-button>
<!-- <el-button size="mini" type="primary" @click="exportApplyDocx(row.id)">导出</el-button>-->
<el-button v-if="[10].includes(row.processInstanceNodeCode)" size="mini" type="danger" @click="doDelete(row)">删除</el-button>
</template>
</el-table-column>
</el-table>
@@ -47,13 +53,15 @@ layout("/layouts/platform.html"){
<template #public>
<info ref="infoRef"></info>
</template>
<template #edit>
<apply_form ref="applyFormRef" @refresh="refresh"></apply_form>
</template>
</guava>
<apply_form ref="applyFormRef" @refresh="doSearch"></apply_form>
</div>
<script>
<!--#include('../apply/apply.js'){}#-->
<!--#include("../common/info.js"){}#-->
<!--#include("../apply/apply.js"){}#-->
new Vue({
el: "#app",
@@ -67,6 +75,38 @@ layout("/layouts/platform.html"){
return {}
},
methods: {
refresh() {
this.$refs.guava.index()
this.pageData()
},
onRevoke(row) {
this.$confirm("您确定要撤回吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/flow/common/revokeTask", {taskId: row.startTaskId}).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.pageData()
}
})
})
},
doDelete(id) {
this.$confirm("您确定要撤回吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/platform/evaluate/mine/delete", {id}).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.pageData()
}
})
})
},
openView(row) {
this.$refs.guava.public(() => {
this.$refs.infoRef.onOpen(row.id)
@@ -74,32 +114,10 @@ layout("/layouts/platform.html"){
})
},
openEdit(row) {
this.$refs.applyFormRef.onOpenEdit(row.id)
},
openRevoke(row) {
this.$confirm("您确定要撤销申请吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/platform/evaluate/mine/revokeApply", { id: row.id }).then((resp) => {
this.$message.success(resp.msg)
this.doSearch()
})
this.$refs.guava.edit(() => {
this.$refs.applyFormRef.onOpenEdit(row)
})
},
async doDelete(row) {
const confirm = await this.$confirm("您确定要删除吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
if (confirm === "confirm") {
const resp = await this.$axios.post("/platform/evaluate/mine/delete", { id: row.id })
this.$message.success(resp.msg)
this.doSearch()
}
}
},
created() {
this.pageData()
@@ -9,11 +9,17 @@ layout("/layouts/platform.html"){
<search-item label="年度">
<el-date-picker v-model="pageForm.year" type="year" value-format="yyyy" placeholder="选择年度"></el-date-picker>
</search-item>
<search-item label="姓名:">
<el-input placeholder="请输入姓名查询" clearable v-model="pageForm.userName"></el-input>
</search-item>
<search-item label="工号:">
<el-input placeholder="请输入工号查询" clearable v-model="pageForm.loginName"></el-input>
<search-item label="申请人">
<el-input @keyup.enter.native="doSearch" clearable
placeholder="请输入内容"
v-model="pageForm.searchKeyword">
<el-select placeholder="查询类型" slot="prepend"
style="width: 100px;"
v-model="pageForm.searchName">
<el-option label="姓名" value="info.userName"></el-option>
<el-option label="工号" value="info.loginName"></el-option>
</el-select>
</el-input>
</search-item>
<search-item label="所属工会:">
<el-select v-model="pageForm.unionId" placeholder="请选择所属工会" filterable clearable style="width: 100%">
@@ -42,22 +48,21 @@ layout("/layouts/platform.html"){
<el-table-column prop="loginName" label="工号"></el-table-column>
<el-table-column prop="unitName" label="单位"></el-table-column>
<el-table-column prop="unionName" label="分工会"></el-table-column>
<el-table-column prop="applyDateTime" label="申请时间"></el-table-column>
<el-table-column prop="honorName" label="类型" show-overflow-tooltip></el-table-column>
<el-table-column label="当前节点" prop="processInstanceNodeName" show-overflow-tooltip></el-table-column>
<el-table-column label="操作" width="300px">
<el-table-column prop="applyDateTime" label="申请时间"></el-table-column>
<el-table-column prop="taskName" label="当前节点"></el-table-column>
<el-table-column prop="instanceState" label="流程状态">
<template v-slot="{row}">
<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="300px">
<template slot-scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
审核
<el-button v-if="row.taskState === 10" @click="openAudit(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 v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">撤回
</el-button>
</template>
</el-table-column>
@@ -65,25 +70,32 @@ layout("/layouts/platform.html"){
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #public>
<info ref="infoRef"></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 #edit>
<info ref="infoRef">
<div v-if="showApprovalForm">
<div class="process-title">
{{formData.taskName}}
</div>
<el-form :model="formData" ref="formRef" :rules="formRules" 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>
<!--:rules="[{required:true,message:'必填',trigger:['change','blur']}]"-->
<el-form-item label="签字" prop="tf_userSign"
>
<pc-signature v-model="formData.tf_userSign"></pc-signature>
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到发起人</el-button>
<el-button @click="handleTaskAction(2)" size="small" type="danger">拒绝申请</el-button>
<el-button @click="handleTaskAction(1)" size="small" type="primary">同意申请</el-button>
</el-row>
</div>
</info>
</template>
</guava>
</div>
@@ -114,50 +126,58 @@ layout("/layouts/platform.html"){
},
methods: {
openView(row) {
this.$refs.guava.public(() => {
this.$refs.infoRef.onOpen(row.id)
this.$refs.guava.edit(() => {
this.$refs.infoRef.onOpen(row)
this.showApprovalForm = false
})
},
openApproval(row) {
this.$refs.guava.public(() => {
this.$refs.infoRef.onOpen(row.id)
this.formData = row.approvalParam
openAudit(row) {
this.$refs.guava.edit(() => {
this.$refs.infoRef.onOpen(row)
this.formData = {
processTaskId: row.taskId,
taskName: row.curTaskName
}
this.showApprovalForm = true
})
},
doApproval(approvalType) {
this.formData.bpmTaskApprovalType = approvalType
this.$refs.approvalFormRef.validate((valid) => {
handleTaskAction(val) {
this.$refs.formRef.validate((valid) => {
if (valid) {
this.$axios
.post(loc() + "/approval", {
approval: JSON.stringify(this.formData)
})
.then((res) => {
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/flow/common/executeTask", {
data: JSON.stringify({
...this.formData,
submitType: val
})
}).then((res) => {
if (res.code === 0) {
this.$refs.guava.index()
this.$message.success(res.msg)
this.doSearch()
}
})
})
}
})
},
openRevoke(taskId) {
})},
onRevoke(row) {
this.$confirm("您确定要撤回吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "info"
}).then(() => {
this.$axios.post(loc() + "/revoke", { taskId }).then((res) => {
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.doSearch()
}
})
})
}
},
},
async created() {
this.unitList = await this.$businessTool.listUnit()
@@ -8,30 +8,47 @@ layout("/layouts/platform.html"){
<search @search="doSearch">
<search-item label="年度:">
<el-date-picker
placeholder="选择年度"
type="year"
style="width: 100%"
v-model="pageForm.year"
value-format="yyyy"
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.userName"></el-input>
</search-item>
<search-item label="工号:">
<el-input placeholder="请输入工号查询" clearable v-model="pageForm.loginName"></el-input>
<search-item label="申请人">
<el-input @keyup.enter.native="doSearch" clearable
placeholder="请输入内容"
v-model="pageForm.searchKeyword">
<el-select placeholder="查询类型" slot="prepend"
style="width: 100px;"
v-model="pageForm.searchName">
<el-option label="姓名" value="info.userName"></el-option>
<el-option label="工号" value="info.loginName"></el-option>
</el-select>
</el-input>
</search-item>
<!-- <search-item label="名称:">-->
<!-- <el-input placeholder="请输入评优评先名称查询" clearable v-model="pageForm.evaluateName"></el-input>-->
<!-- </search-item>-->
<search-item label="评优评先事项:">
<el-select v-model="pageForm.evaluateId" placeholder="请选择评优评先事项" filterable clearable
style="width: 100%">
<el-option v-for="item in evaluateList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</search-item>
<search-item label="所属工会:">
<el-select v-model="pageForm.unionId" placeholder="请选择所属工会" filterable clearable style="width: 100%">
<el-option v-for="item in unionList" :key="item.id" :label="item.name" :value="item.id"></el-option>
<el-select v-model="pageForm.unionId" placeholder="请选择所属工会" filterable clearable
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-item label="所属单位:">
<el-select v-model="pageForm.unitId" placeholder="请选择所属单位" filterable clearable style="width: 100%">
<el-option v-for="item in unitList" :key="item.id" :label="item.name" :value="item.id"></el-option>
<el-select v-model="pageForm.unitId" placeholder="请选择所属单位" filterable clearable
style="width: 100%">
<el-option v-for="item in unitList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</search-item>
</search>
@@ -50,11 +67,11 @@ layout("/layouts/platform.html"){
<el-table-column prop="applyDateTime" label="申请时间"></el-table-column>
<el-table-column prop="honorName" label="类型" show-overflow-tooltip></el-table-column>
<!-- <el-table-column prop="honorTypeName" label="荣誉类型"></el-table-column>-->
<el-table-column prop="processInstanceNodeName" label="审核状态"></el-table-column>
<el-table-column label="操作" width="300px" fixed="right">
<template slot-scope="{row}">
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
<el-button size="mini" type="danger" @click="doDelete(row)" v-if="$auth.hasPermission('evaluation.summary.delete')">
<el-button size="mini" type="danger" @click="doDelete(row)"
v-if="$auth.hasRoleOr(['SYSADMIN'])">
删除
</el-button>
<!--<el-button size="mini" type="primary" @click="">导出登记表</el-button>-->
@@ -63,7 +80,7 @@ layout("/layouts/platform.html"){
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #public>
<template #view>
<info ref="infoRef"></info>
</template>
</guava>
@@ -79,13 +96,18 @@ layout("/layouts/platform.html"){
},
data() {
return {
pageForm: {
year: new Date().getFullYear() + "",
searchName: "info.userName"
},
unionList: [],
unitList: []
unitList: [],
evaluateList: [],
}
},
methods: {
openView(row) {
this.$refs.guava.public(() => {
this.$refs.guava.view(() => {
this.$refs.infoRef.onOpen(row.id)
})
},
@@ -99,15 +121,21 @@ layout("/layouts/platform.html"){
type: "warning"
})
if (confirm === "confirm") {
const resp = await this.$axios.post("/platform/evaluate/summary/delete", { id: row.id })
const resp = await this.$axios.post("/platform/evaluate/summary/delete", {id: row.id})
this.$message.success(resp.msg)
this.doSearch()
}
}
},
listEvaluate() {
this.$axios.get("/platform/evaluate/activity/listEvaluateActivityByYear", {year: this.pageForm.year}).then(resp => {
this.evaluateList = resp.data
})
},
},
async created() {
this.unitList = await this.$businessTool.listUnit()
this.unionList = await this.$businessTool.listUnion()
this.listEvaluate()
this.pageData()
}
})
@@ -37,8 +37,10 @@ layout("/layouts/platform.html"){
</el-select>
</search-item>
<search-item label="所属工会">
<el-select 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 unionOptions"></el-option>
<el-select 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 unionOptions"></el-option>
</el-select>
</search-item>
</search>
@@ -141,7 +143,10 @@ layout("/layouts/platform.html"){
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
const resp = await this.$axios.post('/platform/executiveCommittee/delegationOnePush/doDelete', {id: row.id})
const resp = await this.$axios.post('/platform/executiveCommittee/delegationOnePush/doDelete', {
id: row.id,
teacherMeetId: this.pageForm.teacherMeetId
})
if (resp.code === 0) {
this.doSearch()
this.$message.success(resp.msg)
@@ -183,6 +188,7 @@ layout("/layouts/platform.html"){
display: flex;
flex-direction: column;
}
.pushFormDialog .el-transfer-panel__list.is-filterable {
flex: 1;
}
@@ -12,6 +12,7 @@ const DELEGATION_ONE_PUSH_FORMAL_DIALOG = {
ref="transfer"
v-model="userValue"
:data="userData"
filter-placeholder="请按姓名模糊搜索"
:filter-method="filterMethod"
:props="{key: 'userId',label: 'name'}"
:right-default-checked="rightChecked"
@@ -15,8 +15,8 @@ layout("/layouts/platform.html"){
placeholder="查询"
style="width: 100px;"
>
<el-option label="工号" value="t1.loginName"></el-option>
<el-option label="姓名" value="t1.userName"></el-option>
<el-option label="工号" value="t2.loginName"></el-option>
<el-option label="姓名" value="t2.userName"></el-option>
</el-select>
</el-input>
</search-item>
@@ -37,8 +37,10 @@ layout("/layouts/platform.html"){
</el-select>
</search-item>
<search-item label="所属工会">
<el-select 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 unionOptions"></el-option>
<el-select 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 unionOptions"></el-option>
</el-select>
</search-item>
</search>
@@ -99,7 +101,7 @@ layout("/layouts/platform.html"){
return {
pageDataUrl: "/platform/executiveCommittee/delegationTwoPush/pageData",
pageForm: {
searchName: 't1.userName',
searchName: 't2.userName',
teacherMeetId: null,
unionId: null
},
@@ -141,7 +143,10 @@ layout("/layouts/platform.html"){
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
const resp = await this.$axios.post('/platform/executiveCommittee/delegationTwoPush/doDelete', {id: row.id})
const resp = await this.$axios.post('/platform/executiveCommittee/delegationTwoPush/doDelete', {
id: row.id,
teacherMeetId: this.pageForm.teacherMeetId
})
if (resp.code === 0) {
this.doSearch()
this.$message.success(resp.msg)
@@ -183,6 +188,7 @@ layout("/layouts/platform.html"){
display: flex;
flex-direction: column;
}
.pushFormDialog .el-transfer-panel__list.is-filterable {
flex: 1;
}
@@ -12,6 +12,7 @@ const DELEGATION_TWO_PUSH_FORMAL_DIALOG = {
ref="transfer"
v-model="userValue"
:data="userData"
filter-placeholder="请按姓名模糊搜索"
:filter-method="filterMethod"
:props="{key: 'userId',label: 'name'}"
:right-default-checked="rightChecked"
@@ -5,9 +5,22 @@ layout("/layouts/platform.html"){
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<search @search="doSearch">
<search @search="fetchConfig">
<search-item label="教代会届次">
<el-select
v-model="pageForm.sessionId"
filterable
placeholder="请选择教代会"
style="width:100%;"
@change="fetchConfig"
>
<el-option
v-for="item in teacherMeets"
:key="item.id"
:label="item.fullName"
:value="item.id"
></el-option>
</el-select>
</search-item>
</search>
</el-card>
@@ -18,14 +31,15 @@ layout("/layouts/platform.html"){
<el-input-number v-model="formData.prepareGroupQuotaCount" placeholder="请填写筹备组推荐名额数"
style="width: 100%"></el-input-number>
</el-form-item>
<el-form-item prop="committeeQuotaCount" label="委员会预选人数">
<el-input-number v-model="formData.committeeQuotaCount"
placeholder="请填写委员会预选人数" style="width: 100%"></el-input-number>
</el-form-item>
<el-form-item prop="delegationQuotaCount" label="代表团推荐总数">
<el-input-number v-model="formData.delegationQuotaCount"
placeholder="请填写代表团推荐名额总数" style="width: 100%"></el-input-number>
</el-form-item>
<el-form-item prop="committeeQuotaCount" label="委员会预选人数">
<el-input-number v-model="formData.committeeQuotaCount"
placeholder="请填写委员会预选人数" style="width: 100%"></el-input-number>
</el-form-item>
<el-form-item prop="firstTime" label="第一次预选时间">
<el-date-picker
v-model="formData.firstTime"
@@ -94,7 +108,7 @@ layout("/layouts/platform.html"){
mixins: [initTableMixins],
data() {
return {
openJdhList:[],
teacherMeets:[],
pageForm: {
sessionId: ''
},
@@ -123,14 +137,15 @@ layout("/layouts/platform.html"){
getAllJdh() {
this.$axios.post("/platform/teacherCongress/common/listSession", {}).then(resp => {
if (resp.code === 0) {
this.openJdhList = resp.data
if (this.openJdhList.length > 0) {
this.pageForm.sessionId = this.openJdhList[0].id
this.teacherMeets = resp.data
if (this.teacherMeets && this.teacherMeets.length > 0) {
this.$set(this.pageForm, 'sessionId', this.teacherMeets[0].id)
this.fetchConfig()
}
}
})
},
onHandle() {
this.$refs['form'].validate(async (valid) => {
if (valid) {
@@ -14,8 +14,8 @@ layout("/layouts/platform.html"){
placeholder="查询"
style="width: 100px;"
>
<el-option label="工号" value="t1.loginName"></el-option>
<el-option label="姓名" value="t1.userName"></el-option>
<el-option label="工号" value="op.loginName"></el-option>
<el-option label="姓名" value="op.userName"></el-option>
</el-select>
</el-input>
</search-item>
@@ -130,7 +130,7 @@ layout("/layouts/platform.html"){
return {
pageDataUrl: "/platform/executiveCommittee/executiveCommitteeMember/pageData",
pageForm: {
searchName: 't1.userName',
searchName: 'op.userName',
},
teacherMeets: [],
unionOptions: [],
@@ -156,7 +156,10 @@ layout("/layouts/platform.html"){
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
const resp = await this.$axios.post('/platform/executiveCommittee/delegationOnePush/doDelete', {id: row.id})
const resp = await this.$axios.post('/platform/executiveCommittee/preparatoryGroupPush/doDelete', {
id: row.id,
teacherMeetId: this.pageForm.teacherMeetId
})
if (resp.code === 0) {
this.doSearch()
this.$message.success(resp.msg)
@@ -197,6 +200,7 @@ layout("/layouts/platform.html"){
display: flex;
flex-direction: column;
}
.pushFormDialog .el-transfer-panel__list.is-filterable {
flex: 1;
}
@@ -12,6 +12,7 @@ const PUSH_FORMAL_DIALOG = {
ref="transfer"
v-model="userValue"
:data="userData"
filter-placeholder="请按姓名模糊搜索"
:filter-method="filterMethod"
:props="{key: 'userId',label: 'name'}"
:right-default-checked="rightChecked"
@@ -82,6 +82,18 @@ layout("/layouts/platform.html"){
</el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="子女出生年月">
<el-form-item prop="childrenBirthday"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-date-picker
v-model="formData.childrenBirthday"
type="date"
placeholder="请选择子女出生年月"
style="width: 100%;"
value-format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="现就读学校">
<el-form-item prop="childrenCurrentSchool"
@@ -111,6 +123,8 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="备注">
<el-form-item prop="note"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
@@ -118,7 +132,6 @@ layout("/layouts/platform.html"){
maxlength="50"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item></el-descriptions-item>
<el-descriptions-item label="户口簿照片" :span="2">
<el-form-item prop="huKouFiles"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
@@ -171,8 +184,50 @@ layout("/layouts/platform.html"){
}
})
},
validateBirthday() {
if (!this.formData.registrationType) {
return "请选择登记类型"
}
if (!this.formData.childrenBirthday) {
return "请选择子女出生年月"
}
const childrenBirthday = new Date(this.formData.childrenBirthday);
if (isNaN(childrenBirthday.getTime())) {
return "出生日期格式无效";
}
const registrationType = this.registrationTypeOption.find(item => item.registrationType === this.formData.registrationType)
if (registrationType.greaterThanBirthday) {
const greaterThanBirthday = new Date(registrationType.greaterThanBirthday);
if (isNaN(greaterThanBirthday.getTime())) {
return "限制日期格式无效";
}
if (childrenBirthday < greaterThanBirthday) {
return "出生日期不能小于" + registrationType.greaterThanBirthday;
}
}
if (registrationType.lessThanBirthday) {
const lessThanBirthday = new Date(registrationType.lessThanBirthday);
if (isNaN(lessThanBirthday.getTime())) {
return "限制日期格式无效";
}
if (childrenBirthday > lessThanBirthday) {
return "出生日期不能大于" + registrationType.lessThanBirthday;
}
}
return null; // 表示通过
},
// 保存
onSave() {
const msg = this.validateBirthday()
if ( msg){
this.$message.warning(msg)
return
}
this.getIsRepeatByIdCard().then(flag => {
if (flag) {
@@ -194,6 +249,11 @@ layout("/layouts/platform.html"){
},
// 提交
onSubmit() {
const msg = this.validateBirthday()
if ( msg){
this.$message.warning(msg)
return
}
this.getIsRepeatByIdCard().then(flag => {
if (flag) {
@@ -218,6 +278,11 @@ layout("/layouts/platform.html"){
},
onFinishTask() {
const msg = this.validateBirthday()
if ( msg){
this.$message.warning(msg)
return
}
this.getIsRepeatByIdCard().then(flag => {
if (flag) {
@@ -227,11 +292,9 @@ layout("/layouts/platform.html"){
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post('/flow/common/executeTask', {
data: JSON.stringify({
processTaskId: GetQueryString("taskId"),
submitType: 5
})
this.$axios.post('/platform/enrollmentRegistration/apply/submitAgain', {
data: JSON.stringify(this.formData),
taskId: GetQueryString("taskId")
}).then(res => {
if (res.code === 0) {
this.$message.success("提交成功")
@@ -243,7 +306,7 @@ layout("/layouts/platform.html"){
})
},
async getIsRepeatByIdCard() {
if (!this.formData.childrenIdCard){
if (!this.formData.childrenIdCard) {
this.$message.error("请填写子女身份证号码")
return
}
@@ -273,11 +336,16 @@ layout("/layouts/platform.html"){
this.formData = data
})
} else {
const {id, username, loginname, mobile, union, unit} = this.$store.state.user
this.formData = {
userName: this.$store.state.user.username,
loginName: this.$store.state.user.loginname,
unitName: this.$store.state.user.unit.name,
mobile: this.$store.state.user.mobile,
userId: id,
userName: username,
loginName: loginname,
unitName: unit.name,
unitId: unit.id,
unionName: union.name,
unionId: union.id,
mobile: mobile,
}
}
@@ -62,10 +62,15 @@ layout("/layouts/platform.html"){
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #view>
<enrollment-registration-info ref="enrollmentRegistrationInfo">
</enrollment-registration-info>
</template>
</guava>
</div>
<script>
<!--#include('../info.js'){}#-->
new Vue({
el: "#app",
store,
@@ -79,9 +84,14 @@ layout("/layouts/platform.html"){
}
}
},
components: {},
components: {
"enrollment-registration-info": ENROLLMENT_REGISTRATION_INFO
},
methods: {
openView(row) {
this.$refs.guava.view(() => {
this.$refs.enrollmentRegistrationInfo.onOpen(row)
})
},
openEdit(row) {
window.location.href = '/platform/enrollmentRegistration/apply/index?taskId=' + (row.startTaskId || '') + "&bizId=" + row.id
@@ -101,6 +111,18 @@ layout("/layouts/platform.html"){
})
},
doDelete(id) {
this.$confirm("您确定要删除吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/platform/enrollmentRegistration/applyList/doDelete", {id: id}).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.pageData()
}
})
})
}
},
async created() {
@@ -28,6 +28,9 @@ const ENROLLMENT_REGISTRATION_INFO = {
<el-descriptions-item label="身份证号">
{{viewData.childrenIdCard}}
</el-descriptions-item>
<el-descriptions-item label="子女出生日期" >
{{viewData.childrenBirthday}}
</el-descriptions-item>
<el-descriptions-item label="现就读学校">
{{viewData.childrenCurrentSchool}}
</el-descriptions-item>
@@ -38,10 +41,10 @@ const ENROLLMENT_REGISTRATION_INFO = {
<el-descriptions-item label="子女户口所在地">
{{viewData.childrenHuKouAddress}}
</el-descriptions-item>
<el-descriptions-item label="备注" :span="2">
{{viewData.note}}
</el-descriptions-item>
<el-descriptions-item></el-descriptions-item>
<el-descriptions-item :span="3" label="户口簿照片">
<file-preview :files="viewData.huKouFiles" complete_result></file-preview>
</el-descriptions-item>
@@ -53,7 +53,7 @@ layout("/layouts/platform.html"){
</guava>
<el-dialog :visible.sync="dialogVisible" title="创建计划" width="40%">
<el-form :model="formData" :rules="formRules" ref="formRef" label-width="150px">
<el-form :model="formData" :rules="formRules" ref="formRef" label-width="170px">
<el-row :gutter="10">
<el-col :span="12">
<el-form-item
@@ -312,11 +312,9 @@ layout("/layouts/platform.html"){
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post('/flow/common/executeTask', {
data: JSON.stringify({
processTaskId: GetQueryString("taskId"),
submitType: 5
})
this.$axios.post('/platform/activity/budget/apply/submitAgain', {
data: JSON.stringify(this.formData),
taskId: GetQueryString("taskId")
}).then(res => {
if (res.code === 0) {
this.$message.success("提交成功")
@@ -223,7 +223,7 @@ layout("/layouts/platform.html"){
async created() {
this.budgetTypeOption = await this.$businessTool.getDictOptions("ACTIVITY_BUDGET_TYPE")
this.budgetTypeOption.unshift({name: "全部类型", code: ""})
// this.clubOption = await getClubsByRole()
this.clubOption = await this.$businessTool.listCLubByRole()
this.unionList = await this.$businessTool.listUnion()
this.getApplyMoney()
this.pageData()
@@ -1,110 +0,0 @@
<div id="suggestion-box-view">
<el-descriptions :column="3" border>
<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="预算类型">
<dict-tag :options="budgetTypeOption"
:value="viewData.outlayManageSource"></dict-tag>
</el-descriptions-item>
<el-descriptions-item label="申报(承办)单位">{{viewData.helpUnitName}}</el-descriptions-item>
<el-descriptions-item label="活动项目">{{viewData.activityMatter}}</el-descriptions-item>
<el-descriptions-item label="活动时间">{{viewData.activityDate}}</el-descriptions-item>
<el-descriptions-item label="申报预算金额(元)">{{viewData.declareTotalBudgetMoney}}</el-descriptions-item>
<el-descriptions-item label="最终预算金额(元)">{{viewData.totalBudgetMoney}}</el-descriptions-item>
<el-descriptions-item label="申报时间">{{viewData.applyDate}}</el-descriptions-item>
<el-descriptions-item :span="2"></el-descriptions-item>
<el-descriptions-item label="活动内容(如训练、装备等)" :span="3">
<div v-html="viewData.activityContent"></div>
</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>
<el-descriptions-item label="审核金额">
{{task.ext.tf_totalBudgetMoney}}
</el-descriptions-item>
<el-descriptions-item :span="2"></el-descriptions-item>
<el-descriptions-item label="办理意见" v-if="!task.ext.isFirstTaskNode">{{ task.taskFormData.opinion
}}
</el-descriptions-item>
</el-descriptions>
</div>
</template>
</div>
<script>
new Vue({
el: "#suggestion-box-view",
store,
dicts: ["PROCESS_TASK_SUBMIT_TYPE"],
data() {
return {
businessId: GetQueryString("businessId"),
instanceId: GetQueryString("instanceId"),
viewData: {},
doneTasks: [],
budgetTypeOption: []
}
},
methods: {
info() {
this.$axios.post("/platform/activity/budget/applyList/findOne", {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.$businessTool.getDictOptions("ACTIVITY_BUDGET_TYPE").then(resp => {
this.budgetTypeOption = resp
})
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;
}
</style>
@@ -0,0 +1,182 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
</style>
<div class="platform" id="app" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never">
<search @search="doSearch">
<search-item label="年度">
<el-date-picker
@change="doSearch"
placeholder="选择年度"
style="width: 100%" type="year"
v-model="pageForm.year"
:clearable="false"
value-format="yyyy">
</el-date-picker>
</search-item>
</search>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="预算分配">
<template v-if="pageForm.year===$moment().format('YYYY')">
<el-button @click="issuedOutlay" size="small" type="primary" v-if="!isAllocation">年度分配
</el-button>
<el-button type="danger" size="small" @click="resetOutlay" v-else>
分配重置
</el-button>
</template>
</table-tool>
<el-table :data="tableData" style="width: 100%" row-key="id"
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
show-overflow-tooltip
align="center"
header-align="center"
v-for="column in tableColumns"
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
:width="column.width"
min-width="50"
>
<template v-if="column.prop=='totalQuota'" v-slot="{row}">
<el-input v-if="row.edit" maxlength="8" min="0" type="number"
style="width: 70%"
size="small"
onKeypress="return (/[\d]/.test(String.fromCharCode(event.keyCode)))"
v-model="row.totalQuota2" placeholder="填写总额度">
<template slot="append"></template>
</el-input>
<div v-else>
<span v-if="!row.totalQuota">暂未分配</span>
<span v-else><i>{{row.totalQuota}}</i></span>
</div>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作"
fixed="right" width="200">
<template slot-scope="{row}">
<div v-if="row.edit">
<el-button type="success" icon="el-icon-check" size="mini"
@click="doSubmit(row)"
circle></el-button>
<el-button type="danger" icon="el-icon-close" size="mini"
@click="$set(row,'edit',false)"
circle></el-button>
</div>
<el-button v-else size="mini" type="primary"
@click="$set(row,'edit',true);$set(row,'totalQuota2',row.totalQuota);">
编辑
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
store,
mixins: [initTableMixins],
data() {
return {
tableColumns: [
{prop: 'year', label: '年度'},
{prop: 'clubName', label: '协会名称'},
{prop: 'totalQuota', label: '预算费用'},
],
pageForm: {
year: this.$moment().format("YYYY")
},
isAllocation: false
}
},
components: {},
methods: {
doSubmit(row) {
this.$confirm('您确定要提交此条记录吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$axios.post("/platform/outlay/outlayManage/clubManage/doSubmit", {
id: row.id,
totalQuota: row.totalQuota2
}).then((resp) => {
if (resp.code === 0) {
row.edit = false
this.doSearch()
this.$message.success("编辑成功");
}
})
})
},
resetOutlay() {
this.$confirm('您确定要重置今年的记录吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$axios.post("/platform/outlay/outlayManage/clubManage/resetOutlay", {
year: this.pageForm.year
}).then((resp) => {
if (resp.code === 0) {
this.doSearch()
this.getIsAllocation()
this.$message.success("操作成功");
}
})
})
},
issuedOutlay() {
this.$confirm('您确定要下发今年的记录吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.$axios.post("/platform/outlay/outlayManage/clubManage/issuedOutlay", {
year: this.pageForm.year
}).then((resp) => {
if (resp.code === 0) {
this.doSearch()
this.getIsAllocation()
this.$message.success("操作成功");
}
})
})
},
getIsAllocation() {
this.$axios.post("/platform/outlay/outlayManage/clubManage/getIsAllocationOutlay", {
year: this.pageForm.year
}).then((resp) => {
if (resp.code === 0) {
this.isAllocation = (resp.data > 0)
}
})
}
},
async created() {
this.getIsAllocation()
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,101 @@
<!--#include("../../common/editDetailDialog.js"){}#-->
let OUTLAY_MANAGE_CLUB_USE_DETAIL_INFO = {
/*language=HTML*/
template: `
<div>
<template>
<table-tool label="预算详情列表"></table-tool>
<el-table :data="tableData" style="width: 100%" row-key="id"
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 label="活动名称" prop="projectName" header-align="center"
align="center"></el-table-column>
<el-table-column label="活动时间" prop="activityTime"
header-align="center"
align="center"></el-table-column>
<el-table-column label="活动人数" prop="activityNumber"
header-align="center"
align="center"></el-table-column>
<el-table-column label="活动费用" prop="adjustMoney"
header-align="center"
align="center"></el-table-column>
<el-table-column label="审核人" prop="adjustUserName" header-align="center"
align="center"></el-table-column>
<el-table-column label="事由" prop="adjustReason" header-align="center"
show-overflow-tooltip
align="center"></el-table-column>
<el-table-column align="center" header-align="center" label="操作"
fixed="right" width="200">
<template slot-scope="{row}">
<el-button size="mini" type="primary" @click="openEdit(row)"
:disabled="!['superadmin'].includes($store.state.user.loginname)"
>编辑
</el-button>
<el-button size="mini" type="danger" @click="doDelete(row)"
:disabled="!['superadmin'].includes($store.state.user.loginname)"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</template>
<template>
<outlay-manage-edit-detail-dialog ref="editDetailDialog" @search="search"></outlay-manage-edit-detail-dialog>
</template>
</div>
`,
store,
mixins: [initTableMixins],
data() {
return {
rowData: {},
}
},
components: {
'outlay-manage-edit-detail-dialog': OUTLAY_MANAGE_EDIT_DETAIL_DIALOG
},
methods: {
search(){
this.doSearch()
this.$emit("search")
},
openEdit(row) {
this.$refs.editDetailDialog.open(row,"/platform/outlay/outlayManage/clubUseDetail/doEditDetail")
},
doDelete(row) {
this.$confirm("确定要删除该详情吗?", "提示", {type: "warning"}).then(async () => {
this.$set(row, "loading", true)
const resp = await this.$axios.post("/platform/outlay/outlayManage/clubUseDetail/doDeleteDetail", {id: row.id})
if (resp.code === 0) {
this.doSearch()
this.$emit("search")
this.$message.success(resp.msg)
} else {
this.$message.error(resp.msg)
}
})
},
pageData() {
this.$axios.post("/platform/outlay/outlayManage/clubUseDetail/detailInfo", this.pageForm).then((resp) => {
this.tableLoading = false
if (resp.code === 0) {
this.tableData = resp.data.list
this.pageForm.totalCount = resp.data.totalCount
}
})
},
open(row) {
this.tableLoading = true
this.rowData = row
this.pageForm.outlayManageId = row.id
this.pageData()
}
}
}
@@ -0,0 +1,125 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
</style>
<div class="platform" id="app" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never">
<search @search="doSearch">
<search-item label="年度">
<el-date-picker
@change="doSearch"
placeholder="选择年度"
style="width: 100%" type="year"
v-model="pageForm.year"
:clearable="false"
value-format="yyyy">
</el-date-picker>
</search-item>
<search-item label="所属协会" v-if="$auth.hasRoleOr(['SYSADMIN', 'SCHOOL_UNION_ADMIN'])">
<el-select clearable
placeholder="请选择协会"
style="width: 100%;" v-model="pageForm.clubId">
<el-option
:key="item.id"
:label="item.clubName"
:value="item.id"
v-for="item in clubOption">
</el-option>
</el-select>
</search-item>
</search>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="预算使用情况">
</table-tool>
<el-table :data="tableData" style="width: 100%" row-key="id"
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
show-overflow-tooltip
align="center"
header-align="center"
v-for="column in tableColumns"
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
:width="column.width"
min-width="50"
>
<template v-slot="{row}" v-if="column.prop=='surplusQuota'">
<span v-if="!row.totalQuota">{{row.totalQuota}}元</span>
<span v-else>{{(row.totalQuota-row.usedQuota).toFixed(2)}}</span>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作"
fixed="right" width="150">
<template slot-scope="{row}">
<el-button size="mini" type="primary" @click="openView(row)">使用详情</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #view>
<outlay-manage-club-use-detail-info ref="detailInfo" @search="doSearch"></outlay-manage-club-use-detail-info>
</template>
</guava>
</div>
<script>
<!--#include("detailInfo.js"){}#-->
const vue = new Vue({
el: '#app',
store,
mixins: [initTableMixins],
data() {
return {
tableColumns: [
{prop: 'year', label: '年度'},
{prop: 'clubName', label: '协会名称'},
{prop: 'clubCode', label: '协会编码'},
{prop: 'totalQuota', label: '分配总额度(元)'},
{prop: 'usedQuota', label: '已使用额度(元)'},
{prop: 'surplusQuota', label: '剩余额度(元)'},
],
pageForm: {
year: this.$moment().format("YYYY")
},
clubOption: []
}
},
components: {
"outlay-manage-club-use-detail-info": OUTLAY_MANAGE_CLUB_USE_DETAIL_INFO
},
methods: {
openView(row) {
this.$refs.guava.view(() => {
this.$refs.detailInfo.open(row)
})
},
},
async created() {
this.clubOption = await this.$businessTool.listCLubByRole()
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -30,14 +30,15 @@ layout("/layouts/platform.html"){
v-if="['ACTIVITY_BUDGET_TYPE_THREE'].includes(formData.outlayManageSource)">
<el-form-item label="所属协会" prop="clubId"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-select v-model="formData.clubId" @change="getBudgetMoneyOrActivity"
style="width: 100%"
placeholder="请选择所属协会">
<el-select clearable
placeholder="请选择协会"
style="width: 100%;" v-model="formData.clubId"
@change="getBudgetMoneyOrActivity();clubChange()">
<el-option
v-for="item in clubList"
:key="item.clubid"
:key="item.id"
:label="item.clubName"
:value="item.clubid">
:value="item.id"
v-for="item in clubOption">
</el-option>
</el-select>
</el-form-item>
@@ -115,9 +116,8 @@ layout("/layouts/platform.html"){
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="签字" :span="2">
<!-- :rules="[{required:true,message:'必填',trigger:['change','blur']}]"-->
<el-form-item label="签字" prop="userSign"
>
<!-- :rules="[{required:true,message:'必填',trigger:['change','blur']}]"-->
<el-form-item label="签字" prop="userSign">
<pc-signature v-model="formData.userSign"></pc-signature>
</el-form-item>
</el-descriptions-item>
@@ -142,7 +142,7 @@ layout("/layouts/platform.html"){
taskId: GetQueryString("taskId"),
formData: {},
budgetTypeOption: [],
clubList: [],
clubOption: [],
activityList: [],
moneyPlaceholder: "请输入金额",
budgetMoney: 0,
@@ -198,11 +198,9 @@ layout("/layouts/platform.html"){
}).then(() => {
this.$axios.post("/platform/outlay/reimburse/apply/bxAddValidate", this.formData).then(res => {
if (res.code === 0) {
this.$axios.post('/flow/common/executeTask', {
data: JSON.stringify({
processTaskId: GetQueryString("taskId"),
submitType: 5
})
this.$axios.post('/platform/outlay/reimburse/apply/submitAgain', {
data: JSON.stringify(this.formData),
taskId: GetQueryString("taskId")
}).then(res => {
if (res.code === 0) {
this.$message.success("提交成功")
@@ -219,6 +217,8 @@ layout("/layouts/platform.html"){
return
}
this.$set(this.formData, "budgetId", null)
this.$set(this.formData, "clubId", null)
this.$set(this.formData, "clubName", null)
await this.getBudgetMoneyOrActivity()
if (val === "ACTIVITY_BUDGET_TYPE_TWO") {
this.$set(this.formData, "unionId", this.$store.state.user.union.id)
@@ -340,17 +340,31 @@ layout("/layouts/platform.html"){
}
})
} else {
const {id, username, loginname, mobile, union, unit} = this.$store.state.user
this.formData = {
userName: this.$store.state.user.username,
loginName: this.$store.state.user.loginname,
mobile: this.$store.state.user.mobile,
userId: id,
userName: username,
loginName: loginname,
unitName: unit.name,
unitId: unit.id,
unionName: union.name,
unionId: union.id,
mobile: mobile,
}
}
},
clubChange() {
if (this.formData.clubId) {
const club = this.clubOption.find(v => v.id === this.formData.clubId)
this.$set(this.formData, 'clubName', club.clubName)
} else {
this.$set(this.formData, 'clubName', null)
}
}
},
async created() {
this.init()
this.clubOption = await this.$businessTool.listCLubByRole()
}
})
</script>
@@ -0,0 +1,199 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app">
<guava ref="guava">
<el-card shadow="never">
<search @search="doSearch">
<search-item label="年度">
<el-date-picker
@change="doSearch"
placeholder="选择年"
style="width: 100%"
type="year"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</search-item>
<search-item label="经办人">
<el-input @keyup.enter.native="doSearch" clearable
placeholder="请输入内容"
v-model="pageForm.searchKeyword">
<el-select placeholder="查询类型" slot="prepend"
style="width: 100px;"
v-model="pageForm.searchName">
<el-option label="姓名" value="info.userName"></el-option>
<el-option label="工号" value="info.loginName"></el-option>
</el-select>
</el-input>
</search-item>
</search>
</el-card>
<el-card shadow="never">
<table-tool label="申请列表">
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
<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" @sort-change="pageOrder" style="width: 100%">
<el-table-column type="index" width="50px" label="序号" :index="indexMethod"></el-table-column>
<el-table-column prop="loginName" label="经办人工号"></el-table-column>
<el-table-column prop="userName" label="姓名"></el-table-column>
<el-table-column prop="outlayManageSource" label="活动类型">
<template v-slot="{row}">
<dict-tag :options="budgetTypeOption"
:value="row.outlayManageSource"></dict-tag>
</template>
</el-table-column>
<el-table-column prop="activityMatter" label="活动事项"></el-table-column>
<el-table-column prop="helpUnitName" label="申报单位">
<template v-slot="{row}">
<span v-if="['ACTIVITY_BUDGET_TYPE_ONE'].includes(row.outlayManageSource)">校工会</span>
<span v-if="['ACTIVITY_BUDGET_TYPE_TWO'].includes(row.outlayManageSource)">{{row.unionName}}</span>
<span v-if="['ACTIVITY_BUDGET_TYPE_THREE','ACTIVITY_BUDGET_TYPE_FOUR'].includes(row.outlayManageSource)">{{row.clubName}}</span>
</template>
</el-table-column>
<el-table-column prop="money" label="金额"></el-table-column>
<el-table-column prop="applyTime" label="申报时间"></el-table-column>
<el-table-column prop="taskName" label="当前节点"></el-table-column>
<el-table-column prop="instanceState" label="流程状态">
<template v-slot="{row}">
<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="300px">
<template slot-scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="row.taskState === 10" @click="openAudit(row)" size="mini" type="primary">审核
</el-button>
<el-button v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">撤回
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #edit>
<outlay-reimburse-info ref="outlayReimburseInfo">
<div v-if="showApprovalForm">
<div class="process-title">
{{formData.taskName}}
</div>
<el-form :model="formData" ref="formRef" :rules="formRules" 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>
<!--:rules="[{required:true,message:'必填',trigger:['change','blur']}]"-->
<el-form-item label="签字" prop="tf_userSign"
>
<pc-signature v-model="formData.tf_userSign"></pc-signature>
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到发起人</el-button>
<el-button @click="handleTaskAction(2)" size="small" type="danger">拒绝申请</el-button>
<el-button @click="handleTaskAction(1)" size="small" type="primary">同意申请</el-button>
</el-row>
</div>
</outlay-reimburse-info>
</template>
</guava>
</div>
<script>
<!--#include('../info.js'){}#-->
new Vue({
el: "#app",
store,
mixins: [initTableMixins],
data() {
return {
pageDataUrl: "/platform/outlay/reimburse/clubAudit/pageData",
budgetTypeOption: [],
unionOptions: [],
pageForm: {
year: moment().format("YYYY"),
approval: false,
searchName: "info.userName",
},
showApprovalForm: false
}
},
components: {
"outlay-reimburse-info": OUTLAY_REIMBURSE_INFO
},
methods: {
openView(row) {
this.$refs.guava.edit(() => {
this.showApprovalForm = false
this.$refs.outlayReimburseInfo.onOpen(row)
})
},
handleTaskAction(val) {
this.$refs.formRef.validate((valid) => {
if (valid) {
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/flow/common/executeTask", {
data: JSON.stringify({
...this.formData,
submitType: val
})
}).then((res) => {
if (res.code === 0) {
this.$refs.guava.index()
this.$message.success(res.msg)
this.doSearch()
}
})
})
}
})
},
onRevoke(row) {
this.$confirm("您确定要撤回吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "info"
}).then(() => {
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.doSearch()
}
})
})
},
openAudit(row) {
this.$refs.guava.edit(() => {
this.showApprovalForm = true
this.formData = {
processTaskId: row.taskId,
taskName: row.curTaskName
}
this.$refs.outlayReimburseInfo.onOpen(row)
})
},
},
async created() {
this.budgetTypeOption = await this.$businessTool.getDictOptions("ACTIVITY_BUDGET_TYPE")
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,199 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app">
<guava ref="guava">
<el-card shadow="never">
<search @search="doSearch">
<search-item label="年度">
<el-date-picker
@change="doSearch"
placeholder="选择年"
style="width: 100%"
type="year"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</search-item>
<search-item label="经办人">
<el-input @keyup.enter.native="doSearch" clearable
placeholder="请输入内容"
v-model="pageForm.searchKeyword">
<el-select placeholder="查询类型" slot="prepend"
style="width: 100px;"
v-model="pageForm.searchName">
<el-option label="姓名" value="info.userName"></el-option>
<el-option label="工号" value="info.loginName"></el-option>
</el-select>
</el-input>
</search-item>
</search>
</el-card>
<el-card shadow="never">
<table-tool label="申请列表">
<el-radio-group v-model="pageForm.approval" size="small" @change="doSearch">
<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" @sort-change="pageOrder" style="width: 100%">
<el-table-column type="index" width="50px" label="序号" :index="indexMethod"></el-table-column>
<el-table-column prop="loginName" label="经办人工号"></el-table-column>
<el-table-column prop="userName" label="姓名"></el-table-column>
<el-table-column prop="outlayManageSource" label="活动类型">
<template v-slot="{row}">
<dict-tag :options="budgetTypeOption"
:value="row.outlayManageSource"></dict-tag>
</template>
</el-table-column>
<el-table-column prop="activityMatter" label="活动事项"></el-table-column>
<el-table-column prop="helpUnitName" label="申报单位">
<template v-slot="{row}">
<span v-if="['ACTIVITY_BUDGET_TYPE_ONE'].includes(row.outlayManageSource)">校工会</span>
<span v-if="['ACTIVITY_BUDGET_TYPE_TWO'].includes(row.outlayManageSource)">{{row.unionName}}</span>
<span v-if="['ACTIVITY_BUDGET_TYPE_THREE','ACTIVITY_BUDGET_TYPE_FOUR'].includes(row.outlayManageSource)">{{row.clubName}}</span>
</template>
</el-table-column>
<el-table-column prop="money" label="金额"></el-table-column>
<el-table-column prop="applyTime" label="申报时间"></el-table-column>
<el-table-column prop="taskName" label="当前节点"></el-table-column>
<el-table-column prop="instanceState" label="流程状态">
<template v-slot="{row}">
<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="300px">
<template slot-scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="row.taskState === 10" @click="openAudit(row)" size="mini" type="primary">审核
</el-button>
<el-button v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">撤回
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #edit>
<outlay-reimburse-info ref="outlayReimburseInfo">
<div v-if="showApprovalForm">
<div class="process-title">
{{formData.taskName}}
</div>
<el-form :model="formData" ref="formRef" :rules="formRules" 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>
<!--:rules="[{required:true,message:'必填',trigger:['change','blur']}]"-->
<el-form-item label="签字" prop="tf_userSign"
>
<pc-signature v-model="formData.tf_userSign"></pc-signature>
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
<el-button @click="handleTaskAction(6)" size="small" type="info">退回到发起人</el-button>
<el-button @click="handleTaskAction(2)" size="small" type="danger">拒绝申请</el-button>
<el-button @click="handleTaskAction(1)" size="small" type="primary">同意申请</el-button>
</el-row>
</div>
</outlay-reimburse-info>
</template>
</guava>
</div>
<script>
<!--#include('../info.js'){}#-->
new Vue({
el: "#app",
store,
mixins: [initTableMixins],
data() {
return {
pageDataUrl: "/platform/outlay/reimburse/clubZxAudit/pageData",
budgetTypeOption: [],
unionOptions: [],
pageForm: {
year: moment().format("YYYY"),
approval: false,
searchName: "info.userName",
},
showApprovalForm: false
}
},
components: {
"outlay-reimburse-info": OUTLAY_REIMBURSE_INFO
},
methods: {
openView(row) {
this.$refs.guava.edit(() => {
this.showApprovalForm = false
this.$refs.outlayReimburseInfo.onOpen(row)
})
},
handleTaskAction(val) {
this.$refs.formRef.validate((valid) => {
if (valid) {
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post("/flow/common/executeTask", {
data: JSON.stringify({
...this.formData,
submitType: val
})
}).then((res) => {
if (res.code === 0) {
this.$refs.guava.index()
this.$message.success(res.msg)
this.doSearch()
}
})
})
}
})
},
onRevoke(row) {
this.$confirm("您确定要撤回吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "info"
}).then(() => {
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.doSearch()
}
})
})
},
openAudit(row) {
this.$refs.guava.edit(() => {
this.showApprovalForm = true
this.formData = {
processTaskId: row.taskId,
taskName: row.curTaskName
}
this.$refs.outlayReimburseInfo.onOpen(row)
})
},
},
async created() {
this.budgetTypeOption = await this.$businessTool.getDictOptions("ACTIVITY_BUDGET_TYPE")
this.pageData()
}
})
</script>
<!--#
}
#-->