From 98521fdc716f1e293f936e0fe66e64f86182f838 Mon Sep 17 00:00:00 2001
From: weicw <594098497@qq.com>
Date: Mon, 2 Nov 2026 19:28:57 +0800
Subject: [PATCH] =?UTF-8?q?feat(declare):=20=E7=94=B3=E6=8A=A5=E9=A1=B9?=
=?UTF-8?q?=E7=9B=AE=E5=88=97=E8=A1=A8=E5=B1=95=E7=A4=BA=E5=AE=A1=E6=A0=B8?=
=?UTF-8?q?=E7=8A=B6=E6=80=81=E5=B9=B6=E9=80=8F=E4=BC=A0=E7=94=B3=E6=8A=A5?=
=?UTF-8?q?=E9=A1=B9=E7=9B=AEid?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 列表按本人状态显示草稿/审核中/已通过/已驳回/已作废,审核中与已通过时禁止进入
- 各申报页提交时透传 declareId,6 个通用模块此前不传导致无法判重
- 各模块列表显示审核状态并支持撤回
- 挑战杯页不再把申报项目 id 当作申报记录 id 加载详情
---
src/packageMine/declare.vue | 4 +-
src/pages/gxmu/form.vue | 31 +++++++++--
src/pages/gxmu/index.vue | 77 ++++++++++++++++++++++++---
src/pages/gxmu/module-form-service.js | 10 +++-
src/pages/gxmu/qmgc.vue | 31 +++++++++--
src/pages/gxmu/tzbcy.vue | 30 +++++++++--
src/pages/gxmu/wxxzx.vue | 31 +++++++++--
src/pages/mine/declare.vue | 4 +-
8 files changed, 192 insertions(+), 26 deletions(-)
diff --git a/src/packageMine/declare.vue b/src/packageMine/declare.vue
index b19e616..9922f27 100644
--- a/src/packageMine/declare.vue
+++ b/src/packageMine/declare.vue
@@ -167,7 +167,7 @@
const moduleMeta = getModuleMeta(item.module)
const title = String(item.title || '').trim() || ((moduleMeta && moduleMeta.title) || '申报表')
uni.navigateTo({
- url: `/pages/gxmu/form?code=${encodeURIComponent(item.module)}&year=${encodeURIComponent(item.year || '')}&declareTitle=${encodeURIComponent(title)}`
+ url: `/pages/gxmu/form?code=${encodeURIComponent(item.module)}&year=${encodeURIComponent(item.year || '')}&declareId=${encodeURIComponent(item.id)}&declareTitle=${encodeURIComponent(title)}`
})
}
}
@@ -370,4 +370,4 @@
color: #1496f2;
font-size: 22rpx;
}
-
+
\ No newline at end of file
diff --git a/src/pages/gxmu/form.vue b/src/pages/gxmu/form.vue
index 40ca39f..738780b 100644
--- a/src/pages/gxmu/form.vue
+++ b/src/pages/gxmu/form.vue
@@ -30,6 +30,8 @@
{{ item.year || fixedYear || '-' }}
{{ getRecordMeta(item) }}
+ 审核状态:{{ getRecordStatusText(item.declareStatus) }}
+ 撤回申报
@@ -214,7 +216,8 @@
userPageWshqtwForm,
userPageWshqtzbForm,
userPageYxgqtdgbForm,
- userPageYxgqtyForm
+ userPageYxgqtyForm,
+ withdrawDeclareRecord
} from './module-form-service'
const STORAGE_PREFIX = 'gxmu_form_draft_'
@@ -275,6 +278,7 @@
nationOptions: [],
politicsOptions: [],
recordId: '',
+ declareId: '',
loading: false,
showEdit: false,
list: [],
@@ -322,6 +326,7 @@
this.fixedYear = fixedYear
this.declareTitle = declareTitle
this.recordId = recordId
+ this.declareId = String(options.declareId || '').trim()
if (config) {
uni.setNavigationBarTitle({
@@ -448,6 +453,19 @@
.slice(0, 1)
return parts.length ? parts.join(' · ') : (this.moduleMeta && this.moduleMeta.group) || '申报记录'
},
+ getRecordStatusText(status) {
+ const map = { 0: '草稿', 1: '审核中', 2: '已通过', 3: '已驳回', 4: '已作废' }
+ return map[status] === undefined ? '待提交' : map[status]
+ },
+ async withdrawRecord(item) {
+ try {
+ await withdrawDeclareRecord(this.moduleCode, item.id)
+ uni.showToast({ title: '已撤回,可继续修改后重新提交', icon: 'none' })
+ this.loadData()
+ } catch (error) {
+ uni.showToast({ title: (error && error.message) || '撤回失败', icon: 'none' })
+ }
+ },
getRecordMeta(item) {
const pairs = [
['政治面貌', item && item.politics],
@@ -782,7 +800,8 @@
try {
const payload = {
...this.formData,
- year: this.fixedYear || this.formData.year
+ year: this.fixedYear || this.formData.year,
+ declareId: this.declareId ? Number(this.declareId) : undefined
}
const request = payload.id ? api.update : api.add
await request({
@@ -890,4 +909,10 @@
.empty-page { min-height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 48rpx; text-align: center; }
.empty-title { font-size: 30rpx; font-weight: 700; color: #1f2329; }
.empty-desc { margin-top: 12rpx; font-size: 24rpx; line-height: 1.7; color: #7b8694; }
-
+ .card-withdraw {
+ margin-top: 12rpx;
+ font-size: 22rpx;
+ color: #cf1322;
+ }
+
+
\ No newline at end of file
diff --git a/src/pages/gxmu/index.vue b/src/pages/gxmu/index.vue
index 5c36866..1e93077 100644
--- a/src/pages/gxmu/index.vue
+++ b/src/pages/gxmu/index.vue
@@ -51,7 +51,7 @@
v-for="item in filteredDeclareList"
:key="item.id || `${item.module}-${item.year}`"
class="declare-card"
- :class="{ 'declare-card--disabled': !isModuleSupported(item.module) }"
+ :class="{ 'declare-card--disabled': !isModuleSupported(item.module) || item.myStatus === 1 || item.myStatus === 2 }"
@tap="goApply(item)"
>
@@ -61,9 +61,9 @@
- {{ isModuleSupported(item.module) ? '可申报' : '待支持' }}
+ {{ getDeclareStatus(item).text }}
@@ -87,7 +87,7 @@
@@ -231,6 +231,37 @@
getDeclareGroup(module) {
return this.getModuleMetaSafe(module).group
},
+ getDeclareStatus(item) {
+ const status = item && item.myStatus
+ if (status === 0) {
+ return { text: '草稿', className: 'card-status--draft' }
+ }
+ if (status === 1) {
+ return { text: '审核中', className: 'card-status--pending' }
+ }
+ if (status === 2) {
+ return { text: '已通过', className: 'card-status--passed' }
+ }
+ if (status === 3) {
+ return { text: '已驳回', className: 'card-status--rejected' }
+ }
+ if (status === 4) {
+ return { text: '已作废', className: 'card-status--void' }
+ }
+ if (!this.isModuleSupported(item.module)) {
+ return { text: '待支持', className: 'card-status--disabled' }
+ }
+ return { text: '可申报', className: 'card-status--active' }
+ },
+ getDeclareActionText(item) {
+ if (item.myStatus === 1) {
+ return '审核中'
+ }
+ if (item.myStatus === 2) {
+ return '已通过'
+ }
+ return this.isModuleSupported(item.module) ? '进入申报' : '暂未开放'
+ },
isModuleSupported(module) {
return !!getFormConfig(module)
},
@@ -305,6 +336,14 @@
}
},
goApply(item) {
+ if (item.myStatus === 1) {
+ this.showToast('该项目你的申报正在审核中,请等待审核结果')
+ return
+ }
+ if (item.myStatus === 2) {
+ this.showToast('该项目你已通过,不能重复申报')
+ return
+ }
if (!item.module) {
this.showToast('当前申报项目缺少模块标识')
return
@@ -334,7 +373,8 @@
const query = [
`code=${encodeURIComponent(item.module)}`,
`year=${encodeURIComponent(item.year || '')}`,
- `declareTitle=${encodeURIComponent(this.getDeclareTitle(item))}`
+ `declareTitle=${encodeURIComponent(this.getDeclareTitle(item))}`,
+ `declareId=${encodeURIComponent(item.id)}`
]
uni.navigateTo({
url: `/pages/gxmu/form?${query.join('&')}`
@@ -628,6 +668,31 @@
color: #8f837d;
}
+ .card-status--draft {
+ background: #f0f5ff;
+ color: #2f54eb;
+ }
+
+ .card-status--pending {
+ background: #fff7e6;
+ color: #d46b08;
+ }
+
+ .card-status--passed {
+ background: #f0f9eb;
+ color: #389e0d;
+ }
+
+ .card-status--rejected {
+ background: #fff1f0;
+ color: #cf1322;
+ }
+
+ .card-status--void {
+ background: #f5f5f5;
+ color: #8c8c8c;
+ }
+
.card-year {
display: inline-flex;
align-items: center;
@@ -694,4 +759,4 @@
font-weight: 600;
color: #1496f2;
}
-
+
\ No newline at end of file
diff --git a/src/pages/gxmu/module-form-service.js b/src/pages/gxmu/module-form-service.js
index a42adc0..9f61ee0 100644
--- a/src/pages/gxmu/module-form-service.js
+++ b/src/pages/gxmu/module-form-service.js
@@ -49,6 +49,14 @@ export function removeSjqnForm(id) {
return request(`/gxmu/sjqn-form/${id}`, 'DELETE')
}
+export function withdrawDeclareRecord(module, id) {
+ return request('/gxmu/declare-record/withdraw', 'POST', { module, id })
+}
+
+export function getDeclareRecord(module, declareId) {
+ return request('/gxmu/declare-record/mine', 'GET', { module, declareId })
+}
+
export function getDeclare(id) {
return request(`/gxmu/declare/${id}`, 'GET')
}
@@ -209,4 +217,4 @@ export function uploadTempFile(file) {
}
})
})
-}
+}
\ No newline at end of file
diff --git a/src/pages/gxmu/qmgc.vue b/src/pages/gxmu/qmgc.vue
index 7318be1..042c217 100644
--- a/src/pages/gxmu/qmgc.vue
+++ b/src/pages/gxmu/qmgc.vue
@@ -22,6 +22,8 @@
手机号:{{ item.phone || '-' }}
团学职务:{{ item.leaguePosition || '-' }}
+ 审核状态:{{ getRecordStatusText(item.declareStatus) }}
+ 撤回申报
@@ -128,7 +130,7 @@