|
|
@@ -1,6 +1,21 @@
|
|
|
import * as React from 'react';
|
|
|
import { observer } from 'mobx-react';
|
|
|
-import { List, Button, Divider, Flex, Layout, Empty, Image, Modal, Tag, message, Tooltip, Select, Form } from 'antd';
|
|
|
+import {
|
|
|
+ List,
|
|
|
+ Button,
|
|
|
+ Divider,
|
|
|
+ Flex,
|
|
|
+ Layout,
|
|
|
+ Empty,
|
|
|
+ Image,
|
|
|
+ Modal,
|
|
|
+ Tag,
|
|
|
+ message,
|
|
|
+ Tooltip,
|
|
|
+ Select,
|
|
|
+ Form,
|
|
|
+ Space
|
|
|
+} from 'antd';
|
|
|
import { PlusOutlined, FileOutlined, SettingOutlined, DeleteOutlined, StepForwardOutlined } from '@ant-design/icons';
|
|
|
import { apis } from '@/apis';
|
|
|
import './style.less';
|
|
|
@@ -10,12 +25,13 @@ import LocalStorage from '@/LocalStorage';
|
|
|
import { create } from 'domain';
|
|
|
import audit from '../../audit';
|
|
|
import { set } from 'mobx';
|
|
|
+import IconSvg from "@/assets/public/icon.svg";
|
|
|
|
|
|
-const {Header, Footer, Sider, Content} = Layout;
|
|
|
-const {Option} = Select;
|
|
|
+const { Header, Footer, Sider, Content } = Layout;
|
|
|
+const { Option } = Select;
|
|
|
const FormItem = Form.Item;
|
|
|
|
|
|
-const headerStyle: React.CSSProperties = {
|
|
|
+const headerStyle : React.CSSProperties = {
|
|
|
textAlign: 'center',
|
|
|
height: 24,
|
|
|
paddingInline: 48,
|
|
|
@@ -23,20 +39,20 @@ const headerStyle: React.CSSProperties = {
|
|
|
backgroundColor: '#fff',
|
|
|
};
|
|
|
|
|
|
-const contentStyle: React.CSSProperties = {
|
|
|
+const contentStyle : React.CSSProperties = {
|
|
|
textAlign: 'center',
|
|
|
lineHeight: '40px',
|
|
|
backgroundColor: '#fff',
|
|
|
};
|
|
|
|
|
|
-const siderStyle: React.CSSProperties = {
|
|
|
+const siderStyle : React.CSSProperties = {
|
|
|
paddingLeft: 30,
|
|
|
paddingTop: 30,
|
|
|
height: 80,
|
|
|
backgroundColor: '#fff',
|
|
|
};
|
|
|
|
|
|
-const footerStyle: React.CSSProperties = {
|
|
|
+const footerStyle : React.CSSProperties = {
|
|
|
textAlign: 'center',
|
|
|
color: '#fff',
|
|
|
height: 24,
|
|
|
@@ -49,73 +65,73 @@ const layoutStyle = {
|
|
|
width: 'calc(10% - 8px)',
|
|
|
maxWidth: 'calc(20% - 8px)',
|
|
|
};
|
|
|
-const QuestionAnswerList: React.FC = () => {
|
|
|
+const QuestionAnswerList : React.FC = () => {
|
|
|
const [ form ] = Form.useForm();
|
|
|
|
|
|
interface Item {
|
|
|
- name: string,
|
|
|
- desc: string,
|
|
|
- appId: number,
|
|
|
- createBy: string,
|
|
|
- typeId: string;
|
|
|
- status: string;
|
|
|
- comment: string;
|
|
|
- auditStatus: string;
|
|
|
- projectName: string;
|
|
|
+ name : string,
|
|
|
+ desc : string,
|
|
|
+ appId : number,
|
|
|
+ createBy : string,
|
|
|
+ typeId : string;
|
|
|
+ status : string;
|
|
|
+ comment : string;
|
|
|
+ auditStatus : string;
|
|
|
+ projectName : string;
|
|
|
};
|
|
|
|
|
|
interface PageInfo {
|
|
|
- pageNumber: number,
|
|
|
- pageSize: number,
|
|
|
- total: number,
|
|
|
+ pageNumber : number,
|
|
|
+ pageSize : number,
|
|
|
+ total : number,
|
|
|
};
|
|
|
|
|
|
type AppTypeList = {
|
|
|
- label: string,
|
|
|
- value: string,
|
|
|
+ label : string,
|
|
|
+ value : string,
|
|
|
}[];
|
|
|
|
|
|
type ProjectTypeList = {
|
|
|
- label: string,
|
|
|
- value: string,
|
|
|
+ label : string,
|
|
|
+ value : string,
|
|
|
}[];
|
|
|
|
|
|
- const [ listLoading, setListLoading ] = React.useState(false);
|
|
|
- const [ list, setList ] = React.useState<Item[]>([]);
|
|
|
- const [ page, setPage ] = React.useState<PageInfo>({
|
|
|
+ const [ listLoading, setListLoading ] = React.useState( false );
|
|
|
+ const [ list, setList ] = React.useState<Item[]>( [] );
|
|
|
+ const [ page, setPage ] = React.useState<PageInfo>( {
|
|
|
pageNumber: 1,
|
|
|
pageSize: 10,
|
|
|
total: 0,
|
|
|
- });
|
|
|
+ } );
|
|
|
const [ appCount, setAppCount ] = React.useState<string>();
|
|
|
const [ knowCount, setKnowCount ] = React.useState<string>();
|
|
|
- const {Header, Footer, Sider, Content} = Layout;
|
|
|
- const [ appTypeList, setAppTypeList ] = React.useState<AppTypeList>([]);
|
|
|
- const [ createFlag, setCreateFlag ] = React.useState(false);
|
|
|
- const [ deleteFlag, setDeleteFlag ] = React.useState(false);
|
|
|
- const [ updateFlag, setUpdateFlag ] = React.useState(false);
|
|
|
- const [ projectList, setProjectList ] = React.useState<ProjectTypeList>([]);
|
|
|
- const [ appProjectList, setAppProjectList ] = React.useState<AppTypeList>([]);
|
|
|
- const [ showSubPanel, setShowSubPanel ] = React.useState(false);
|
|
|
- const [ selectedType, setSelectedType ] = React.useState<number | null>(null);
|
|
|
- const wrapperRef = React.useRef<HTMLDivElement>(null);
|
|
|
- const selectRef = React.useRef<any>(null);
|
|
|
- const [ levelTypeList, setLevelTypeList ] = React.useState<AppTypeList>([]);
|
|
|
+ const { Header, Footer, Sider, Content } = Layout;
|
|
|
+ const [ appTypeList, setAppTypeList ] = React.useState<AppTypeList>( [] );
|
|
|
+ const [ createFlag, setCreateFlag ] = React.useState( false );
|
|
|
+ const [ deleteFlag, setDeleteFlag ] = React.useState( false );
|
|
|
+ const [ updateFlag, setUpdateFlag ] = React.useState( false );
|
|
|
+ const [ projectList, setProjectList ] = React.useState<ProjectTypeList>( [] );
|
|
|
+ const [ appProjectList, setAppProjectList ] = React.useState<AppTypeList>( [] );
|
|
|
+ const [ showSubPanel, setShowSubPanel ] = React.useState( false );
|
|
|
+ const [ selectedType, setSelectedType ] = React.useState<number | null>( null );
|
|
|
+ const wrapperRef = React.useRef<HTMLDivElement>( null );
|
|
|
+ const selectRef = React.useRef<any>( null );
|
|
|
+ const [ levelTypeList, setLevelTypeList ] = React.useState<AppTypeList>( [] );
|
|
|
|
|
|
const appApi = {
|
|
|
- fetchList: async (typeId: any, projectId: any) => {
|
|
|
- setListLoading(true);
|
|
|
+ fetchList: async ( typeId : any, projectId : any ) => {
|
|
|
+ setListLoading( true );
|
|
|
try {
|
|
|
const userInfo = LocalStorage.getUserInfo();
|
|
|
- const userId = (userInfo?.id ?? '').toString();
|
|
|
- const res = await apis.fetchTakaiAppList({
|
|
|
+ const userId = ( userInfo?.id ?? '' ).toString();
|
|
|
+ const res = await apis.fetchTakaiAppList( {
|
|
|
pageSize: page.pageSize,
|
|
|
pageNumber: page.pageNumber,
|
|
|
userId: userId,
|
|
|
typeId: typeId,
|
|
|
projectId: projectId,
|
|
|
- })
|
|
|
- const list = res.rows.map((item: any) => {
|
|
|
+ } )
|
|
|
+ const list = res.rows.map( ( item : any ) => {
|
|
|
return {
|
|
|
name: item.name,
|
|
|
desc: item.desc,
|
|
|
@@ -127,67 +143,67 @@ const QuestionAnswerList: React.FC = () => {
|
|
|
auditStatus: item.auditStatus,
|
|
|
projectName: item.projectName
|
|
|
}
|
|
|
- });
|
|
|
- const c = LocalStorage.getStatusFlag('deepseek:application:create');
|
|
|
- const u = LocalStorage.getStatusFlag('deepseek:application:delete');
|
|
|
- const filteredList = list.filter((item: any) => {
|
|
|
+ } );
|
|
|
+ const c = LocalStorage.getStatusFlag( 'deepseek:application:create' );
|
|
|
+ const u = LocalStorage.getStatusFlag( 'deepseek:application:delete' );
|
|
|
+ const filteredList = list.filter( ( item : any ) => {
|
|
|
// 如果有 createFlag 或 updateFlag 权限,显示所有数据
|
|
|
if ( c || u ) {
|
|
|
return true;
|
|
|
}
|
|
|
// 没有权限时排除 status='5' 的数据
|
|
|
return item.status !== '5';
|
|
|
- });
|
|
|
- setList(filteredList);
|
|
|
- setPage({
|
|
|
+ } );
|
|
|
+ setList( filteredList );
|
|
|
+ setPage( {
|
|
|
pageNumber: page.pageNumber,
|
|
|
pageSize: page.pageSize,
|
|
|
total: res.total,
|
|
|
- });
|
|
|
+ } );
|
|
|
} catch ( error ) {
|
|
|
- console.error(error);
|
|
|
+ console.error( error );
|
|
|
} finally {
|
|
|
- setListLoading(false);
|
|
|
+ setListLoading( false );
|
|
|
}
|
|
|
},
|
|
|
|
|
|
- auditApplication: async (appId: string, userId: string) => {
|
|
|
- const res = await apis.auditTakaiApplicationLibApi(appId, userId);
|
|
|
+ auditApplication: async ( appId : string, userId : string ) => {
|
|
|
+ const res = await apis.auditTakaiApplicationLibApi( appId, userId );
|
|
|
if ( res.data === 9 ) {
|
|
|
- message.error('您没有添加审核人');
|
|
|
+ message.error( '您没有添加审核人' );
|
|
|
}
|
|
|
- await appApi.fetchList(null, null);
|
|
|
+ await appApi.fetchList( null, null );
|
|
|
}
|
|
|
};
|
|
|
|
|
|
// 删除应用
|
|
|
- const delApplication = async (appId: string) => {
|
|
|
+ const delApplication = async ( appId : string ) => {
|
|
|
try {
|
|
|
- await apis.deleteTakaiApplicationApi(appId);
|
|
|
- await appApi.fetchList(null, null);
|
|
|
+ await apis.deleteTakaiApplicationApi( appId );
|
|
|
+ await appApi.fetchList( null, null );
|
|
|
} catch ( error ) {
|
|
|
- console.error(error);
|
|
|
+ console.error( error );
|
|
|
}
|
|
|
}
|
|
|
|
|
|
const indexApi = {
|
|
|
- fetchIndex: async (typeId: any, projectId: any) => {
|
|
|
+ fetchIndex: async ( typeId : any, projectId : any ) => {
|
|
|
try {
|
|
|
const userInfo = LocalStorage.getUserInfo();
|
|
|
- const userId = (userInfo?.id ?? '').toString();
|
|
|
- const res = await apis.fetchTakaiIndexCount({
|
|
|
+ const userId = ( userInfo?.id ?? '' ).toString();
|
|
|
+ const res = await apis.fetchTakaiIndexCount( {
|
|
|
pageSize: page.pageSize,
|
|
|
pageNumber: page.pageNumber,
|
|
|
userId: userId,
|
|
|
typeId: typeId,
|
|
|
projectId: projectId,
|
|
|
- })
|
|
|
- setAppCount(res.data.applicationCount);
|
|
|
- setKnowCount(res.data.knowledgeCount);
|
|
|
+ } )
|
|
|
+ setAppCount( res.data.applicationCount );
|
|
|
+ setKnowCount( res.data.knowledgeCount );
|
|
|
} catch ( error ) {
|
|
|
- console.error(error);
|
|
|
+ console.error( error );
|
|
|
} finally {
|
|
|
- setListLoading(false);
|
|
|
+ setListLoading( false );
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
@@ -196,16 +212,16 @@ const QuestionAnswerList: React.FC = () => {
|
|
|
const appTypeApi = {
|
|
|
fetchAppType: async () => {
|
|
|
try {
|
|
|
- const res = await apis.fetchTakaiAppTypeList('app_type');
|
|
|
- const list = res.data.map((item: any) => {
|
|
|
+ const res = await apis.fetchTakaiAppTypeList( 'app_type' );
|
|
|
+ const list = res.data.map( ( item : any ) => {
|
|
|
return {
|
|
|
label: item.dictLabel,
|
|
|
value: item.dictCode,
|
|
|
}
|
|
|
- });
|
|
|
- setAppTypeList(list);
|
|
|
- } catch ( error: any ) {
|
|
|
- console.error(error);
|
|
|
+ } );
|
|
|
+ setAppTypeList( list );
|
|
|
+ } catch ( error : any ) {
|
|
|
+ console.error( error );
|
|
|
}
|
|
|
},
|
|
|
};
|
|
|
@@ -214,16 +230,16 @@ const QuestionAnswerList: React.FC = () => {
|
|
|
const appProTypeApi = {
|
|
|
fetchAppProType: async () => {
|
|
|
try {
|
|
|
- const res = await apis.fetchTakaiAppTypeList('project_type');
|
|
|
- const list = res.data.map((item: any) => {
|
|
|
+ const res = await apis.fetchTakaiAppTypeList( 'project_type' );
|
|
|
+ const list = res.data.map( ( item : any ) => {
|
|
|
return {
|
|
|
label: item.dictLabel,
|
|
|
value: item.dictCode,
|
|
|
}
|
|
|
- });
|
|
|
- setAppProjectList(list);
|
|
|
- } catch ( error: any ) {
|
|
|
- console.error(error);
|
|
|
+ } );
|
|
|
+ setAppProjectList( list );
|
|
|
+ } catch ( error : any ) {
|
|
|
+ console.error( error );
|
|
|
}
|
|
|
},
|
|
|
};
|
|
|
@@ -232,15 +248,15 @@ const QuestionAnswerList: React.FC = () => {
|
|
|
fetchProject: async () => {
|
|
|
try {
|
|
|
const res = await apis.fetchTakaiProjectLibApi();
|
|
|
- const list = res.data.map((item: any) => {
|
|
|
+ const list = res.data.map( ( item : any ) => {
|
|
|
return {
|
|
|
label: item.projectName,
|
|
|
value: item.projectId,
|
|
|
}
|
|
|
- });
|
|
|
- setProjectList(list);
|
|
|
- } catch ( error: any ) {
|
|
|
- console.error(error);
|
|
|
+ } );
|
|
|
+ setProjectList( list );
|
|
|
+ } catch ( error : any ) {
|
|
|
+ console.error( error );
|
|
|
}
|
|
|
},
|
|
|
};
|
|
|
@@ -249,40 +265,40 @@ const QuestionAnswerList: React.FC = () => {
|
|
|
const levelTypeApi = {
|
|
|
fetchLevelAppType: async () => {
|
|
|
try {
|
|
|
- const res = await apis.fetchTakaiAppTypeList('project_type');
|
|
|
- const list = res.data.map((item: any) => {
|
|
|
+ const res = await apis.fetchTakaiAppTypeList( 'project_type' );
|
|
|
+ const list = res.data.map( ( item : any ) => {
|
|
|
return {
|
|
|
label: item.dictLabel,
|
|
|
value: item.dictCode,
|
|
|
}
|
|
|
- });
|
|
|
- setLevelTypeList(list);
|
|
|
- } catch ( error: any ) {
|
|
|
- console.error(error);
|
|
|
+ } );
|
|
|
+ setLevelTypeList( list );
|
|
|
+ } catch ( error : any ) {
|
|
|
+ console.error( error );
|
|
|
}
|
|
|
},
|
|
|
};
|
|
|
|
|
|
const init = async () => {
|
|
|
- await appApi.fetchList(null, null);
|
|
|
- await indexApi.fetchIndex(null, null);
|
|
|
+ await appApi.fetchList( null, null );
|
|
|
+ await indexApi.fetchIndex( null, null );
|
|
|
await appTypeApi.fetchAppType();
|
|
|
await projectApi.fetchProject();
|
|
|
await appProTypeApi.fetchAppProType();
|
|
|
await levelTypeApi.fetchLevelAppType();
|
|
|
}
|
|
|
|
|
|
- React.useEffect(() => {
|
|
|
- setCreateFlag(LocalStorage.getStatusFlag('deepseek:application:create'));
|
|
|
- setDeleteFlag(LocalStorage.getStatusFlag('deepseek:application:delete'));
|
|
|
- setUpdateFlag(LocalStorage.getStatusFlag('deepseek:application:update'));
|
|
|
+ React.useEffect( () => {
|
|
|
+ setCreateFlag( LocalStorage.getStatusFlag( 'deepseek:application:create' ) );
|
|
|
+ setDeleteFlag( LocalStorage.getStatusFlag( 'deepseek:application:delete' ) );
|
|
|
+ setUpdateFlag( LocalStorage.getStatusFlag( 'deepseek:application:update' ) );
|
|
|
init();
|
|
|
- }, [ page.pageSize, page.pageNumber ])
|
|
|
+ }, [ page.pageSize, page.pageNumber ] )
|
|
|
|
|
|
- const paginationConfig: PaginationConfig = {
|
|
|
+ const paginationConfig : PaginationConfig = {
|
|
|
// 显示数据总量
|
|
|
- showTotal: (total: number) => {
|
|
|
- return `共 ${total} 条`;
|
|
|
+ showTotal: ( total : number ) => {
|
|
|
+ return `共 ${ total } 条`;
|
|
|
},
|
|
|
// 展示分页条数切换
|
|
|
showSizeChanger: true,
|
|
|
@@ -293,99 +309,99 @@ const QuestionAnswerList: React.FC = () => {
|
|
|
current: page.pageNumber,
|
|
|
pageSize: page.pageSize,
|
|
|
total: page.total,
|
|
|
- onChange: (pageNumber, pageSize) => {
|
|
|
- setPage({
|
|
|
+ onChange: ( pageNumber, pageSize ) => {
|
|
|
+ setPage( {
|
|
|
pageNumber: pageNumber,
|
|
|
pageSize: pageSize,
|
|
|
total: page.total,
|
|
|
- });
|
|
|
+ } );
|
|
|
},
|
|
|
};
|
|
|
|
|
|
// 点击查询
|
|
|
const handleClickSearch = async () => {
|
|
|
- form.validateFields().then(async (values) => {
|
|
|
+ form.validateFields().then( async ( values ) => {
|
|
|
if ( values.proTypeId ) {
|
|
|
values.typeId = values.proTypeId;
|
|
|
}
|
|
|
- await indexApi.fetchIndex(values.typeId, values.projectId);
|
|
|
- await appApi.fetchList(values.typeId, values.projectId);
|
|
|
- }).catch((error) => {
|
|
|
- console.error(error);
|
|
|
- });
|
|
|
+ await indexApi.fetchIndex( values.typeId, values.projectId );
|
|
|
+ await appApi.fetchList( values.typeId, values.projectId );
|
|
|
+ } ).catch( ( error ) => {
|
|
|
+ console.error( error );
|
|
|
+ } );
|
|
|
};
|
|
|
|
|
|
// 点击重置
|
|
|
const handleClickReset = async () => {
|
|
|
form.resetFields();
|
|
|
- setShowSubPanel(false);
|
|
|
+ setShowSubPanel( false );
|
|
|
page.pageNumber = 1;
|
|
|
page.pageSize = 10;
|
|
|
- await appApi.fetchList(null, null);
|
|
|
- await indexApi.fetchIndex(null, null);
|
|
|
+ await appApi.fetchList( null, null );
|
|
|
+ await indexApi.fetchIndex( null, null );
|
|
|
};
|
|
|
|
|
|
/** 点击外部关闭面板 */
|
|
|
- React.useEffect(() => {
|
|
|
- const handleClickOutside = (event: MouseEvent) => {
|
|
|
- if ( wrapperRef.current && !wrapperRef.current.contains(event.target as Node) ) {
|
|
|
- setShowSubPanel(false);
|
|
|
+ React.useEffect( () => {
|
|
|
+ const handleClickOutside = ( event : MouseEvent ) => {
|
|
|
+ if ( wrapperRef.current && !wrapperRef.current.contains( event.target as Node ) ) {
|
|
|
+ setShowSubPanel( false );
|
|
|
}
|
|
|
};
|
|
|
|
|
|
- document.addEventListener('mousedown', handleClickOutside, true);
|
|
|
+ document.addEventListener( 'mousedown', handleClickOutside, true );
|
|
|
return () => {
|
|
|
- document.removeEventListener('mousedown', handleClickOutside, true);
|
|
|
+ document.removeEventListener( 'mousedown', handleClickOutside, true );
|
|
|
};
|
|
|
- }, []);
|
|
|
+ }, [] );
|
|
|
|
|
|
|
|
|
- const handleAppTypeChange = (value: number) => {
|
|
|
- console.log(value, 'sssss');
|
|
|
+ const handleAppTypeChange = ( value : number ) => {
|
|
|
+ console.log( value, 'sssss' );
|
|
|
if ( value === 41 ) {
|
|
|
// 如果是项目级应用,切换面板状态
|
|
|
// setShowSubPanel(prev => !prev);
|
|
|
- setShowSubPanel(true);
|
|
|
+ setShowSubPanel( true );
|
|
|
} else {
|
|
|
// 其他选项,隐藏面板
|
|
|
- setShowSubPanel(false);
|
|
|
+ setShowSubPanel( false );
|
|
|
}
|
|
|
- setSelectedType(value);
|
|
|
- form.setFieldsValue({typeId: value});
|
|
|
+ setSelectedType( value );
|
|
|
+ form.setFieldsValue( { typeId: value } );
|
|
|
};
|
|
|
|
|
|
- const handleAppProTypeChange = (value: number) => {
|
|
|
- console.log(value, 'valuevalue');
|
|
|
+ const handleAppProTypeChange = ( value : number ) => {
|
|
|
+ console.log( value, 'valuevalue' );
|
|
|
|
|
|
- setSelectedType(value);
|
|
|
- form.setFieldsValue({typeId: value});
|
|
|
+ setSelectedType( value );
|
|
|
+ form.setFieldsValue( { typeId: value } );
|
|
|
};
|
|
|
|
|
|
return (
|
|
|
<div>
|
|
|
<div>
|
|
|
- <Form form={form} layout='inline' colon={false}>
|
|
|
- <div style={{display: 'flex', alignItems: 'center', position: 'relative'}}>
|
|
|
- {/* 主选择器 */}
|
|
|
- <FormItem label="应用类型" name="typeId" style={{marginBottom: 0}}>
|
|
|
+ <Form form={ form } layout='inline' colon={ false }>
|
|
|
+ <div style={ { display: 'flex', alignItems: 'center', position: 'relative' } }>
|
|
|
+ {/* 主选择器 */ }
|
|
|
+ <FormItem label="应用类型" name="typeId" style={ { marginBottom: 0 } }>
|
|
|
<Select
|
|
|
- ref={selectRef}
|
|
|
- style={{width: 200}}
|
|
|
+ ref={ selectRef }
|
|
|
+ style={ { width: 200 } }
|
|
|
placeholder="请选择应用类型"
|
|
|
- onChange={handleAppTypeChange}
|
|
|
- value={selectedType}
|
|
|
+ onChange={ handleAppTypeChange }
|
|
|
+ value={ selectedType }
|
|
|
allowClear
|
|
|
>
|
|
|
- {appTypeList.map(item => (
|
|
|
- <Option key={item.value} value={item.value}>
|
|
|
- {item.label}
|
|
|
+ { appTypeList.map( item => (
|
|
|
+ <Option key={ item.value } value={ item.value }>
|
|
|
+ { item.label }
|
|
|
</Option>
|
|
|
- ))}
|
|
|
+ ) ) }
|
|
|
</Select>
|
|
|
</FormItem>
|
|
|
|
|
|
- {/* 子选项面板 */}
|
|
|
- {showSubPanel && selectedType === 41 && (
|
|
|
+ {/* 子选项面板 */ }
|
|
|
+ { showSubPanel && selectedType === 41 && (
|
|
|
// <div
|
|
|
// style={{
|
|
|
// position: 'absolute',
|
|
|
@@ -404,26 +420,26 @@ const QuestionAnswerList: React.FC = () => {
|
|
|
<FormItem
|
|
|
label='类型'
|
|
|
name='proTypeId'
|
|
|
- rules={[ {required: true, message: '类型不能为空'} ]}
|
|
|
+ rules={ [ { required: true, message: '类型不能为空' } ] }
|
|
|
>
|
|
|
<Select
|
|
|
placeholder='请选择'
|
|
|
allowClear
|
|
|
- style={{width: 200}}
|
|
|
+ style={ { width: 200 } }
|
|
|
// onChange={handleAppProTypeChange}
|
|
|
>
|
|
|
{
|
|
|
- appProjectList.map((item, index) => {
|
|
|
- return <Option value={item.value} key={index}>
|
|
|
- {item.label}
|
|
|
+ appProjectList.map( ( item, index ) => {
|
|
|
+ return <Option value={ item.value } key={ index }>
|
|
|
+ { item.label }
|
|
|
</Option>
|
|
|
- })
|
|
|
+ } )
|
|
|
}
|
|
|
</Select>
|
|
|
</FormItem>
|
|
|
|
|
|
// </div>
|
|
|
- )}
|
|
|
+ ) }
|
|
|
</div>
|
|
|
|
|
|
{/* {
|
|
|
@@ -432,23 +448,23 @@ const QuestionAnswerList: React.FC = () => {
|
|
|
{subItem.label}
|
|
|
</div>
|
|
|
))
|
|
|
- } */}
|
|
|
+ } */ }
|
|
|
|
|
|
<FormItem
|
|
|
label='项目'
|
|
|
name='projectId'
|
|
|
>
|
|
|
<Select
|
|
|
- style={{width: '200px'}}
|
|
|
+ style={ { width: '200px' } }
|
|
|
placeholder='请选择项目'
|
|
|
allowClear
|
|
|
>
|
|
|
{
|
|
|
- projectList.map((item, index) => {
|
|
|
- return <Option value={item.value} key={index}>
|
|
|
- {item.label}
|
|
|
+ projectList.map( ( item, index ) => {
|
|
|
+ return <Option value={ item.value } key={ index }>
|
|
|
+ { item.label }
|
|
|
</Option>
|
|
|
- })
|
|
|
+ } )
|
|
|
}
|
|
|
</Select>
|
|
|
</FormItem>
|
|
|
@@ -456,13 +472,13 @@ const QuestionAnswerList: React.FC = () => {
|
|
|
|
|
|
<FormItem>
|
|
|
<Button
|
|
|
- style={{marginRight: 16}}
|
|
|
+ style={ { marginRight: 16 } }
|
|
|
type='primary'
|
|
|
- onClick={handleClickSearch}
|
|
|
+ onClick={ handleClickSearch }
|
|
|
>
|
|
|
查询
|
|
|
</Button>
|
|
|
- <Button onClick={handleClickReset}>
|
|
|
+ <Button onClick={ handleClickReset }>
|
|
|
重置
|
|
|
</Button>
|
|
|
</FormItem>
|
|
|
@@ -472,134 +488,156 @@ const QuestionAnswerList: React.FC = () => {
|
|
|
list.length
|
|
|
?
|
|
|
<div className='questionAnswerList'>
|
|
|
- <div style={{overflow: 'auto'}}>
|
|
|
+ <div style={ { overflow: 'auto' } }>
|
|
|
<Flex gap="middle" wrap>
|
|
|
- <Layout style={layoutStyle}>
|
|
|
- <Sider width="25%" style={siderStyle}>
|
|
|
+ <Layout style={ layoutStyle }>
|
|
|
+ <Sider width="25%" style={ siderStyle }>
|
|
|
<FileOutlined />
|
|
|
</Sider>
|
|
|
<Layout>
|
|
|
- <Header style={headerStyle}>问答应用总数</Header>
|
|
|
- <Content style={contentStyle}>{appCount}个</Content>
|
|
|
+ <Header style={ headerStyle }>问答应用总数</Header>
|
|
|
+ <Content style={ contentStyle }>{ appCount }个</Content>
|
|
|
</Layout>
|
|
|
</Layout>
|
|
|
- <Layout style={layoutStyle}>
|
|
|
- <Sider width="25%" style={siderStyle}>
|
|
|
+ <Layout style={ layoutStyle }>
|
|
|
+ <Sider width="25%" style={ siderStyle }>
|
|
|
<FileOutlined />
|
|
|
</Sider>
|
|
|
<Layout>
|
|
|
- <Header style={headerStyle}>知识库总数</Header>
|
|
|
- <Content style={contentStyle}>{knowCount} 个</Content>
|
|
|
+ <Header style={ headerStyle }>知识库总数</Header>
|
|
|
+ <Content style={ contentStyle }>{ knowCount } 个</Content>
|
|
|
</Layout>
|
|
|
</Layout>
|
|
|
</Flex>
|
|
|
</div>
|
|
|
- <div style={{display: 'flex', justifyContent: 'space-between'}}>
|
|
|
+ <div style={ { display: 'flex', justifyContent: 'space-between', padding: '16px 20px' } }>
|
|
|
<div>所有问答应用</div>
|
|
|
{
|
|
|
createFlag &&
|
|
|
<Button type='primary'
|
|
|
- icon={<PlusOutlined />}
|
|
|
- onClick={() => {
|
|
|
- router.navigate({pathname: '/deepseek/questionAnswer/create'});
|
|
|
- }}>创建问答应用</Button>
|
|
|
+ icon={ <PlusOutlined /> }
|
|
|
+ onClick={ () => {
|
|
|
+ router.navigate( { pathname: '/deepseek/questionAnswer/create' } );
|
|
|
+ } }>创建问答应用</Button>
|
|
|
}
|
|
|
</div>
|
|
|
<div className='applicationList'>
|
|
|
- <List style={{height: 400}}
|
|
|
- grid={{
|
|
|
- gutter: 16,
|
|
|
- xs: 1,
|
|
|
- sm: 2,
|
|
|
- md: 4,
|
|
|
- lg: 4,
|
|
|
- xl: 6,
|
|
|
- xxl: 2, // 展示的列数
|
|
|
- }}
|
|
|
- dataSource={list}
|
|
|
- renderItem={(item) => (
|
|
|
+ <List grid={ {
|
|
|
+ gutter: 16,
|
|
|
+ xs: 1,
|
|
|
+ sm: 1,
|
|
|
+ md: 2,
|
|
|
+ lg: 2,
|
|
|
+ xl: 3,
|
|
|
+ xxl: 4, // 展示的列数
|
|
|
+ } }
|
|
|
+ dataSource={ list }
|
|
|
+ renderItem={ ( item ) => (
|
|
|
<List.Item>
|
|
|
<div className='card'>
|
|
|
- <div style={{
|
|
|
+ <div style={ {
|
|
|
display: 'flex',
|
|
|
justifyContent: 'space-between',
|
|
|
alignItems: 'center',
|
|
|
overflow: 'auto'
|
|
|
- }}>
|
|
|
- <div style={{display: 'flex', alignItems: 'center', overflow: 'auto'}}>
|
|
|
- <div style={{marginRight: 10, overflow: 'auto'}}>
|
|
|
+ } }>
|
|
|
+ <div style={ { display: 'flex', alignItems: 'center', overflow: 'auto' } }>
|
|
|
+ <div style={ { marginRight: 10, overflow: 'auto' } }>
|
|
|
<Image
|
|
|
- width={30}
|
|
|
- height={30}
|
|
|
- src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
|
|
|
+ width={ 32 }
|
|
|
+ height={ 32 }
|
|
|
+ src={ IconSvg }
|
|
|
/>
|
|
|
</div>
|
|
|
- <div style={{overflow: 'auto'}}>
|
|
|
- {item.name}
|
|
|
+ {/*<div style={ { overflow: 'auto' } }>*/}
|
|
|
+ {/* { item.name }*/}
|
|
|
+ {/*</div>*/}
|
|
|
+
|
|
|
+ <div style={ {
|
|
|
+ display: 'flex',
|
|
|
+ flexDirection: 'column',
|
|
|
+ justifyContent: 'center',
|
|
|
+ height: '100%'
|
|
|
+ } }>
|
|
|
+ <div style={ {
|
|
|
+ lineHeight: '18px',
|
|
|
+ fontSize: 14,
|
|
|
+ fontWeight: 500,
|
|
|
+ overflow: 'auto'
|
|
|
+ } }>{ item.name }</div>
|
|
|
+ <Space size={ 4 } style={ { lineHeight: '18px' } }>
|
|
|
+ <span style={ {
|
|
|
+ color: '#999',
|
|
|
+ fontSize: 12,
|
|
|
+ margin: 0
|
|
|
+ } }>ID:{ item.appId }</span>
|
|
|
+ <Divider type="vertical" style={ { color: '999', margin: 0, height: 12 } } />
|
|
|
+ {/*<span style={ { color: '#999', fontSize: 12 } }>创建者 { item.createBy }</span>*/ }
|
|
|
+ </Space>
|
|
|
</div>
|
|
|
+
|
|
|
</div>
|
|
|
<div>
|
|
|
<>
|
|
|
- {item.projectName}
|
|
|
+ { item.projectName }
|
|
|
{
|
|
|
- (item.status !== null && item.status !== '3') &&
|
|
|
- < Tag style={{
|
|
|
+ ( item.status !== null && item.status !== '3' ) &&
|
|
|
+ < Tag style={ {
|
|
|
marginLeft: 16,
|
|
|
width: 65,
|
|
|
color: '#fff',
|
|
|
height: 25,
|
|
|
backgroundColor: item.status === '1' ? '#D26900' : item.status === '2' ? '#408080' : item.auditStatus === '4' ? '#CE0000' : item.status === '5' ? '#5151A2' : ''
|
|
|
- }}>
|
|
|
- {item.status === '1' ? '待审核' : item.status === '2' ? '审核中' : item.auditStatus === '4' ? '审核拒绝' : item.status === '5' ? '待提交' : '未知'}
|
|
|
+ } }>
|
|
|
+ { item.status === '1' ? '待审核' : item.status === '2' ? '审核中' : item.auditStatus === '4' ? '审核拒绝' : item.status === '5' ? '待提交' : '未知' }
|
|
|
</Tag>
|
|
|
}
|
|
|
|
|
|
{
|
|
|
- (item.auditStatus === '4') &&
|
|
|
- <Tooltip title={item.comment}>
|
|
|
+ ( item.auditStatus === '4' ) &&
|
|
|
+ <Tooltip title={ item.comment }>
|
|
|
{
|
|
|
item.comment !== '' && item.comment !== null && item.comment.length > 10 ?
|
|
|
- item.comment.substring(0, 10) + '......' :
|
|
|
+ item.comment.substring( 0, 10 ) + '......' :
|
|
|
item.comment
|
|
|
}
|
|
|
</Tooltip>
|
|
|
}
|
|
|
-
|
|
|
</>
|
|
|
</div>
|
|
|
</div>
|
|
|
<Divider plain></Divider>
|
|
|
<div className='desc'>
|
|
|
{
|
|
|
- item.desc !== '' && item.desc !== null && item.desc.length > 35 ? item.desc.substring(0, 35) + '......' : item.desc
|
|
|
+ item.desc !== '' && item.desc !== null && item.desc.length > 35 ? item.desc.substring( 0, 35 ) + '......' : item.desc
|
|
|
}
|
|
|
</div>
|
|
|
- <div style={{display: 'flex', justifyContent: 'space-between', overflow: 'auto'}}>
|
|
|
- <div style={{overflow: 'auto'}}>
|
|
|
+ <div style={ { display: 'flex', justifyContent: 'space-between', overflow: 'auto' } }>
|
|
|
+ <div style={ { overflow: 'auto' } }>
|
|
|
{
|
|
|
- (item.status === '5' || item.status === '4' || item.status === '3' || item.status === '' || item.status === null) &&
|
|
|
+ ( item.status === '5' || item.status === '4' || item.status === '3' || item.status === '' || item.status === null ) &&
|
|
|
<>
|
|
|
{
|
|
|
updateFlag &&
|
|
|
- <a style={{marginRight: 16}} onClick={() => {
|
|
|
- router.navigate({pathname: '/deepseek/questionAnswer/modify'}, {state: {id: item.appId}});
|
|
|
- }}>
|
|
|
+ <a style={ { marginRight: 16 } } onClick={ () => {
|
|
|
+ router.navigate( { pathname: '/deepseek/questionAnswer/modify' }, { state: { id: item.appId } } );
|
|
|
+ } }>
|
|
|
<SettingOutlined /> 编辑
|
|
|
</a>
|
|
|
}
|
|
|
|
|
|
{
|
|
|
deleteFlag &&
|
|
|
- <a className='text-error' onClick={() => {
|
|
|
- Modal.confirm({
|
|
|
+ <a className='text-error' onClick={ () => {
|
|
|
+ Modal.confirm( {
|
|
|
title: '删除',
|
|
|
content: `确定删除应用名称: ` + item.name + ` 吗?`,
|
|
|
okType: 'danger',
|
|
|
onOk: async () => {
|
|
|
- await delApplication(item.appId.toString());
|
|
|
+ await delApplication( item.appId.toString() );
|
|
|
}
|
|
|
- });
|
|
|
- }}>
|
|
|
+ } );
|
|
|
+ } }>
|
|
|
<DeleteOutlined /> 删除
|
|
|
</a>
|
|
|
}
|
|
|
@@ -609,18 +647,18 @@ const QuestionAnswerList: React.FC = () => {
|
|
|
|
|
|
{
|
|
|
createFlag && item.status === '5' &&
|
|
|
- <a style={{marginLeft: 16}} onClick={() => {
|
|
|
- Modal.confirm({
|
|
|
+ <a style={ { marginLeft: 16 } } onClick={ () => {
|
|
|
+ Modal.confirm( {
|
|
|
title: '提交审核',
|
|
|
content: `确认提交审核应用名称: ` + item.name + `吗?`,
|
|
|
okType: 'danger',
|
|
|
onOk: async () => {
|
|
|
const userInfo = LocalStorage.getUserInfo();
|
|
|
- const userId = (userInfo?.id ?? '').toString();
|
|
|
- appApi.auditApplication(item.appId.toString(), userId);
|
|
|
+ const userId = ( userInfo?.id ?? '' ).toString();
|
|
|
+ appApi.auditApplication( item.appId.toString(), userId );
|
|
|
}
|
|
|
- });
|
|
|
- }}>
|
|
|
+ } );
|
|
|
+ } }>
|
|
|
<StepForwardOutlined /> 提交审核
|
|
|
</a>
|
|
|
}
|
|
|
@@ -628,25 +666,25 @@ const QuestionAnswerList: React.FC = () => {
|
|
|
|
|
|
<div>
|
|
|
<Tag
|
|
|
- style={{
|
|
|
+ style={ {
|
|
|
padding: '4px 8px',
|
|
|
fontSize: 14,
|
|
|
fontWeight: 'bold',
|
|
|
background: '#f0f0f0',
|
|
|
border: '1px solid #d9d9d9'
|
|
|
- }}
|
|
|
+ } }
|
|
|
>
|
|
|
{
|
|
|
appTypeList
|
|
|
- .find(item1 => item1.value.toString() === item.typeId)?.label || levelTypeList.find(item2 => item2.value.toString() === item.typeId)?.label || '未分类'
|
|
|
+ .find( item1 => item1.value.toString() === item.typeId )?.label || levelTypeList.find( item2 => item2.value.toString() === item.typeId )?.label || '未分类'
|
|
|
}
|
|
|
</Tag>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</List.Item>
|
|
|
- )}
|
|
|
- pagination={paginationConfig} // 分页
|
|
|
+ ) }
|
|
|
+ pagination={ paginationConfig } // 分页
|
|
|
/>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -655,16 +693,16 @@ const QuestionAnswerList: React.FC = () => {
|
|
|
{
|
|
|
createFlag &&
|
|
|
<Button type='primary'
|
|
|
- icon={<PlusOutlined />}
|
|
|
- onClick={() => {
|
|
|
- router.navigate({pathname: '/deepseek/questionAnswer/create'});
|
|
|
- }}>创建问答应用</Button>
|
|
|
+ icon={ <PlusOutlined /> }
|
|
|
+ onClick={ () => {
|
|
|
+ router.navigate( { pathname: '/deepseek/questionAnswer/create' } );
|
|
|
+ } }>创建问答应用</Button>
|
|
|
}
|
|
|
- <Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />
|
|
|
+ <Empty image={ Empty.PRESENTED_IMAGE_SIMPLE } />
|
|
|
</div>
|
|
|
}
|
|
|
</div>
|
|
|
)
|
|
|
};
|
|
|
|
|
|
-export default observer(QuestionAnswerList);
|
|
|
+export default observer( QuestionAnswerList );
|