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.
This commit is contained in:
@@ -8,10 +8,35 @@ import (
|
|||||||
|
|
||||||
func GetPricing(c *gin.Context) {
|
func GetPricing(c *gin.Context) {
|
||||||
pricing := model.GetPricing()
|
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{
|
c.JSON(200, gin.H{
|
||||||
"success": true,
|
"success": true,
|
||||||
"data": pricing,
|
"data": pricing,
|
||||||
"group_ratio": common.GroupRatio,
|
"group_ratio": groupRatio,
|
||||||
|
"usable_group": usableGroup,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -162,36 +162,39 @@ const ModelPricing = () => {
|
|||||||
title: t('可用分组'),
|
title: t('可用分组'),
|
||||||
dataIndex: 'enable_groups',
|
dataIndex: 'enable_groups',
|
||||||
render: (text, record, index) => {
|
render: (text, record, index) => {
|
||||||
|
|
||||||
// enable_groups is a string array
|
// enable_groups is a string array
|
||||||
return (
|
return (
|
||||||
<Space>
|
<Space>
|
||||||
{text.map((group) => {
|
{text.map((group) => {
|
||||||
if (group === selectedGroup) {
|
if (usableGroup[group]) {
|
||||||
return (
|
if (group === selectedGroup) {
|
||||||
<Tag
|
return (
|
||||||
color='blue'
|
<Tag
|
||||||
size='large'
|
color='blue'
|
||||||
prefixIcon={<IconVerify />}
|
size='large'
|
||||||
>
|
prefixIcon={<IconVerify />}
|
||||||
{group}
|
>
|
||||||
</Tag>
|
{group}
|
||||||
);
|
</Tag>
|
||||||
} else {
|
);
|
||||||
return (
|
} else {
|
||||||
<Tag
|
return (
|
||||||
color='blue'
|
<Tag
|
||||||
size='large'
|
color='blue'
|
||||||
onClick={() => {
|
size='large'
|
||||||
setSelectedGroup(group);
|
onClick={() => {
|
||||||
showInfo(t('当前查看的分组为:{{group}},倍率为:{{ratio}}', {
|
setSelectedGroup(group);
|
||||||
group: group,
|
showInfo(t('当前查看的分组为:{{group}},倍率为:{{ratio}}', {
|
||||||
ratio: groupRatio[group]
|
group: group,
|
||||||
}));
|
ratio: groupRatio[group]
|
||||||
}}
|
}));
|
||||||
>
|
}}
|
||||||
{group}
|
>
|
||||||
</Tag>
|
{group}
|
||||||
);
|
</Tag>
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})}
|
})}
|
||||||
</Space>
|
</Space>
|
||||||
@@ -275,6 +278,7 @@ const ModelPricing = () => {
|
|||||||
const [loading, setLoading] = useState(true);
|
const [loading, setLoading] = useState(true);
|
||||||
const [userState, userDispatch] = useContext(UserContext);
|
const [userState, userDispatch] = useContext(UserContext);
|
||||||
const [groupRatio, setGroupRatio] = useState({});
|
const [groupRatio, setGroupRatio] = useState({});
|
||||||
|
const [usableGroup, setUsableGroup] = useState({});
|
||||||
|
|
||||||
const setModelsFormat = (models, groupRatio) => {
|
const setModelsFormat = (models, groupRatio) => {
|
||||||
for (let i = 0; i < models.length; i++) {
|
for (let i = 0; i < models.length; i++) {
|
||||||
@@ -309,9 +313,10 @@ const ModelPricing = () => {
|
|||||||
let url = '';
|
let url = '';
|
||||||
url = `/api/pricing`;
|
url = `/api/pricing`;
|
||||||
const res = await API.get(url);
|
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) {
|
if (success) {
|
||||||
setGroupRatio(group_ratio);
|
setGroupRatio(group_ratio);
|
||||||
|
setUsableGroup(usable_group);
|
||||||
setSelectedGroup(userState.user ? userState.user.group : 'default')
|
setSelectedGroup(userState.user ? userState.user.group : 'default')
|
||||||
setModelsFormat(data, group_ratio);
|
setModelsFormat(data, group_ratio);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user