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,433 @@
<?php
// This file is auto-generated, don't edit it. Thanks.
namespace Darabonba\OpenApi\Models;
use AlibabaCloud\Credentials\Credential;
use AlibabaCloud\Tea\Model;
/**
* Model for initing client.
*/
class Config extends Model
{
protected $_default = [
'accessKeyId' => '',
'accessKeySecret' => '',
'securityToken' => '',
'protocol' => 'http',
'method' => '',
'regionId' => '',
'readTimeout' => '',
'connectTimeout' => '',
'httpProxy' => '',
'httpsProxy' => '',
'credential' => '',
'endpoint' => '',
'noProxy' => '',
'maxIdleConns' => '',
'network' => '',
'userAgent' => '',
'suffix' => '',
'socks5Proxy' => '',
'socks5NetWork' => '',
'endpointType' => '',
'openPlatformEndpoint' => '',
'type' => '',
'signatureVersion' => '',
'signatureAlgorithm' => '',
];
public function validate()
{
}
public function toMap()
{
$res = [];
if (null !== $this->accessKeyId) {
$res['accessKeyId'] = $this->accessKeyId;
}
if (null !== $this->accessKeySecret) {
$res['accessKeySecret'] = $this->accessKeySecret;
}
if (null !== $this->securityToken) {
$res['securityToken'] = $this->securityToken;
}
if (null !== $this->protocol) {
$res['protocol'] = $this->protocol;
}
if (null !== $this->method) {
$res['method'] = $this->method;
}
if (null !== $this->regionId) {
$res['regionId'] = $this->regionId;
}
if (null !== $this->readTimeout) {
$res['readTimeout'] = $this->readTimeout;
}
if (null !== $this->connectTimeout) {
$res['connectTimeout'] = $this->connectTimeout;
}
if (null !== $this->httpProxy) {
$res['httpProxy'] = $this->httpProxy;
}
if (null !== $this->httpsProxy) {
$res['httpsProxy'] = $this->httpsProxy;
}
if (null !== $this->credential) {
$res['credential'] = null !== $this->credential ? $this->credential->toMap() : null;
}
if (null !== $this->endpoint) {
$res['endpoint'] = $this->endpoint;
}
if (null !== $this->noProxy) {
$res['noProxy'] = $this->noProxy;
}
if (null !== $this->maxIdleConns) {
$res['maxIdleConns'] = $this->maxIdleConns;
}
if (null !== $this->network) {
$res['network'] = $this->network;
}
if (null !== $this->userAgent) {
$res['userAgent'] = $this->userAgent;
}
if (null !== $this->suffix) {
$res['suffix'] = $this->suffix;
}
if (null !== $this->socks5Proxy) {
$res['socks5Proxy'] = $this->socks5Proxy;
}
if (null !== $this->socks5NetWork) {
$res['socks5NetWork'] = $this->socks5NetWork;
}
if (null !== $this->endpointType) {
$res['endpointType'] = $this->endpointType;
}
if (null !== $this->openPlatformEndpoint) {
$res['openPlatformEndpoint'] = $this->openPlatformEndpoint;
}
if (null !== $this->type) {
$res['type'] = $this->type;
}
if (null !== $this->signatureVersion) {
$res['signatureVersion'] = $this->signatureVersion;
}
if (null !== $this->signatureAlgorithm) {
$res['signatureAlgorithm'] = $this->signatureAlgorithm;
}
if (null !== $this->globalParameters) {
$res['globalParameters'] = null !== $this->globalParameters ? $this->globalParameters->toMap() : null;
}
return $res;
}
/**
* @param array $map
*
* @return Config
*/
public static function fromMap($map = [])
{
$model = new self();
if (isset($map['accessKeyId'])) {
$model->accessKeyId = $map['accessKeyId'];
}
if (isset($map['accessKeySecret'])) {
$model->accessKeySecret = $map['accessKeySecret'];
}
if (isset($map['securityToken'])) {
$model->securityToken = $map['securityToken'];
}
if (isset($map['protocol'])) {
$model->protocol = $map['protocol'];
}
if (isset($map['method'])) {
$model->method = $map['method'];
}
if (isset($map['regionId'])) {
$model->regionId = $map['regionId'];
}
if (isset($map['readTimeout'])) {
$model->readTimeout = $map['readTimeout'];
}
if (isset($map['connectTimeout'])) {
$model->connectTimeout = $map['connectTimeout'];
}
if (isset($map['httpProxy'])) {
$model->httpProxy = $map['httpProxy'];
}
if (isset($map['httpsProxy'])) {
$model->httpsProxy = $map['httpsProxy'];
}
if (isset($map['credential'])) {
$model->credential = Credential::fromMap($map['credential']);
}
if (isset($map['endpoint'])) {
$model->endpoint = $map['endpoint'];
}
if (isset($map['noProxy'])) {
$model->noProxy = $map['noProxy'];
}
if (isset($map['maxIdleConns'])) {
$model->maxIdleConns = $map['maxIdleConns'];
}
if (isset($map['network'])) {
$model->network = $map['network'];
}
if (isset($map['userAgent'])) {
$model->userAgent = $map['userAgent'];
}
if (isset($map['suffix'])) {
$model->suffix = $map['suffix'];
}
if (isset($map['socks5Proxy'])) {
$model->socks5Proxy = $map['socks5Proxy'];
}
if (isset($map['socks5NetWork'])) {
$model->socks5NetWork = $map['socks5NetWork'];
}
if (isset($map['endpointType'])) {
$model->endpointType = $map['endpointType'];
}
if (isset($map['openPlatformEndpoint'])) {
$model->openPlatformEndpoint = $map['openPlatformEndpoint'];
}
if (isset($map['type'])) {
$model->type = $map['type'];
}
if (isset($map['signatureVersion'])) {
$model->signatureVersion = $map['signatureVersion'];
}
if (isset($map['signatureAlgorithm'])) {
$model->signatureAlgorithm = $map['signatureAlgorithm'];
}
if (isset($map['globalParameters'])) {
$model->globalParameters = GlobalParameters::fromMap($map['globalParameters']);
}
return $model;
}
/**
* @description accesskey id
*
* @var string
*/
public $accessKeyId;
/**
* @description accesskey secret
*
* @var string
*/
public $accessKeySecret;
/**
* @description security token
*
* @example a.txt
*
* @var string
*/
public $securityToken;
/**
* @description http protocol
*
* @example http
*
* @var string
*/
public $protocol;
/**
* @description http method
*
* @example GET
*
* @var string
*/
public $method;
/**
* @description region id
*
* @example cn-hangzhou
*
* @var string
*/
public $regionId;
/**
* @description read timeout
*
* @example 10
*
* @var int
*/
public $readTimeout;
/**
* @description connect timeout
*
* @example 10
*
* @var int
*/
public $connectTimeout;
/**
* @description http proxy
*
* @example http://localhost
*
* @var string
*/
public $httpProxy;
/**
* @description https proxy
*
* @example https://localhost
*
* @var string
*/
public $httpsProxy;
/**
* @description credential
*
* @example
*
* @var Credential
*/
public $credential;
/**
* @description endpoint
*
* @example cs.aliyuncs.com
*
* @var string
*/
public $endpoint;
/**
* @description proxy white list
*
* @example http://localhost
*
* @var string
*/
public $noProxy;
/**
* @description max idle conns
*
* @example 3
*
* @var int
*/
public $maxIdleConns;
/**
* @description network for endpoint
*
* @example public
*
* @var string
*/
public $network;
/**
* @description user agent
*
* @example Alibabacloud/1
*
* @var string
*/
public $userAgent;
/**
* @description suffix for endpoint
*
* @example aliyun
*
* @var string
*/
public $suffix;
/**
* @description socks5 proxy
*
* @var string
*/
public $socks5Proxy;
/**
* @description socks5 network
*
* @example TCP
*
* @var string
*/
public $socks5NetWork;
/**
* @description endpoint type
*
* @example internal
*
* @var string
*/
public $endpointType;
/**
* @description OpenPlatform endpoint
*
* @example openplatform.aliyuncs.com
*
* @var string
*/
public $openPlatformEndpoint;
/**
* @description credential type
*
* @example access_key
*
* @deprecated
*
* @var string
*/
public $type;
/**
* @description Signature Version
*
* @example v1
*
* @var string
*/
public $signatureVersion;
/**
* @description Signature Algorithm
*
* @example ACS3-HMAC-SHA256
*
* @var string
*/
public $signatureAlgorithm;
/**
* @description Global Parameters
*
* @var GlobalParameters
*/
public $globalParameters;
}

View File

@@ -0,0 +1,49 @@
<?php
// This file is auto-generated, don't edit it. Thanks.
namespace Darabonba\OpenApi\Models;
use AlibabaCloud\Tea\Model;
class GlobalParameters extends Model
{
public function validate()
{
}
public function toMap()
{
$res = [];
if (null !== $this->headers) {
$res['headers'] = $this->headers;
}
if (null !== $this->queries) {
$res['queries'] = $this->queries;
}
return $res;
}
/**
* @param array $map
*
* @return GlobalParameters
*/
public static function fromMap($map = [])
{
$model = new self();
if (isset($map['headers'])) {
$model->headers = $map['headers'];
}
if (isset($map['queries'])) {
$model->queries = $map['queries'];
}
return $model;
}
public $headers;
public $queries;
}

View File

@@ -0,0 +1,81 @@
<?php
// This file is auto-generated, don't edit it. Thanks.
namespace Darabonba\OpenApi\Models;
use AlibabaCloud\Tea\Model;
class OpenApiRequest extends Model
{
public function validate()
{
}
public function toMap()
{
$res = [];
if (null !== $this->headers) {
$res['headers'] = $this->headers;
}
if (null !== $this->query) {
$res['query'] = $this->query;
}
if (null !== $this->body) {
$res['body'] = $this->body;
}
if (null !== $this->stream) {
$res['stream'] = $this->stream;
}
if (null !== $this->hostMap) {
$res['hostMap'] = $this->hostMap;
}
if (null !== $this->endpointOverride) {
$res['endpointOverride'] = $this->endpointOverride;
}
return $res;
}
/**
* @param array $map
*
* @return OpenApiRequest
*/
public static function fromMap($map = [])
{
$model = new self();
if (isset($map['headers'])) {
$model->headers = $map['headers'];
}
if (isset($map['query'])) {
$model->query = $map['query'];
}
if (isset($map['body'])) {
$model->body = $map['body'];
}
if (isset($map['stream'])) {
$model->stream = $map['stream'];
}
if (isset($map['hostMap'])) {
$model->hostMap = $map['hostMap'];
}
if (isset($map['endpointOverride'])) {
$model->endpointOverride = $map['endpointOverride'];
}
return $model;
}
public $headers;
public $query;
public $body;
public $stream;
public $hostMap;
public $endpointOverride;
}

View File

@@ -0,0 +1,137 @@
<?php
// This file is auto-generated, don't edit it. Thanks.
namespace Darabonba\OpenApi\Models;
use AlibabaCloud\Tea\Model;
class Params extends Model
{
public function validate()
{
Model::validateRequired('action', $this->action, true);
Model::validateRequired('version', $this->version, true);
Model::validateRequired('protocol', $this->protocol, true);
Model::validateRequired('pathname', $this->pathname, true);
Model::validateRequired('method', $this->method, true);
Model::validateRequired('authType', $this->authType, true);
Model::validateRequired('bodyType', $this->bodyType, true);
Model::validateRequired('reqBodyType', $this->reqBodyType, true);
}
public function toMap()
{
$res = [];
if (null !== $this->action) {
$res['action'] = $this->action;
}
if (null !== $this->version) {
$res['version'] = $this->version;
}
if (null !== $this->protocol) {
$res['protocol'] = $this->protocol;
}
if (null !== $this->pathname) {
$res['pathname'] = $this->pathname;
}
if (null !== $this->method) {
$res['method'] = $this->method;
}
if (null !== $this->authType) {
$res['authType'] = $this->authType;
}
if (null !== $this->bodyType) {
$res['bodyType'] = $this->bodyType;
}
if (null !== $this->reqBodyType) {
$res['reqBodyType'] = $this->reqBodyType;
}
if (null !== $this->style) {
$res['style'] = $this->style;
}
return $res;
}
/**
* @param array $map
*
* @return Params
*/
public static function fromMap($map = [])
{
$model = new self();
if (isset($map['action'])) {
$model->action = $map['action'];
}
if (isset($map['version'])) {
$model->version = $map['version'];
}
if (isset($map['protocol'])) {
$model->protocol = $map['protocol'];
}
if (isset($map['pathname'])) {
$model->pathname = $map['pathname'];
}
if (isset($map['method'])) {
$model->method = $map['method'];
}
if (isset($map['authType'])) {
$model->authType = $map['authType'];
}
if (isset($map['bodyType'])) {
$model->bodyType = $map['bodyType'];
}
if (isset($map['reqBodyType'])) {
$model->reqBodyType = $map['reqBodyType'];
}
if (isset($map['style'])) {
$model->style = $map['style'];
}
return $model;
}
/**
* @var string
*/
public $action;
/**
* @var string
*/
public $version;
/**
* @var string
*/
public $protocol;
/**
* @var string
*/
public $pathname;
/**
* @var string
*/
public $method;
/**
* @var string
*/
public $authType;
/**
* @var string
*/
public $bodyType;
/**
* @var string
*/
public $reqBodyType;
public $style;
}

File diff suppressed because it is too large Load Diff