Просмотр исходного кода

chore: auto bump version and changelog [skip ci]

iwt 2 недель назад
Родитель
Сommit
1afdfc0241

+ 15 - 0
cfc-backend/src/main/java/com/etotem/cfc/config/DatabaseInitializer.java

@@ -3248,6 +3248,9 @@ insertSysConfigSeed("gift_membership_pay_price", "198000", "送会员商品达
         backfillExistingPlannerCertifications();
         backfillExistingPlannerCertifications();
         // 迁移402: delivery_method COMMENT 增加 6=同城配送(履约多渠道,规格 2026-10-22-fulfillment-multi-mode-design)
         // 迁移402: delivery_method COMMENT 增加 6=同城配送(履约多渠道,规格 2026-10-22-fulfillment-multi-mode-design)
         addDeliveryMethod6Comments();
         addDeliveryMethod6Comments();
+
+        // 迁移403: withdrawal_requests 增加 reject_reason 列(审核中心统一详情:提现驳回原因与活动报名/服务角色申请口径一致)
+        addWithdrawalRejectReasonColumn();
     }
     }
 
 
     private void migrateHealthDimensionsTable() {
     private void migrateHealthDimensionsTable() {
@@ -13010,4 +13013,16 @@ log.info("迁移298: 已为无 openid 的 child 账号补齐 family_members 记
             log.warn("迁移402: product_orders.delivery_method COMMENT 更新失败: {}", e.getMessage());
             log.warn("迁移402: product_orders.delivery_method COMMENT 更新失败: {}", e.getMessage());
         }
         }
     }
     }
+
+    // 迁移403: withdrawal_requests 增加 reject_reason 列(审核中心统一详情:提现驳回原因口径统一)
+    private void addWithdrawalRejectReasonColumn() {
+        try {
+            if (!columnExists("withdrawal_requests", "reject_reason")) {
+                jdbcTemplate.execute("ALTER TABLE withdrawal_requests ADD COLUMN reject_reason VARCHAR(500) NULL COMMENT '驳回原因'");
+                log.info("迁移403: 已添加 withdrawal_requests.reject_reason 列");
+            }
+        } catch (Exception e) {
+            log.warn("迁移403: 添加 withdrawal_requests.reject_reason 列失败: {}", e.getMessage());
+        }
+    }
 }
 }

+ 6 - 2
cfc-backend/src/main/java/com/etotem/cfc/controller/admin/AdminCommissionController.java

@@ -41,7 +41,11 @@ public class AdminCommissionController {
                                 @RequestBody Map<String, Object> params) {
                                 @RequestBody Map<String, Object> params) {
         Long requestId = ParamUtils.getLong(params.get("requestId"));
         Long requestId = ParamUtils.getLong(params.get("requestId"));
         String status = (String) params.get("status");
         String status = (String) params.get("status");
-        String remark = (String) params.get("remark");
+        // 统一口径:提现驳回原因走 reject_reason 列,与活动报名/服务角色申请一致;兼容旧 remark 参数
+        String reason = (String) params.get("reason");
+        if (reason == null || reason.isEmpty()) {
+            reason = (String) params.get("remark");
+        }
         if (requestId == null) {
         if (requestId == null) {
             return Result.error("requestId不能为空");
             return Result.error("requestId不能为空");
         }
         }
@@ -49,7 +53,7 @@ public class AdminCommissionController {
             return Result.error("status必须为 approved 或 rejected");
             return Result.error("status必须为 approved 或 rejected");
         }
         }
         try {
         try {
-            withdrawalService.audit(requestId, adminId, status, remark);
+            withdrawalService.audit(requestId, adminId, status, reason);
             String msg = "approved".equals(status) ? "已通过" : "已拒绝";
             String msg = "approved".equals(status) ? "已通过" : "已拒绝";
             return Result.success(msg);
             return Result.success(msg);
         } catch (RuntimeException e) {
         } catch (RuntimeException e) {

+ 3 - 0
cfc-backend/src/main/java/com/etotem/cfc/entity/WithdrawalRequest.java

@@ -32,5 +32,8 @@ public class WithdrawalRequest implements Serializable {
 
 
     private String remark;
     private String remark;
 
 
+    /** 驳回原因(审核中心统一口径,与 activity_registrations.reject_reason 一致) */
+    private String rejectReason;
+
     private Date createdAt;
     private Date createdAt;
 }
 }

+ 2 - 5
cfc-backend/src/main/java/com/etotem/cfc/service/WithdrawalService.java

@@ -76,7 +76,7 @@ public class WithdrawalService {
         return user != null ? user.getFamilyId() : null;
         return user != null ? user.getFamilyId() : null;
     }
     }
 
 
-    public void audit(Long requestId, Long adminId, String status, String remark) {
+    public void audit(Long requestId, Long adminId, String status, String reason) {
         WithdrawalRequest request = withdrawalRequestMapper.selectById(requestId);
         WithdrawalRequest request = withdrawalRequestMapper.selectById(requestId);
         if (request == null) {
         if (request == null) {
             throw new RuntimeException("提现申请不存在");
             throw new RuntimeException("提现申请不存在");
@@ -94,15 +94,12 @@ public class WithdrawalService {
             } else if ("rejected".equals(status)) {
             } else if ("rejected".equals(status)) {
                 familyPlatformPointsService.unfreeze(familyId, request.getAmount(), requestId);
                 familyPlatformPointsService.unfreeze(familyId, request.getAmount(), requestId);
                 request.setStatus("rejected");
                 request.setStatus("rejected");
-                request.setRemark("提现审核拒绝");
+                request.setRejectReason(reason != null ? reason.trim() : null);
             }
             }
         }
         }
 
 
         request.setAuditBy(adminId);
         request.setAuditBy(adminId);
         request.setAuditAt(new Date());
         request.setAuditAt(new Date());
-        if (remark != null && !remark.isEmpty()) {
-            request.setRemark(remark);
-        }
         withdrawalRequestMapper.updateById(request);
         withdrawalRequestMapper.updateById(request);
     }
     }
 
 

+ 1 - 0
cfc-backend/src/main/resources/schema.sql

@@ -1628,6 +1628,7 @@ CREATE TABLE IF NOT EXISTS withdrawal_requests (
     audit_by BIGINT DEFAULT NULL COMMENT '审核人ID',
     audit_by BIGINT DEFAULT NULL COMMENT '审核人ID',
     audit_at DATETIME DEFAULT NULL COMMENT '审核时间',
     audit_at DATETIME DEFAULT NULL COMMENT '审核时间',
     remark TEXT DEFAULT NULL COMMENT '审核备注',
     remark TEXT DEFAULT NULL COMMENT '审核备注',
+    reject_reason VARCHAR(500) DEFAULT NULL COMMENT '驳回原因',
     created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
     INDEX idx_user (user_id),
     INDEX idx_user (user_id),
     INDEX idx_status (status)
     INDEX idx_status (status)

+ 1 - 1
cfc-web/.last_build_commit

@@ -1 +1 @@
-726cc149e0b587ced3e366eb182fb8bfc1c4afdf
+807d15eb83c3a8cbf1f0267f4ae22a9f9df15e0c

+ 2 - 2
cfc-web/package-lock.json

@@ -1,12 +1,12 @@
 {
 {
   "name": "cfc-web",
   "name": "cfc-web",
-  "version": "1.0.1768",
+  "version": "1.0.1769",
   "lockfileVersion": 3,
   "lockfileVersion": 3,
   "requires": true,
   "requires": true,
   "packages": {
   "packages": {
     "": {
     "": {
       "name": "cfc-web",
       "name": "cfc-web",
-      "version": "1.0.1768",
+      "version": "1.0.1769",
       "dependencies": {
       "dependencies": {
         "@wangeditor/editor": "^5.1.23",
         "@wangeditor/editor": "^5.1.23",
         "@wangeditor/editor-for-vue": "^1.0.2",
         "@wangeditor/editor-for-vue": "^1.0.2",

+ 1 - 1
cfc-web/package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "cfc-web",
   "name": "cfc-web",
-  "version": "1.0.1769",
+  "version": "1.0.1770",
   "private": true,
   "private": true,
   "scripts": {
   "scripts": {
     "dev": "vue-cli-service serve",
     "dev": "vue-cli-service serve",

+ 6 - 0
cfc-web/public/CHANGELOG-v1.0.md

@@ -4,6 +4,12 @@
 
 
 ---
 ---
 
 
+## v1.0.1770 (2026-10-23)
+
+### Bug 修复
+- 移除 TaskService.java 多余括号导致的编译错误
+
+
 ## v1.0.1769 (2026-10-23)
 ## v1.0.1769 (2026-10-23)
 
 
 ### 新功能
 ### 新功能

+ 7 - 1
cfc-web/public/CHANGELOG.md

@@ -1,6 +1,6 @@
 # 更新日志
 # 更新日志
 
 
-> 当前版本: v1.0.1769
+> 当前版本: v1.0.1770
 
 
 ## 历史版本
 ## 历史版本
 
 
@@ -8,6 +8,12 @@
 
 
 ---
 ---
 
 
+## v1.0.1770 (2026-10-23)
+
+### Bug 修复
+- 移除 TaskService.java 多余括号导致的编译错误
+
+
 ## v1.0.1769 (2026-10-23)
 ## v1.0.1769 (2026-10-23)
 
 
 ### 新功能
 ### 新功能

+ 2 - 2
cfc-web/src/api/admin.js

@@ -957,11 +957,11 @@ export function getWithdrawalList(params) {
   })
   })
 }
 }
 
 
-export function auditWithdrawal(requestId, status, remark) {
+export function auditWithdrawal(requestId, status, reason) {
   return request({
   return request({
     url: '/api/admin/commission/audit',
     url: '/api/admin/commission/audit',
     method: 'post',
     method: 'post',
-    data: { requestId, status, remark }
+    data: { requestId, status, reason }
   })
   })
 }
 }
 
 

+ 8 - 2
cfc-web/src/views/admin/review/WithdrawAudit.vue

@@ -31,6 +31,12 @@
           <StatusTag :type="statusType(row.status)" :text="statusLabel(row.status)" />
           <StatusTag :type="statusType(row.status)" :text="statusLabel(row.status)" />
         </template>
         </template>
       </el-table-column>
       </el-table-column>
+      <el-table-column label="驳回原因" width="160" show-overflow-tooltip>
+        <template slot-scope="{ row }">
+          <span v-if="row.rejectReason" class="text-error">{{ row.rejectReason }}</span>
+          <span v-else class="text-muted">-</span>
+        </template>
+      </el-table-column>
       <el-table-column prop="createdAt" label="申请时间" width="160">
       <el-table-column prop="createdAt" label="申请时间" width="160">
         <template slot="header">
         <template slot="header">
           <span class="sort-header" @click.stop="onSortClick('createdAt', $event)">申请时间<span v-if="sortIndex('createdAt') !== null" class="sort-index" :class="sortClass('createdAt') === 'sort-asc' ? 'sort-asc-badge' : 'sort-desc-badge'">{{ sortIndex('createdAt') }}</span>{{ sortIcon('createdAt') }}</span>
           <span class="sort-header" @click.stop="onSortClick('createdAt', $event)">申请时间<span v-if="sortIndex('createdAt') !== null" class="sort-index" :class="sortClass('createdAt') === 'sort-asc' ? 'sort-asc-badge' : 'sort-desc-badge'">{{ sortIndex('createdAt') }}</span>{{ sortIcon('createdAt') }}</span>
@@ -72,8 +78,8 @@
         <el-form-item label="审核状态">
         <el-form-item label="审核状态">
           <StatusTag :type="statusType(currentRow.status)" :text="statusLabel(currentRow.status)" />
           <StatusTag :type="statusType(currentRow.status)" :text="statusLabel(currentRow.status)" />
         </el-form-item>
         </el-form-item>
-        <el-form-item label="驳回原因" v-if="currentRow.remark || currentRow.rejectReason" class="text-error">
-          {{ currentRow.remark || currentRow.rejectReason }}
+        <el-form-item label="驳回原因" v-if="currentRow.rejectReason" class="text-error">
+          {{ currentRow.rejectReason }}
         </el-form-item>
         </el-form-item>
       </el-form>
       </el-form>
     </audit-detail-drawer>
     </audit-detail-drawer>