diff --git a/controller/channel.go b/controller/channel.go index 329be93a..dae961d5 100644 --- a/controller/channel.go +++ b/controller/channel.go @@ -311,7 +311,7 @@ type ChannelTag struct { NewTag *string `json:"new_tag"` Priority *int64 `json:"priority"` Weight *uint `json:"weight"` - ModelMapping *string `json:"map_mapping"` + ModelMapping *string `json:"model_mapping"` Models *string `json:"models"` Groups *string `json:"groups"` } diff --git a/web/src/components/ChannelsTable.js b/web/src/components/ChannelsTable.js index e0bc332d..55816940 100644 --- a/web/src/components/ChannelsTable.js +++ b/web/src/components/ChannelsTable.js @@ -31,7 +31,7 @@ import { Typography } from '@douyinfe/semi-ui'; import EditChannel from '../pages/Channel/EditChannel'; -import { IconTreeTriangleDown } from '@douyinfe/semi-icons'; +import { IconList, IconTreeTriangleDown } from '@douyinfe/semi-icons'; import { loadChannelModels } from './utils.js'; import EditTagModal from '../pages/Channel/EditTagModal.js'; @@ -56,6 +56,20 @@ function renderType(type) { ); } +function renderTagType(type) { + return ( + } + size='large' + shape='circle' + type='light' + > + 标签聚合 + + ); +} + const ChannelsTable = () => { const columns = [ // { @@ -90,7 +104,11 @@ const ChannelsTable = () => { title: '类型', dataIndex: 'type', render: (text, record, index) => { - return
{renderType(text)}
; + if (record.children === undefined) { + return <>{renderType(text)}; + } else { + return <>{renderTagType(0)}; + } } }, { @@ -441,7 +459,8 @@ const ChannelsTable = () => { let channelGroupsStr = channels[i].group; channelGroupsStr.split(',').forEach((item, index) => { if (tagChannelDates.group.indexOf(item) === -1) { - tagChannelDates.group += item + ','; + // join + tagChannelDates.group += ',' + item; } }); } diff --git a/web/src/pages/Channel/EditTagModal.js b/web/src/pages/Channel/EditTagModal.js index 474d4252..6f2ecbab 100644 --- a/web/src/pages/Channel/EditTagModal.js +++ b/web/src/pages/Channel/EditTagModal.js @@ -1,5 +1,5 @@ import React, { useState, useEffect } from 'react'; -import { API, showError, showSuccess } from '../../helpers'; +import { API, showError, showInfo, showSuccess, showWarning, verifyJSON } from '../../helpers'; import { SideSheet, Space, Button, Input, Typography, Spin, Modal, Select, Banner, TextArea } from '@douyinfe/semi-ui'; import TextInput from '../../components/TextInput.js'; import { getChannelModels } from '../../components/utils.js'; @@ -122,7 +122,12 @@ const EditTagModal = (props) => { let data = { tag: tag, } - if (inputs.model_mapping !== null) { + if (inputs.model_mapping !== null && inputs.model_mapping !== '') { + if (inputs.model_mapping !== '' && !verifyJSON(inputs.model_mapping)) { + showInfo('模型映射必须是合法的 JSON 格式!'); + setLoading(false); + return; + } data.model_mapping = inputs.model_mapping } if (inputs.groups.length > 0) { @@ -132,6 +137,12 @@ const EditTagModal = (props) => { data.models = inputs.models.join(','); } data.newTag = inputs.newTag; + // check have any change + if (data.model_mapping === undefined && data.groups === undefined && data.models === undefined && data.newTag === undefined) { + showWarning('没有任何修改!'); + setLoading(false); + return; + } await submit(data); setLoading(false); };