提案流程
This commit is contained in:
@@ -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) => {
|
||||
|
||||
-1
@@ -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>
|
||||
|
||||
+415
@@ -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>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+1
-1
@@ -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
|
||||
|
||||
+3
-4
@@ -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)
|
||||
},
|
||||
|
||||
// 根据当前列表类型统一展示流程状态,发起列表保留流程实例的实际状态。
|
||||
|
||||
Reference in New Issue
Block a user