提案流程

This commit is contained in:
2026-10-09 10:06:08 +08:00
parent fc39bc8020
commit aff992faf0
55 changed files with 1150 additions and 708 deletions
@@ -9,7 +9,6 @@ const PROPOSAL_INFO = {
<van-cell-group :border="false">
<van-cell title="提案编号">{{ viewData.code || '--' }}</van-cell>
<van-cell title="提案名称">{{ viewData.name || '--' }}</van-cell>
<van-cell title="立案编号">{{ viewData.caseFilingCode || '暂无' }}</van-cell>
<van-cell title="立案结果" v-if="viewData.caseFilingResult">
<dict-tag :options="dict.type.PROPOSAL_CASE_FILING_RESULT"
:value="viewData.caseFilingResult"></dict-tag>
@@ -189,7 +188,7 @@ const PROPOSAL_INFO = {
<template v-else>
<van-cell title="办理单位"
v-if="['opinion_unit_reply', 'unit_reply', 'two_unit_reply', 'master_reply', 'slave_reply'].includes(selectedTask.taskName)">
v-if="['opinion_unit_reply', 'unit_reply', 'two_unit_reply', 'opinion_master_reply', 'master_reply', 'slave_reply'].includes(selectedTask.taskName)">
{{ selectedTask.ext.underTakeName || '--' }}
</van-cell>
<van-cell title="办理用户">
@@ -10,7 +10,7 @@ const PROPOSAL_TASK_POPUP = {
<div v-if="isApproval">
<van-form ref="formRef">
<template
v-if="kind === 'delegation' || kind === 'preAudit' || kind === 'schoolLeaderApproval'">
v-if="kind === 'delegation' || kind === 'schoolUnionChairApproval' || kind === 'schoolLeaderApproval'">
<section class="proposal-view-card">
<h2 class="proposal-view-card__title">审批意见<span
class="proposal-audit-card__required">*</span></h2>
@@ -114,6 +114,27 @@ const PROPOSAL_TASK_POPUP = {
:rules="[{required:true,message:'请填写审批意见'}]"></van-field>
</section>
</template>
<template v-if="kind === 'committeeFiling'">
<section class="proposal-view-card">
<h2 class="proposal-view-card__title">立案审核<span class="proposal-audit-card__required">*</span></h2>
<van-field :value="filingResultName" label="立案结果" readonly required is-link
placeholder="请选择立案结果" @click="openLayer('filing-result-picker')"></van-field>
<van-field v-if="formData.tf_caseFilingResult === 'CONFIRM_FILING' || formData.tf_caseFilingResult === 'SUGGESTION'"
:value="selectedFilingMasterNames"
:label="formData.tf_caseFilingResult === 'SUGGESTION' ? '办理单位' : '主办单位'"
readonly required is-link placeholder="请选择单位"
@click="openFilingUnitPicker('master')"></van-field>
<van-field v-if="formData.tf_caseFilingResult === 'CONFIRM_FILING'"
:value="selectedFilingSlaveNames" label="协办单位"
readonly is-link placeholder="可选"
@click="openFilingUnitPicker('slave')"></van-field>
<h2 class="proposal-view-card__title">审核意见<span class="proposal-audit-card__required">*</span></h2>
<van-field v-model="formData.tf_opinion" class="proposal-audit-field"
name="tf_opinion" type="textarea" rows="6" label=""
placeholder="请输入审核意见" required maxlength="500" show-word-limit
:rules="[{required:true,message:'请填写审核意见'}]"></van-field>
</section>
</template>
</van-form>
<div class="proposal-popup-form-actions" v-if="kind === 'delegation'">
<van-button type="primary" block :loading="formLoading" class="proposal-soft-button"
@@ -128,7 +149,7 @@ const PROPOSAL_TASK_POPUP = {
@click="prepareSubmit(6)">退回
</van-button>
</div>
<div class="proposal-popup-form-actions proposal-pre-audit-actions" v-else-if="kind === 'preAudit'"
<div class="proposal-popup-form-actions proposal-pre-audit-actions" v-else-if="kind === 'schoolUnionChairApproval'"
style="display:grid;grid-template-columns:repeat(2,minmax(0,1fr))">
<van-button type="primary" :loading="formLoading"
class="proposal-soft-button proposal-pre-audit-button--primary"
@@ -148,6 +169,18 @@ const PROPOSAL_TASK_POPUP = {
</van-button>
</div>
<div class="proposal-popup-form-actions proposal-pre-audit-actions" v-else-if="kind === 'committeeFiling'"
style="display:grid;grid-template-columns:repeat(2,minmax(0,1fr))">
<van-button type="primary" :loading="formLoading"
class="proposal-soft-button proposal-pre-audit-button--primary"
style="grid-column:1 / -1" @click="prepareSubmit(1)">提交</van-button>
<van-button type="info" :loading="formLoading"
class="proposal-soft-button proposal-pre-audit-button--info"
@click="prepareSubmit(4)">退回(不审核)</van-button>
<van-button type="info" :loading="formLoading"
class="proposal-soft-button proposal-pre-audit-button--info"
@click="prepareSubmit(6)">退回(审核)</van-button>
</div>
<div class="proposal-popup-form-actions" v-else-if="kind === 'schoolLeaderApproval'">
<van-button type="primary" block :loading="formLoading" class="proposal-soft-button"
@@ -211,11 +244,32 @@ const PROPOSAL_TASK_POPUP = {
<div class="reply-unit-empty" v-else>暂无可选办理单位</div>
</div>
</van-popup>
<van-popup v-model="filingResultPickerVisible" position="bottom" :close-on-click-overlay="false">
<van-picker show-toolbar :columns="(dict.type.PROPOSAL_CASE_FILING_RESULT || []).map((item) => ({text:item.label,value:item.code}))"
@confirm="confirmFilingResult" @cancel="closeLayer('filing-result-picker')"></van-picker>
</van-popup>
<van-popup v-model="filingUnitPickerVisible" position="bottom" round :close-on-click-overlay="false" :style="{height:'70%'}">
<div class="reply-unit-popup">
<div class="reply-unit-toolbar">
<button type="button" @click="closeLayer('filing-unit-picker')">取消</button>
<div class="reply-unit-toolbar-title">{{filingUnitType === 'master' ? '选择主办单位' : '选择协办单位'}}</div>
<button type="button" @click="confirmFilingUnits">确定</button>
</div>
<div class="reply-unit-list">
<van-checkbox-group v-model="pendingFilingUnitIds">
<van-cell v-for="item in filingUnitOptions" :key="item.id" clickable :title="item.name"
@click="toggleFilingUnit(item)">
<template #right-icon><van-checkbox :name="item.id" @click.stop></van-checkbox></template>
</van-cell>
</van-checkbox-group>
</div>
</div>
</van-popup>
<van-dialog :value="confirmVisible" title="提示" message="您确定要提交吗?" show-cancel-button
@confirm="submit" @cancel="closeLayer('submit-confirm')"></van-dialog>
</van-popup>
`,
dicts: ["PROPOSAL_FEEDBACK", "UNDERTAKE_SUGGESTION", "PROPOSAL_REPLY_IMPLEMENT"],
dicts: ["PROPOSAL_FEEDBACK", "UNDERTAKE_SUGGESTION", "PROPOSAL_REPLY_IMPLEMENT", "PROPOSAL_CASE_FILING_RESULT"],
components: {"proposal-info": PROPOSAL_INFO},
props: {kind: {type: String, required: true}, pageKey: {type: String, required: true}},
data() {
@@ -231,6 +285,11 @@ const PROPOSAL_TASK_POPUP = {
implementPickerVisible: false,
candidatePickerVisible: false,
replyUnitPickerVisible: false,
filingResultPickerVisible: false,
filingUnitPickerVisible: false,
filingUnitType: "master",
filingUnitOptions: [],
pendingFilingUnitIds: [],
confirmVisible: false,
supportCandidate: false,
candidates: [],
@@ -245,8 +304,9 @@ const PROPOSAL_TASK_POPUP = {
},
title() {
const titles = {
delegation: "团长审核",
preAudit: "校工会预审核",
delegation: "分工会主席审核",
schoolUnionChairApproval: "校工会主席审核",
committeeFiling: "提案委员立案审核",
schoolLeaderApproval: "分管校领导审批",
feedbackEvaluation: "反馈评价",
suggestion: "承办单位意见",
@@ -258,6 +318,16 @@ const PROPOSAL_TASK_POPUP = {
selectedReplyUnitNames() {
const ids = this.formData.tf_secondReplyUnitIds || [];
return this.replyUnitOptions.filter((item) => ids.indexOf(item.unitId) > -1).map((item) => item.unitName + "(" + (item.isMaster ? "主办" : "协办") + ")").join("、")
},
filingResultName() {
const item = (this.dict.type.PROPOSAL_CASE_FILING_RESULT || []).find((entry) => entry.code === this.formData.tf_caseFilingResult);
return item ? item.label : ""
},
selectedFilingMasterNames() {
return this.filingUnitOptions.filter((item) => (this.formData.tf_masterUnitIds || []).includes(item.id)).map((item) => item.name).join("、")
},
selectedFilingSlaveNames() {
return this.filingUnitOptions.filter((item) => (this.formData.tf_slaveUnitIds || []).includes(item.id)).map((item) => item.name).join("、")
}
},
methods: {
@@ -268,6 +338,8 @@ const PROPOSAL_TASK_POPUP = {
this.$set(this, "implementPickerVisible", stack.includes("implement-picker"));
this.$set(this, "candidatePickerVisible", stack.includes("candidate-picker"));
this.$set(this, "replyUnitPickerVisible", stack.includes("reply-unit-picker"));
this.$set(this, "filingResultPickerVisible", stack.includes("filing-result-picker"));
this.$set(this, "filingUnitPickerVisible", stack.includes("filing-unit-picker"));
this.$set(this, "confirmVisible", stack.includes("submit-confirm"))
},
openLayer(name) {
@@ -280,8 +352,9 @@ const PROPOSAL_TASK_POPUP = {
/** row 提供详情主键和当前 WF 任务参数,action 为 view 或 approval。 */
open(row, action) {
const defaultTaskNames = {
delegation: "团长审核",
preAudit: "校工会预审核",
delegation: "分工会主席审核",
schoolUnionChairApproval: "校工会主席审核",
committeeFiling: "提案委员立案审核",
feedbackEvaluation: "反馈评价",
unitReply: "承办单位答复",
caseCheck: "提案委员会审查"
@@ -312,6 +385,12 @@ const PROPOSAL_TASK_POPUP = {
this.$set(this.formData, "tf_secondReplyUnitIds", []);
this.loadReplyUnits(row.id)
}
if (action === "approval" && this.kind === "committeeFiling") {
this.$set(this.formData, "tf_caseFilingResult", row.caseFilingResult || "");
this.$set(this.formData, "tf_masterUnitIds", []);
this.$set(this.formData, "tf_slaveUnitIds", []);
this.loadFilingUnits()
}
this.openLayer("detail")
},
loadCandidates(taskId) {
@@ -369,6 +448,41 @@ const PROPOSAL_TASK_POPUP = {
this.$set(this.formData, "tf_secondReplyUnitIds", [...this.pendingReplyUnitIds]);
this.closeLayer("reply-unit-picker")
},
/** 立案审核的主办、协办单位均来自本项目承办单位目录。 */
loadFilingUnits() {
this.$axios.post("/platform/proposal/common/listUnderTake").then((res) => {
if (res && res.code === 0) this.$set(this, "filingUnitOptions", res.data || [])
})
},
/** value 为结果字典项;切换结果时清理不再适用的承办单位,并设置可编辑的默认意见。 */
confirmFilingResult(value) {
this.$set(this.formData, "tf_caseFilingResult", value.value);
this.$set(this.formData, "tf_masterUnitIds", []);
this.$set(this.formData, "tf_slaveUnitIds", []);
const opinions = {CONFIRM_FILING: "经提案委员会审理,该提案确定立案。", SUGGESTION: "经提案委员会审理,该提案作为意见建议。", NOT: "经提案委员会审理,该提案不予立案。"};
this.$set(this.formData, "tf_opinion", opinions[value.value] || "");
this.closeLayer("filing-result-picker")
},
/** type 为 master 或 slave,使用全局历史栈打开对应的单位选择弹层。 */
openFilingUnitPicker(type) {
this.$set(this, "filingUnitType", type);
this.$set(this, "pendingFilingUnitIds", [...(this.formData[type === "master" ? "tf_masterUnitIds" : "tf_slaveUnitIds"] || [])]);
this.openLayer("filing-unit-picker")
},
/** item 为承办单位;再次点击同一单位时取消选中。 */
toggleFilingUnit(item) {
const ids = [...this.pendingFilingUnitIds];
const index = ids.indexOf(item.id);
if (index >= 0) ids.splice(index, 1); else ids.push(item.id);
this.$set(this, "pendingFilingUnitIds", ids)
},
/** 保存当前选择,排除已在另一类承办单位中选过的记录。 */
confirmFilingUnits() {
const opposite = this.filingUnitType === "master" ? "tf_slaveUnitIds" : "tf_masterUnitIds";
const ids = this.pendingFilingUnitIds.filter((id) => !(this.formData[opposite] || []).includes(id));
this.$set(this.formData, this.filingUnitType === "master" ? "tf_masterUnitIds" : "tf_slaveUnitIds", ids);
this.closeLayer("filing-unit-picker")
},
buildCaseCheckData() {
const data = {...this.formData};
const units = data.tf_caseCheckNeedSecondReply === 1 ? this.replyUnitOptions.filter((item) => data.tf_secondReplyUnitIds.indexOf(item.unitId) > -1) : [];
@@ -395,6 +509,10 @@ const PROPOSAL_TASK_POPUP = {
this.$toast(opinionConfig.message)
return
}
if (this.kind === "committeeFiling" && value === 1) {
if (!this.formData.tf_caseFilingResult) return this.$toast("请选择立案结果");
if (["CONFIRM_FILING", "SUGGESTION"].includes(this.formData.tf_caseFilingResult) && !(this.formData.tf_masterUnitIds || []).length) return this.$toast("请选择主办或办理单位")
}
this.$refs.formRef.validate().then(() => {
this.$set(this, "pendingSubmitType", value);
this.openLayer("submit-confirm")
@@ -416,13 +534,29 @@ const PROPOSAL_TASK_POPUP = {
...this.buildCaseCheckData(),
submitType: this.pendingSubmitType
} : {...this.formData, submitType: this.pendingSubmitType}
if (this.kind === "preAudit") {
if (this.kind === "schoolUnionChairApproval") {
data.taskName = "startTask";
if (this.pendingSubmitType === 4) {
data.tf_sourceTaskKey = this.formData.taskKey;
data.tf_audit = false
}
}
if (this.kind === "committeeFiling") {
const masters = this.filingUnitOptions.filter((item) => (data.tf_masterUnitIds || []).includes(item.id));
const slaves = this.filingUnitOptions.filter((item) => (data.tf_slaveUnitIds || []).includes(item.id));
data.tf_masterUnitId = masters.length ? masters[0].id : "";
data.tf_masterUnitName = masters.length ? masters[0].name : "";
data.tf_masterUnitNames = masters.map((item) => item.name);
data.tf_masterUnitNameStr = data.tf_masterUnitNames.join(",");
data.tf_slaveUnitNames = slaves.map((item) => item.name);
data.tf_slaveUnitNameStr = data.tf_slaveUnitNames.join(",");
data.tf_helpunitreply = slaves.length ? "HAS_HELP_UNIT" : "NO_HELP_UNIT";
if (this.pendingSubmitType === 4) {
data.taskName = "startTask";
data.tf_sourceTaskKey = this.formData.taskKey;
data.tf_audit = false
}
}
if (this.kind === "unitReply") {
delete data.underTakeIsMaster;
delete data.underTakeName
@@ -432,6 +566,7 @@ const PROPOSAL_TASK_POPUP = {
data.tf_masterUnitId = res.data.tf_masterUnitId;
return this.$axios.post("/flow/common/executeTask", {data: JSON.stringify(data)})
})
else if (this.kind === "committeeFiling") request = this.$axios.post("/platform/proposal/committeeFiling/executeTask", {data: JSON.stringify(data)})
else request = this.$axios.post("/flow/common/executeTask", {data: JSON.stringify(data)})
}
request.then((res) => {
@@ -300,7 +300,6 @@ layout("/layouts/platform_h5.html"){
</div>
</template>
<template v-slot="{index,row}">
<table-column label="立案编号">{{row.caseFilingCode || '--'}}</table-column>
<table-column label="提案类别">{{row.typeName || '--'}}</table-column>
<table-column label="提案人">{{row.createUserName || '--'}}</table-column>
<table-column label="教代会">{{row.sessionName || '--'}}</table-column>
@@ -0,0 +1,415 @@
<!--#
layout("/layouts/platform_h5.html"){
#-->
<style>
body {
background-color: #f3f7fd;
}
.proposal-pre-audit-page {
min-height: 100vh;
padding-bottom: calc(24px + env(safe-area-inset-bottom));
box-sizing: border-box;
background-color: #f3f7fd;
}
.proposal-pre-audit-page .van-nav-bar {
background-color: #fff;
}
.proposal-pre-audit-page .van-nav-bar__title {
color: #172033;
font-size: 16px;
font-weight: 600;
}
.proposal-pre-audit-page .van-nav-bar .van-icon,
.proposal-pre-audit-page .van-nav-bar__text {
color: #1989fa;
}
.proposal-pre-audit-content {
padding: 0 12px;
}
.proposal-pre-audit-sticky {
padding: 22px 12px 1px;
box-sizing: border-box;
background-color: #f3f7fd;
}
.proposal-pre-audit-search {
margin: 0 0 8px;
padding: 0;
overflow: hidden;
border-radius: 12px;
background-color: #fff;
box-shadow: 0 5px 16px rgba(43, 73, 112, .1);
}
.proposal-pre-audit-search .van-search__content {
height: 42px;
padding-left: 12px;
align-items: center;
border-radius: 12px;
background-color: #fff;
}
.proposal-pre-audit-search .van-field__control {
color: #263548;
font-size: 14px;
}
.proposal-pre-audit-search .van-field__control::placeholder {
color: #a7b0bf;
}
.proposal-pre-audit-filter {
margin: 0 0 10px;
overflow: hidden;
border-radius: 10px;
box-shadow: 0 5px 16px rgba(43, 73, 112, .08);
transition: border-radius .18s ease;
}
.proposal-pre-audit-filter.is-open {
border-radius: 10px 10px 0 0;
}
.proposal-pre-audit-filter .van-dropdown-menu__bar,
.proposal-pre-audit-filter .van-dropdown-menu__item,
.proposal-pre-audit-filter .van-dropdown-menu__title {
height: 44px;
}
.proposal-pre-audit-filter .van-dropdown-menu__bar {
box-shadow: none;
}
.proposal-pre-audit-filter .van-dropdown-menu__title {
display: inline-flex;
align-items: center;
color: #66758a;
font-size: 14px;
line-height: 20px;
}
.proposal-pre-audit-filter .van-dropdown-menu__title--active,
.proposal-pre-audit-filter .van-dropdown-item__option--active,
.proposal-pre-audit-filter .van-dropdown-item__option--active .van-dropdown-item__icon {
color: #1989fa;
}
.proposal-pre-audit-filter .van-dropdown-item__content {
width: calc(100% - 24px);
margin: 0 12px;
overflow: hidden;
box-sizing: border-box;
border-radius: 0 0 12px 12px;
box-shadow: 0 10px 24px rgba(31, 65, 108, .14);
}
.proposal-pre-audit-filter .van-dropdown-item__option {
display: flex;
min-height: 48px;
padding: 0 16px;
align-items: center;
color: #46566c;
font-size: 14px;
}
.proposal-pre-audit-list .empty-state {
display: none;
}
.proposal-pre-audit-empty {
display: flex;
min-height: 280px;
padding: 46px 18px 36px;
align-items: center;
justify-content: center;
flex-direction: column;
box-sizing: border-box;
text-align: center;
}
.proposal-pre-audit-empty img {
display: block;
width: 86%;
max-width: 290px;
height: auto;
object-fit: contain;
}
.proposal-pre-audit-empty__title {
margin-top: 14px;
color: #50627a;
font-size: 15px;
line-height: 22px;
font-weight: 600;
}
.proposal-pre-audit-empty__hint {
margin-top: 5px;
color: #9aa7b8;
font-size: 12px;
line-height: 18px;
}
.proposal-pre-audit-card-header {
display: flex;
margin-bottom: 7px;
align-items: flex-start;
justify-content: space-between;
}
.proposal-pre-audit-card-heading {
min-width: 0;
padding-right: 10px;
flex: 1;
}
.proposal-pre-audit-card-title {
overflow: hidden;
color: #253247;
font-size: 15px;
line-height: 22px;
font-weight: 600;
text-overflow: ellipsis;
white-space: nowrap;
}
.proposal-pre-audit-card-code {
margin-top: 1px;
color: #9ba6b6;
font-size: 12px;
line-height: 18px;
}
.proposal-pre-audit-status {
display: inline-flex;
flex: none;
}
.proposal-pre-audit-status .van-tag {
display: inline-flex;
min-height: 24px;
padding: 3px 9px;
align-items: center;
box-sizing: border-box;
border: 0;
border-radius: 12px;
font-size: 12px;
line-height: 18px;
white-space: nowrap;
}
@media (max-width: 350px) {
.proposal-pre-audit-content,
.proposal-pre-audit-sticky {
padding-right: 10px;
padding-left: 10px;
}
}
</style>
<style id="style-proposal-task-popup-h5">
<!--#include("../../common/info.css"){}#-->
<!--#include("../theme.css"){}#-->
</style>
<div id="app" v-cloak>
<div class="proposal-pre-audit-page">
<van-nav-bar @click-left="historyBack" left-arrow left-text="返回" title="提案委员立案审核" placeholder fixed></van-nav-bar>
<van-sticky :offset-top="46">
<div class="proposal-pre-audit-sticky">
<van-search
v-model="pageForm.name"
class="proposal-pre-audit-search"
placeholder="请输入提案名称搜索"
shape="round"
clearable
@search="doSearch"
@clear="doSearch"
></van-search>
<van-dropdown-menu
class="proposal-pre-audit-filter"
:class="{'is-open': filterOpened}"
active-color="#1989fa"
>
<van-dropdown-item
v-model="pageForm.sessionId"
:options="sessionOptions"
:multiple="false"
@change="doSearch"
@open="onFilterOpen"
@close="onFilterClose"
></van-dropdown-item>
<van-dropdown-item
v-model="pageForm.approvalText"
:options="approvalOptions"
:multiple="false"
@change="approvalChange"
@open="onFilterOpen"
@close="onFilterClose"
></van-dropdown-item>
</van-dropdown-menu>
</div>
</van-sticky>
<main class="proposal-pre-audit-content">
<div class="proposal-pre-audit-list">
<!-- 列表无记录时使用与“我的提案”一致的提案专用空状态。 -->
<div v-if="pageForm.totalCount === 0" class="proposal-pre-audit-empty">
<img src="/assets/mobile/img/proposal/proposal-empty.png" alt="暂无提案记录插画">
<div class="proposal-pre-audit-empty__title">暂无提案记录</div>
<div class="proposal-pre-audit-empty__hint">当前筛选条件下暂时没有提案</div>
</div>
<table-list api="/platform/proposal/committeeFiling/pageData" :page_form.sync="pageForm" @ready="onReady"
ref="tableListRef" title="name">
<template #header="{index,row}">
<div class="proposal-pre-audit-card-header">
<div class="proposal-pre-audit-card-heading">
<div class="proposal-pre-audit-card-title">{{row.name}}</div>
<div class="proposal-pre-audit-card-code">编号:{{row.code || '--'}}</div>
</div>
<enum-tag
class="proposal-pre-audit-status"
v-if="row.instanceState"
:value="row.instanceState"
name="ProcessInstanceStateEnum"
label_key="message"
size="small"
></enum-tag>
</div>
</template>
<template v-slot="{index,row}">
<table-column label="提案类别">{{row.typeName || '--'}}</table-column>
<table-column label="提案人">{{row.createUserName || '--'}}</table-column>
<table-column label="教代会">{{row.sessionName || '--'}}</table-column>
<table-column label="代表团">{{row.delegationName || '--'}}</table-column>
<table-column label="当前节点">{{row.curTaskName || '--'}}</table-column>
</template>
<template #actions="{index,row}">
<div class="action-btn" @click="onView(row,index)">
<van-icon class="proposal-action-icon" name="eye-o"></van-icon>
<span>查看</span>
</div>
<div class="action-btn" v-if="row.taskState === 10" @click="onApproval(row,index)">
<van-icon class="proposal-action-icon" name="edit"></van-icon>
<span>审核</span>
</div>
<div class="action-btn delete" v-if="row.canRevoke" @click="onRevoke(row)">
<van-icon class="proposal-action-icon" name="revoke"></van-icon>
<span>撤回</span>
</div>
</template>
</table-list>
</div>
</main>
</div>
<proposal-task-popup ref="taskPopup" kind="committeeFiling" page-key="proposal-committee-filing-task" @success="doSearch"></proposal-task-popup>
</div>
<script nonce="${cspNonce!}">
<!--#include("../../common/info.js"){}#-->
<!--#include("../../common/task-popup.js"){}#-->
new Vue({
el: "#app",
store,
components: {"proposal-task-popup": PROPOSAL_TASK_POPUP},
data() {
return {
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
pageOrderName: "",
pageOrderBy: "",
name: null,
sessionId: null,
approvalText: "0",
approval: false
},
sessionOptions: [],
filterOpened: false,
approvalOptions: [
{text: "未审核", value: "0"},
{text: "已审核", value: "1"}
],
}
},
methods: {
onReady() {
this.listSession(false)
},
onFilterOpen() {
this.filterOpened = true
},
onFilterClose() {
this.filterOpened = false
},
// 审核状态下拉使用字符串展示,查询接口使用布尔值区分已审核和未审核。
approvalChange(value) {
this.$set(this.pageForm, "approval", value === "1")
this.doSearch()
},
// 与其他提案 H5 页面一致加载全部教代会;首次进入默认选中最新一届,缓存恢复时不覆盖原筛选条件。
listSession(skipDefaultSearch) {
this.$axios.post("/platform/proposal/common/listSession").then((res) => {
if (res.code === 0) {
this.sessionOptions = [{text: "全部教代会", value: null}]
.concat(res.data.map((item) => ({text: item.fullName, value: item.id})))
if (skipDefaultSearch) return
this.$set(this.pageForm, "sessionId", res.data.length > 0 ? res.data[0].id : null)
this.doSearch()
}
})
},
onView(row, index) {
this.$refs.taskPopup.open(row, "view")
},
onApproval(row, index) {
this.$refs.taskPopup.open(row, "approval")
},
onRevoke(row) {
this.$dialog.confirm({
title: "提示",
message: "您确定要撤回吗?"
}).then(() => {
this.$axios.post("/flow/common/revokeTask", {taskId: row.taskId}).then((res) => {
if (res.code === 0) {
this.$toast.success(res.msg)
this.doSearch()
}
})
})
},
doSearch() {
this.$nextTick(() => {
this.$set(this.pageForm, "pageNumber", 1)
this.$set(this.pageForm, "totalCount", 0)
this.$refs.tableListRef.doSearch()
})
}
},
created() {
const tab = new URLSearchParams(window.location.search).get("tab")
if (tab === "done") {
this.$set(this.pageForm, "approval", true)
this.$set(this.pageForm, "approvalText", "1")
} else if (tab === "todo") {
this.$set(this.pageForm, "approval", false)
this.$set(this.pageForm, "approvalText", "0")
}
}
})
</script>
<!--#
}
#-->
@@ -235,7 +235,7 @@ layout("/layouts/platform_h5.html"){
</style>
<div id="app" v-cloak>
<div class="proposal-delegation-page">
<van-nav-bar @click-left="historyBack" left-arrow left-text="返回" title="团长审核" placeholder fixed></van-nav-bar>
<van-nav-bar @click-left="historyBack" left-arrow left-text="返回" title="分工会主席审核" placeholder fixed></van-nav-bar>
<van-sticky :offset-top="46">
<div class="proposal-delegation-sticky">
<van-search
@@ -218,7 +218,7 @@ layout("/layouts/platform_h5.html"){
</style>
<div id="app" v-cloak>
<div class="proposal-pre-audit-page">
<van-nav-bar @click-left="historyBack" left-arrow left-text="返回" title="校工会预审核" placeholder fixed></van-nav-bar>
<van-nav-bar @click-left="historyBack" left-arrow left-text="返回" title="校工会主席审核" placeholder fixed></van-nav-bar>
<van-sticky :offset-top="46">
<div class="proposal-pre-audit-sticky">
<van-search
@@ -263,7 +263,7 @@ layout("/layouts/platform_h5.html"){
<div class="proposal-pre-audit-empty__title">暂无提案记录</div>
<div class="proposal-pre-audit-empty__hint">当前筛选条件下暂时没有提案</div>
</div>
<table-list api="/platform/proposal/pre/audit/pageData" :page_form.sync="pageForm" @ready="onReady"
<table-list api="/platform/proposal/schoolUnionChairApproval/pageData" :page_form.sync="pageForm" @ready="onReady"
ref="tableListRef" title="name">
<template #header="{index,row}">
<div class="proposal-pre-audit-card-header">
@@ -282,7 +282,6 @@ layout("/layouts/platform_h5.html"){
</div>
</template>
<template v-slot="{index,row}">
<table-column label="立案编号">{{row.caseFilingCode || '--'}}</table-column>
<table-column label="提案类别">{{row.typeName || '--'}}</table-column>
<table-column label="提案人">{{row.createUserName || '--'}}</table-column>
<table-column label="教代会">{{row.sessionName || '--'}}</table-column>
@@ -307,7 +306,7 @@ layout("/layouts/platform_h5.html"){
</div>
</main>
</div>
<proposal-task-popup ref="taskPopup" kind="preAudit" page-key="proposal-pre-audit-task" @success="doSearch"></proposal-task-popup>
<proposal-task-popup ref="taskPopup" kind="schoolUnionChairApproval" page-key="proposal-school-union-chair-task" @success="doSearch"></proposal-task-popup>
</div>
<script nonce="${cspNonce!}">
<!--#include("../../common/info.js"){}#-->
@@ -285,7 +285,7 @@ const todo = {
this.$toast("当前流程暂不支持手机端审核,请前往PC端页面审核!");
return;
}
this.$pjaxReplace(h5FormKey + "?taskId=" + taskId + "bizId=" + businessNo + "taskKey=" + taskKey+ "&tab=" + this.activeTab)
this.$pjaxReplace(h5FormKey + "?taskId=" + taskId + "&bizId=" + businessNo + "&taskKey=" + taskKey + "&tab=" + this.activeTab)
},
// 根据当前列表类型统一展示流程状态,发起列表保留流程实例的实际状态。