Commit a749ec69 authored by 沈翠玲's avatar 沈翠玲

临时提交第三个看板

parent 0caeee7d
...@@ -53,7 +53,8 @@ export default { ...@@ -53,7 +53,8 @@ export default {
'原因': 'เหตุผล', '原因': 'เหตุผล',
'状态': 'สถานะ', '状态': 'สถานะ',
'产线选择': 'การเลือกสายการผลิต', '产线选择': 'การเลือกสายการผลิต',
'日产出': 'นิสสัน' '日产出': 'นิสสัน',
'生产计划看板': 'แผนการผลิต Kanban'
} }
; ;
\ No newline at end of file
...@@ -9,7 +9,7 @@ export default { ...@@ -9,7 +9,7 @@ export default {
'menu.common.pwd': 'เปลี่ยนรหัสผ่าน', 'menu.common.pwd': 'เปลี่ยนรหัสผ่าน',
'menu.kanban': 'กระดาน', 'menu.kanban': 'กระดาน',
'menu.kanban.jiejingProduction': 'กระดานความคืบหน้าการผลิตที่สะอาด', 'menu.kanban.jiejingProduction': 'กระดานความคืบหน้าการผลิตที่สะอาด',
'menu.kanban.productionProgressKanban': 'กระดานความคืบหน้าการผลิต', 'menu.kanban.productionProgressKanban': 'แผนการผลิต Kanban',
'menu.kanban.productionComprehensKanban': 'กระดานการผลิตรวม', 'menu.kanban.productionComprehensKanban': 'กระดานการผลิตรวม',
'menu.kanban.deviceStatusKanban': 'การผลิตอุปกรณ์ที่ครอบคลุมของวัน Kanban', 'menu.kanban.deviceStatusKanban': 'การผลิตอุปกรณ์ที่ครอบคลุมของวัน Kanban',
'menu.kanban.materialSynthesisKanban': 'กระดานสังเคราะห์วัสดุ', 'menu.kanban.materialSynthesisKanban': 'กระดานสังเคราะห์วัสดุ',
......
...@@ -53,6 +53,7 @@ export default { ...@@ -53,6 +53,7 @@ export default {
'原因': '原因', '原因': '原因',
'状态': '状态', '状态': '状态',
'产线选择': '产线选择', '产线选择': '产线选择',
'日产出': '日产出' '日产出': '日产出',
'生产计划看板': '生产计划看板'
}; };
\ No newline at end of file
...@@ -9,7 +9,7 @@ export default { ...@@ -9,7 +9,7 @@ export default {
'menu.common.pwd': '修改密码', 'menu.common.pwd': '修改密码',
'menu.kanban': '看板', 'menu.kanban': '看板',
'menu.kanban.jiejingProduction': '洁净生产进度看板', 'menu.kanban.jiejingProduction': '洁净生产进度看板',
'menu.kanban.productionProgressKanban': '生产进度看板', 'menu.kanban.productionProgressKanban': '生产计划看板',
'menu.kanban.productionComprehensKanban': '生产综合看板', 'menu.kanban.productionComprehensKanban': '生产综合看板',
'menu.kanban.deviceStatusKanban': '当日设备生产综合看板', 'menu.kanban.deviceStatusKanban': '当日设备生产综合看板',
'menu.kanban.materialSynthesisKanban': '物料综合看板', 'menu.kanban.materialSynthesisKanban': '物料综合看板',
......
...@@ -9,7 +9,7 @@ export type Setting = { ...@@ -9,7 +9,7 @@ export type Setting = {
autoResize: boolean; autoResize: boolean;
intervalTime: number; intervalTime: number;
rowMovingTime: number; rowMovingTime: number;
productProgressKanbanSetting?: ProductProgressKanbanSetting; lineName: string;
}; };
export type SettingFormProps = { export type SettingFormProps = {
......
...@@ -13,18 +13,39 @@ type ProductionProgressKanbanData = KANBAN.ProductionProgress.ProductionProgress ...@@ -13,18 +13,39 @@ type ProductionProgressKanbanData = KANBAN.ProductionProgress.ProductionProgress
type ProductionProgressKanbanSetting = KANBAN.ProductionProgress.ProductionProgressKanbanSetting; type ProductionProgressKanbanSetting = KANBAN.ProductionProgress.ProductionProgressKanbanSetting;
type ProgressTableProps = { type ProgressTableProps = {
setting: ProductionProgressKanbanSetting; lineName: string;
data: ProductionProgressKanbanData[]; data: ProductionProgressKanbanData[];
conditionKey: string; conditionKey: string;
rowMovingTime: number; rowMovingTime: number;
}; };
const ProgressTable: React.FC<ProgressTableProps> = ({ const ProgressTable: React.FC<ProgressTableProps> = ({
setting, lineName,
data, data,
conditionKey, conditionKey,
rowMovingTime, rowMovingTime,
}) => { }) => {
data = {
"taskPlanDayList": [
{
"productList": [
{
"itemCode": "",
"planQuantity": "",
"processList": [
{
"processName": "",
"qualifiedRate": 0,
"qualifyQuantity": 0,
"reportQuantity": 0
}
]
}
],
"startDate": ""
}
]
}
const rowHight = 60; const rowHight = 60;
const displayCount = 13; const displayCount = 13;
...@@ -33,19 +54,6 @@ const ProgressTable: React.FC<ProgressTableProps> = ({ ...@@ -33,19 +54,6 @@ const ProgressTable: React.FC<ProgressTableProps> = ({
const [lastConditionKey, setLastConditionKey] = useState(''); const [lastConditionKey, setLastConditionKey] = useState('');
const [pause, setPause] = useState(false); const [pause, setPause] = useState(false);
const [scollOnce, setScollOnce] = useState(false); const [scollOnce, setScollOnce] = useState(false);
//去掉步骤中的重复步骤名
let tempStepName = '';
setting.progress.steps = setting.progress.steps.filter((s) => {
if (tempStepName == s.name) {
return false;
}
tempStepName = s.name;
return true;
});
const row_segment2_section_width = useMemo(
() => (100 / setting.progress.steps.length).toFixed(4) + '%',
[setting],
);
const updateDisplayData = (da: number, sData: ProductionProgressKanbanData[]) => { const updateDisplayData = (da: number, sData: ProductionProgressKanbanData[]) => {
let endAt1 = da + displayCount; let endAt1 = da + displayCount;
...@@ -93,47 +101,14 @@ const ProgressTable: React.FC<ProgressTableProps> = ({ ...@@ -93,47 +101,14 @@ const ProgressTable: React.FC<ProgressTableProps> = ({
}; };
}, [rowMovingTime, scoll]); }, [rowMovingTime, scoll]);
const [isModalOpen, setIsModalOpen] = useState(false);
const [isModalOpen2, setIsModalOpen2] = useState(false);
const [criteria, setCriteria] = useState({} as ErrorDetailCriteria); const [criteria, setCriteria] = useState({} as ErrorDetailCriteria);
const closeModal = () => setIsModalOpen(false);
const closeModal2 = () => setIsModalOpen2(false);
const [productionDetailParams, setProductionDetailParams] = useState({ const [productionDetailParams, setProductionDetailParams] = useState({
kanbanSettingId: '', kanbanSettingId: '',
aufnr: '', aufnr: '',
processName: '', processName: '',
}); });
const openModal = (data, step) => {
if (!setting.id) return;
if (data.stepData.length) {
setProductionDetailParams({
kanbanSettingId: setting.id,
aufnr: data.aufnr,
processName: step.name,
});
setIsModalOpen(true);
}
};
const openModal2 = (zgh: string) => {
setCriteria({
workshopName: '',
zgh: zgh,
status: '1,2,3,4,5',
createdDateFrom: moment()
.date(1)
.hour(0)
.minute(0)
.second(0)
.millisecond(0)
.format('YYYY-MM-DD HH:mm'),
createdDateTo: moment().format('YYYY-MM-DD HH:mm'),
current: 1,
pageSize: 10,
});
if (!setting.id) return;
setIsModalOpen2(true);
};
useEffect(() => { useEffect(() => {
if (scollOnce) { if (scollOnce) {
...@@ -149,25 +124,17 @@ const ProgressTable: React.FC<ProgressTableProps> = ({ ...@@ -149,25 +124,17 @@ const ProgressTable: React.FC<ProgressTableProps> = ({
<div <div
className={`${styles.row_segment1_section1} ${styles.no_top_border} ${styles.no_left_border}`} className={`${styles.row_segment1_section1} ${styles.no_top_border} ${styles.no_left_border}`}
> >
<div className={styles.cell}>施工号</div> <div className={styles.cell}>日期</div>
</div> </div>
<div className={`${styles.row_segment1_section2} ${styles.no_top_border}`}> <div className={`${styles.row_segment1_section2} ${styles.no_top_border}`}>
<div className={styles.cell}>数量</div> <div className={styles.cell}>产品</div>
</div> </div>
<div className={`${styles.row_segment1_section2} ${styles.no_top_border}`}>
<div className={styles.cell}>计划数</div>
</div> </div>
<div className={styles.row_segment2}> <div className={`${styles.row_segment1_section2} ${styles.no_top_border} ${styles.no_right_border}`}>
{setting.progress.steps.map((step, i) => ( <div className={styles.cell}>工序</div>
<div
className={
`${styles.row_section} ${styles.no_top_border} ` +
(i + 1 === setting.progress.steps.length && styles.no_right_border)
}
style={{ width: row_segment2_section_width }}
key={step.code}
>
<div className={styles.cell}>{step.name}</div>
</div> </div>
))}
</div> </div>
</div> </div>
<NodeGroup <NodeGroup
...@@ -215,53 +182,32 @@ const ProgressTable: React.FC<ProgressTableProps> = ({ ...@@ -215,53 +182,32 @@ const ProgressTable: React.FC<ProgressTableProps> = ({
opacity: node.state.opacity, opacity: node.state.opacity,
}} }}
> >
<div className={styles.row_segment1}> {/* <div className={styles.row_segment1}>
<div <div
className={styles.row_segment1_section1} className={styles.row_segment1_section1}
onClick={() => openModal2(node.data[setting.sgNoSourceType.code])}
> >
<div className={styles.cell}>{node.data[setting.sgNoSourceType.code]}</div> <div className={styles.cell}>{node.data[lineName.sgNoSourceType.code]}</div>
</div> </div>
<div className={styles.row_segment1_section2}> <div className={styles.row_segment1_section2}>
<div className={styles.cell}>{node.data.planQuantity}</div> <div className={styles.cell}>{node.data.planQuantity}</div>
</div> </div>
</div> </div>
<div className={styles.row_segment2}> <div className={styles.row_segment2}>
{setting.progress.steps.map((step) => ( {lineName.progress.steps.map((step) => (
<div <div
className={styles.row_section} className={styles.row_section}
style={{ width: row_segment2_section_width }} style={{ width: row_segment2_section_width }}
key={step.code} key={step.code}
onClick={() => openModal(node.data, step)}
> >
<StepCell step={step} data={node.data} setting={setting} /> <StepCell step={step} data={node.data} lineName={lineName} />
</div> </div>
))} ))}
</div> </div> */}
</div> </div>
))} ))}
</div> </div>
)} )}
</NodeGroup> </NodeGroup>
<Modal
title={'批次完工'}
visible={isModalOpen}
footer={null}
width={'70%'}
onCancel={closeModal}
>
<ProductionDetail params={productionDetailParams} />
</Modal>
<Modal
title={'生产异常'}
visible={isModalOpen2}
footer={null}
width={'70%'}
onCancel={closeModal2}
>
<ProductionAbnormal values={criteria} />
</Modal>
</div> </div>
); );
}; };
......
import React, { useRef, useState } from 'react'; import React, { useRef, useState } from 'react';
import { DrawerForm, ProFormCheckbox, ProFormDigit, ProFormSelect } from '@ant-design/pro-form'; import { useIntl } from 'umi';
import ProForm, {
DrawerForm,
ProFormCheckbox,
ProFormDigit,
ProFormRadio,
ProFormSelect,
} from '@ant-design/pro-form';
import type { ProFormInstance } from '@ant-design/pro-form'; import type { ProFormInstance } from '@ant-design/pro-form';
import { queryProductionProgressKanbanSetting } from '../../services/api'; import { queryProductionComprehensKanbanData } from '../../services/api';
type KanbanSetting = KANBAN.ProductionComprehens.ProductionComprehensKanbanDataDto;
type ProductionProgressKanbanSetting = KANBAN.ProductionProgress.ProductionProgressKanbanSetting; type FormSettingDto = {
autoResize: boolean;
intervalTime: number;
rowMovingTime: number;
dataRange: number;
planSource: number;
productionComprehensKanbanSettingId: string;
};
export type Setting = { export type Setting = {
autoResize: boolean; autoResize: boolean;
intervalTime: number; intervalTime: number;
rowMovingTime: number; rowMovingTime: number;
productionProgressKanbanSetting?: ProductionProgressKanbanSetting; dataRange: number;
planSource: number;
lineName?: string;
}; };
export type SettingFormProps = { export type SettingFormProps = {
...@@ -21,43 +38,40 @@ export type SettingFormProps = { ...@@ -21,43 +38,40 @@ export type SettingFormProps = {
const SettingForm: React.FC<SettingFormProps> = (props) => { const SettingForm: React.FC<SettingFormProps> = (props) => {
const formRef = useRef<ProFormInstance>(); const formRef = useRef<ProFormInstance>();
const [productionProgressKanbanSettings, setProductionProgressKanbanSettings] = useState< const intl = useIntl();
ProductionProgressKanbanSetting[] const [lineName, setLineName] = useState<
KanbanSetting[]
>([]); >([]);
return ( return (
<DrawerForm <DrawerForm
formRef={formRef} formRef={formRef}
title="设置" title={intl.formatMessage({id: '设置'})}
width={600} width={600}
submitter={{
searchConfig: {
resetText: intl.formatMessage({id: '取消'}),
submitText: intl.formatMessage({id: '确认'}),
}
}}
visible={props.visible} visible={props.visible}
onVisibleChange={(visible: boolean) => { onVisibleChange={(visible: boolean) => {
if (visible) { if (visible) {
formRef?.current?.setFieldsValue({ formRef?.current?.setFieldsValue({
...props.values, ...props.values
productionProgressKanbanSettingId: props.values.productionProgressKanbanSetting?.id,
}); });
} }
props.onVisibleChange(visible); props.onVisibleChange(visible);
}} }}
onFinish={async (values: { onFinish={async (values: FormSettingDto) => {
autoResize: boolean; props.onSubmitting({ ...values });
intervalTime: number;
rowMovingTime: number;
productionProgressKanbanSettingId: string;
}) => {
const productionProgressKanbanSetting = productionProgressKanbanSettings
.filter((a) => a.id === values.productionProgressKanbanSettingId)
.pop();
productionProgressKanbanSetting?.progress.steps.sort((a, b) => a.ordinal - b.ordinal);
props.onSubmitting({ ...values, productionProgressKanbanSetting });
props.onVisibleChange(false); props.onVisibleChange(false);
}} }}
> >
<ProFormCheckbox name="autoResize" label="适配窗口" width="xl" /> <ProFormCheckbox name="autoResize" label={intl.formatMessage({id: '适配窗口'})} width="xl" />
<ProFormDigit <ProFormDigit
name="intervalTime" name="intervalTime"
label="刷新时间间隔(秒)" label={intl.formatMessage({id: '刷新时间间隔(秒)'})}
required required
width="xl" width="xl"
min={10} min={10}
...@@ -65,24 +79,26 @@ const SettingForm: React.FC<SettingFormProps> = (props) => { ...@@ -65,24 +79,26 @@ const SettingForm: React.FC<SettingFormProps> = (props) => {
/> />
<ProFormDigit <ProFormDigit
name="rowMovingTime" name="rowMovingTime"
label="内容滚动(秒)" label={intl.formatMessage({id: '内容滚动(秒)'})}
required required
width="xl" width="xl"
min={1} min={1}
fieldProps={{ precision: 0 }} fieldProps={{ precision: 0 }}
/> />
<ProFormSelect <ProFormSelect
name="productionProgressKanbanSettingId" name="lineName"
label="看板设置" label={intl.formatMessage({id: '产线选择'})}
required required
width="xl" width="xl"
request={async () => { request={async () => {
const data = await queryProductionProgressKanbanSetting(); const { data } = await queryProductionComprehensKanbanData();
setProductionProgressKanbanSettings(data); if (Array.isArray(data)) {
return data.map((a) => ({ data.unshift(intl.formatMessage({
label: `${a.werks}-${a.fevor}-${a.subTitle1}-${a.subTitle2}`, id: '全厂'
value: a.id, }))
})); }
setLineName(data);
return data.map((a) => ({ label: a, value: a }));
}} }}
/> />
</DrawerForm> </DrawerForm>
......
...@@ -7,15 +7,19 @@ import Crust1 from '../components/FHD1080P/Crust1'; ...@@ -7,15 +7,19 @@ import Crust1 from '../components/FHD1080P/Crust1';
import ProgressTable from './components/ProgressTable'; import ProgressTable from './components/ProgressTable';
import { queryProductionProgressKanbanData } from './services/api'; import { queryProductionProgressKanbanData } from './services/api';
import moment from 'moment'; import moment from 'moment';
import { useIntl } from 'umi';
type ProductionProgressKanbanData = KANBAN.ProductionProgress.ProductionProgressKanbanDataDto; type ProductionProgressKanbanData = KANBAN.ProductionProgress.ProductionProgressKanbanDataDto;
const Main: React.FC = () => { const Main: React.FC = () => {
const intl = useIntl();
const [setting, setSetting] = useState<Setting>({ const [setting, setSetting] = useState<Setting>({
autoResize: true, autoResize: true,
intervalTime: 600, intervalTime: 600,
rowMovingTime: 5, rowMovingTime: 5,
productionProgressKanbanSetting: undefined, lineName: intl.formatMessage({
id: '全厂'
}),
}); });
const [conditionKey, setConditionKey] = useState(''); const [conditionKey, setConditionKey] = useState('');
...@@ -23,22 +27,15 @@ const Main: React.FC = () => { ...@@ -23,22 +27,15 @@ const Main: React.FC = () => {
const [settingFormVisible, setSettingFormVisible] = useState(false); const [settingFormVisible, setSettingFormVisible] = useState(false);
useEffect(() => { useEffect(() => {
const { intervalTime, productionProgressKanbanSetting } = setting; const { intervalTime } = setting;
if (!!!productionProgressKanbanSetting) {
setConditionKey(Date.now().toString());
setData([]);
return;
}
let changeConditionKey = true; let changeConditionKey = true;
const refresh = () => { const refresh = () => {
const now = Date.now(); const now = Date.now();
const gstrpFrom = moment(now).startOf('month');
const gstrpTo = moment(now).endOf('month');
queryProductionProgressKanbanData({ queryProductionProgressKanbanData({
productionProgressKanbanSettingId: productionProgressKanbanSetting.id, lineName: setting?.lineName === intl.formatMessage({
gstrpFrom: gstrpFrom.format('YYYY-MM-DD HH:mm:ss'), id: '全厂'
gstrpTo: gstrpTo.format('YYYY-MM-DD HH:mm:ss'), }) ? null : setting?.lineName
}) })
.then((value) => { .then((value) => {
setData(value.data); setData(value.data);
...@@ -61,27 +58,15 @@ const Main: React.FC = () => { ...@@ -61,27 +58,15 @@ const Main: React.FC = () => {
return ( return (
<> <>
<KanbanStyle <KanbanStyle
headerText="生产进度看板" headerText={intl.formatMessage({id:'生产计划看板'})}
subTitle={setting.productionProgressKanbanSetting?.subTitle1} subTitle={setting?.lineName}
autoResize={setting.autoResize} autoResize={setting.autoResize}
onHeaderClick={() => { onHeaderClick={() => {
setSettingFormVisible(true); setSettingFormVisible(true);
}} }}
> >
<div className={styles.main}> <div className={styles.main}>
<div className={styles.title}> {/* <div className={styles.title}>
<div className={styles.title_left}>
<div
className={
setting.productionProgressKanbanSetting?.subTitle2
? styles.title_left_legend
: styles.title_left_legend_hidden
}
/>
<div className={styles.title_left_text}>
{setting.productionProgressKanbanSetting?.subTitle2}
</div>
</div>
<div className={styles.title_center} /> <div className={styles.title_center} />
<div className={styles.title_right}> <div className={styles.title_right}>
<div className={styles.itle_right_legend_intime} /> <div className={styles.itle_right_legend_intime} />
...@@ -91,13 +76,13 @@ const Main: React.FC = () => { ...@@ -91,13 +76,13 @@ const Main: React.FC = () => {
<div className={styles.itle_right_legend_outtime} /> <div className={styles.itle_right_legend_outtime} />
<div className={styles.title_right_text}>超期一天以上完成</div> <div className={styles.title_right_text}>超期一天以上完成</div>
</div> </div>
</div> </div> */}
<div className={styles.content}> <div className={styles.content}>
<Crust1 className={styles.crust}> <Crust1 className={styles.crust}>
<div className={styles.content_usable}> <div className={styles.content_usable}>
{setting.productionProgressKanbanSetting && ( {setting.lineName && (
<ProgressTable <ProgressTable
setting={setting.productionProgressKanbanSetting} lineName={setting.lineName}
data={data} data={data}
conditionKey={conditionKey} conditionKey={conditionKey}
rowMovingTime={setting.rowMovingTime} rowMovingTime={setting.rowMovingTime}
......
...@@ -8,7 +8,8 @@ type ProductionProgressKanbanDataDto = KANBAN.ProductionProgress.ProductionProgr ...@@ -8,7 +8,8 @@ type ProductionProgressKanbanDataDto = KANBAN.ProductionProgress.ProductionProgr
type ProductionProgressKanbanDataCriteria = type ProductionProgressKanbanDataCriteria =
KANBAN.ProductionProgress.ProductionProgressKanbanDataCriteria; KANBAN.ProductionProgress.ProductionProgressKanbanDataCriteria;
type ProductionProgressKanbanSetting = KANBAN.ProductionProgress.ProductionProgressKanbanSetting; type ProductionProgressKanbanSetting = KANBAN.ProductionProgress.ProductionProgressKanbanSetting;
type ProductionComprehensKanbanDataDto =
KANBAN.ProductionComprehens.ProductionComprehensKanbanDataDto;
const productionProgressKanbanSettingGraphqlString = const productionProgressKanbanSettingGraphqlString =
'query{productionProgressKanbanSetting{id,subTitle1,subTitle2,werks,fevor,overdueNone,overdueWarn,overdueSeverity,sgNoSourceType{id,code},progress{steps{code,ordinal,name}}}}'; 'query{productionProgressKanbanSetting{id,subTitle1,subTitle2,werks,fevor,overdueNone,overdueWarn,overdueSeverity,sgNoSourceType{id,code},progress{steps{code,ordinal,name}}}}';
...@@ -17,7 +18,7 @@ export async function queryProductionProgressKanbanData( ...@@ -17,7 +18,7 @@ export async function queryProductionProgressKanbanData(
options?: { [key: string]: any }, options?: { [key: string]: any },
) { ) {
return request<Api.ServiceResult<ProductionProgressKanbanDataDto[]>>( return request<Api.ServiceResult<ProductionProgressKanbanDataDto[]>>(
'/api/productionProgressKanban/data', '/kanban/task/taskPlanStat',
{ {
method: 'POST', method: 'POST',
headers: { headers: {
...@@ -55,3 +56,15 @@ export async function queryProductionProgressKanbanDetail(body: { ...@@ -55,3 +56,15 @@ export async function queryProductionProgressKanbanDetail(body: {
data: body, data: body,
}); });
} }
export async function queryProductionComprehensKanbanData() {
return request<Api.ServiceResult<ProductionComprehensKanbanDataDto[]>>(
'/md/workunit/selectGroupLineName',
{
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
},
);
}
\ No newline at end of file
...@@ -26,8 +26,7 @@ export type Setting = { ...@@ -26,8 +26,7 @@ export type Setting = {
rowMovingTime: number; rowMovingTime: number;
dataRange: number; dataRange: number;
planSource: number; planSource: number;
productionComprehensKanbanSettingId?: string; lineName?: string;
productionComprehensKanbanSetting?: KanbanSetting;
}; };
export type SettingFormProps = { export type SettingFormProps = {
...@@ -102,24 +101,6 @@ const SettingForm: React.FC<SettingFormProps> = (props) => { ...@@ -102,24 +101,6 @@ const SettingForm: React.FC<SettingFormProps> = (props) => {
return data.map((a) => ({ label: a, value: a })); return data.map((a) => ({ label: a, value: a }));
}} }}
/> />
{/*
<ProFormRadio.Group
label="工序产量"
name="dataRange"
options={[
{ label: '按日', value: 1 },
{ label: '按月', value: 2 },
]}
/>
<ProForm.Group>
<ProFormRadio.Group
name="planSource"
options={[
{ label: '手动导入', value: 1 },
{ label: '排产计划量', value: 2 },
]}
/>
</ProForm.Group> */}
</DrawerForm> </DrawerForm>
); );
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment