| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- import { useState } from "react";
- import { Button, Input, Space, Tooltip, Typography } from "antd";
- import {
- FolderOpenOutlined,
- CheckCircleTwoTone,
- LoadingOutlined,
- WarningTwoTone,
- } from "@ant-design/icons";
- import type { TChannelType } from "../../api/Channel";
- import { post } from "../../request";
- import ChannelTableModal from "./ChannelTableModal";
- import type { IChannel } from "./Channel";
- import type {
- IPayload,
- ITokenCreate,
- ITokenCreateResponse,
- TPower,
- } from "../../api/token";
- const { Text } = Typography;
- interface IData {
- value: string;
- label: string;
- }
- interface IWidget {
- channelsId?: string[];
- type?: TChannelType;
- book?: number;
- para?: number;
- power?: TPower;
- onChange?: (channel?: string | null) => void;
- }
- const ChannelSelectWithToken = ({
- type,
- book,
- para,
- power,
- onChange,
- }: IWidget) => {
- const [curr, setCurr] = useState<IData>();
- const [access, setAccess] = useState<boolean>();
- const [loading, setLoading] = useState(false);
- return (
- <Space>
- <Input
- allowClear
- value={curr?.label}
- placeholder="选择一个版本"
- onChange={(event) => {
- if (event.target.value.trim().length === 0) {
- setCurr(undefined);
- setAccess(undefined);
- if (onChange) {
- onChange(undefined);
- }
- }
- }}
- />
- <ChannelTableModal
- chapter={book && para ? { book: book, paragraph: para } : undefined}
- channelType={type}
- trigger={<Button icon={<FolderOpenOutlined />} type="text" />}
- onSelect={(channel: IChannel) => {
- setCurr({ value: channel.id, label: channel.name });
- //验证权限
- if (power) {
- setLoading(true);
- const payload: IPayload[] = [];
- payload.push({
- res_id: channel.id,
- res_type: "channel",
- power: power,
- });
- const url = "/v2/access-token";
- const values = { payload: payload };
- console.info("token api request", url, values);
- post<ITokenCreate, ITokenCreateResponse>(url, values)
- .then((json) => {
- console.info("token api response", json);
- if (json.ok) {
- if (json.data.count > 0) {
- setAccess(true);
- }
- }
- })
- .finally(() => setLoading(false));
- }
- if (onChange) {
- onChange(channel.id + (power ? "@" + power : ""));
- }
- }}
- />
- <Text type="secondary">{power}</Text>
- {loading ? (
- <LoadingOutlined />
- ) : typeof access !== "undefined" ? (
- access ? (
- <CheckCircleTwoTone twoToneColor="#52c41a" />
- ) : (
- <Tooltip title="无法获取指定的权限">
- <WarningTwoTone twoToneColor="#eb2f96" />
- </Tooltip>
- )
- ) : (
- <></>
- )}
- </Space>
- );
- };
- export default ChannelSelectWithToken;
|