From d04d2a6c4dfb79ca109d5064c7695e1f8e8e4c74 Mon Sep 17 00:00:00 2001 From: CaIon <1808837298@qq.com> Date: Wed, 10 Jan 2024 18:32:44 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20UI=E7=BE=8E=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/components/ChannelsTable.js | 24 +- web/src/components/LogsTable.js | 37 +-- web/src/components/MjLogsTable.js | 344 ++++++++++++++-------------- 3 files changed, 198 insertions(+), 207 deletions(-) diff --git a/web/src/components/ChannelsTable.js b/web/src/components/ChannelsTable.js index f194660..acea6ba 100644 --- a/web/src/components/ChannelsTable.js +++ b/web/src/components/ChannelsTable.js @@ -1,6 +1,4 @@ import React, {useEffect, useState} from 'react'; -import {Input, Label, Message, Popup} from 'semantic-ui-react'; -import {Link} from 'react-router-dom'; import { API, isMobile, @@ -389,23 +387,15 @@ const ChannelsTable = () => { return 已启用; case 2: return ( - - 已禁用 - } - content='本渠道被手动禁用' - basic - /> + + 已禁用 + ); case 3: return ( - - 已禁用 - } - content='本渠道被程序自动禁用' - basic - /> + + 自动禁用 + ); default: return ( @@ -657,7 +647,7 @@ const ChannelsTable = () => { - { const [logs, setLogs] = useState([]); const [showStat, setShowStat] = useState(false); - const [loading, setLoading] = useState(true); + const [loading, setLoading] = useState(false); + const [loadingStat, setLoadingStat] = useState(false); const [activePage, setActivePage] = useState(1); const [logCount, setLogCount] = useState(ITEMS_PER_PAGE); const [searchKeyword, setSearchKeyword] = useState(''); @@ -247,14 +248,14 @@ const LogsTable = () => { }; const handleEyeClick = async () => { - if (!showStat) { - if (isAdminUser) { - await getLogStat(); - } else { - await getLogSelfStat(); - } + setLoadingStat(true); + if (isAdminUser) { + await getLogStat(); + } else { + await getLogSelfStat(); } - setShowStat(!showStat); + setShowStat(true); + setLoadingStat(false); }; const showUserInfo = async (userId) => { @@ -396,12 +397,12 @@ const LogsTable = () => { <> - 使用明细(总消耗额度: - {showStat && renderQuota(stat.quota)} - {!showStat && - 点击查看} - ) - + + 使用明细(总消耗额度: + {showStat?renderQuota(stat.quota):"点击查看"} + ) + + <> @@ -434,17 +435,17 @@ const LogsTable = () => { } 查询 + onClick={refresh} loading={loading}>查询 > - + }}/> { setLogType(parseInt(value)); diff --git a/web/src/components/MjLogsTable.js b/web/src/components/MjLogsTable.js index 99245a7..dafc80d 100644 --- a/web/src/components/MjLogsTable.js +++ b/web/src/components/MjLogsTable.js @@ -13,7 +13,7 @@ import { Popover, Modal, ImagePreview, - Typography + Typography, Progress } from '@douyinfe/semi-ui'; import {ITEMS_PER_PAGE} from '../constants'; import {renderNumber, renderQuota, stringToColor} from '../helpers/render'; @@ -25,84 +25,83 @@ const colors = ['amber', 'blue', 'cyan', 'green', 'grey', 'indigo', ] function renderType(type) { - switch (type) { - case 'IMAGINE': - return 绘图; - case 'UPSCALE': - return 放大; - case 'VARIATION': - return 变换; - case 'DESCRIBE': - return 图生文; - case 'BLEAND': - return 图混合; - default: - return 未知; - } + switch (type) { + case 'IMAGINE': + return 绘图; + case 'UPSCALE': + return 放大; + case 'VARIATION': + return 变换; + case 'DESCRIBE': + return 图生文; + case 'BLEAND': + return 图混合; + default: + return 未知; + } } function renderCode(code) { - switch (code) { - case 1: - return 已提交; - case 21: - return 排队中; - case 22: - return 重复提交; - default: - return 未知; - } + switch (code) { + case 1: + return 已提交; + case 21: + return 排队中; + case 22: + return 重复提交; + default: + return 未知; + } } function renderStatus(type) { - // Ensure all cases are string literals by adding quotes. - switch (type) { - case 'SUCCESS': - return 成功; - case 'NOT_START': - return 未启动; - case 'SUBMITTED': - return 队列中; - case 'IN_PROGRESS': - return 执行中; - case 'FAILURE': - return 失败; - default: - return 未知; - } + // Ensure all cases are string literals by adding quotes. + switch (type) { + case 'SUCCESS': + return 成功; + case 'NOT_START': + return 未启动; + case 'SUBMITTED': + return 队列中; + case 'IN_PROGRESS': + return 执行中; + case 'FAILURE': + return 失败; + default: + return 未知; + } } const renderTimestamp = (timestampInSeconds) => { - const date = new Date(timestampInSeconds * 1000); // 从秒转换为毫秒 + const date = new Date(timestampInSeconds * 1000); // 从秒转换为毫秒 - const year = date.getFullYear(); // 获取年份 - const month = ('0' + (date.getMonth() + 1)).slice(-2); // 获取月份,从0开始需要+1,并保证两位数 - const day = ('0' + date.getDate()).slice(-2); // 获取日期,并保证两位数 - const hours = ('0' + date.getHours()).slice(-2); // 获取小时,并保证两位数 - const minutes = ('0' + date.getMinutes()).slice(-2); // 获取分钟,并保证两位数 - const seconds = ('0' + date.getSeconds()).slice(-2); // 获取秒钟,并保证两位数 + const year = date.getFullYear(); // 获取年份 + const month = ('0' + (date.getMonth() + 1)).slice(-2); // 获取月份,从0开始需要+1,并保证两位数 + const day = ('0' + date.getDate()).slice(-2); // 获取日期,并保证两位数 + const hours = ('0' + date.getHours()).slice(-2); // 获取小时,并保证两位数 + const minutes = ('0' + date.getMinutes()).slice(-2); // 获取分钟,并保证两位数 + const seconds = ('0' + date.getSeconds()).slice(-2); // 获取秒钟,并保证两位数 - return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; // 格式化输出 + return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; // 格式化输出 }; - const LogsTable = () => { const [isModalOpen, setIsModalOpen] = useState(false); const [modalContent, setModalContent] = useState(''); const columns = [ { - title: '提交时间', - dataIndex: 'submit_time', - render: (text, record, index) => { - return ( - - {renderTimestamp(text / 1000)} - - ); - }, + title: '提交时间', + dataIndex: 'submit_time', + render: (text, record, index) => { + return ( + + {renderTimestamp(text / 1000)} + + ); + }, }, { title: '渠道', @@ -111,48 +110,48 @@ const LogsTable = () => { render: (text, record, index) => { return ( - - { - copyText(text); // 假设copyText是用于文本复制的函数 - }}> {text} - + + { + copyText(text); // 假设copyText是用于文本复制的函数 + }}> {text} + ); }, }, { - title: '类型', - dataIndex: 'action', - render: (text, record, index) => { - return ( - - {renderType(text)} - - ); - }, + title: '类型', + dataIndex: 'action', + render: (text, record, index) => { + return ( + + {renderType(text)} + + ); + }, }, { title: '任务ID', dataIndex: 'mj_id', render: (text, record, index) => { return ( - - {text} - + + {text} + ); }, }, { - title: '提交结果', - dataIndex: 'code', - className: isAdmin() ? 'tableShow' : 'tableHiddle', - render: (text, record, index) => { - return ( - - {renderCode(text)} - - ); - }, + title: '提交结果', + dataIndex: 'code', + className: isAdmin() ? 'tableShow' : 'tableHiddle', + render: (text, record, index) => { + return ( + + {renderCode(text)} + + ); + }, }, { title: '任务状态', @@ -160,9 +159,9 @@ const LogsTable = () => { className: isAdmin() ? 'tableShow' : 'tableHiddle', render: (text, record, index) => { return ( - - {renderStatus(text)} - + + {renderStatus(text)} + ); }, }, @@ -171,99 +170,103 @@ const LogsTable = () => { dataIndex: 'progress', render: (text, record, index) => { return ( - - { {text} } - + + { + // 转换例如100%为数字100,如果text未定义,返回0 + + } + ); }, }, { - title: '结果图片', - dataIndex: 'image_url', - render: (text, record, index) => { - if (!text) { - return '无'; + title: '结果图片', + dataIndex: 'image_url', + render: (text, record, index) => { + if (!text) { + return '无'; + } + return ( + { + setModalImageUrl(text); // 更新图片URL状态 + setIsModalOpenurl(true); // 打开模态框 + }} + > + 查看图片 + + ); } - return ( - { - setModalImageUrl(text); // 更新图片URL状态 - setIsModalOpenurl(true); // 打开模态框 - }} - > - 查看图片 - - ); - } }, { title: 'Prompt', dataIndex: 'prompt', render: (text, record, index) => { - // 如果text未定义,返回替代文本,例如空字符串''或其他 - if (!text) { - return '无'; - } - - return ( - { - setModalContent(text); - setIsModalOpen(true); - }} - > - {text} - - ); - } + // 如果text未定义,返回替代文本,例如空字符串''或其他 + if (!text) { + return '无'; + } + + return ( + { + setModalContent(text); + setIsModalOpen(true); + }} + > + {text} + + ); + } }, { title: 'PromptEn', dataIndex: 'prompt_en', render: (text, record, index) => { - // 如果text未定义,返回替代文本,例如空字符串''或其他 - if (!text) { - return '无'; - } - - return ( - { - setModalContent(text); - setIsModalOpen(true); - }} - > - {text} - - ); - } + // 如果text未定义,返回替代文本,例如空字符串''或其他 + if (!text) { + return '无'; + } + + return ( + { + setModalContent(text); + setIsModalOpen(true); + }} + > + {text} + + ); + } }, { title: '失败原因', dataIndex: 'fail_reason', render: (text, record, index) => { - // 如果text未定义,返回替代文本,例如空字符串''或其他 - if (!text) { - return '无'; - } - - return ( - { - setModalContent(text); - setIsModalOpen(true); - }} - > - {text} - - ); - } + // 如果text未定义,返回替代文本,例如空字符串''或其他 + if (!text) { + return '无'; + } + + return ( + { + setModalContent(text); + setIsModalOpen(true); + }} + > + {text} + + ); + } } ]; @@ -286,7 +289,7 @@ const LogsTable = () => { start_timestamp: timestamp2string(now.getTime() / 1000 - 2592000), end_timestamp: timestamp2string(now.getTime() / 1000 + 3600), }); - const {channel_id, mj_id, start_timestamp, end_timestamp} = inputs; + const {channel_id, mj_id, start_timestamp, end_timestamp} = inputs; const [stat, setStat] = useState({ quota: 0, @@ -298,7 +301,6 @@ const LogsTable = () => { }; - const setLogsFormat = (logs) => { for (let i = 0; i < logs.length; i++) { logs[i].timestamp2string = timestamp2string(logs[i].created_at); @@ -317,9 +319,9 @@ const LogsTable = () => { let localStartTimestamp = Date.parse(start_timestamp); let localEndTimestamp = Date.parse(end_timestamp); if (isAdminUser) { - url = `/api/mj/?p=${startIdx}&channel_id=${channel_id}&mj_id=${mj_id}&start_timestamp=${localStartTimestamp}&end_timestamp=${localEndTimestamp}`; + url = `/api/mj/?p=${startIdx}&channel_id=${channel_id}&mj_id=${mj_id}&start_timestamp=${localStartTimestamp}&end_timestamp=${localEndTimestamp}`; } else { - url = `/api/mj/self/?p=${startIdx}&mj_id=${mj_id}&start_timestamp=${localStartTimestamp}&end_timestamp=${localEndTimestamp}`; + url = `/api/mj/self/?p=${startIdx}&mj_id=${mj_id}&start_timestamp=${localStartTimestamp}&end_timestamp=${localEndTimestamp}`; } const res = await API.get(url); const {success, message, data} = res.data; @@ -368,11 +370,9 @@ const LogsTable = () => { }, [logType]); - - return ( <> - + <> @@ -400,7 +400,7 @@ const LogsTable = () => { > - { onOk={() => setIsModalOpen(false)} onCancel={() => setIsModalOpen(false)} closable={null} - bodyStyle={{ height: '400px', overflow: 'auto' }} // 设置模态框内容区域样式 + bodyStyle={{height: '400px', overflow: 'auto'}} // 设置模态框内容区域样式 width={800} // 设置模态框宽度 > - {modalContent} + {modalContent} setIsModalOpenurl(visible)} /> - + > );
{modalContent}