完善客服操作台权限与绑定二维码

This commit is contained in:
yml2213
2026-07-25 09:45:49 +08:00
parent 9471a5b4ff
commit df4297bee5
7 changed files with 115 additions and 52 deletions
+8 -6
View File
@@ -16,6 +16,7 @@ import {
type DouyuTaskItem,
} from '../api/modules';
import RealtimeLogPanel from '../components/RealtimeLogPanel';
import { usePermissions } from '../hooks/usePermissions';
import { useWebSocketLogs } from '../hooks/useWebSocketLogs';
import { formatTime } from '../utils/time';
import { getErrorMessage } from '../utils/error';
@@ -133,6 +134,7 @@ function resultNumber(result: Record<string, unknown> | null | undefined, key: s
}
export default function DouyuTasksPage() {
const { can } = usePermissions();
const [accounts, setAccounts] = useState<DouyuTaskAccountItem[]>([]);
const [selectedIds, setSelectedIds] = useState<number[]>([]);
const [goods, setGoods] = useState<DouyuGoodsItem[]>([]);
@@ -163,6 +165,7 @@ export default function DouyuTasksPage() {
const autoOpenPayReady = useRef(false);
const logs = useWebSocketLogs();
const canConfig = can('douyu:config');
const latestQueryGameTaskByAccount = useMemo(() => {
const map = new Map<number, DouyuTaskItem>();
for (const task of tasks) {
@@ -197,7 +200,7 @@ export default function DouyuTasksPage() {
douyuApi.listAccounts(),
douyuApi.listGoods(),
douyuApi.listTasks(),
douyuApi.getConfig(),
canConfig ? douyuApi.getConfig() : Promise.resolve(null),
douyuApi.taskTypes(),
]);
if (accResult.status === 'fulfilled') setAccounts(accResult.value);
@@ -214,12 +217,12 @@ export default function DouyuTasksPage() {
autoOpenPayReady.current = true;
}
}
if (cfgResult.status === 'fulfilled') setConfig(cfgResult.value);
if (cfgResult.status === 'fulfilled' && cfgResult.value) setConfig(cfgResult.value);
if (typeResult.status === 'fulfilled') setTaskTypes(typeResult.value);
} finally {
setLoading(false);
}
}, []);
}, [canConfig]);
const loadTasks = useCallback(async () => {
try {
@@ -688,7 +691,7 @@ export default function DouyuTasksPage() {
</div>
<Space>
<Button icon={<ReloadOutlined />} onClick={loadData} loading={loading}></Button>
<Button icon={<SettingOutlined />} onClick={() => setConfigOpen(true)}></Button>
{canConfig && <Button icon={<SettingOutlined />} onClick={() => setConfigOpen(true)}></Button>}
{runningBatchId && <Button danger icon={<StopOutlined />} onClick={stopBatch}></Button>}
</Space>
</Space>
@@ -960,11 +963,10 @@ export default function DouyuTasksPage() {
<Tag color={qrBindReady ? 'gold' : qrBindPhase === 'role_timeout' ? 'orange' : 'processing'}>
{qrStatusText}
</Tag>
{/* 已有待确认角色时可能不生成二维码(cjm 已是最新换绑态) */}
{qrUrl ? (
<QRCode value={qrUrl} size={220} bordered={false} />
) : qrBindReady ? (
<Text type="secondary"></Text>
<Text type="secondary"></Text>
) : qrTask?.status === 'running' ? (
<Text type="secondary">...</Text>
) : (
+2
View File
@@ -27,6 +27,8 @@ const PERMISSION_GROUPS = [
{ label: '账号管理', prefix: 'account:' },
{ label: '登录任务', prefix: 'login:' },
{ label: 'Cookie', prefix: 'cookie:' },
{ label: '斗鱼活动', prefix: 'douyu:' },
{ label: '虎牙', prefix: 'huya:' },
{ label: '代理 & 白名单', prefix: ['proxy:', 'whitelist:'] },
{ label: '系统', prefix: ['system:', 'audit:'] },
];