Commit 40df778454cf755b1b60065132e530f282cc8d2f

Authored by 史婷婷
1 parent 9605143f

feat: 生产线管理、生产线明细接口联调

  1 +import { post, get } from '@/utils/request.tsx'
  2 +
  3 +
  4 +/**生产线信息-获取所有生产线信息
  5 + * **/
  6 +export function getProductLine() {
  7 + return post(
  8 + '/open/qx-apaas-lowcode/getProductLine',
  9 + {
  10 + select_dcouji: 'ENABLE'
  11 + },
  12 + {},
  13 + {}
  14 + );
  15 +}
  16 +
  17 +/**生产线信息--获取生产线下所有作业指导书信息
  18 + * **/
  19 +export function getProductBook(data: {pro_line: string}) {
  20 + return post(
  21 + '/open/qx-apaas-lowcode/getProductBook',
  22 + {
  23 + },
  24 + {
  25 + ...data
  26 + },
  27 + {}
  28 + );
  29 +}
  30 +
  31 +/**获取文件预览地址
  32 + * **/
  33 +export function getFilePreview(fileId: string) {
  34 + return get(
  35 + `/open/qgyun-service-fs-manager/file/p/origin/${fileId}`,
  36 + {
  37 + },
  38 + {
  39 + }
  40 + );
  41 +}
\ No newline at end of file
... ...
1   -import React, {useEffect, useState} from 'react'
2   -import './style.less'
3   -import NavBar from '@/components/nav-bar'
4   -import {baseColorPrimary} from "@/utils/common";
5   -import {hexToRgba} from "@/utils/utils";
6   -import _mp4 from './mp4.png';
7   -import _pdf from './pdf.png';
8   -
9   -import { useSearchParams } from "react-router-dom";
10   -
11   -
12   -const ProductionList: React.FC = () => {
13   - const [title, setTitle] = useState<string>('');
14   - // 因是hook,必须写在组件的顶部执行,useSearchParams() 返回的是数组
15   - const [params] = useSearchParams();
16   - console.log('ProductionList===params', params)
17   - // 通过 get 方法获取目标参数
18   - const name = params.get("name") || "";
19   -
20   - useEffect(() => {
21   - if (name) {
22   - setTitle(name)
23   - }
24   - }, [name])
25   -
26   - const list = [
27   - {
28   - id: '1',
29   - name: '工艺流程指导文件',
30   - type: 'pdf'
31   - },
32   - {
33   - id: '2',
34   - name: '设备操作指导文件',
35   - type: 'mp4'
36   - },
37   - {
38   - id: '3',
39   - name: '工艺流程指导文件2',
40   - type: 'pdf'
41   - },
42   - {
43   - id: '4',
44   - name: '工艺流程指导文件3',
45   - type: 'pdf'
46   - },
47   - {
48   - id: '5',
49   - name: '工艺流程指导文件4',
50   - type: 'pdf'
51   - },
52   - {
53   - id: '6',
54   - name: '工艺流程指导文件5',
55   - type: 'pdf'
56   - },
57   - {
58   - id: '7',
59   - name: '设备操作指导文件2',
60   - type: 'mp4'
61   - },
62   - {
63   - id: '8',
64   - name: '设备设备设备设备设备设备设备操作指导文件3',
65   - type: 'mp4'
66   - },
67   - {
68   - id: '9',
69   - name: '设备操作指导文件4',
70   - type: 'mp4'
71   - },
72   - {
73   - id: '10',
74   - name: '设备操作指导文件5',
75   - type: 'mp4'
76   - },
77   - {
78   - id: '11',
79   - name: '设备操作指导文件6',
80   - type: 'mp4'
81   - },
82   - {
83   - id: '12',
84   - name: '设备操作指导文件7',
85   - type: 'mp4'
86   - },
87   - {
88   - id: '13',
89   - name: '设备操作指导文件8',
90   - type: 'mp4'
91   - },
92   - {
93   - id: '14',
94   - name: '设备操作指导文件9',
95   - type: 'mp4'
96   - },
97   - {
98   - id: '15',
99   - name: '设备操作指导文件10',
100   - type: 'mp4'
101   - }
102   - ]
103   -
104   -
105   - return (
106   - <div className={'sxjx-content-main sxjx-layout-main-unfoot'}>
107   - <div className={'production-list'}>
108   - <NavBar title={title} showBack={true}/>
109   - <div className={'production-list_list'}>
110   - {
111   - list?.map((item: any) => {
112   - return <div
113   - key={item?.id}
114   - className={'production-list_list-item'}
115   - style={{backgroundColor: hexToRgba(baseColorPrimary, 0.6)}}
116   - >
117   - <img className={'production-list_list-item-img'} src={item?.type === 'mp4' ? _mp4 : _pdf}/>
118   - <div className={'omit2 production-list_list-item-name'}>
119   - {item?.name}
120   - </div>
121   - </div>
122   - })
123   - }
124   - </div>
125   - </div>
126   - </div>
127   - )
128   -}
129   -
130   -export default ProductionList;
1   -import React from 'react'
2   -import './style.less'
3   -import NavBar from "@/components/nav-bar"
4   -import {baseColorPrimary} from "@/utils/common";
5   -import {hexToRgba} from "@/utils/utils";
6   -import { useNavigate } from "react-router-dom";
7   -
8   -
9   -const ProductionManagement: React.FC = () => {
10   - const navigate = useNavigate();
11   -
12   - const list = [
13   - {
14   - id: '1',
15   - name: '车顶生产线A'
16   - },
17   - {
18   - id: '2',
19   - name: '车顶生产线B'
20   - },
21   - {
22   - id: '3',
23   - name: '车顶生产线C'
24   - },
25   - {
26   - id: '4',
27   - name: '车顶生产线D'
28   - },
29   - {
30   - id: '5',
31   - name: '车顶生产线E'
32   - },
33   - {
34   - id: '6',
35   - name: '车顶生产线F'
36   - },
37   - {
38   - id: '7',
39   - name: '车顶生产线G'
40   - },
41   - {
42   - id: '8',
43   - name: '车顶生产线H'
44   - },
45   - {
46   - id: '9',
47   - name: '车顶生产线I'
48   - },
49   - {
50   - id: '10',
51   - name: '车顶生产线J'
52   - },
53   - {
54   - id: '11',
55   - name: '车顶生产线K'
56   - },
57   - {
58   - id: '12',
59   - name: '车顶生车顶生车顶生产线L'
60   - },
61   - {
62   - id: '13',
63   - name: '车顶生产线M'
64   - },
65   - {
66   - id: '14',
67   - name: '车顶生产线N'
68   - }
69   - ];
70   -
71   - const toProductionList = (item: any) => {
72   - console.log('toProductionList-item', item)
73   - navigate(`/production/list?id=${item?.id}&name=${item?.name}`);
74   - }
75   -
76   -
77   - return (
78   - <div className={'sxjx-content-main sxjx-layout-main-unfoot'}>
79   - <div className={'production-management'}>
80   - <NavBar title={'生产线管理'}/>
81   - <div className={'production-management_list'}>
82   - {
83   - list?.map((item: any) => {
84   - return <div
85   - key={item?.id}
86   - className={'production-management_list-item'}
87   - style={{backgroundColor: hexToRgba(baseColorPrimary, 0.6)}}
88   - onClick={() => toProductionList(item)}
89   - >
90   - {item?.name}
91   - </div>
92   - })
93   - }
94   - </div>
95   - </div>
96   - </div>
97   - )
98   -}
99   -
100   -export default ProductionManagement;
src/pages/production/detail/index.tsx renamed from src/pages/production-detail/index.tsx
src/pages/production/detail/style.less renamed from src/pages/production-detail/style.less
  1 +import React, {useEffect, useState} from 'react'
  2 +import './style.less'
  3 +import NavBar from '@/components/nav-bar'
  4 +import {baseColorPrimary} from "@/utils/common";
  5 +import {hexToRgba} from "@/utils/utils";
  6 +import _mp4 from './mp4.png';
  7 +import _pdf from './pdf.png';
  8 +
  9 +import {useSearchParams} from "react-router-dom";
  10 +import {getProductBook} from "@/api/apiConfig";
  11 +import {SpinLoading} from 'antd-mobile'
  12 +
  13 +interface ListType {
  14 + id: string;
  15 + name: string;
  16 + type: 'pdf' | 'mp4' | string
  17 +}
  18 +
  19 +const ProductionList: React.FC = () => {
  20 + const [title, setTitle] = useState<string>('');
  21 + const [list, setList] = useState<ListType[]>([]);
  22 + const [show, setShow] = useState<boolean>(false);
  23 +
  24 +
  25 + // 因是hook,必须写在组件的顶部执行,useSearchParams() 返回的是数组
  26 + const [params] = useSearchParams();
  27 + console.log('ProductionList===params', params)
  28 + // 通过 get 方法获取目标参数
  29 + const name = params.get("name") || "";
  30 + const id = params.get("id") || "";
  31 +
  32 + useEffect(() => {
  33 + if (name) {
  34 + setTitle(name)
  35 + }
  36 + }, [name])
  37 +
  38 + useEffect(() => {
  39 + if (id) {
  40 + setShow(false);
  41 + getProductBook({pro_line: id}).then((res: any) => {
  42 + setShow(true);
  43 + const _list = res?.product_book?.map((item: any) => {
  44 + const _arr = item?.guide_book_file_info_?.[0]?.name?.split('.') || [];
  45 + return {
  46 + id: item?.id || '',
  47 + name: _arr?.[0] || '',
  48 + type: _arr?.[1] || '',
  49 + }
  50 + }) || [];
  51 + setList(_list)
  52 + }).catch((e: any) => {
  53 + setShow(true);
  54 + setList([])
  55 + })
  56 + }
  57 + }, [id])
  58 +
  59 +
  60 + return (
  61 + <div className={'sxjx-content-main sxjx-layout-main-unfoot'}>
  62 + <div className={'production-list'}>
  63 + <NavBar title={title} showBack={true}/>
  64 + {
  65 + !show ? <SpinLoading color='primary'/> :
  66 + <div className={'production-list_list'}>
  67 + {
  68 + list?.map((item: any) => {
  69 + return <div
  70 + key={item?.id}
  71 + className={'production-list_list-item'}
  72 + style={{backgroundColor: hexToRgba(baseColorPrimary, 0.55)}}
  73 + >
  74 + <img className={'production-list_list-item-img'}
  75 + src={item?.type === 'mp4' ? _mp4 : _pdf}/>
  76 + <div className={'omit2 production-list_list-item-name'}>
  77 + {item?.name}
  78 + </div>
  79 + </div>
  80 + })
  81 + }
  82 +
  83 + </div>
  84 + }
  85 + </div>
  86 + </div>
  87 + )
  88 +}
  89 +
  90 +export default ProductionList;
... ...
src/pages/production/list/mp4.png renamed from src/pages/production-list/mp4.png

8.72 KB

src/pages/production/list/pdf.png renamed from src/pages/production-list/pdf.png

10.4 KB

src/pages/production/list/style.less renamed from src/pages/production-list/style.less
1 1 .production-list {
2 2 background: #f7f7f7;
3 3
  4 + .adm-spin-loading {
  5 + --size: 60px;
  6 + margin: 300px auto 0;
  7 + }
  8 +
4 9 &_list {
5 10 padding: 60px;
6 11 display: flex;
... ...
  1 +import React, {useEffect, useState} from 'react'
  2 +import './style.less'
  3 +import NavBar from "@/components/nav-bar"
  4 +import {baseColorPrimary} from "@/utils/common";
  5 +import {hexToRgba} from "@/utils/utils";
  6 +import { useNavigate } from "react-router-dom";
  7 +import {getProductLine} from "@/api/apiConfig";
  8 +import { SpinLoading } from 'antd-mobile'
  9 +
  10 +interface ListType {
  11 + id: string;
  12 + name: string;
  13 +}
  14 +
  15 +const ProductionManagement: React.FC = () => {
  16 + const navigate = useNavigate();
  17 + const [list, setList] = useState<ListType[]>([]);
  18 + const [show, setShow] = useState<boolean>(false);
  19 +
  20 + useEffect(() => {
  21 + setShow(false);
  22 + getProductLine().then((res: any) => {
  23 + setShow(true);
  24 + const _list = res?.product_line?.map((item: any) => {
  25 + return {
  26 + id: item?.id || '',
  27 + name: item?.name || '',
  28 + }
  29 + }) || [];
  30 + setList(_list)
  31 +
  32 + }).catch((e: any) => {
  33 + setShow(true);
  34 + setList([])
  35 + })
  36 + }, [])
  37 +
  38 + const toProductionList = (item: any) => {
  39 + console.log('toProductionList-item', item)
  40 + navigate(`/production/list?id=${item?.id}&name=${item?.name}`);
  41 + }
  42 +
  43 +
  44 + return (
  45 + <div className={'sxjx-content-main sxjx-layout-main-unfoot'}>
  46 + <div className={'production-management'}>
  47 + <NavBar title={'生产线管理'}/>
  48 + {
  49 + !show ? <SpinLoading color='primary' /> :
  50 + <div className={'production-management_list'}>
  51 + {
  52 + list?.map((item: any) => {
  53 + return <div
  54 + key={item?.id}
  55 + className={'production-management_list-item'}
  56 + style={{backgroundColor: hexToRgba(baseColorPrimary, 0.6)}}
  57 + onClick={() => toProductionList(item)}
  58 + >
  59 + {item?.name}
  60 + </div>
  61 + })
  62 + }
  63 + </div>
  64 + }
  65 +
  66 + </div>
  67 + </div>
  68 + )
  69 +}
  70 +
  71 +export default ProductionManagement;
... ...
src/pages/production/management/style.less renamed from src/pages/production-management/style.less
1 1 .production-management {
2 2 background: #f7f7f7;
3 3
  4 + .adm-spin-loading {
  5 + --size: 60px;
  6 + margin: 300px auto 0;
  7 + }
  8 +
4 9 &_list {
5 10 padding: 60px;
6 11 display: flex;
... ...
1 1 import {createHashRouter} from 'react-router-dom';
2 2 import ErrorPage from "./pages/errorPage";
3   -import ProductionManagement from "./pages/production-management";
4   -import ProductionList from "./pages/production-list";
5   -import ProductionDetail from "./pages/production-detail";
  3 +import ProductionManagement from "./pages/production/management";
  4 +import ProductionList from "./pages/production/list";
  5 +import ProductionDetail from "./pages/production/detail";
6 6
7 7
8 8 const routers = [
... ...
... ... @@ -25,7 +25,8 @@
25 25 "baseUrl": ".",
26 26 "paths": {
27 27 "@/*": ["src/*"]
28   - }
  28 + },
  29 + "allowSyntheticDefaultImports": true
29 30 },
30 31 "include": ["src"]
31 32 }
... ...