Commit 127e9578 authored by 沈翠玲's avatar 沈翠玲

希迈对接接口

parent 196744fe
...@@ -105,9 +105,9 @@ const formatOptions = (data: any) => { ...@@ -105,9 +105,9 @@ const formatOptions = (data: any) => {
data: [], data: [],
}; };
option.series.push({ ...temp, name: '当月异常', data: [data.currentMonthNumber] }); option.series.push({ ...temp, name: '当月异常', data: [data.totalCt] });
option.series.push({ ...temp, name: '未关闭', data: [data.createIssueNumber] }); option.series.push({ ...temp, name: '未关闭', data: [data.unCloseCt] });
option.series.push({ ...temp, name: '超期', data: [data.beyondNumber] }); option.series.push({ ...temp, name: '超期', data: [data.expireUnClose] });
return option; return option;
}; };
...@@ -141,48 +141,48 @@ const Main: React.FC<{ data: any; setting: ErrorDetailSetting }> = ({ data, sett ...@@ -141,48 +141,48 @@ const Main: React.FC<{ data: any; setting: ErrorDetailSetting }> = ({ data, sett
if (chartRef.current !== null) { if (chartRef.current !== null) {
const chart = getInstanceByDom(chartRef.current); const chart = getInstanceByDom(chartRef.current);
chart?.off('click'); chart?.off('click');
chart?.on('click', (params) => { // chart?.on('click', (params) => {
if (params.seriesName == '当月异常') { // if (params.seriesName == '当月异常') {
setCriteria({ // setCriteria({
workshopName: setting.workshopName, // workshopName: setting.workshopName,
status: '2,3,5', // status: '2,3,5',
createdDateFrom: moment() // createdDateFrom: moment()
.date(1) // .date(1)
.hour(0) // .hour(0)
.minute(0) // .minute(0)
.second(0) // .second(0)
.millisecond(0) // .millisecond(0)
.format('YYYY-MM-DD HH:mm'), // .format('YYYY-MM-DD HH:mm'),
createdDateTo: moment(params.to).format('YYYY-MM-DD HH:mm'), // createdDateTo: moment(params.to).format('YYYY-MM-DD HH:mm'),
current: 1, // current: 1,
pageSize: 10, // pageSize: 10,
}); // });
} else if (params.seriesName == '未关闭') { // } else if (params.seriesName == '未关闭') {
setCriteria({ // setCriteria({
workshopName: setting.workshopName, // workshopName: setting.workshopName,
createdDateFrom: null, // createdDateFrom: null,
createdDateTo: null, // createdDateTo: null,
//createdDateFrom: moment().date(1).hour(0).minute(0).second(0).millisecond(0).format('YYYY-MM-DD HH:mm'), // //createdDateFrom: moment().date(1).hour(0).minute(0).second(0).millisecond(0).format('YYYY-MM-DD HH:mm'),
//createdDateTo: moment(params.to).format('YYYY-MM-DD HH:mm'), // //createdDateTo: moment(params.to).format('YYYY-MM-DD HH:mm'),
status: '2,3', // status: '2,3',
current: 1, // current: 1,
pageSize: 10, // pageSize: 10,
}); // });
} else if (params.seriesName == '超期') { // } else if (params.seriesName == '超期') {
setCriteria({ // setCriteria({
workshopName: setting.workshopName, // workshopName: setting.workshopName,
createdDateFrom: null, // createdDateFrom: null,
createdDateTo: null, // createdDateTo: null,
//createdDateFrom: moment().date(1).hour(0).minute(0).second(0).millisecond(0).format('YYYY-MM-DD HH:mm'), // //createdDateFrom: moment().date(1).hour(0).minute(0).second(0).millisecond(0).format('YYYY-MM-DD HH:mm'),
//createdDateTo: moment(params.to).format('YYYY-MM-DD HH:mm'), // //createdDateTo: moment(params.to).format('YYYY-MM-DD HH:mm'),
status: '2,3', // status: '2,3',
gtErrorDays: setting.abnormalOverdueSetting.diffDayEquipment, // gtErrorDays: setting.abnormalOverdueSetting.diffDayEquipment,
current: 1, // current: 1,
pageSize: 10, // pageSize: 10,
}); // });
} // }
setIsModalOpen(true); // setIsModalOpen(true);
}); // });
} }
}, [setting]); }, [setting]);
......
...@@ -32,32 +32,22 @@ const Abnormal: React.FC<{ ...@@ -32,32 +32,22 @@ const Abnormal: React.FC<{
<div className={styles.itemContainer}> <div className={styles.itemContainer}>
<ProductAbnormal data={abnormalProdData} setting={setting} /> <ProductAbnormal data={abnormalProdData} setting={setting} />
</div> </div>
<div className={styles.itemContainer}>
<QualityAbnormal data={abnormalQualityData} setting={setting} />
</div>
<div className={styles.itemContainer}> <div className={styles.itemContainer}>
<DeviceAbnormal data={abnormalDeviceData} setting={setting} /> <DeviceAbnormal data={abnormalDeviceData} setting={setting} />
</div> </div>
<div className={styles.bottomContainer}> <div className={styles.bottomContainer}>
<div className={styles.bottomItem}> <div className={styles.bottomItem}>
<p>设备正常数:</p> <p>设备正常数:</p>
<h2 onClick={() => openModal(1)}>{abnormalDeviceData.deviceNorNumber}</h2> <h2 onClick={() => openModal(1)}>{abnormalDeviceData.equipCt}</h2>
</div> </div>
<div className={styles.bottomItemRight} style={{ marginLeft: '10px' }}> <div className={styles.bottomItemRight} style={{ marginLeft: '10px' }}>
<p>设备异常数:</p> <p>设备异常数:</p>
<h2 onClick={() => openModal(2)}>{abnormalDeviceData.deviceEcpNumber}</h2> <h2 onClick={() => openModal(2)}>{abnormalDeviceData.equipErrorCt}</h2>
</div> </div>
</div> </div>
<div className={styles.itemContainer}>
<Modal <QualityAbnormal data={abnormalQualityData} setting={setting} />
title={'设备台账'} </div>
visible={isModalOpen}
footer={null}
width={'70%'}
onCancel={closeModal}
>
<DeviceCountTable values={criteria} />
</Modal>
</> </>
); );
}; };
......
...@@ -112,9 +112,9 @@ const formatOptions = (data: any) => { ...@@ -112,9 +112,9 @@ const formatOptions = (data: any) => {
data: [], data: [],
}; };
option.series.push({ ...temp, name: '当月异常', data: [data.currentMonthNumber] }); option.series.push({ ...temp, name: '当月异常', data: [data.totalCt] });
option.series.push({ ...temp, name: '未关闭', data: [data.createIssueNumber] }); option.series.push({ ...temp, name: '未关闭', data: [data.unCloseCt] });
option.series.push({ ...temp, name: '超期', data: [data.beyondNumber] }); option.series.push({ ...temp, name: '超期', data: [data.expireUnClose] });
return option; return option;
}; };
...@@ -148,48 +148,48 @@ const Main: React.FC<{ data: any; setting: ErrorDetailSetting }> = ({ data, sett ...@@ -148,48 +148,48 @@ const Main: React.FC<{ data: any; setting: ErrorDetailSetting }> = ({ data, sett
if (chartRef.current !== null) { if (chartRef.current !== null) {
const chart = getInstanceByDom(chartRef.current); const chart = getInstanceByDom(chartRef.current);
chart?.off('click'); chart?.off('click');
chart?.on('click', (params) => { // chart?.on('click', (params) => {
if (params.seriesName == '当月异常') { // if (params.seriesName == '当月异常') {
setCriteria({ // setCriteria({
workshopName: setting.workshopName, // workshopName: setting.workshopName,
status: '1,2,3,4', // status: '1,2,3,4',
createdDateFrom: moment() // createdDateFrom: moment()
.date(1) // .date(1)
.hour(0) // .hour(0)
.minute(0) // .minute(0)
.second(0) // .second(0)
.millisecond(0) // .millisecond(0)
.format('YYYY-MM-DD HH:mm'), // .format('YYYY-MM-DD HH:mm'),
createdDateTo: moment().format('YYYY-MM-DD HH:mm'), // createdDateTo: moment().format('YYYY-MM-DD HH:mm'),
current: 1, // current: 1,
pageSize: 10, // pageSize: 10,
}); // });
} else if (params.seriesName == '未关闭') { // } else if (params.seriesName == '未关闭') {
setCriteria({ // setCriteria({
workshopName: setting.workshopName, // workshopName: setting.workshopName,
createdDateFrom: null, // createdDateFrom: null,
createdDateTo: null, // createdDateTo: null,
//createdDateFrom: moment().date(1).hour(0).minute(0).second(0).millisecond(0).format('YYYY-MM-DD HH:mm'), // //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'), // //createdDateTo: moment().format('YYYY-MM-DD HH:mm'),
status: '1,2,3', // status: '1,2,3',
current: 1, // current: 1,
pageSize: 10, // pageSize: 10,
}); // });
} else if (params.seriesName == '超期') { // } else if (params.seriesName == '超期') {
setCriteria({ // setCriteria({
workshopName: setting.workshopName, // workshopName: setting.workshopName,
createdDateFrom: null, // createdDateFrom: null,
createdDateTo: null, // createdDateTo: null,
//createdDateFrom: moment().date(1).hour(0).minute(0).second(0).millisecond(0).format('YYYY-MM-DD HH:mm'), // //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'), // //createdDateTo: moment().format('YYYY-MM-DD HH:mm'),
status: '1,2,3', // status: '1,2,3',
gtErrorDays: setting.abnormalOverdueSetting.diffDayProduction, // gtErrorDays: setting.abnormalOverdueSetting.diffDayProduction,
current: 1, // current: 1,
pageSize: 10, // pageSize: 10,
}); // });
} // }
setIsModalOpen(true); // setIsModalOpen(true);
}); // });
} }
}, [setting]); }, [setting]);
......
...@@ -11,6 +11,7 @@ type ErrorDetailSetting = KANBAN.ProductionComprehens.ErrorDetailSetting; ...@@ -11,6 +11,7 @@ type ErrorDetailSetting = KANBAN.ProductionComprehens.ErrorDetailSetting;
const formatOptions = (data: any) => { const formatOptions = (data: any) => {
const option = { const option = {
tooltip: {},
color: [ color: [
{ {
type: 'linear', type: 'linear',
...@@ -71,16 +72,29 @@ const formatOptions = (data: any) => { ...@@ -71,16 +72,29 @@ const formatOptions = (data: any) => {
show: false, show: false,
}, },
grid: { grid: {
bottom: 10, bottom: 20,
top: 20, top: 20,
}, },
xAxis: { xAxis: {
type: 'value', type: 'category',
show: false, show: true,
axisLabel: {
color: '#fff',
fontSize: 16,
},
axisTick: {
show: false,
},
axisLine: {
show: false,
}
}, },
yAxis: { yAxis: {
type: 'category', type: 'value',
data: ['质量'], data: ['质量'],
splitLine: {
show: false
},
axisLabel: { axisLabel: {
color: '#fff', color: '#fff',
fontSize: 16, fontSize: 16,
...@@ -96,9 +110,10 @@ const formatOptions = (data: any) => { ...@@ -96,9 +110,10 @@ const formatOptions = (data: any) => {
}; };
const temp = { const temp = {
type: 'bar', type: 'line',
name: '', name: '',
barGap: 0, barGap: 0,
smooth: true,
label: { label: {
show: true, show: true,
position: 'right', position: 'right',
...@@ -106,10 +121,19 @@ const formatOptions = (data: any) => { ...@@ -106,10 +121,19 @@ const formatOptions = (data: any) => {
}, },
data: [], data: [],
}; };
const now = moment();
option.series.push({ ...temp, name: '当月异常', data: [data.currentMonthNumber] });
option.series.push({ ...temp, name: '未关闭', data: [data.createIssueNumber] }); // 存储最近七天日期的数组
option.series.push({ ...temp, name: '超期', data: [data.beyondNumber] }); const lastSevenDays = [];
for (let i = 0; i < 7; i++) {
lastSevenDays.push(moment(now).subtract(i, 'days').format('DD/MM'));
}
console.log('lastSevenDays', lastSevenDays)
option['xAxis']['data'] = lastSevenDays.reverse()
// option.series.push({ ...temp, name: '当月异常', data: [data.totalCt] });
// option.series.push({ ...temp, name: '未关闭', data: [data.unCloseCt] });
option.series.push({ ...temp, name: '设备故障总数', data: data.reverse()} );
return option; return option;
}; };
...@@ -143,51 +167,51 @@ const Main: React.FC<{ data: any; setting: ErrorDetailSetting }> = ({ data, sett ...@@ -143,51 +167,51 @@ const Main: React.FC<{ data: any; setting: ErrorDetailSetting }> = ({ data, sett
if (chartRef.current !== null) { if (chartRef.current !== null) {
const chart = getInstanceByDom(chartRef.current); const chart = getInstanceByDom(chartRef.current);
chart?.off('click'); chart?.off('click');
chart?.on('click', (params) => { // chart?.on('click', (params) => {
if (params.seriesName == '当月异常') { // if (params.seriesName == '当月异常') {
setCriteria({ // setCriteria({
werks: setting.werks, // werks: setting.werks,
fevor: setting.fevors, // fevor: setting.fevors,
status: '1,2,3', // status: '1,2,3',
createdDateFrom: moment() // createdDateFrom: moment()
.date(1) // .date(1)
.hour(0) // .hour(0)
.minute(0) // .minute(0)
.second(0) // .second(0)
.millisecond(0) // .millisecond(0)
.format('YYYY-MM-DD HH:mm'), // .format('YYYY-MM-DD HH:mm'),
createdDateTo: moment(params.to).format('YYYY-MM-DD HH:mm'), // createdDateTo: moment(params.to).format('YYYY-MM-DD HH:mm'),
current: 1, // current: 1,
pageSize: 10, // pageSize: 10,
}); // });
} else if (params.seriesName == '未关闭') { // } else if (params.seriesName == '未关闭') {
setCriteria({ // setCriteria({
werks: setting.werks, // werks: setting.werks,
fevor: setting.fevors, // fevor: setting.fevors,
createdDateFrom: null, // createdDateFrom: null,
createdDateTo: null, // createdDateTo: null,
//createdDateFrom: moment().date(1).hour(0).minute(0).second(0).millisecond(0).format('YYYY-MM-DD HH:mm'), // //createdDateFrom: moment().date(1).hour(0).minute(0).second(0).millisecond(0).format('YYYY-MM-DD HH:mm'),
//createdDateTo: moment(params.to).format('YYYY-MM-DD HH:mm'), // //createdDateTo: moment(params.to).format('YYYY-MM-DD HH:mm'),
status: '1,2', // status: '1,2',
current: 1, // current: 1,
pageSize: 10, // pageSize: 10,
}); // });
} else if (params.seriesName == '超期') { // } else if (params.seriesName == '超期') {
setCriteria({ // setCriteria({
werks: setting.werks, // werks: setting.werks,
fevor: setting.fevors, // fevor: setting.fevors,
createdDateFrom: null, // createdDateFrom: null,
createdDateTo: null, // createdDateTo: null,
//createdDateFrom: moment().date(1).hour(0).minute(0).second(0).millisecond(0).format('YYYY-MM-DD HH:mm'), // //createdDateFrom: moment().date(1).hour(0).minute(0).second(0).millisecond(0).format('YYYY-MM-DD HH:mm'),
//createdDateTo: moment(params.to).format('YYYY-MM-DD HH:mm'), // //createdDateTo: moment(params.to).format('YYYY-MM-DD HH:mm'),
status: '1,2', // status: '1,2',
gtErrorDays: setting.abnormalOverdueSetting.diffDayQuality, // gtErrorDays: setting.abnormalOverdueSetting.diffDayQuality,
current: 1, // current: 1,
pageSize: 10, // pageSize: 10,
}); // });
} // }
setIsModalOpen(true); // setIsModalOpen(true);
}); // });
} }
}, [setting]); }, [setting]);
......
...@@ -121,12 +121,8 @@ const Main: React.FC<{ data: MonthlyPlanProps; kanbanId: string | undefined }> = ...@@ -121,12 +121,8 @@ const Main: React.FC<{ data: MonthlyPlanProps; kanbanId: string | undefined }> =
<h2 onClick={(e) => clickNum(e, 2)}>{data.endOnTimeRatio}%</h2> <h2 onClick={(e) => clickNum(e, 2)}>{data.endOnTimeRatio}%</h2>
</div> </div>
<div className={styles.centerTopItem} onClick={() => clickBg(3)}> <div className={styles.centerTopItem} onClick={() => clickBg(3)}>
<p>入库准时</p> <p>产品合格</p>
<h2 onClick={(e) => clickNum(e, 3)}>{data.stockInOnTimeRatio}%</h2> <h2 onClick={(e) => clickNum(e, 3)}>{data.qualifiedRatio}%</h2>
</div>
<div className={styles.centerTopItem} onClick={() => clickBg(4)}>
<p>周期准时</p>
<h2 onClick={(e) => clickNum(e, 4)}>{data.periodicAccordRatio}%</h2>
</div> </div>
<div className={styles.centerTopItem} style={{ marginRight: '0px' }}> <div className={styles.centerTopItem} style={{ marginRight: '0px' }}>
<p>历史月待完工</p> <p>历史月待完工</p>
......
...@@ -118,8 +118,8 @@ const formatOptions = (data: any) => { ...@@ -118,8 +118,8 @@ const formatOptions = (data: any) => {
}; };
option.series.push({ ...temp, name: '月计划', data: [data.monthPlanQuantity] }); option.series.push({ ...temp, name: '月计划', data: [data.monthPlanQuantity] });
option.series.push({ ...temp, name: '累计日计划', data: [data.accuDailyPlanQuantity] });
option.series.push({ ...temp, name: '实际完工', data: [data.actualFinishQuantity] }); option.series.push({ ...temp, name: '实际完工', data: [data.actualFinishQuantity] });
option.series.push({ ...temp, name: '超期完工', data: [data.expireFinishQuantity] });
return option; return option;
}; };
......
import PassTower from './passTower'; import React, { useEffect, useRef, useState } from 'react';
import PassSlice from './passSlice'; import * as echarts from 'echarts/lib/echarts';
import styles from '../../index.less'; import type { ECharts } from 'echarts';
import { Modal } from 'antd'; import { getInstanceByDom } from 'echarts';
import { useState } from 'react';
import PassingRateChart from './passingRateChart';
import { queryCountWeldingPassRateTrendChart } from '../../services/api';
const PassingRate: React.FC<{ data: any; kanbanId: string | undefined }> = ({ data, kanbanId }) => { type ProcessOutProps = {
data: KANBAN.ProductionComprehens.ProcessYieldData[];
setting: any;
};
const formatOptions = (data: any) => {
const option = {
color: [
{
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 1,
color: '#011126', // 100% 处的颜色
},
{
offset: 0,
color: '#00ced3', // 0% 处的颜色
},
],
global: false, // 缺省为 false
},
{
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 1,
color: '#011126',
},
{
offset: 0,
color: '#3ba7cc',
},
],
global: false, // 缺省为 false
},
{
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 1,
color: '#011126',
},
{
offset: 0,
color: '#7bb249',
},
],
global: false, // 缺省为 false
},
],
xAxis: {
// type: 'category',
data: [],
nameTextStyle: {
color: '#fff',
fontSize: 14,
},
axisLabel: {
interval: 0,
color: '#fff',
fontSize: 14,
},
axisTick: {
show: false,
},
axisLine: {
show: false,
},
},
dataZoom: [
{
type: 'slider',
show: false,
startValue: 0,
endValue: 3,
},
],
grid: {
left: 5,
// right: 60,
bottom: 30,
},
legend: {
show: false
},
yAxis: {
show: false,
type: 'value',
},
series: [],
};
if (data && data.length) {
const xAxisData = data.map((item: any) => item.cause);
const series = [{
type: 'bar',
barGap: 0,
label: {
show: true,
position: 'top',
color: '#fff',
},
data: data.map((item: any) => item.ct),
}];
option.xAxis.data = xAxisData;
option.series = series;
}
console.log('option', option)
return option;
};
const Main: React.FC<ProcessOutProps> = ({ data, setting }) => {
const chartRef = useRef<HTMLDivElement>(null);
const [isModalOpen, setIsModalOpen] = useState(false); const [isModalOpen, setIsModalOpen] = useState(false);
const closeModal = () => setIsModalOpen(false); const closeModal = () => setIsModalOpen(false);
const [chartData, setChartData] = useState<KANBAN.ProductionComprehens.PassRateTrendChart[]>([]); const [processParams, setProcessParams] = useState({
const openModal = async () => { dataRange: 1,
if (!kanbanId) { processName: '',
return; current: 1,
pageSize: 10,
kanbanSettingId: '',
});
useEffect(() => {
// Initialize chart
let chart: ECharts | undefined;
if (chartRef.current !== null) {
chart = echarts.init(chartRef.current);
} }
const { data: cData } = await queryCountWeldingPassRateTrendChart({
kanbanSettingId: kanbanId, // Add chart resize listener
}); // ResizeObserver is leading to a bit janky UX
setChartData(cData); function resizeChart() {
setIsModalOpen(true); chart?.resize();
}; }
window.addEventListener('resize', resizeChart);
// Return cleanup function
return () => {
chart?.off('click');
chart?.dispose();
window.removeEventListener('resize', resizeChart);
};
}, []);
useEffect(() => {
let timer: NodeJS.Timer | null = null;
// Update chart
if (chartRef.current !== null) {
if (timer !== null) clearInterval(timer);
const chart = getInstanceByDom(chartRef.current);
const option = formatOptions(data);
chart?.setOption(option);
chart?.off('click');
chart?.on('click', (p) => {
if (p.seriesName === '完成量') {
console.log(setting.productionComprehensKanbanSettingId, '----');
setProcessParams({
dataRange: setting.dataRange,
processName: p.name,
current: 1,
pageSize: 10,
kanbanSettingId: setting.productionComprehensKanbanSettingId,
});
setIsModalOpen(true);
}
});
// 如果数据工序大于5那么需要自动轮训播放
if (option.xAxis.data.length > 4 && setting.rowMovingTime > 0) {
timer = setInterval(() => {
option.dataZoom[0].startValue++;
if (option.dataZoom[0].endValue++ >= option.xAxis.data.length - 1) {
option.dataZoom[0].startValue = 0;
option.dataZoom[0].endValue = 3;
}
chart?.setOption(option);
}, setting.rowMovingTime * 1000);
}
}
return () => {
if (timer !== null) clearInterval(timer);
};
}, [data, setting]);
return ( return (
<> <>
<Modal <div ref={chartRef} style={{ height: '260px' }} />
title={'焊接一次通过率'}
visible={isModalOpen}
footer={null}
width={'70%'}
onCancel={closeModal}
>
<PassingRateChart data={chartData} />
</Modal>
<div
className={styles.rightTopBottomItem}
onClick={openModal}
style={{ background: '#040f24' }}
>
<p>整台</p>
<div style={{ height: '150px' }}>
<PassTower data={data.wholeSetPassRate} />
</div>
</div>
<div className={styles.rightTopBottomItem} style={{ marginRight: '0px' }}>
<p>按片</p>
<div style={{ height: '150px' }}>
<PassSlice data={data.piecePassRate} />
</div>
</div>
</> </>
); );
}; };
export default PassingRate; export default Main;
\ No newline at end of file
...@@ -106,10 +106,9 @@ const formatOptions = (data: any) => { ...@@ -106,10 +106,9 @@ const formatOptions = (data: any) => {
}; };
if (data && data.length) { if (data && data.length) {
const lenged = [ const lenged = [
{ label: '基准率', field: 'standRatio' }, { label: '合格率', field: 'qualifiedRate' }
{ label: '未通过率', field: 'defectRatio' },
]; ];
const xAxisData = data.map((item: any) => item.stepName); const xAxisData = data.map((item: any) => item.processName);
const series = lenged.map((item) => { const series = lenged.map((item) => {
return { return {
type: 'bar', type: 'bar',
...@@ -215,7 +214,7 @@ const Main: React.FC<ProcessFailProps> = ({ data, setting }) => { ...@@ -215,7 +214,7 @@ const Main: React.FC<ProcessFailProps> = ({ data, setting }) => {
return ( return (
<> <>
<Modal <Modal
title={proName + '工序当月一次未通过率'} title={proName + '当月工序合格率'}
visible={isModalOpen} visible={isModalOpen}
footer={null} footer={null}
width={'70%'} width={'70%'}
......
...@@ -121,9 +121,9 @@ const formatOptions = (data: any) => { ...@@ -121,9 +121,9 @@ const formatOptions = (data: any) => {
const lenged = [ const lenged = [
{ label: '计划量', field: 'planQuantity' }, { label: '计划量', field: 'planQuantity' },
{ label: '完成量', field: 'finishQuantity' }, { label: '完成量', field: 'finishQuantity' },
{ label: '手持量', field: 'handQuantity' }, { label: '合格量', field: 'qualifiedQuantity' },
]; ];
const xAxisData = data.map((item: any) => item.stepName); const xAxisData = data.map((item: any) => item.processName);
const series = lenged.map((item) => { const series = lenged.map((item) => {
return { return {
type: 'bar', type: 'bar',
......
...@@ -82,7 +82,7 @@ const SettingForm: React.FC<SettingFormProps> = (props) => { ...@@ -82,7 +82,7 @@ const SettingForm: React.FC<SettingFormProps> = (props) => {
min={1} min={1}
fieldProps={{ precision: 0 }} fieldProps={{ precision: 0 }}
/> />
<ProFormSelect {/* <ProFormSelect
name="productionComprehensKanbanSettingId" name="productionComprehensKanbanSettingId"
label="看板设置" label="看板设置"
required required
...@@ -109,7 +109,7 @@ const SettingForm: React.FC<SettingFormProps> = (props) => { ...@@ -109,7 +109,7 @@ const SettingForm: React.FC<SettingFormProps> = (props) => {
{ label: '排产计划量', value: 2 }, { label: '排产计划量', value: 2 },
]} ]}
/> />
</ProForm.Group> </ProForm.Group> */}
</DrawerForm> </DrawerForm>
); );
}; };
......
...@@ -214,8 +214,8 @@ ...@@ -214,8 +214,8 @@
} }
} }
.rightTopBottomContainer { .rightTopBottomContainer {
display: flex; width: 100%;
justify-content: space-between; background: #040f24;
margin-top: 5px; margin-top: 5px;
} }
.rightTopBottomItem { .rightTopBottomItem {
......
...@@ -45,7 +45,7 @@ export async function queryProductionComprehensKanbanData() { ...@@ -45,7 +45,7 @@ export async function queryProductionComprehensKanbanData() {
} }
export async function queryProductionComprehensProcessOutputData(body: ProcessOutputParams) { export async function queryProductionComprehensProcessOutputData(body: ProcessOutputParams) {
return request<Api.ServiceResult<ProcessYieldData[]>>('/api/processYieldData1/kanbanData', { return request<Api.ServiceResult<ProcessYieldData[]>>('/api/kanban/task/currentMonthStat', {
method: 'POST', method: 'POST',
headers: { headers: {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
...@@ -53,57 +53,11 @@ export async function queryProductionComprehensProcessOutputData(body: ProcessOu ...@@ -53,57 +53,11 @@ export async function queryProductionComprehensProcessOutputData(body: ProcessOu
data: body, data: body,
}); });
} }
export async function queryProcessDefectRatioData(body: { kanbanSettingId: string }) {
return request<Api.ServiceResult<ProcessDefectRatioData[]>>(
'/api/processDefectRatioData/kanbanData',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
},
);
}
export async function queryWorkOrderMonthlyIndexData1(body: { kanbanSettingId: string }) {
return request<Api.ServiceResult<WorkOrderMonthlyIndexData>>(
'/api/workOrderMonthlyIndexData1/kanbanData',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
},
);
}
// 设备异常
export async function queryComprehensiveDeviceEcpData(body: { settingId: string }) {
return request<Api.ServiceResult<ComprehensiveDeviceEcpDataCount>>(
'/api/comprehensiveDeviceEcpData/count',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
params: body,
},
);
}
// 生产异常
export async function queryComprehensiveProdEcpData(body: { settingId: string }) {
return request<Api.ServiceResult<ComprehensiveDataCount>>('/api/comprehensiveProdEcpData/count', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
params: body,
});
}
// 质量异常 // 质量异常
export async function queryComprehensiveQualityEcpData(body: { settingId: string }) { export async function currentMonthStat(body: { settingId: string }) {
return request<Api.ServiceResult<ComprehensiveDataCount>>( return request<Api.ServiceResult<ComprehensiveDataCount>>(
'/api/comprehensiveQualityEcpData/count', '/api/kanban/abnormal/currentMonthStat',
{ {
method: 'POST', method: 'POST',
headers: { headers: {
...@@ -113,16 +67,6 @@ export async function queryComprehensiveQualityEcpData(body: { settingId: string ...@@ -113,16 +67,6 @@ export async function queryComprehensiveQualityEcpData(body: { settingId: string
}, },
); );
} }
// 焊接通过率
export async function queryCountWeldingPassRate(body: { settingId: string }) {
return request<Api.ServiceResult<CountWeldingPassRate>>('/api/batchInfo/countWeldingPassRate', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
params: body,
});
}
// 焊接通过率趋势图 // 焊接通过率趋势图
export async function queryCountWeldingPassRateTrendChart(data: { kanbanSettingId: string }) { export async function queryCountWeldingPassRateTrendChart(data: { kanbanSettingId: string }) {
return request<Api.ServiceResult<PassRateTrendChart[]>>( return request<Api.ServiceResult<PassRateTrendChart[]>>(
......
...@@ -23,14 +23,14 @@ declare namespace KANBAN.ProductionComprehens { ...@@ -23,14 +23,14 @@ declare namespace KANBAN.ProductionComprehens {
}; };
type ProcessYieldData = { type ProcessYieldData = {
stepName: string; processName: string;
finishQuantity: number; finishQuantity: number;
planQuantity: number; planQuantity: number;
handQuantity: number; qualifiedQuantity: number;
}; };
type ProcessDefectRatioData = { type ProcessDefectRatioData = {
stepName: string; processName: string;
standRatio: number; standRatio: number;
defectRatio: number; defectRatio: number;
}; };
...@@ -38,27 +38,26 @@ declare namespace KANBAN.ProductionComprehens { ...@@ -38,27 +38,26 @@ declare namespace KANBAN.ProductionComprehens {
type WorkOrderMonthlyIndexData = { type WorkOrderMonthlyIndexData = {
startOnTimeRatio: number; startOnTimeRatio: number;
endOnTimeRatio: number; endOnTimeRatio: number;
stockInOnTimeRatio: number; qualifiedRatio: number;
periodicAccordRatio: number;
hisPendingQuantity: number; hisPendingQuantity: number;
monthPlanQuantity: number; monthPlanQuantity: number;
accuDailyPlanQuantity: number; expireFinishQuantity: number;
actualFinishQuantity: number; actualFinishQuantity: number;
monthPlanConcludeRatio: number; monthPlanConcludeRatio: number;
}; };
type ComprehensiveDeviceEcpDataCount = { type ComprehensiveDeviceEcpDataCount = {
createIssueNumber: number; unCloseCt: number;
beyondNumber: number; expireUnClose: number;
currentMonthNumber: number; totalCt: number;
deviceEcpNumber: number; equipErrorCt: number;
deviceNorNumber: number; equipCt: number;
}; };
type ComprehensiveDataCount = { type ComprehensiveDataCount = {
createIssueNumber: number; totalCt: number;
beyondNumber: number; expireUnClose: number;
currentMonthNumber: number; unCloseCt: number;
}; };
type CountWeldingPassRate = { type CountWeldingPassRate = {
......
...@@ -41,11 +41,11 @@ const Abnormal: React.FC<{ ...@@ -41,11 +41,11 @@ const Abnormal: React.FC<{
<div className={styles.bottomContainer}> <div className={styles.bottomContainer}>
<div className={styles.bottomItem}> <div className={styles.bottomItem}>
<p>设备正常数:</p> <p>设备正常数:</p>
<h2 onClick={() => openModal(1)}>{abnormalDeviceData.deviceNorNumber}</h2> <h2>{abnormalDeviceData.deviceNorNumber}</h2>
</div> </div>
<div className={styles.bottomItemRight} style={{ marginLeft: '10px' }}> <div className={styles.bottomItemRight} style={{ marginLeft: '10px' }}>
<p>设备异常数:</p> <p>设备异常数:</p>
<h2 onClick={() => openModal(2)}>{abnormalDeviceData.deviceEcpNumber}</h2> <h2>{abnormalDeviceData.deviceEcpNumber}</h2>
</div> </div>
</div> </div>
......
...@@ -121,9 +121,9 @@ const formatOptions = (data: any) => { ...@@ -121,9 +121,9 @@ const formatOptions = (data: any) => {
const lenged = [ const lenged = [
{ label: '计划量', field: 'planQuantity' }, { label: '计划量', field: 'planQuantity' },
{ label: '完成量', field: 'finishQuantity' }, { label: '完成量', field: 'finishQuantity' },
{ label: '手持量', field: 'handQuantity' }, { label: '合格量', field: 'qualifiedQuantity' },
]; ];
const xAxisData = data.map((item: any) => item.stepName); const xAxisData = data.map((item: any) => item.processName);
const series = lenged.map((item) => { const series = lenged.map((item) => {
return { return {
type: 'bar', type: 'bar',
......
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