feat(fsgx): 完成全部24项开发任务 Phase1-7

Phase1 后端核心:
- 新增 fsgx_v1.sql 迁移脚本(is_queue_goods/frozen_points/available_points/no_assess)
- SystemConfigServices 返佣设置扩展(周期人数/分档比例/范围/时机)
- StoreOrderCreateServices 周期循环佣金计算
- StoreOrderTakeServices 佣金发放后同步冻结积分
- StoreProductServices/StoreProduct 保存 is_queue_goods

Phase2 后端接口:
- GET /api/hjf/brokerage/progress 佣金周期进度
- GET /api/hjf/assets/overview 资产总览
- HjfPointsServices 每日 frozen_points 0.4‰ 释放定时任务
- PUT /adminapi/hjf/member/{uid}/no_assess 不考核接口
- GET /adminapi/hjf/points/release_log 积分日志接口

Phase3 前端清理:
- hjfCustom.js 路由精简(仅保留 points/log)
- hjfQueue.js/hjfMember.js API 清理/重定向至 CRMEB 原生接口
- pages.json 公排→推荐佣金/佣金记录/佣金规则

Phase4-5 前端改造:
- queue/status.vue 推荐佣金进度页整体重写
- 商品详情/订单确认/支付结果页文案与逻辑改造
- 个人中心/资产页/引导页/规则页文案改造
- HjfQueueProgress/HjfRefundNotice/HjfAssetCard 组件改造
- 推广中心嵌入佣金进度摘要
- hjfMockData.js 全量更新(公排字段→佣金字段)

Phase6 Admin 增强:
- 用户列表新增 frozen_points/available_points 列及不考核操作按钮
- hjfPoints.js USE_MOCK=false 对接真实积分日志接口

Phase7 配置文档:
- docs/fsgx-phase7-config-checklist.md 后台配置与全链路验收清单

Made-with: Cursor
This commit is contained in:
apple
2026-03-23 22:32:19 +08:00
parent 788ee0c0c0
commit 434aa8c69d
13098 changed files with 2008990 additions and 961 deletions

View File

@@ -0,0 +1,10 @@
(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["components/userEvaluation/index"],{"15ee":function(e,t,i){"use strict";i.r(t);var n=i("a09c"),r=i.n(n);for(var o in n)["default"].indexOf(o)<0&&function(e){i.d(t,e,(function(){return n[e]}))}(o);t["default"]=r.a},"227e":function(e,t,i){"use strict";i.d(t,"b",(function(){return n})),i.d(t,"c",(function(){return r})),i.d(t,"a",(function(){}));var n=function(){var e=this,t=e.$createElement,i=(e._self._c,e.__map(e.reply,(function(t,i){var n=e.__get_orig(t),r=Number(t.star),o=t.pics.length;return{$orig:n,l0:r,g0:o}}))),n=e.reply.length;e.$mp.data=Object.assign({},{$root:{l1:i,g1:n}})},r=[]},"9d0f":function(e,t,i){"use strict";i.r(t);var n=i("227e"),r=i("15ee");for(var o in r)["default"].indexOf(o)<0&&function(e){i.d(t,e,(function(){return r[e]}))}(o);i("c3f8");var s=i("828b"),l=Object(s["a"])(r["default"],n["b"],n["c"],!1,null,null,null,!1,n["a"],void 0);t["default"]=l.exports},a09c:function(e,t,i){"use strict";(function(e,n){var r=i("47a9");Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var o=i("8f59"),s=r(i("89cc")),l=i("0f73"),u=i("5088"),c={computed:(0,o.mapGetters)(["isLogin"]),props:{reply:{type:Array,default:function(){return[]}},fromTo:{type:Number,default:0}},data:function(){return{srollLeft:0,srollBoxWidth:0,boxWidth:0}},mixins:[s.default],mounted:function(){var t=this;this.$nextTick((function(i){t.srollLeft=0;var n=e.createSelectorQuery().in(t);n.select(".scrll-box").boundingClientRect((function(e){t.srollBoxWidth=e.width})).exec(),n.select(".scroll").boundingClientRect((function(e){t.boxWidth=e.width-10})).exec()}))},methods:{scroll:function(e){this.srollLeft=(e.detail.scrollLeft/(this.srollBoxWidth-this.boxWidth)*100).toFixed(0)/2},details:function(e){this.isLogin?n.navigateTo({url:"/pages/goods/goods_comment_con/comment_con?id="+e.id}):this.$emit("changeLogin")},getpreviewImage:function(e,t){n.previewImage({urls:this.reply[e].pics,current:this.reply[e].pics[t]})},praise:function(e,t){var i=this;this.isLogin?e.is_praise?(0,l.getUnReplyPraise)(e.id).then((function(t){return e.is_praise=!e.is_praise,e.praise=e.praise-1,i.$emit("replyFun",i.reply),i.$util.Tips({title:t.msg})})):(0,l.getReplyPraise)(e.id).then((function(t){return e.is_praise=!e.is_praise,e.praise=e.praise+1,i.$emit("replyFun",i.reply),i.$util.Tips({title:t.msg})})):(0,u.toLogin)()}}};t.default=c}).call(this,i("3223")["default"],i("df3c")["default"])},bb9e:function(e,t,i){},c3f8:function(e,t,i){"use strict";var n=i("bb9e"),r=i.n(n);r.a}}]);
;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([
'components/userEvaluation/index-create-component',
{
'components/userEvaluation/index-create-component':(function(module, exports, __webpack_require__){
__webpack_require__('df3c')['createComponent'](__webpack_require__("9d0f"))
})
},
[['components/userEvaluation/index-create-component']]
]);

View File

@@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

View File

@@ -0,0 +1 @@
<view style="{{(colorStyle)}}"><scroll-view class="scroll w-690 mt-24 pl-20 vue-ref" scroll-x="true" show-scrollbar="true" data-ref="scroll" data-event-opts="{{[['scroll',[['scroll',['$event']]]]]}}" bindscroll="__e"><view class="scrll-box vue-ref" id="scrollBox" data-ref="scrollBox"><block wx:for="{{$root.l1}}" wx:for-item="item" wx:for-index="__i0__" wx:key="id"><view data-event-opts="{{[['tap',[['details',['$0'],[[['reply','id',item.$orig.id]]]]]]]}}" class="inline-block mr-20" catchtap="__e"><view class="h-158 rd-16rpx bg--w111-f5f5f5 flex justify-between"><view class="flex-1 p-24"><view class="flex-y-center"><view class="{{['w-64','h-64','rd-32rpx','relative',(item.$orig.vip_status)?'svip-border':'']}}"><image class="w-full h-full rd-32rpx" src="{{item.$orig.avatar}}"></image><image hidden="{{!(item.$orig.vip_status)}}" class="vip-badge" src="/static/img/svip_badge.png"></image></view><view class="flex-col pl-16"><view class="flex-y-center"><text class="text--w111-333 fs-24">{{item.$orig.nickname}}</text><block wx:if="{{item.$orig.level_name}}"><view class="vip flex-center"><text class="iconfont icon-huiyuandengji"></text>{{'V'+item.$orig.level_name+''}}</view></block></view><view class="flex"><block wx:for="{{item.l0}}" wx:for-item="star" wx:for-index="__i1__" wx:key="*this"><text class="iconfont icon-ic_star1 fs-18 text-primary-con"></text></block></view></view></view><view class="w-324 mt-12 text--w111-333 fs-24 white-nowrap line1">{{item.$orig.comment}}</view></view><block wx:if="{{item.g0}}"><image class="w-124 h-124 rd-12rpx block mt-16 mr-16" src="{{item.$orig.pics[0]}}" mode="aspectFill"></image></block></view></view></block></view></scroll-view><block wx:if="{{$root.g1>1}}"><view class="flex-center mt-24"><view class="w-64 h-6 rd-3px bg--w111-eee scrpll-l"><view class="w-32 h-6 rd-3px scrpll-line" style="{{'left:'+(srollLeft+'%')+';'}}"></view></view></view></block></view>

View File

@@ -0,0 +1 @@
.scrll-box{display:flex;flex-wrap:nowrap;width:-webkit-max-content;width:max-content}.scrpll-l{position:relative}.scrpll-line{position:absolute;background-color:var(--view-theme);left:0;top:0}.text-primary-con{color:var(--view-theme)}.vip{width:64rpx;height:26rpx;background:#fef0d9;border:1px solid #facc7d;border-radius:50rpx;font-size:18rpx;font-weight:500;color:#dfa541;margin-left:10rpx}.vip .iconfont{font-size:16rpx;margin-right:4rpx}.svip-border{border:2rpx solid #f1bb0d}.vip-badge{position:absolute;top:-14rpx;right:-8rpx;width:32rpx;height:30rpx}