From 8129aa76f981950c6ca5892cb7901540431a114d Mon Sep 17 00:00:00 2001 From: CalciumIon <1808837298@qq.com> Date: Tue, 24 Dec 2024 19:23:29 +0800 Subject: [PATCH] feat: Enhance pricing functionality with user group support - Updated the GetPricing function in the backend to include user group information, allowing for dynamic adjustment of group ratios based on the user's group. - Implemented logic to filter group ratios based on the user's usable groups, improving the accuracy of pricing data returned. - Modified the ModelPricing component to utilize the new usable group data, ensuring only relevant groups are displayed in the UI. - Enhanced state management in the frontend to accommodate the new usable group information, improving user experience and data consistency. --- controller/pricing.go | 31 ++++++++++++++-- web/src/components/ModelPricing.js | 59 ++++++++++++++++-------------- 2 files changed, 60 insertions(+), 30 deletions(-) diff --git a/controller/pricing.go b/controller/pricing.go index c298ae5a..1b2eddce 100644 --- a/controller/pricing.go +++ b/controller/pricing.go @@ -8,10 +8,35 @@ import ( func GetPricing(c *gin.Context) { pricing := model.GetPricing() + userId, exists := c.Get("id") + usableGroup := map[string]string{} + groupRatio := common.GroupRatio + var group string + if exists { + user, err := model.GetChannelById(userId.(int), false) + if err != nil { + c.JSON(200, gin.H{ + "success": false, + "message": err.Error(), + }) + return + } + group = user.Group + } + + usableGroup = common.GetUserUsableGroups(group) + // check groupRatio contains usableGroup + for group := range common.GroupRatio { + if _, ok := usableGroup[group]; !ok { + delete(groupRatio, group) + } + } + c.JSON(200, gin.H{ - "success": true, - "data": pricing, - "group_ratio": common.GroupRatio, + "success": true, + "data": pricing, + "group_ratio": groupRatio, + "usable_group": usableGroup, }) } diff --git a/web/src/components/ModelPricing.js b/web/src/components/ModelPricing.js index 153a1a07..193db789 100644 --- a/web/src/components/ModelPricing.js +++ b/web/src/components/ModelPricing.js @@ -162,36 +162,39 @@ const ModelPricing = () => { title: t('可用分组'), dataIndex: 'enable_groups', render: (text, record, index) => { + // enable_groups is a string array return ( {text.map((group) => { - if (group === selectedGroup) { - return ( - } - > - {group} - - ); - } else { - return ( - { - setSelectedGroup(group); - showInfo(t('当前查看的分组为:{{group}},倍率为:{{ratio}}', { - group: group, - ratio: groupRatio[group] - })); - }} - > - {group} - - ); + if (usableGroup[group]) { + if (group === selectedGroup) { + return ( + } + > + {group} + + ); + } else { + return ( + { + setSelectedGroup(group); + showInfo(t('当前查看的分组为:{{group}},倍率为:{{ratio}}', { + group: group, + ratio: groupRatio[group] + })); + }} + > + {group} + + ); + } } })} @@ -275,6 +278,7 @@ const ModelPricing = () => { const [loading, setLoading] = useState(true); const [userState, userDispatch] = useContext(UserContext); const [groupRatio, setGroupRatio] = useState({}); + const [usableGroup, setUsableGroup] = useState({}); const setModelsFormat = (models, groupRatio) => { for (let i = 0; i < models.length; i++) { @@ -309,9 +313,10 @@ const ModelPricing = () => { let url = ''; url = `/api/pricing`; const res = await API.get(url); - const { success, message, data, group_ratio } = res.data; + const { success, message, data, group_ratio, usable_group } = res.data; if (success) { setGroupRatio(group_ratio); + setUsableGroup(usable_group); setSelectedGroup(userState.user ? userState.user.group : 'default') setModelsFormat(data, group_ratio); } else {