From fcb10e9bc7b270310e2fde808fea4c3fbc274718 Mon Sep 17 00:00:00 2001 From: apple Date: Mon, 16 Mar 2026 07:42:51 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=A7=AF=E5=88=86=E9=A1=B5=E6=94=AF?= =?UTF-8?q?=E5=87=BA=E6=98=8E=E7=BB=86=E4=B8=8D=E6=98=BE=E7=A4=BA=20+=20in?= =?UTF-8?q?tegral/list=20=E6=94=AF=E6=8C=81=20type=20=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 前端 points.vue: 支出明细 type 过滤改为 Number(item.type)===2;onLoad 先 await loadUserInfo 再 loadPointsList;请求 getIntegralList 时传 type=2 - 后端 integral/list: 增加可选参数 type(1=收入,2=支出),UserIntegralRecordServiceImpl 支持按 type 筛选 - 新增 backend/shell/test-integral-list.sh 测试 integral/list 支出明细 - 新增 backend/shell/start-front-miao33.sh 使用 nohup 启动 crmeb-front(miao33) Made-with: Cursor --- .../zbkj/front/controller/UserController.java | 6 ++- .../zbkj/front/service/UserCenterService.java | 3 +- .../service/impl/UserCenterServiceImpl.java | 5 +- .../service/UserIntegralRecordService.java | 9 ++++ .../impl/UserIntegralRecordServiceImpl.java | 8 +++ backend/shell/start-front-miao33.sh | 19 +++++++ backend/shell/test-integral-list.sh | 53 +++++++++++++++++++ single_uniapp22miao/pages/integral/points.vue | 9 ++-- 8 files changed, 103 insertions(+), 9 deletions(-) create mode 100755 backend/shell/start-front-miao33.sh create mode 100755 backend/shell/test-integral-list.sh diff --git a/backend/crmeb-front/src/main/java/com/zbkj/front/controller/UserController.java b/backend/crmeb-front/src/main/java/com/zbkj/front/controller/UserController.java index 2d7952d..f88a047 100644 --- a/backend/crmeb-front/src/main/java/com/zbkj/front/controller/UserController.java +++ b/backend/crmeb-front/src/main/java/com/zbkj/front/controller/UserController.java @@ -220,11 +220,13 @@ public class UserController { /** * 积分记录 + * @param type 可选,记录类型:1=收入,2=支出,不传返回全部 */ @ApiOperation(value = "积分记录") @RequestMapping(value = "/integral/list", method = RequestMethod.GET) - public CommonResult> getIntegralList(@Validated PageParamRequest pageParamRequest) { - return CommonResult.success(CommonPage.restPage(userCenterService.getUserIntegralRecordList(pageParamRequest))); + public CommonResult> getIntegralList(@Validated PageParamRequest pageParamRequest, + @RequestParam(required = false) Integer type) { + return CommonResult.success(CommonPage.restPage(userCenterService.getUserIntegralRecordList(pageParamRequest, type))); } /** diff --git a/backend/crmeb-front/src/main/java/com/zbkj/front/service/UserCenterService.java b/backend/crmeb-front/src/main/java/com/zbkj/front/service/UserCenterService.java index d265d68..dc0ae3f 100644 --- a/backend/crmeb-front/src/main/java/com/zbkj/front/service/UserCenterService.java +++ b/backend/crmeb-front/src/main/java/com/zbkj/front/service/UserCenterService.java @@ -176,9 +176,10 @@ public interface UserCenterService extends IService { /** * 用户积分记录列表 * @param pageParamRequest 分页参数 + * @param type 可选,记录类型:1=收入,2=支出,null=全部 * @return List */ - List getUserIntegralRecordList(PageParamRequest pageParamRequest); + List getUserIntegralRecordList(PageParamRequest pageParamRequest, Integer type); /** * 微信app登录 diff --git a/backend/crmeb-front/src/main/java/com/zbkj/front/service/impl/UserCenterServiceImpl.java b/backend/crmeb-front/src/main/java/com/zbkj/front/service/impl/UserCenterServiceImpl.java index 9e4b02f..74e1b9f 100644 --- a/backend/crmeb-front/src/main/java/com/zbkj/front/service/impl/UserCenterServiceImpl.java +++ b/backend/crmeb-front/src/main/java/com/zbkj/front/service/impl/UserCenterServiceImpl.java @@ -912,12 +912,13 @@ public class UserCenterServiceImpl extends ServiceImpl implements * 用户积分记录列表 * * @param pageParamRequest 分页参数 + * @param type 可选,记录类型:1=收入,2=支出,null=全部 * @return List */ @Override - public List getUserIntegralRecordList(PageParamRequest pageParamRequest) { + public List getUserIntegralRecordList(PageParamRequest pageParamRequest, Integer type) { Integer uid = userService.getUserIdException(); - return userIntegralRecordService.findUserIntegralRecordList(uid, pageParamRequest); + return userIntegralRecordService.findUserIntegralRecordList(uid, pageParamRequest, type); } /** diff --git a/backend/crmeb-service/src/main/java/com/zbkj/service/service/UserIntegralRecordService.java b/backend/crmeb-service/src/main/java/com/zbkj/service/service/UserIntegralRecordService.java index d2fb15c..b6455b6 100644 --- a/backend/crmeb-service/src/main/java/com/zbkj/service/service/UserIntegralRecordService.java +++ b/backend/crmeb-service/src/main/java/com/zbkj/service/service/UserIntegralRecordService.java @@ -62,6 +62,15 @@ public interface UserIntegralRecordService extends IService */ List findUserIntegralRecordList(Integer uid, PageParamRequest pageParamRequest); + /** + * H5用户积分列表(按类型筛选) + * @param uid 用户uid + * @param pageParamRequest 分页参数 + * @param type 可选,1=收入,2=支出,null=全部 + * @return List + */ + List findUserIntegralRecordList(Integer uid, PageParamRequest pageParamRequest, Integer type); + /** * 获取用户冻结的积分 * @param uid 用户uid diff --git a/backend/crmeb-service/src/main/java/com/zbkj/service/service/impl/UserIntegralRecordServiceImpl.java b/backend/crmeb-service/src/main/java/com/zbkj/service/service/impl/UserIntegralRecordServiceImpl.java index 13adc19..0ccc593 100644 --- a/backend/crmeb-service/src/main/java/com/zbkj/service/service/impl/UserIntegralRecordServiceImpl.java +++ b/backend/crmeb-service/src/main/java/com/zbkj/service/service/impl/UserIntegralRecordServiceImpl.java @@ -217,11 +217,19 @@ public class UserIntegralRecordServiceImpl extends ServiceImpl findUserIntegralRecordList(Integer uid, PageParamRequest pageParamRequest) { + return findUserIntegralRecordList(uid, pageParamRequest, null); + } + + @Override + public List findUserIntegralRecordList(Integer uid, PageParamRequest pageParamRequest, Integer type) { PageHelper.startPage(pageParamRequest.getPage(), pageParamRequest.getLimit()); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.select(UserIntegralRecord::getId, UserIntegralRecord::getTitle, UserIntegralRecord::getType, UserIntegralRecord::getIntegral, UserIntegralRecord::getUpdateTime); lqw.eq(UserIntegralRecord::getUid, uid); lqw.eq(UserIntegralRecord::getStatus, IntegralRecordConstants.INTEGRAL_RECORD_STATUS_COMPLETE); + if (type != null) { + lqw.eq(UserIntegralRecord::getType, type); + } lqw.orderByDesc(UserIntegralRecord::getUpdateTime); return dao.selectList(lqw); } diff --git a/backend/shell/start-front-miao33.sh b/backend/shell/start-front-miao33.sh new file mode 100755 index 0000000..9d4e88e --- /dev/null +++ b/backend/shell/start-front-miao33.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +# 使用 miao33 配置启动 crmeb-front 服务(nohup 后台) +# 端口见 application-miao33.yml:30031 + +set -e +BACKEND_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +cd "$BACKEND_DIR" +JAR="$BACKEND_DIR/crmeb-front/target/miao-front-2.2.jar" +LOG="${LOG:-$BACKEND_DIR/front-miao33.log}" + +if [ ! -f "$JAR" ]; then + echo "未找到 jar,请先执行: mvn clean package -pl crmeb-front -am -DskipTests" + exit 1 +fi + +echo "启动: nohup java -jar $JAR --spring.profiles.active=miao33 > $LOG 2>&1 &" +nohup java -jar "$JAR" --spring.profiles.active=miao33 >> "$LOG" 2>&1 & +echo "PID: $!" +echo "日志: $LOG" diff --git a/backend/shell/test-integral-list.sh b/backend/shell/test-integral-list.sh new file mode 100755 index 0000000..98305c9 --- /dev/null +++ b/backend/shell/test-integral-list.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env bash +# 测试 api/front/integral/list 是否返回支出明细(type=2) +# 用法: BASE_URL=http://localhost:8081 ./test-integral-list.sh +# 或: ./test-integral-list.sh (默认 BASE_URL=http://localhost:8081) + +set -e +BASE="${BASE_URL:-http://localhost:8081}" +USER="13739117991" +PASS="123456" + +echo "=== 测试 integral/list 支出明细 (type=2) ===" +echo "BASE_URL=$BASE" +echo "" + +echo "1. 登录 ($USER / $PASS) ..." +LOGIN=$(curl -s -X POST "$BASE/api/front/loginV2" \ + -H "Content-Type: application/json" \ + -d "{\"account\":\"$USER\",\"password\":\"$PASS\"}") + +if echo "$LOGIN" | grep -qE '"code":\s*(0|200)'; then + echo " 登录成功" +else + echo " 登录失败 (若为「此账号未注册」请在本环境用已注册账号或本地起后端测试): $LOGIN" + exit 1 +fi + +TOKEN=$(echo "$LOGIN" | sed -n 's/.*"token":"\([^"]*\)".*/\1/p') +if [ -z "$TOKEN" ]; then + echo " 未获取到 token" + exit 1 +fi +echo " Token: ${TOKEN:0:24}..." +echo "" + +echo "2. GET api/front/integral/list?page=1&limit=20&type=2 (支出明细) ..." +RES=$(curl -s -X GET "$BASE/api/front/integral/list?page=1&limit=20&type=2" \ + -H "Content-Type: application/json" \ + -H "Authori-zation: $TOKEN") + +echo "$RES" | head -c 800 +echo "" +echo "" + +if echo "$RES" | grep -qE '"code":\s*(0|200)'; then + echo "3. 结果: 接口返回成功 (code=0/200)" + if echo "$RES" | grep -q '"list":'; then + echo " data.list 已返回;带 type=2 时仅包含支出明细,见上方 JSON。" + fi + exit 0 +else + echo "3. 结果: 接口未成功 (需登录或 code 非 0/200)" + exit 1 +fi diff --git a/single_uniapp22miao/pages/integral/points.vue b/single_uniapp22miao/pages/integral/points.vue index 390329f..0d81ba1 100644 --- a/single_uniapp22miao/pages/integral/points.vue +++ b/single_uniapp22miao/pages/integral/points.vue @@ -204,7 +204,7 @@ export default { } this.getUserPoints() - this.loadUserInfo() + await this.loadUserInfo() this.loadPointsList() }, @@ -447,7 +447,8 @@ export default { }), getIntegralList({ page: this.page, - limit: this.limit + limit: this.limit, + type: 2 }) ]) @@ -470,8 +471,8 @@ export default { // 处理积分明细(使用 getIntegralList,需要过滤出 type === 2 的支出记录) if (pointsRes.code === 0 && pointsRes.data) { - // 过滤出支出记录(type === 2) - const expenseRecords = (pointsRes.data.list || []).filter(item => item.type === 2) + // 过滤出支出记录(type === 2),兼容后端返回数字或字符串 + const expenseRecords = (pointsRes.data.list || []).filter(item => Number(item.type) === 2) pointsList = expenseRecords.map(item => ({ id: `points_${item.id}`, source: 'points', // 标记来源:积分(与模板中的判断保持一致)