CalciumIon 1 год назад
Родитель
Сommit
3053d94170
3 измененных файлов с 36 добавлено и 6 удалено
  1. 1 1
      controller/channel.go
  2. 22 3
      web/src/components/ChannelsTable.js
  3. 13 2
      web/src/pages/Channel/EditTagModal.js

+ 1 - 1
controller/channel.go

@@ -311,7 +311,7 @@ type ChannelTag struct {
 	NewTag       *string `json:"new_tag"`
 	NewTag       *string `json:"new_tag"`
 	Priority     *int64  `json:"priority"`
 	Priority     *int64  `json:"priority"`
 	Weight       *uint   `json:"weight"`
 	Weight       *uint   `json:"weight"`
-	ModelMapping *string `json:"map_mapping"`
+	ModelMapping *string `json:"model_mapping"`
 	Models       *string `json:"models"`
 	Models       *string `json:"models"`
 	Groups       *string `json:"groups"`
 	Groups       *string `json:"groups"`
 }
 }

+ 22 - 3
web/src/components/ChannelsTable.js

@@ -31,7 +31,7 @@ import {
   Typography
   Typography
 } from '@douyinfe/semi-ui';
 } from '@douyinfe/semi-ui';
 import EditChannel from '../pages/Channel/EditChannel';
 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 { loadChannelModels } from './utils.js';
 import EditTagModal from '../pages/Channel/EditTagModal.js';
 import EditTagModal from '../pages/Channel/EditTagModal.js';
 
 
@@ -56,6 +56,20 @@ function renderType(type) {
   );
   );
 }
 }
 
 
+function renderTagType(type) {
+  return (
+    <Tag
+      color='light-blue'
+      prefixIcon={<IconList />}
+      size='large'
+      shape='circle'
+      type='light'
+    >
+      标签聚合
+    </Tag>
+  );
+}
+
 const ChannelsTable = () => {
 const ChannelsTable = () => {
   const columns = [
   const columns = [
     // {
     // {
@@ -90,7 +104,11 @@ const ChannelsTable = () => {
       title: '类型',
       title: '类型',
       dataIndex: 'type',
       dataIndex: 'type',
       render: (text, record, index) => {
       render: (text, record, index) => {
-        return <div>{renderType(text)}</div>;
+        if (record.children === undefined) {
+          return <>{renderType(text)}</>;
+        } else {
+          return <>{renderTagType(0)}</>;
+        }
       }
       }
     },
     },
     {
     {
@@ -441,7 +459,8 @@ const ChannelsTable = () => {
           let channelGroupsStr = channels[i].group;
           let channelGroupsStr = channels[i].group;
           channelGroupsStr.split(',').forEach((item, index) => {
           channelGroupsStr.split(',').forEach((item, index) => {
             if (tagChannelDates.group.indexOf(item) === -1) {
             if (tagChannelDates.group.indexOf(item) === -1) {
-              tagChannelDates.group += item + ',';
+              // join
+              tagChannelDates.group += ',' + item;
             }
             }
           });
           });
         }
         }

+ 13 - 2
web/src/pages/Channel/EditTagModal.js

@@ -1,5 +1,5 @@
 import React, { useState, useEffect } from 'react';
 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 { SideSheet, Space, Button, Input, Typography, Spin, Modal, Select, Banner, TextArea } from '@douyinfe/semi-ui';
 import TextInput from '../../components/TextInput.js';
 import TextInput from '../../components/TextInput.js';
 import { getChannelModels } from '../../components/utils.js';
 import { getChannelModels } from '../../components/utils.js';
@@ -122,7 +122,12 @@ const EditTagModal = (props) => {
     let data = {
     let data = {
       tag: tag,
       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
       data.model_mapping = inputs.model_mapping
     }
     }
     if (inputs.groups.length > 0) {
     if (inputs.groups.length > 0) {
@@ -132,6 +137,12 @@ const EditTagModal = (props) => {
       data.models = inputs.models.join(',');
       data.models = inputs.models.join(',');
     }
     }
     data.newTag = inputs.newTag;
     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);
     await submit(data);
     setLoading(false);
     setLoading(false);
   };
   };