You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

personalData.jsx 13 kB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387
  1. import { getAccessToken } from '@/access';
  2. import { addModel, getAssetIcon, getModelList } from '@/services/dataset/index.js';
  3. import { PlusCircleOutlined, UploadOutlined } from '@ant-design/icons';
  4. import { Button, Form, Input, Modal, Pagination, Radio, Select, Upload } from 'antd';
  5. import moment from 'moment';
  6. import { useEffect, useState } from 'react';
  7. import { useNavigate } from 'react-router-dom';
  8. import Styles from './index.less';
  9. const { Search } = Input;
  10. const leftdataList = [1, 2, 3];
  11. const PublicData = () => {
  12. const props = {
  13. action: '/api/mmp/dataset/upload',
  14. // headers: {
  15. // 'X-Requested-With': null
  16. // },
  17. headers: {
  18. Authorization: getAccessToken(),
  19. 'X-Requested-With': null,
  20. },
  21. onChange({ file, fileList }) {
  22. if (file.status !== 'uploading') {
  23. console.log(file, fileList);
  24. form.setFieldsValue({ dataset_version_vos: fileList.map((item) => item.response.data[0]) });
  25. }
  26. },
  27. defaultFileList: [],
  28. };
  29. const [queryFlow, setQueryFlow] = useState({
  30. page: 0,
  31. size: 10,
  32. name: null,
  33. available_range: 0,
  34. });
  35. const navgite = useNavigate();
  36. const [iconParams, setIconParams] = useState({
  37. name: null,
  38. page: 0,
  39. size: 10000,
  40. });
  41. const [activeType, setActiveType] = useState(null);
  42. const [activeTag, setActiveTag] = useState(null);
  43. const [datasetTypeList, setDatasetTypeList] = useState([]);
  44. const [datasetDirectionList, setDatasetDirectionList] = useState([]);
  45. const [isModalOpen, setIsModalOpen] = useState(false);
  46. const [datasetList, setDatasetList] = useState([]);
  47. const [total, setTotal] = useState(0);
  48. const [form] = Form.useForm();
  49. const [dialogTitle, setDialogTitle] = useState('新建模型');
  50. const getModelLists = (queryFlow) => {
  51. getModelList(queryFlow).then((ret) => {
  52. console.log(ret);
  53. if (ret.code == 200) {
  54. setDatasetList(ret.data.content);
  55. setTotal(ret.data.totalElements);
  56. }
  57. });
  58. };
  59. const showModal = () => {
  60. form.resetFields();
  61. setDialogTitle('新建模型');
  62. setIsModalOpen(true);
  63. };
  64. const getAssetIconList = (params) => {
  65. getAssetIcon(params).then((ret) => {
  66. console.log(ret);
  67. if (ret.code == 200 && ret.data.content && ret.data.content.length > 0) {
  68. setDatasetTypeList(ret.data.content.filter((item) => item.category_id == 3));
  69. setDatasetDirectionList(ret.data.content.filter((item) => item.category_id == 4));
  70. } else {
  71. setDatasetTypeList([]);
  72. setDatasetDirectionList([]);
  73. }
  74. });
  75. };
  76. const onSearch = (values) => {
  77. console.log(values);
  78. getAssetIconList({ ...iconParams, name: values });
  79. };
  80. const nameSearch = (values) => {
  81. console.log(values);
  82. getModelLists({ ...queryFlow, name: values });
  83. };
  84. const handleOk = () => {
  85. console.log(1111);
  86. setIsModalOpen(false);
  87. };
  88. const handleCancel = () => {
  89. setIsModalOpen(false);
  90. };
  91. const onFinish = (values) => {
  92. addModel(values).then((ret) => {
  93. console.log(ret);
  94. getModelLists(queryFlow);
  95. setIsModalOpen(false);
  96. });
  97. };
  98. const chooseModelType = (val, item) => {
  99. console.log(val, item);
  100. if (item.path == queryFlow.model_type) {
  101. setActiveType('');
  102. setQueryFlow({ ...queryFlow, model_type: null });
  103. getModelLists({ ...queryFlow, model_type: null });
  104. } else {
  105. setActiveType(item.path);
  106. setQueryFlow({ ...queryFlow, model_type: item.path });
  107. getModelLists({ ...queryFlow, model_type: item.path });
  108. }
  109. // setQueryFlow({...queryFlow,data_type:item.path},()=>{
  110. // getDatasetlist()
  111. // })
  112. };
  113. const chooseModelTag = (val, item) => {
  114. if (item.path == queryFlow.model_tag) {
  115. setActiveTag('');
  116. setQueryFlow({ ...queryFlow, model_tag: null });
  117. getModelLists({ ...queryFlow, model_tag: null });
  118. } else {
  119. setActiveTag(item.path);
  120. setQueryFlow({ ...queryFlow, model_tag: item.path });
  121. getModelLists({ ...queryFlow, model_tag: item.path });
  122. }
  123. // setQueryFlow({...queryFlow,data_type:item.path},()=>{
  124. // getDatasetlist()
  125. // })
  126. };
  127. const routeToIntro = (e, record) => {
  128. e.stopPropagation();
  129. console.log(record);
  130. navgite({ pathname: `/dataset/modelIntro/${record.id}` });
  131. };
  132. const onFinishFailed = (errorInfo) => {
  133. console.log('Failed:', errorInfo);
  134. };
  135. useEffect(() => {
  136. getAssetIconList(iconParams);
  137. getModelLists(queryFlow);
  138. return () => {};
  139. }, []);
  140. return (
  141. <>
  142. <div className={Styles.datasetCneterBox}>
  143. <div className={Styles.datasetCneterLeftBox}>
  144. <div className={Styles.leftContentBox}>
  145. <Search
  146. placeholder="搜索"
  147. allowClear
  148. onSearch={onSearch}
  149. style={{
  150. width: 300,
  151. marginBottom: '15px',
  152. }}
  153. />
  154. <div className={Styles.itemTitle}>模型框架</div>
  155. <div className={Styles.itemBox}>
  156. {datasetTypeList && datasetTypeList.length > 0
  157. ? datasetTypeList.map((item) => {
  158. return (
  159. <div>
  160. <div
  161. className={[
  162. Styles.messageBox,
  163. item.path === activeType ? Styles.active : null,
  164. ].join(' ')}
  165. onClick={(e) => {
  166. chooseModelType(e, item);
  167. }}
  168. >
  169. <img
  170. className={Styles.ptIcon}
  171. style={{ width: '22px' }}
  172. src={`/assets/images/model/${item.path}.png`}
  173. alt=""
  174. />
  175. <img
  176. className={Styles.hoverIcon}
  177. style={{ width: '22px' }}
  178. src={`/assets/images/model/${item.path}-hover.png`}
  179. alt=""
  180. />
  181. <span
  182. className={Styles.messageText}
  183. onClick={(e) => {
  184. chooseModelTag(e, item);
  185. }}
  186. >
  187. {item.name}
  188. </span>
  189. </div>
  190. </div>
  191. );
  192. })
  193. : ''}
  194. </div>
  195. <div className={Styles.itemTitle}>模型能力</div>
  196. <div className={Styles.itemBox}>
  197. {datasetDirectionList && datasetDirectionList.length > 0
  198. ? datasetDirectionList.map((item) => {
  199. return (
  200. <div>
  201. <div
  202. className={[
  203. Styles.messageBox,
  204. item.path === activeTag ? Styles.active : null,
  205. ].join(' ')}
  206. onClick={(e) => {
  207. chooseModelTag(e, item);
  208. }}
  209. >
  210. <img
  211. className={Styles.ptIcon}
  212. style={{ width: '22px' }}
  213. src={`/assets/images/model/${item.path}.png`}
  214. alt=""
  215. />
  216. <img
  217. className={Styles.hoverIcon}
  218. style={{ width: '22px' }}
  219. src={`/assets/images/model/${item.path}-hover.png`}
  220. alt=""
  221. />
  222. <span className={Styles.messageText}>{item.name}</span>
  223. </div>
  224. </div>
  225. );
  226. })
  227. : ''}
  228. </div>
  229. </div>
  230. </div>
  231. <div className={Styles.datasetCneterRightBox}>
  232. <div className={Styles.dataSource}>
  233. <span>数据总数:{total}个</span>
  234. <div>
  235. <Search
  236. placeholder="按模型名称筛选"
  237. allowClear
  238. onSearch={nameSearch}
  239. style={{
  240. width: 300,
  241. }}
  242. />
  243. <Button
  244. type="primary"
  245. className={Styles.plusButton}
  246. onClick={showModal}
  247. icon={<PlusCircleOutlined style={{ color: '#1664ff' }} />}
  248. >
  249. 模型注册
  250. </Button>
  251. </div>
  252. </div>
  253. <div className={Styles.dataContent}>
  254. {datasetList && datasetList.length > 0
  255. ? datasetList.map((item) => {
  256. return (
  257. <div className={Styles.dataItem} onClick={(e) => routeToIntro(e, item)}>
  258. <div className={Styles.itemText}>{item.name}</div>
  259. <div className={Styles.itemTime}>
  260. <span>最近更新: {moment(item.update_time).format('YYYY-MM-DD')}</span>
  261. </div>
  262. <div className={Styles.itemIcon}>
  263. <img
  264. style={{ width: '17px', marginRight: '3px' }}
  265. src={`/assets/images/upload-icon.png`}
  266. alt=""
  267. />
  268. <span>1582</span>
  269. </div>
  270. </div>
  271. );
  272. })
  273. : ''}
  274. {/* <Select.Option value="demo">Demo</Select.Option> */}
  275. </div>
  276. <Pagination size="small" total={total} showSizeChanger showQuickJumper />
  277. </div>
  278. </div>
  279. <Modal
  280. title={
  281. <div style={{ display: 'flex', alignItems: 'center', fontWeight: 500 }}>
  282. <img
  283. style={{ width: '20px', marginRight: '10px' }}
  284. src={`/assets/images/pipeline-edit-icon.png`}
  285. alt=""
  286. />
  287. {dialogTitle}
  288. </div>
  289. }
  290. open={isModalOpen}
  291. className={Styles.modal}
  292. okButtonProps={{
  293. htmlType: 'submit',
  294. form: 'form',
  295. }}
  296. onCancel={handleCancel}
  297. >
  298. <Form
  299. name="form"
  300. form={form}
  301. layout="vertical"
  302. initialValues={{
  303. remember: true,
  304. }}
  305. onFinish={onFinish}
  306. onFinishFailed={onFinishFailed}
  307. autoComplete="off"
  308. >
  309. <Form.Item
  310. label="模型名称"
  311. name="name"
  312. rules={
  313. [
  314. // {
  315. // required: true,
  316. // message: 'Please input your username!',
  317. // },
  318. ]
  319. }
  320. >
  321. <Input placeholder="请输入模型名称" />
  322. </Form.Item>
  323. <Form.Item
  324. label="模型描述"
  325. name="description"
  326. rules={
  327. [
  328. // {
  329. // required: true,
  330. // message: 'Please input your username!',
  331. // },
  332. ]
  333. }
  334. >
  335. <Input placeholder="请输入模型描述" />
  336. </Form.Item>
  337. <Form.Item label="可见范围" name="available_range">
  338. <Radio.Group>
  339. <Radio value="0">仅自己可见</Radio>
  340. <Radio value="1">工作空间可见</Radio>
  341. </Radio.Group>
  342. </Form.Item>
  343. <Form.Item
  344. label="模型框架"
  345. name="model_type"
  346. rules={
  347. [
  348. // {
  349. // required: true,
  350. // message: 'Please input your username!',
  351. // },
  352. ]
  353. }
  354. >
  355. <Select allowClear placeholder="请选择模型类型" options={[]} />
  356. </Form.Item>
  357. <Form.Item
  358. label="模型能力"
  359. name="model_tag"
  360. rules={
  361. [
  362. // {
  363. // required: true,
  364. // message: 'Please input your username!',
  365. // },
  366. ]
  367. }
  368. >
  369. <Select allowClear placeholder="请选择模型标签" options={[]} />
  370. </Form.Item>
  371. <Form.Item label="模型文件" name="dataset_version_vos">
  372. <Upload {...props}>
  373. <Button icon={<UploadOutlined style={{ color: '#1664ff' }} />}>上传文件</Button>
  374. </Upload>
  375. </Form.Item>
  376. </Form>
  377. </Modal>
  378. </>
  379. );
  380. };
  381. export default PublicData;