This commit is contained in:
那些花儿
2025-09-25 13:42:37 +08:00
parent 37e23100e1
commit 271b5837c8
78 changed files with 2197 additions and 1164 deletions
File diff suppressed because it is too large Load Diff
@@ -79,46 +79,76 @@ const PROPOSAL_INFO = {
<template v-for="task in doneTasks">
<div class="mt10">
<div class="process-title">{{ task.displayName }}</div>
<el-descriptions border class="flow-task-form" :column="3" :key="task.id" v-if="task.ext.isFirstTaskNode">
<el-descriptions-item label="申请用户">{{ task.ext.initiatorName }}({{task.ext.initiatorAccount}})
<el-descriptions 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>
<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-if="task.taskName === '85b7b9bd-d706-48cb-99a1-ef1370fb1819'">
<el-descriptions-item label="办理用户">{{ task.taskFormData.userName }}({{task.taskFormData.loginName}})</el-descriptions-item>
<el-descriptions border class="flow-task-form" :column="3" :key="task.id"
v-else-if="task.taskName === 'invite'">
<el-descriptions-item label="办理用户">{{ task.taskFormData.userName
}}({{task.taskFormData.loginName}})
</el-descriptions-item>
<el-descriptions-item label="办理时间" :span="2">{{ task.finishTime }}</el-descriptions-item>
<el-descriptions-item label="附议人" :span="3" v-if="task.taskName === '85b7b9bd-d706-48cb-99a1-ef1370fb1819'">
<el-descriptions-item label="附议人" :span="3" v-if="task.taskName === 'invite'">
<el-table :data="task?.taskFormData?.seconder">
<el-table-column label="姓名" prop="userName"></el-table-column>
<el-table-column label="工号" prop="loginName"></el-table-column>
<el-table-column label="性别" prop="sex"></el-table-column>
<el-table-column label="联系方式" prop="mobile"></el-table-column>
<el-table-column label="单位" prop="unitName"></el-table-column>
<el-table-column label="分工会" prop="unionName"></el-table-column>
<el-table-column label="代表团" prop="delegationName"></el-table-column>
</el-table>
</el-descriptions-item>
</el-descriptions>
<!--提案委员会立案-->
<el-descriptions border class="flow-task-form" :column="3" :key="task.id" v-else-if="task.taskName === '9846ab38-40c5-4093-bafc-a9b3b443338b'">
<el-descriptions-item label="办理用户">{{ task.taskFormData.userName }}({{task.taskFormData.loginName}})</el-descriptions-item>
<el-descriptions border class="flow-task-form" :column="3" :key="task.id"
v-else-if="task.taskName === 'committee'">
<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.PROPOSAL_CASE_FILING_RESULT" :value="task.ext.caseFilingResult"></dict-tag>
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
:value="task.ext.tf_caseFilingResult"></dict-tag>
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_TYPE"
:value="task.ext.tf_caseFilingType"></dict-tag>
</el-descriptions-item>
<el-descriptions-item label="主办单位" :span="3">{{task.ext.tf_masterUnitName}}
</el-descriptions-item>
<el-descriptions-item label="协办单位" :span="3">{{task?.ext?.tf_slaveUnitNameStr}}
</el-descriptions-item>
<el-descriptions-item label="办理意见" :span="3">
<div v-html="task.taskFormData.tf_opinion"></div>
</el-descriptions-item>
<el-descriptions-item label="主办单位" :span="3">{{task.ext.tf_hostUnitName}}</el-descriptions-item>
<el-descriptions-item label="协办单位" :span="3">{{task?.ext?.tf_helpUnitNames.join('、')}}</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="承办单位"
v-if="['master_reply','slave_reply'].includes(task.taskName)" :span="3">
{{task.ext.underTakeName}}
</el-descriptions-item>
<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="办理结果">
<el-descriptions-item label="办理评价" v-if="['feedback'].includes(task.taskName)" :span="3">
<dict-tag :options="dict.type.PROPOSAL_FEEDBACK"
:value="task.ext.tf_feedback"></dict-tag>
</el-descriptions-item>
<el-descriptions-item label="办理结果" v-else>
<dict-tag :options="dict.type.PROCESS_TASK_SUBMIT_TYPE"
:value="task.ext.submitType"></dict-tag>
</el-descriptions-item>
@@ -132,7 +162,7 @@ const PROPOSAL_INFO = {
<slot></slot>
</div>
`,
dicts: ["PROPOSAL_TYPE", "PROPOSAL_CASE_FILING_RESULT","PROCESS_TASK_SUBMIT_TYPE"],
dicts: ["PROPOSAL_TYPE", "PROPOSAL_CASE_FILING_RESULT", "PROPOSAL_CASE_FILING_TYPE", "PROCESS_TASK_SUBMIT_TYPE", "PROPOSAL_FEEDBACK"],
props: {
hide_slave: false
},
@@ -3,7 +3,7 @@ layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<el-row type="flex" :gutter="10" style="height: calc(100vh - 126px)">
<el-row type="flex" :gutter="10" style="height: calc(100vh - 84px)">
<el-col :span="5">
<tree @node-click="treeNodeClick" ref="treeRef"></tree>
</el-col>
@@ -114,7 +114,7 @@ layout("/layouts/platform.html"){
<table-tool>
<el-button type="primary" size="small" @click="exportAllProposalAsZip">导出提案压缩包</el-button>
<el-button type="primary" size="small" @click="exportCollectZip">导出提案征集表压缩包</el-button>
<!-- <el-button type="primary" size="small" @click="exportAllProposalFeedBackAsZip">导出反馈表压缩包</el-button>-->
<el-button type="primary" size="small" @click="exportAllProposalFeedBackAsZip">导出反馈表压缩包</el-button>
<el-button type="primary" size="small" @click="exportSummaryAsExcel">导出汇总表</el-button>
<!-- <el-button type="primary" size="small" @click="exportProposalRegisterSummaryAsExcel">导出立案汇总表-->
</el-button>
@@ -21,17 +21,17 @@ layout("/layouts/platform.html"){
<el-card shadow="never">
<el-table :data="tableData">
<el-table-column label="序号" type="index" width="50"></el-table-column>
<el-table-column label="单位名称" prop="name" width="400" sortable show-overflow-tooltip></el-table-column>
<el-table-column label="单位名称" prop="unitName" width="400" sortable show-overflow-tooltip></el-table-column>
<el-table-column label="提案总数" prop="sum" sortable></el-table-column>
<el-table-column label="主办提案">
<el-table-column label="提案数量" prop="hostSum" sortable></el-table-column>
<el-table-column label="已答复" prop="hostReplySum" sortable></el-table-column>
<el-table-column label="未答复" prop="hostNoReplySum" sortable></el-table-column>
<el-table-column label="提案数量" prop="masterSum" sortable></el-table-column>
<el-table-column label="已答复" prop="masterReplySum" sortable></el-table-column>
<el-table-column label="未答复" prop="masterNoReplySum" sortable></el-table-column>
</el-table-column>
<el-table-column label="协办提案">
<el-table-column label="提案数量" prop="helpSum" sortable></el-table-column>
<el-table-column label="已答复" prop="hostReplySum" sortable v-if="slaveNeedReply"></el-table-column>
<el-table-column label="未答复" prop="hostNoReplySum" sortable v-if="slaveNeedReply"></el-table-column>
<el-table-column label="提案数量" prop="slaveSum" sortable></el-table-column>
<el-table-column label="已答复" prop="slaveReplySum" sortable v-if="slaveNeedReply"></el-table-column>
<el-table-column label="未答复" prop="slaveNoReplySum" sortable v-if="slaveNeedReply"></el-table-column>
</el-table-column>
</el-table>
</el-card>
@@ -1,10 +1,93 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--#
layout("/layouts/platform.html"){
#-->
</body>
</html>
<div id="app" v-cloak>
<el-card shadow="never">
<search @search="doSearch">
<search-item label="教代会">
<el-select @change="meetingChange" clearable filterable placeholder="所属教代会"
v-model="pageForm.sessionId">
<el-option :key="item.id" :label="item.fullName" :value="item.id"
v-for="item in sessionOptions"></el-option>
</el-select>
</search-item>
<search-item label="承办单位">
<el-select clearable filterable placeholder="承办单位" v-model="pageForm.undertakeUnitId">
<el-option :key="item.code" :label="item.name" :value="item.id"
v-for="item in underTakeOptions"></el-option>
</el-select>
</search-item>
</search>
</el-card>
<el-card shadow="never">
<el-table :data="tableData">
<el-table-column label="序号" type="index" width="50"></el-table-column>
<el-table-column label="单位名称" prop="unitName" width="400" sortable show-overflow-tooltip></el-table-column>
<el-table-column label="提案总数" prop="sum" sortable></el-table-column>
<el-table-column label="主办提案数" prop="masterSum" sortable></el-table-column>
<el-table-column label="协办提案数" prop="slaveSum" sortable></el-table-column>
<template v-for="dict in dict.type.PROPOSAL_FEEDBACK">
<el-table-column :label="dict.label" :prop="dict.code" sortable></el-table-column>
</template>
</el-table>
</el-card>
</div>
<script>
<!--#include("../../common/info.js"){}#-->
new Vue({
el: "#app",
mixins: [initTableMixins],
dicts: ['PROPOSAL_FEEDBACK'],
components: {
"proposal-info": PROPOSAL_INFO
},
data() {
return {
sessionOptions: [],
underTakeOptions: [],
}
},
methods: {
meetingChange() {
this.doSearch()
},
listSession() {
this.$axios.post("/platform/proposal/common/listSession").then((res) => {
if (res.code === 0) {
this.sessionOptions = res.data
if (this.sessionOptions) {
this.$set(this.pageForm, "sessionId", this.sessionOptions[0].id)
this.pageData()
}
}
})
},
listUnderTake() {
this.$axios.post("/platform/proposal/common/listUnderTake").then((res) => {
if (res.code === 0) {
this.underTakeOptions = res.data
}
})
},
pageData() {
this.$axios.post(loc() + "/data", this.pageForm).then((res) => {
if (res.code === 0) {
this.tableData = res.data
}
})
}
},
created() {
this.listSession()
this.listUnderTake()
}
})
</script>
<!--#
}
#-->
@@ -108,28 +108,33 @@ layout("/layouts/platform.html"){
<el-button type="primary" size="small" @click="exportYearReport">导出提案报告</el-button>
</table-tool>
<el-table :data="tableData" @sort-change="pageOrder" header-align="center" style="width: 100%" row-key="id">
<el-table-column label="序号" width="50px" type="index" :index="indexMethod"></el-table-column>
<el-table-column label="提案编号" prop="code" width="200px"></el-table-column>
<el-table-column label="提案名称" prop="name"></el-table-column>
<el-table-column label="序号" width="50" type="index" :index="indexMethod"></el-table-column>
<el-table-column label="提案编号" prop="code" width="100px" show-overflow-tooltip></el-table-column>
<el-table-column label="提案名称" prop="name" show-overflow-tooltip></el-table-column>
<el-table-column label="提案人" prop="createUserName"></el-table-column>
<el-table-column label="提案类别" prop="typeName"></el-table-column>
<el-table-column label="届次" prop="sessionName"></el-table-column>
<el-table-column label="代表团" prop="delegationName"></el-table-column>
<el-table-column label="立案结果" prop="caseFilingResult">
<template scope="{row}">
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT" :value="row.caseFilingResult"></dict-tag>
</template>
</el-table-column>
<el-table-column label="是否并案" prop="isConsolidation">
<el-table-column label="是否并案" prop="isConsolidation" width="100">
<template scope="{row}">
<el-tag size="mini" v-if="row.isConsolidation" type="success"></el-tag>
<el-tag size="mini" v-else type="danger"></el-tag>
</template>
</el-table-column>
<el-table-column label="主办单位" prop="masterUnderTakeName"></el-table-column>
<el-table-column label="协办单位" prop="slaveUnderTakeNames" show-overflow-tooltip></el-table-column>
<el-table-column label="当前节点" prop="processInstanceNodeName"></el-table-column>
<el-table-column label="操作" fixed="right" width="100px">
<el-table-column label="主办单位" prop="masterUnitName" show-overflow-tooltip></el-table-column>
<el-table-column label="协办单位" prop="slaveUnitNames" show-overflow-tooltip></el-table-column>
<el-table-column prop="curTaskName" label="当前节点"></el-table-column>
<el-table-column prop="instanceState" label="流程状态">
<template slot-scope="{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="200px">
<template scope="{row}">
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
</template>
@@ -148,6 +148,7 @@ layout("/layouts/platform.html"){
{prop: 'curTaskName', label: '当前节点'},
{prop: 'taskUnitName', label: '承办单位'},
{prop: 'taskName', label: '承办类型'},
{prop: 'actorName', label: '负责人'},
{prop: 'instanceState', label: '流程状态'},
],
chooseTableData: [],
@@ -83,38 +83,56 @@ layout("/layouts/platform.html"){
{{formData.taskName}}
</div>
<el-form :model="formData" ref="formRef" label-width="120px" :rules="formRules" label-suffix="">
<el-form-item label="立案结果" prop="tf_caseFilingResult" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-form-item label="立案结果" prop="tf_caseFilingResult"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-radio-group v-model="formData.tf_caseFilingResult" size="small">
<el-radio v-for="item in dict.type.PROPOSAL_CASE_FILING_RESULT" :label="item.code" border>{{item.label}}</el-radio>
<el-radio v-for="item in dict.type.PROPOSAL_CASE_FILING_RESULT" :label="item.code"
border>{{item.label}}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="['CONFIRM_FILING'].includes(formData.tf_caseFilingResult)" label="立案类型"
prop="tf_caseFilingType"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-radio-group v-model="formData.tf_caseFilingType" size="small">
<el-radio v-for="item in dict.type.PROPOSAL_CASE_FILING_TYPE" :label="item.code" border>
{{item.label}}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
label="主办单位"
v-if="['CONFIRM_FILING','SUGGESTION'].includes(formData.tf_caseFilingResult)"
:rules="[{required:['CONFIRM_FILING','SUGGESTION'].includes(formData.tf_caseFilingResult),message:'必填',trigger:['change','blur']}]"
prop="tf_masterUnitId"
>
<el-select v-model="formData.tf_hostUnitId" filterable clearable style="width: 100%">
<el-select v-model="formData.tf_masterUnitId" filterable clearable style="width: 100%">
<el-option
v-for="item in underTakeOptions"
:label="item.name"
:value="item.id"
:key="item.id"
:disabled="formData && formData.tf_helpUnitIds.includes(item.id)"
:disabled="formData && formData.tf_slaveUnitIds.includes(item.id)"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="协办单位" v-if="['CONFIRM_FILING','SUGGESTION'].includes(formData.tf_caseFilingResult)">
<el-select v-model="formData.tf_helpUnitIds" filterable clearable multiple style="width: 100%">
<el-form-item label="协办单位"
v-if="['CONFIRM_FILING','SUGGESTION'].includes(formData.tf_caseFilingResult)"
prop="tf_slaveUnitIds"
>
<el-select v-model="formData.tf_slaveUnitIds" filterable clearable multiple
style="width: 100%">
<el-option
v-for="item in underTakeOptions"
:label="item.name"
:value="item.id"
:key="item.id"
:disabled="item.id===formData.tf_hostUnitId"
:disabled="item.id===formData.tf_masterUnitId"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<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>
@@ -135,7 +153,7 @@ layout("/layouts/platform.html"){
new Vue({
el: "#app",
store,
dicts: ["PROPOSAL_CASE_FILING_RESULT"],
dicts: ["PROPOSAL_CASE_FILING_RESULT", "PROPOSAL_CASE_FILING_TYPE"],
mixins: [initTableMixins],
components: {
"proposal-info": PROPOSAL_INFO
@@ -146,8 +164,8 @@ layout("/layouts/platform.html"){
approval: false
},
formData: {
tf_hostUnitId: null,
tf_helpUnitIds: []
tf_masterUnitId: null,
tf_slaveUnitIds: []
},
showApprovalForm: false,
sessionOptions: [],
@@ -168,8 +186,8 @@ layout("/layouts/platform.html"){
this.formData = {
processTaskId: row.taskId,
taskName: row.curTaskName,
tf_hostUnitId: null,
tf_helpUnitIds: []
tf_masterUnitId: null,
tf_slaveUnitIds: []
}
this.$refs.proposalInfoRef.onOpen(row)
})
@@ -185,9 +203,9 @@ layout("/layouts/platform.html"){
data: JSON.stringify({
...this.formData,
submitType: val,
tf_hostUnitName: this.formData.tf_hostUnitId ? this.underTakeOptions.find(v => v.id === this.formData.tf_hostUnitId)?.name : null,
tf_helpUnitNames: this.formData.tf_helpUnitIds.map(v => this.underTakeOptions.find(v2 => v2.id === v)?.name),
tf_helpUnitNameStr: this.formData.tf_helpUnitIds.map(v => this.underTakeOptions.find(v2 => v2.id === v)?.name).join(','),
tf_masterUnitName: this.formData.tf_masterUnitId ? this.underTakeOptions.find(v => v.id === this.formData.tf_masterUnitId)?.name : null,
tf_slaveUnitNames: this.formData.tf_slaveUnitIds.map(v => this.underTakeOptions.find(v2 => v2.id === v)?.name),
tf_slaveUnitNameStr: this.formData.tf_slaveUnitIds.map(v => this.underTakeOptions.find(v2 => v2.id === v)?.name).join(','),
})
}).then((res) => {
if (res.code === 0) {
@@ -95,6 +95,17 @@ layout("/layouts/platform.html"){
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.tf_opinion"></user-opinion-textarea>
</el-form-item>
<template v-if="['SATISFIED','FAIRLY_SATISFIED'].includes(formData.tf_feedback)">
<el-form-item label="通讯地址" prop="tf_address">
<el-input v-model="formData.tf_address" placeholder="请输入通讯地址" clearable></el-input>
</el-form-item>
<el-form-item label="联系电话" prop="tf_phone">
<el-input v-model="formData.tf_phone" placeholder="请输入联系电话" clearable></el-input>
</el-form-item>
<el-form-item label="邮政编码" prop="tf_postcode">
<el-input v-model="formData.tf_postcode" placeholder="请输入邮政编码" clearable></el-input>
</el-form-item>
</template>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="$refs.guava.index()" size="small">取消</el-button>
@@ -204,7 +215,7 @@ layout("/layouts/platform.html"){
// 教代会
async meetingChange(val) {
this.doSearch()
this.doSearch()
},
// 查询开启的教代会
@@ -49,7 +49,7 @@ layout("/layouts/platform.html"){
size="mini"
type="primary"
@click="onOpenInviteSeconder(row)"
v-if="row.taskKey === '85b7b9bd-d706-48cb-99a1-ef1370fb1819' || row.taskKey === '74458b33-ad6e-46c4-b8d9-1aa897142b25'"
v-if="row.taskKey === 'invite' || row.taskKey === 'second'"
>
邀请附议人
</el-button>
@@ -21,10 +21,11 @@ const PROPOSAL_INVITE_SECONDER_COMPONENT = {
<el-divider class="mt10 mb10"></el-divider>
<div>
<table-tool label="代表数据">
<!-- <el-button size="small" @click="invite" type="primary" icon="el-icon-plus"-->
<!-- :disabled="pageForm.isInvite">邀请-->
<!-- </el-button>-->
<el-radio-group v-model="pageForm.isInvite" @change="doSearch" size="small" style="margin-left: 5px;">
<!-- <el-button size="small" @click="invite" type="primary" icon="el-icon-plus"-->
<!-- :disabled="pageForm.isInvite">邀请-->
<!-- </el-button>-->
<el-radio-group v-model="pageForm.isInvite" @change="doSearch" size="small"
style="margin-left: 5px;">
<el-radio-button :label="true">已邀请</el-radio-button>
<el-radio-button :label="false">可邀请</el-radio-button>
</el-radio-group>
@@ -49,7 +50,7 @@ const PROPOSAL_INVITE_SECONDER_COMPONENT = {
<el-divider class="mt10 mb10"></el-divider>
<div v-if="$refs.tableRef">
<table-tool label="当前已选择"></table-tool>
<el-table :data="$refs.tableRef.selection">
<el-table-column label="序号" width="50px" type="index"></el-table-column>
<el-table-column label="工号" prop="loginName"></el-table-column>
@@ -57,13 +58,13 @@ const PROPOSAL_INVITE_SECONDER_COMPONENT = {
<el-table-column label="性别" prop="sex"></el-table-column>
<el-table-column label="代表团" prop="delegationName"></el-table-column>
</el-table>
<el-row type="flex" justify="center" class="p10">
<el-button @click="">取消</el-button>
<el-button @click="invite" type="primary">邀请</el-button>
<el-button @click="invite" type="primary">邀请</el-button>
</el-row>
</div>
</div>
`,
mixins: [initTableMixins],
@@ -126,6 +127,7 @@ const PROPOSAL_INVITE_SECONDER_COMPONENT = {
cancelButtonText: "取消",
type: "info"
}).then(() => {
const loading = createLoading('邀请中...')
this.$axios.post("/platform/proposal/mine/inviteSeconder", {
proposalId: this.record.id,
seconders: JSON.stringify(loginNames)
@@ -137,7 +139,7 @@ const PROPOSAL_INVITE_SECONDER_COMPONENT = {
this.visible = false
this.$emit("refresh", null)
}
})
}).finally(() => loading.close())
})
},
pageData() {
@@ -47,8 +47,8 @@ layout("/layouts/platform.html"){
<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>
<!-- <el-button v-if="row.canRevoke" @click="onRevoke(row)" size="mini" type="danger">撤回-->
<!-- </el-button>-->
</template>
</el-table-column>
</el-table>
@@ -111,7 +111,8 @@ layout("/layouts/platform.html"){
this.showApprovalForm = true
this.formData = {
processTaskId: row.taskId,
taskName: row.curTaskName
taskName: row.curTaskName,
tf_opinion: "同意该提案"
}
this.$refs.proposalInfoRef.onOpen(row)
})
@@ -2,12 +2,62 @@
layout("/layouts/platform.html"){
#-->
<style>
/* 提案信息卡片样式 - OA风格 */
.proposal-info-card {
background: #ffffff;
border: 1px solid var(--border-color-lighter);
margin-bottom: 20px;
overflow: hidden;
}
.proposal-info-content {
padding: 16px;
background: #fafafa;
}
.info-item {
display: flex;
align-items: flex-start;
margin-bottom: 12px;
line-height: 1.6;
padding: 8px 12px;
background: #ffffff;
border-left: 3px solid var(--color-primary-2);
transition: all 0.2s ease;
}
.info-item:hover {
border-left-color: var(--color-primary);
}
.info-item:last-child {
margin-bottom: 0;
}
.info-item label {
color: var(--color-text-regular);
font-weight: 500;
min-width: 80px;
margin-right: 12px;
flex-shrink: 0;
font-size: 13px;
}
.info-item span {
color: var(--color-text-primary);
word-break: break-all;
flex: 1;
font-size: 13px;
}
</style>
<div id="app">
<guava ref="guava">
<el-card shadow="never">
<search @search="doSearch">
<search-item label="教代会">
<el-select @change="meetingChange" clearable filterable placeholder="所属教代会"
<el-select @change="meetingChange" clearable filterable placeholder="所属教代会" style="width: 100%"
v-model="pageForm.sessionId">
<el-option :key="item.id" :label="item.fullName" :value="item.id"
v-for="item in sessionOptions"></el-option>
@@ -57,25 +107,40 @@ layout("/layouts/platform.html"){
<el-table-column label="代表团" prop="delegationName"></el-table-column>
<el-table-column label="立案结果" prop="caseFilingResult">
<template scope="{row}">
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT" :value="row.caseFilingResult"></dict-tag>
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
:value="row.caseFilingResult"></dict-tag>
</template>
</el-table-column>
<el-table-column label="当前节点" prop="curTaskName"></el-table-column>
<el-table-column label="承办单位" prop="taskUnitName"></el-table-column>
<el-table-column label="承办类型" prop="taskName"></el-table-column>
<el-table-column label="承办单位" prop="underTakeName"></el-table-column>
<el-table-column label="承办类型" prop="underTakeIsMaster">
<template scope="{row}">
<el-tag v-if="row.underTakeIsMaster" size="small">主办</el-tag>
<el-tag v-else type="warning" size="small">协办</el-tag>
</template>
</el-table-column>
<el-table-column label="流程状态" prop="instanceState">
<template slot-scope="{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">
<el-table-column label="转交" prop="transfer" v-if="pageForm.approval && $auth.hasRoleOr('SYSADMIN,PROPOSAL_UNIT_LEADER')">
<template slot-scope="{row}">
{{row.transferUserName}}
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" min-width="250px">
<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>
<!--承办单位领导、超级管理员才能转办-->
<el-button v-if="!pageForm.approval && $auth.hasRoleOr('SYSADMIN,PROPOSAL_UNIT_LEADER')" @click="openTransfer(row)" size="mini" type="primary">转交</el-button>
</template>
</el-table-column>
</el-table>
@@ -88,14 +153,16 @@ layout("/layouts/platform.html"){
<div class="process-title">
{{formData.taskName}}
</div>
<el-form :model="formData" ref="formRef" label-width="120px" :rules="formRules" label-suffix="">
<el-form :model="formData" ref="formRef" label-width="80px" :rules="formRules" label-suffix="">
<el-form-item label="承办单位">
<el-input :value="formData.taskUnitName" disabled></el-input>
<el-input :value="formData.underTakeName" disabled></el-input>
</el-form-item>
<el-form-item label="落实情况" prop="tf_implementState"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-radio-group v-model="formData.tf_implementState" size="small">
<el-radio v-for="item in dict.type.PROPOSAL_REPLY_IMPLEMENT" :label="item.code" border>{{item.label}}</el-radio>
<el-radio v-for="item in dict.type.PROPOSAL_REPLY_IMPLEMENT" :label="item.code" border>
{{item.label}}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="答复内容" prop="tf_opinion"
@@ -104,7 +171,7 @@ layout("/layouts/platform.html"){
</el-form-item>
<el-form-item label="校领导" prop="tf_nextNodeOperator"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]"
v-if="supportCandidate && formData.taskIsMaster">
v-if="supportCandidate && formData.underTakeIsMaster">
<el-select v-model="formData.tf_nextNodeOperator" placeholder="请选择校领导">
<el-option :key="item.id" :label="item.userName" :value="item.userId"
v-for="item in candidates"></el-option>
@@ -119,6 +186,49 @@ layout("/layouts/platform.html"){
</proposal-info>
</template>
</guava>
<el-dialog title="转交" :visible.sync="showTransferDialog" width="500px">
<!--展示提案基本信息 名称、编号等-->
<div class="proposal-info-card">
<div class="proposal-info-content">
<div class="info-item">
<label>提案编号:</label>
<span>{{ transferForm.code }}</span>
</div>
<div class="info-item">
<label>提案名称:</label>
<span>{{ transferForm.name }}</span>
</div>
<div class="info-item">
<label>代表团:</label>
<span>{{ transferForm.delegationName }}</span>
</div>
</div>
</div>
<el-form ref="transferFormRef" :model="transferForm" label-position="top">
<el-form-item label="转交给" prop="userId"
:rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<el-select v-model="transferForm.userId"
placeholder="请选择转交用户"
filterable
remote
:remote-method="selectTransferUser"
style="width: 100%"
>
<el-option :key="item.id"
:label="item.username"
:value="item.id"
v-for="item in transferUserOptions"></el-option>
</el-select>
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="showTransferDialog = false" size="small">取消</el-button>
<el-button @click="handleTransfer" size="small" type="primary">提交</el-button>
</el-row>
</el-dialog>
</div>
<script>
@@ -127,7 +237,7 @@ layout("/layouts/platform.html"){
new Vue({
el: "#app",
store,
dicts: ["PROPOSAL_CASE_FILING_RESULT","PROPOSAL_REPLY_IMPLEMENT"],
dicts: ["PROPOSAL_CASE_FILING_RESULT", "PROPOSAL_REPLY_IMPLEMENT"],
mixins: [initTableMixins],
components: {
"proposal-info": PROPOSAL_INFO
@@ -142,7 +252,12 @@ layout("/layouts/platform.html"){
sessionOptions: [],
delegationOptions: [],
candidates: [],
supportCandidate: false
supportCandidate: false,
// 转交
showTransferDialog: false,
transferForm: {},
transferUserOptions: [],
}
},
methods: {
@@ -161,8 +276,8 @@ layout("/layouts/platform.html"){
processTaskId: row.taskId,
taskKey: row.taskKey,
taskName: row.taskName,
taskUnitName: row.taskUnitName,
taskIsMaster: row.taskIsMaster
underTakeName: row.underTakeName,
underTakeIsMaster: row.underTakeIsMaster
}
this.$refs.proposalInfoRef.onOpen(row)
})
@@ -174,6 +289,9 @@ layout("/layouts/platform.html"){
cancelButtonText: "取消",
type: "warning"
}).then(() => {
delete this.formData.underTakeIsMaster
delete this.formData.underTakeName
this.$axios.post("/flow/common/executeTask", {
data: JSON.stringify({
...this.formData,
@@ -205,7 +323,6 @@ layout("/layouts/platform.html"){
})
},
// 加载候选人列表
loadCandidates(taskId) {
$.get("/flow/common/candidate", {taskId}).then((res) => {
@@ -216,6 +333,50 @@ layout("/layouts/platform.html"){
})
},
// 打开转办
openTransfer(row) {
this.showTransferDialog = true
this.transferForm = {
taskId: row.taskId,
name: row.name,
code: row.code,
delegationName: row.delegationName
}
},
// 查询转办用户
selectTransferUser(keyword) {
this.$axios.post("/platform/proposal/unitReply/selectViceUser", {keyword}).then(res => {
if (res.code === 0) {
this.transferUserOptions = res.data
}
})
},
// 转办
handleTransfer() {
this.$refs.transferFormRef.validate(valid => {
if (!valid) return
const transferUserName = this.transferUserOptions.find(item => item.id === this.transferForm.userId)?.username
const name = this.transferForm.name
this.$confirm("您确定要将" + name + "提案转交给" + transferUserName + "办理吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "info"
}).then(() => {
this.$axios.post('/platform/proposal/unitReply/transfer', this.transferForm).then(res => {
if (res.code === 0) {
this.$message.success(res.msg)
this.showTransferDialog = false
this.doSearch()
}
})
})
})
},
// 教代会
async meetingChange(val) {
@@ -230,7 +391,6 @@ layout("/layouts/platform.html"){
if (this.sessionOptions) {
this.$set(this.pageForm, "sessionId", this.sessionOptions[0].id)
this.pageData()
this.listDelegation()
}
}
})
@@ -31,6 +31,18 @@ const HEAD_FORM_TEMPLATE = {
placeholder="请输入工号或者姓名"
style="width: 100%"></user-select>
</el-form-item>
<el-form-item prop="contactUserId" label="联络人">
<user-select v-model="formData.contactUserId"
v-if="headDialogFormVisible"
api="/platform/teacherCongress/delegation/notHeadUser"
:api_params="{sessionId:formData.sessionId,delegationId:formData.delegationId}"
api_input_key_name="keyWord"
:option_list="contactOptions"
option_value="userId"
:option_label_func="(item)=>{return item.userName + item.loginName + '(' + item.unitName + ')'}"
placeholder="请输入工号或者姓名"
style="width: 100%"></user-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="headDialogFormVisible = false">取 消</el-button>
@@ -44,6 +56,7 @@ const HEAD_FORM_TEMPLATE = {
headDialogFormVisible: false,
headOptions: [],
viceHeadOptions: [],
contactOptions: [],
sessionOptions: [],
formRules: {
@@ -51,7 +64,8 @@ const HEAD_FORM_TEMPLATE = {
name: [{required: true, message: "必填", trigger: ["change", "blur"]}],
code: [{required: true, message: "必填", trigger: ["change", "blur"]}],
userId: [{required: true, message: "必填", trigger: ["change", "blur"]}],
viceUserId: [{required: true, message: "必填", trigger: ["change", "blur"]}]
viceUserId: [{required: true, message: "必填", trigger: ["change", "blur"]}],
contactUserId: [{required: true, message: "必填", trigger: ["change", "blur"]}]
}
}
},
@@ -69,7 +83,7 @@ const HEAD_FORM_TEMPLATE = {
this.findHeadUser()
},
// 查询团长副团长
// 查询团长副团长、联络人
findHeadUser() {
this.$axios.post("/platform/teacherCongress/delegation/headUser", {
...this.formData,
@@ -78,7 +92,7 @@ const HEAD_FORM_TEMPLATE = {
if (res.code === 0) {
if (res.data) {
this.headOptions = [res.data]
this.$set(this.formData, "userId", res.data.id)
this.$set(this.formData, "userId", res.data.userId)
}
}
})
@@ -89,7 +103,18 @@ const HEAD_FORM_TEMPLATE = {
if (res.code === 0) {
if (res.data) {
this.viceHeadOptions = [res.data]
this.$set(this.formData, "viceUserId", res.data.id)
this.$set(this.formData, "viceUserId", res.data.userId)
}
}
})
this.$axios.post("/platform/teacherCongress/delegation/headUser", {
...this.formData,
type: 'TEACHER_CONGRESS_DELEGATION_CONTACT'
}).then((res) => {
if (res.code === 0) {
if (res.data) {
this.contactOptions = [res.data]
this.$set(this.formData, "contactUserId", res.data.userId)
}
}
})
@@ -27,6 +27,7 @@ layout("/layouts/platform.html"){
<el-table-column label="教代会" prop="sessionName"></el-table-column>
<el-table-column label="团长" prop="delegationHead"></el-table-column>
<el-table-column label="副团长" prop="viceDelegationHead"></el-table-column>
<el-table-column label="联络人" prop="delegationContact"></el-table-column>
<el-table-column label="操作" width="300">
<template slot-scope="scope">
<el-link @click="$refs.auFormRef.onOpen(scope.row.id)" size="mini" type="primary">编辑</el-link>
@@ -20,6 +20,9 @@ const PROPOSAL_INFO = {
<van-cell title="提案类别">
{{viewData.typeName}}
</van-cell>
<van-cell title="建议承办单位">
{{viewData.suggestUnits}}
</van-cell>
<van-cell title="立案结果">
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
:value="viewData.caseFilingResult"></dict-tag>
@@ -57,11 +60,11 @@ const PROPOSAL_INFO = {
<!--邀请附议人-->
<van-cell-group :title="task.displayName"
v-else-if="task.taskName === '85b7b9bd-d706-48cb-99a1-ef1370fb1819'">
v-else-if="task.taskName === 'invite'">
<van-cell title="办理用户">{{ task.taskFormData.userName }}({{task.taskFormData.loginName}})
</van-cell>
<van-cell title="办理时间">{{ task.finishTime }}</van-cell>
<van-cell title="附议人" v-if="task.taskName === '85b7b9bd-d706-48cb-99a1-ef1370fb1819'"
<van-cell title="附议人" v-if="task.taskName === 'invite'"
class="direction-column-cell">
<el-table :data="task?.taskFormData?.seconder">
<el-table-column label="姓名" prop="userName"></el-table-column>
@@ -100,7 +103,7 @@ const PROPOSAL_INFO = {
<!--提案委员会立案-->
<van-cell-group :title="task.displayName"
v-else-if="task.taskName === '9846ab38-40c5-4093-bafc-a9b3b443338b'">
v-else-if="task.taskName === 'committee'">
<van-cell title="办理用户">{{ task.taskFormData.userName }}({{task.taskFormData.loginName}})
</van-cell>
<van-cell title="办理时间">{{ task.finishTime }}</van-cell>
@@ -113,10 +116,19 @@ const PROPOSAL_INFO = {
</van-cell-group>
<van-cell-group :title="task.displayName" v-else>
<van-cell title="办理单位" v-if="['master_reply','slave_reply'].includes(task.taskName)">
{{task.ext.underTakeName}}
</van-cell>
<van-cell title="办理用户">{{ task.taskFormData.userName }}({{task.taskFormData.loginName}})
</van-cell>
<van-cell title="办理时间">{{ task.finishTime }}</van-cell>
<van-cell title="办理结果">
<van-cell title="办理评价" v-if="['feedback'].includes(task.taskName)">
<dict-tag :options="dict.type.PROPOSAL_FEEDBACK"
:value="task.ext.tf_feedback"></dict-tag>
</van-cell>
<van-cell title="办理结果" v-else>
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
:value="task.ext.caseFilingResult"></dict-tag>
</van-cell>
@@ -130,7 +142,7 @@ const PROPOSAL_INFO = {
<slot></slot>
</van-action-sheet>
`,
dicts: ["PROPOSAL_TYPE", "PROPOSAL_CASE_FILING_RESULT","PROCESS_TASK_SUBMIT_TYPE"],
dicts: ["PROPOSAL_TYPE", "PROPOSAL_CASE_FILING_RESULT", "PROPOSAL_CASE_FILING_TYPE", "PROCESS_TASK_SUBMIT_TYPE", "PROPOSAL_FEEDBACK"],
data() {
return {
visible:false,
@@ -38,7 +38,7 @@ layout("/layouts/platform_h5.html"){
<span>编辑</span>
</div>
<div class="action-btn"
v-if="row.taskKey === '85b7b9bd-d706-48cb-99a1-ef1370fb1819' || row.taskKey === '74458b33-ad6e-46c4-b8d9-1aa897142b25'"
v-if="row.taskKey === 'invite' || row.taskKey === 'second'"
@click="onInvite(row)">
<i class="fa fa-user-plus"></i>
<span>邀请附议人</span>
@@ -42,10 +42,10 @@ layout("/layouts/platform_h5.html"){
<i class="fa fa-edit"></i>
<span>附议</span>
</div>
<div class="action-btn delete" v-if="row.canRevoke" @click="onRevoke(row)">
<i class="fa fa-reply"></i>
<span>撤回</span>
</div>
<!-- <div class="action-btn delete" v-if="row.canRevoke" @click="onRevoke(row)">-->
<!-- <i class="fa fa-reply"></i>-->
<!-- <span>撤回</span>-->
<!-- </div>-->
</template>
</table-list>
@@ -135,7 +135,8 @@ layout("/layouts/platform_h5.html"){
this.$refs.proposalInfoRef.onOpen(row)
this.formData = {
processTaskId: row.taskId,
taskName: row.curTaskName
taskName: row.curTaskName,
tf_opinion: "同意该提案"
}
},
@@ -187,8 +187,8 @@ layout("/layouts/platform_h5.html"){
processTaskId: row.taskId,
taskKey: row.taskKey,
taskName: row.taskName,
taskUnitName: row.taskUnitName,
taskIsMaster: row.taskIsMaster
underTakeName: row.underTakeName,
underTakeIsMaster: row.underTakeIsMaster
}
},
@@ -209,7 +209,6 @@ layout("/layouts/platform_h5.html"){
},
onCandidatesConfirm(value) {
debugger
this.$set(this.formData, "tf_nextNodeOperatorName", value.text)
this.$set(this.formData, "tf_nextNodeOperator", value.value)
this.showCandidatesPicker = false
@@ -222,6 +221,8 @@ layout("/layouts/platform_h5.html"){
title: "提示",
message: "您确定要提交吗?"
}).then(() => {
delete this.formData.underTakeIsMaster
delete this.formData.underTakeName
this.$axios.post("/flow/common/executeTask", {
data: JSON.stringify({
...this.formData,