<template>
|
<div style="height: 600px;">
|
<el-card style="flex: 1;margin-left: 10px;margin-top: 10px;" v-loading="loading">
|
<div style="display: flex; flex-direction: row; align-items: center; margin-bottom: 10px;">
|
<el-button id="searchButton" type="primary" @click="handlezhiban">
|
{{ $t('hellow.createtask') }}
|
</el-button>
|
<el-button type="primary" @click="selectproject">
|
{{ $t('hellow.reviewproject') }}
|
</el-button>
|
<el-button style="margin-left: 10px;" id="searchButton" type="success" @click="handleBinda">
|
{{ $t('hellow.starttask') }}
|
</el-button>
|
<el-button style="margin-left: 10px;" id="searchButton" type="warning" @click="handleBindc">{{
|
$t('hellow.stopproject')
|
}}
|
</el-button>
|
<el-button style="margin-left: 10px;" id="searchButton" type="danger" @click="handleBindb">{{
|
$t('hellow.stoptask')
|
}}
|
</el-button>
|
<el-switch style="margin-top: 7px;margin-left: 10px;" v-model="ganghua" class="mb-2" :inactive-text="$t('hellow.schedulingswitch')" @change="handleChange" />
|
</div>
|
<div style="margin-bottom: -5px;margin-left: 5px;">
|
<el-form>
|
<el-row>
|
<el-col :span="4">
|
<div id="dt" style="font-size: 15px;">
|
<el-form-item :label="$t('hellow.currenttask')" style="width: 14vw">
|
{{ temperingtotal }}
|
</el-form-item>
|
</div>
|
</el-col>
|
<el-col :span="5">
|
<div id="dta" style="font-size: 15px;">
|
<el-form-item :label="$t('hellow.claimednumber')" style="width: 14vw">
|
{{ glasstotal }}
|
</el-form-item>
|
</div>
|
</el-col>
|
<el-col :span="4">
|
<div id="dt" style="font-size: 15px;">
|
<el-form-item :label="$t('hellow.linenumber')" style="width: 14vw">
|
{{ fulltotals }}
|
</el-form-item>
|
</div>
|
</el-col>
|
</el-row>
|
</el-form>
|
</div>
|
<div style="width: 98%; height: calc(100% - 35px); overflow-y: auto;">
|
<el-table height="650" ref="table" :data="tableDataa"
|
:header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }">
|
<el-table-column prop="flowCardId" :label="$t('hellow.flowCardId')" align="center"/>
|
<el-table-column prop="hollowSequence" :label="$t('hellow.order')" align="center"/>
|
<el-table-column prop="thickness" :label="$t('hellow.thickness')" align="center"/>
|
<el-table-column prop="layer" :label="$t('hellow.layer')" align="center"/>
|
<el-table-column prop="filmsId" :label="$t('hellow.coatingtypes')" align="center"/>
|
<el-table-column prop="height" :label="$t('hellow.height')" align="center"/>
|
<el-table-column prop="width" :label="$t('hellow.width')" align="center"/>
|
<el-table-column prop="state" :label="$t('hellow.state')" align="center">
|
<template #default="scope">
|
{{ scope.row.state == -1 ? "等待出片" : "出片完成" }}
|
</template>
|
</el-table-column>
|
</el-table>
|
<div style="display: flex;margin-left: 40%;margin-top: 10px;">
|
<div style="margin-top: 5px;margin-right: 5px;">{{ $t('hellow.line') }}</div>
|
<el-pagination
|
background
|
size="large"
|
layout="prev, pager, next"
|
:total="30"
|
:current-page.sync="currentPage"
|
@current-change="handlePageChange1"
|
/>
|
</div>
|
</div>
|
</el-card>
|
</div>
|
<!-- 创建任务 -->
|
<el-dialog v-model="dialogFormVisiblea" top="5vh" width="85%">
|
<el-table
|
ref="table"
|
style="margin-top: 20px; height: 700px;"
|
:data="tableDatab"
|
:header-cell-style="{ background: '#F2F3F5', color: '#1D2129' }"
|
row-key="projectNumber"
|
>
|
<!-- <el-table-column type="expand"> -->
|
<el-table-column>
|
<template #default="props">
|
<el-table :data="props.row.records" style="width: 100%">
|
<el-table-column prop="layer" fixed align="center" :label="$t('hellow.layernumber')" min-width="80"/>
|
<el-table-column prop="thickness" align="center" :label="$t('hellow.thickness')" min-width="80"/>
|
<el-table-column prop="filmsId" align="center" :label="$t('hellow.coatingtypes')" min-width="80"/>
|
<el-table-column prop="sumCount" align="center" :label="$t('hellow.totalnumber')" min-width="80"/>
|
<el-table-column prop="realCount" align="center" :label="$t('hellow.realpieces')" min-width="80"/>
|
<el-table-column prop="pairCount" align="center" :label="$t('hellow.pairsnumber')" min-width="80"/>
|
<el-table-column prop="damageCount" align="center" :label="$t('hellow.damagenumber')" min-width="80"/>
|
</el-table>
|
</template>
|
</el-table-column>
|
<el-table-column prop="projectNumber" fixed align="center" :label="$t('hellow.cardnumber')" min-width="20"/>
|
<el-table-column fixed="right" :label="$t('hellow.operate')" align="center" width="270">
|
<template #default="scope">
|
<el-button size="mini" type="text" plain @click="handletake(scope.row)">{{ $t('hellow.claimquest') }}</el-button>
|
<el-button size="mini" type="text" plain @click="handleBindRack(scope.row)">{{
|
$t('hellow.missingfilms')
|
}}
|
</el-button>
|
<el-button size="mini" type="text" plain @click="handleout(scope.row)">{{
|
$t('hellow.forcedfilming')
|
}}
|
</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
</el-dialog>
|
<!-- 领取任务 -->
|
<el-dialog v-model="dialogFormVisiblec" top="21vh" width="40%" :title="$t('hellow.claimquest')">
|
<div style="margin-left: 20px;margin-top: 10px;margin-bottom: 10px;">
|
<el-form size="mini" label-width="100px">
|
<el-form label-width="210px" label-position="right">
|
<el-form-item :label="$t('hellow.pairQuantity')" :required="true" style="width: 25vw">
|
<el-input :placeholder="$t('hellow.cpairQuantity')" v-model="totalPairQuantity" autocomplete="off" />
|
</el-form-item>
|
<el-form-item :label="$t('hellow.route')" :required="true" style="width: 25vw;">
|
<el-select
|
:placeholder="$t('hellow.croute')"
|
style="width: 270px"
|
v-model="cell">
|
<el-option
|
v-for="item in options"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-form>
|
</el-form>
|
</div>
|
<template #footer>
|
<div id="dialog-footer">
|
<el-button type="primary" @click="finisha">
|
{{ $t('reportWork.sure') }}
|
</el-button>
|
<el-button @click="dialogFormVisiblec = false">{{ $t('reportWork.cancel') }}</el-button>
|
</div>
|
</template>
|
</el-dialog>
|
<!-- 强制出片 -->
|
<el-dialog v-model="dialogFormVisibled" top="21vh" width="40%" :title="$t('hellow.forcedfilming')">
|
<div style="margin-left: 20px;margin-top: 10px;margin-bottom: 10px;">
|
<el-form size="mini" label-width="100px">
|
<el-form label-width="210px" label-position="right">
|
<el-form-item :label="$t('hellow.pairQuantity')" :required="true" style="width: 25vw">
|
<el-input :placeholder="$t('hellow.cpairQuantity')" v-model="totalPairQuantitya" autocomplete="off" />
|
</el-form-item>
|
<el-form-item :label="$t('hellow.route')" :required="true" style="width: 25vw;">
|
<el-select
|
:placeholder="$t('hellow.croute')"
|
style="width: 270px"
|
v-model="cella">
|
<el-option
|
v-for="item in options"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
/>
|
</el-select>
|
</el-form-item>
|
</el-form>
|
</el-form>
|
</div>
|
<template #footer>
|
<div id="dialog-footer">
|
<el-button type="primary" @click="finishb">
|
{{ $t('reportWork.sure') }}
|
</el-button>
|
<el-button @click="dialogFormVisibled = false">{{ $t('reportWork.cancel') }}</el-button>
|
</div>
|
</template>
|
</el-dialog>
|
<!-- 缺片详情 -->
|
<el-dialog v-model="dialogFormVisibleb" top="7vh" width="70%" height="500">
|
<div style="margin-top: -20px;text-align: center;margin-left: 400px;">
|
<el-form-item :label="$t('hellow.cardnumbera')" style="width: 14vw">
|
{{ currentRow.projectNumber }}
|
</el-form-item>
|
</div>
|
<el-table ref="table" style="margin-top: 20px;height: 400px;"
|
:data="tableDatac" :header-cell-style="{background:'#F2F3F5 ',color:'#1D2129'}">
|
<el-table-column prop="thickness" align="center" :label="$t('hellow.thickness')" min-width="80"/>
|
<el-table-column prop="filmsId" align="center" :label="$t('hellow.coatingtypes')" min-width="80"/>
|
<el-table-column prop="height" align="center" :label="$t('hellow.height')" min-width="80"/>
|
<el-table-column prop="width" align="center" :label="$t('hellow.width')" min-width="80"/>
|
<!-- <el-table-column prop="totalCount" align="center" :label="$t('hellow.totalnumber')" min-width="80"/> -->
|
<el-table-column prop="lackCount" align="center" :label="$t('hellow.missingnumber')" min-width="80"/>
|
<!-- <el-table-column prop="damageCount" align="center" :label="$t('hellow.brokenpieces')" min-width="80"/> -->
|
<div style="float: right;margin-bottom: 5px;">
|
<el-pagination layout="prev, pager, next" :total="50"/>
|
</div>
|
</el-table>
|
<div style="display: flex;margin-left: 40%;margin-top: 10px;">
|
<el-pagination
|
background
|
size="large"
|
layout="prev, pager, next"
|
:total="30"
|
:current-page.sync="currentPage2"
|
@current-change="handlePageChange2"
|
/>
|
</div>
|
</el-dialog>
|
<!-- 开始任务 -->
|
<el-dialog v-model="blinda" top="30vh" width="25%" :title="$t('hellow.pstarttask')">
|
<template #footer>
|
<div id="dialog-footer">
|
<el-button type="primary" @click="handlea">
|
{{ $t('basicData.confirm') }}
|
</el-button>
|
<el-button @click="blinda = false">{{ $t('basicData.cancel') }}</el-button>
|
</div>
|
</template>
|
</el-dialog>
|
<!-- 停止任务 -->
|
<el-dialog v-model="blindb" top="30vh" width="25%" :title="$t('hellow.pstoptask')">
|
<template #footer>
|
<div id="dialog-footer">
|
<el-button type="primary" @click="handleb">
|
{{ $t('basicData.confirm') }}
|
</el-button>
|
<el-button @click="blindb = false">{{ $t('basicData.cancel') }}</el-button>
|
</div>
|
</template>
|
</el-dialog>
|
<!-- 暂停任务 -->
|
<el-dialog v-model="blindc" top="30vh" width="25%" :title="$t('hellow.pstopproject')">
|
<template #footer>
|
<div id="dialog-footer">
|
<el-button type="primary" @click="handlec">
|
{{ $t('basicData.confirm') }}
|
</el-button>
|
<el-button @click="blindc = false">{{ $t('basicData.cancel') }}</el-button>
|
</div>
|
</template>
|
</el-dialog>
|
<!-- 预览 -->
|
<el-dialog v-model="dialogFormVisiblee" top="24vh" width="25%" :title="$t('hellow.reviewproject')" >
|
<div style="margin-left: 50px;margin-bottom: 10px;">
|
<el-form-item :label="$t('basicData.projectnumber')" :required="true">
|
<el-select
|
v-model="selectedProjectNo"
|
filterable
|
clearable
|
:placeholder="$t('basicData.plselectproject')"
|
style="width: 260px"
|
@input="handleInputChange"
|
>
|
<el-option
|
v-for="item in titleSelectJson.processType"
|
:key="item.value"
|
:label="item.value"
|
:value="item.value"
|
/>
|
</el-select>
|
</el-form-item>
|
</div>
|
<template #footer>
|
<div id="dialog-footer">
|
<el-button type="primary" @click="handleup">
|
{{ $t('basicData.confirm') }}
|
</el-button>
|
<el-button @click="dialogFormVisiblee = false">{{ $t('basicData.cancel') }}</el-button>
|
</div>
|
</template>
|
</el-dialog>
|
</template>
|
<script setup>
|
import {ElMessage} from 'element-plus'
|
import {onBeforeUnmount, onMounted, onUnmounted, ref, reactive, watch, computed} from "vue";
|
import request from "@/utils/request"
|
import {host, WebSocketHost} from '@/utils/constants'
|
import {closeWebSocket, initializeWebSocket} from '@/utils/WebSocketService';
|
import {useI18n} from 'vue-i18n'
|
const {t} = useI18n()
|
const blinda = ref(false)
|
const blindb = ref(false)
|
const blindc = ref(false)
|
const tableDataa = ref([])
|
const tableDatab = ref([])
|
const tableDatac = ref([])
|
const allData = ref({})
|
const flowCard = ref('')
|
const cell = ref('')
|
const cella = ref('')
|
const selectedProjectNo = ref('');
|
const ganghua = ref(true)
|
const totalPairQuantity = ref('')
|
const totalPairQuantitya = ref('')
|
const dialogFormVisiblea = ref(false)
|
const dialogFormVisibleb = ref(false)
|
const dialogFormVisiblec = ref(false)
|
const dialogFormVisibled = ref(false)
|
const dialogFormVisiblee = ref(false)
|
const currentPage2 = ref(1)
|
const currentRow = reactive({});
|
const formattedProcessType = ref([]);
|
const titleSelectJson = ref({ processType: [] });
|
const options = [
|
{
|
value: 930,
|
label: t('hellow.line1'),
|
},
|
{
|
value: 931,
|
label: t('hellow.line2'),
|
},
|
{
|
value: 932,
|
label: t('hellow.line3'),
|
}
|
]
|
let socket = null;
|
const socketUrl = `ws://${WebSocketHost}:${host}/api/hollowGlass/api/talk/HollowGlass`;
|
const currentPage = ref(parseInt(window.localStorage.getItem('currentPage')) || 1);
|
watch(() => currentPage.value, (newVal) => {
|
window.localStorage.setItem('currentPage', newVal);
|
});
|
const currentPageKey = computed(() => `93${currentPage.value - 1}`);
|
const handlePageChange1 = (newPage) => {
|
currentPage.value = newPage;
|
console.log(currentPage.value);
|
};
|
const handlePageChange2 = (newPage) => {
|
currentPage2.value = newPage;
|
console.log(currentPage2.value);
|
fetchFlowBind(currentRow.projectNumber, currentRow.layer, currentPage2.value);
|
};
|
const handleMessage = (data) => {
|
try {
|
const allPageData = data;
|
const currentPageKeyValue = currentPageKey.value;
|
const currentPageData = allPageData[currentPageKeyValue];
|
if (currentPageData && Array.isArray(currentPageData) && currentPageData.length > 0) {
|
tableDataa.value = currentPageData[0];
|
} else {
|
console.warn('No data for the current page key:', currentPageKeyValue);
|
}
|
} catch (error) {
|
console.error('Error parsing WebSocket message:', error);
|
}
|
};
|
onMounted(() => {
|
socket = initializeWebSocket(socketUrl, handleMessage);
|
});
|
onUnmounted(() => {
|
if (socket) {
|
closeWebSocket(socket);
|
}
|
});
|
// 开始任务
|
const handleBinda = (row) => {
|
blinda.value = true;
|
};
|
// 停止任务
|
const handleBindb = (row) => {
|
blindb.value = true;
|
};
|
// 暂停任务
|
const handleBindc = (row) => {
|
blindc.value = true;
|
};
|
const handlezhiban = () => {
|
dialogFormVisiblea.value = true;
|
fetchFlowCardId();
|
};
|
// 预览
|
const selectproject = () => {
|
dialogFormVisiblee.value = true;
|
selectgong();
|
};
|
// 缺片详情
|
const handleBindRack = (row) => {
|
currentPage2.value = 1;
|
const { projectNumber, layer } = row;
|
currentRow.projectNumber = row.projectNumber;
|
dialogFormVisibleb.value = true;
|
fetchFlowBind(projectNumber, layer,currentPage2.value);
|
};
|
// 领取任务
|
const handletake = (row) => {
|
window.localStorage.setItem('flowCardId', row.projectNumber)
|
dialogFormVisiblec.value = true;
|
};
|
// 强制出片
|
const handleout = (row) => {
|
window.localStorage.setItem('flowCardId', row.projectNumber)
|
dialogFormVisibled.value = true;
|
};
|
// 创建任务
|
const fetchFlowCardId = async () => {
|
try {
|
const response = await request.post('/hollowGlass/hollowGlassRelationInfo/queryHollowAllFlowCard');
|
if (response.code == 200) {
|
ElMessage.success(response.message);
|
const newData = parseData(response.data);
|
tableDatab.value = newData;
|
} else {
|
ElMessage.error('Failed to fetch data');
|
}
|
} catch (error) {
|
ElMessage.error('Error fetching data');
|
}
|
};
|
// 工程号
|
const selectgong = async () => {
|
try {
|
var url="/hollowGlass/hollowGlassOutRelationInfo/hollowTaskList?cell="+ 931;
|
const response = await request.post(url)
|
if (response.code == 200) {
|
const processTypes = response.data.map((projectNo, index) => ({
|
value: projectNo,
|
label: projectNo
|
}));
|
titleSelectJson.value.processType = processTypes;
|
} else {
|
ElMessage.error('Failed to fetch data');
|
}
|
} catch (error) {
|
ElMessage.error('Error fetching data');
|
}
|
};
|
// 预览
|
const handleup = async () => {
|
try {
|
var url="/hollowGlass/hollowGlassOutRelationInfo/appointHollowTaskDetails?cell="+ 931 + "&flowCardId=" + selectedProjectNo.value;
|
window.localStorage.setItem('flowCardId', selectedProjectNo.value)
|
const response = await request.post(url)
|
if (response.code == 200) {
|
ElMessage.success(response.message);
|
tableDataa.value = response.data;
|
dialogFormVisiblee.value = false
|
selectedProjectNo.value = ''
|
} else {
|
ElMessage.error('Failed to fetch data');
|
}
|
} catch (error) {
|
ElMessage.error('Error fetching data');
|
}
|
};
|
const parseData = (rawData) => {
|
return Object.keys(rawData).map(projectNumber => ({
|
projectNumber,
|
records: rawData[projectNumber]
|
}));
|
};
|
const fetchFlowBind = async (flowCardId, layer, page) => {
|
try {
|
var url="/hollowGlass/hollowGlassRelationInfo/queryLackByFlowCard?flowCardId="+flowCardId + "&layer=" + layer;
|
const response = await request.post(url)
|
if (response.code == 200) {
|
tableDatac.value = response.data[page];
|
ElMessage.success(response.message);
|
} else {
|
ElMessage.error(response.message);
|
}
|
} catch (error) {
|
console.error(error);
|
}
|
}
|
// 开始任务
|
const handlea = async () => {
|
try {
|
let flowCardId = window.localStorage.getItem('flowCardId')
|
if (flowCardId !== '') {
|
var url="/hollowGlass/hollowGlassOutRelationInfo/startTask?flowCardId="+flowCardId + "&cell=" + 931;
|
const response = await request.post(url)
|
if (response.code == 200) {
|
ElMessage.success(response.message);
|
blinda.value = false;
|
} else {
|
ElMessage.error(response.message);
|
}
|
} else {
|
ElMessage({
|
type: 'info',
|
message: t('basicData.infonull'),
|
})
|
}
|
} catch (error) {
|
console.error(error);
|
}
|
}
|
// 结束任务
|
const handleb = async () => {
|
try {
|
let flowCardId = window.localStorage.getItem('flowCardId')
|
if (flowCardId !== '') {
|
var url="/hollowGlass/hollowGlassOutRelationInfo/finishTask?flowCardId="+flowCardId + "&cell=" + 931;
|
const response = await request.post(url)
|
if (response.code == 200) {
|
ElMessage.success(response.message);
|
blindb.value = false;
|
} else {
|
ElMessage.error(response.message);
|
}
|
} else {
|
ElMessage({
|
type: 'info',
|
message: t('basicData.infonull'),
|
})
|
}
|
} catch (error) {
|
console.error(error);
|
}
|
}
|
// 暂停任务
|
const handlec = async () => {
|
try {
|
let flowCardId = window.localStorage.getItem('flowCardId')
|
if (flowCardId !== '') {
|
var url="/hollowGlass/hollowGlassOutRelationInfo/pauseTask?flowCardId="+flowCardId + "&cell=" + 931;
|
const response = await request.post(url)
|
if (response.code == 200) {
|
ElMessage.success(response.message);
|
blindc.value = false;
|
} else {
|
ElMessage.error(response.message);
|
}
|
} else {
|
ElMessage({
|
type: 'info',
|
message: t('basicData.infonull'),
|
})
|
}
|
} catch (error) {
|
console.error(error);
|
}
|
}
|
// 领取任务
|
const finisha = async () => {
|
let flowCardId = window.localStorage.getItem('flowCardId')
|
try {
|
var url="/hollowGlass/hollowGlassOutRelationInfo/receiveTask?cell="+cell.value + "&flowCardId=" + flowCardId + "&totalPairQuantity=" + totalPairQuantity.value;
|
const response = await request.post(url)
|
if (response.code == 200) {
|
ElMessage.success(response.message);
|
dialogFormVisiblec.value = false;
|
cell.value = '';
|
totalPairQuantity.value = '';
|
} else {
|
ElMessage.error(response.message);
|
}
|
} catch (error) {
|
console.error(error);
|
}
|
}
|
// 强制出片
|
const finishb = async () => {
|
let flowCardId = window.localStorage.getItem('flowCardId')
|
try {
|
var url="/hollowGlass/hollowGlassOutRelationInfo/forceOutGlass?cell="+cella.value + "&flowCardId=" + flowCardId + "&totalPairQuantity=" + totalPairQuantitya.value;
|
const response = await request.post(url)
|
if (response.code == 200) {
|
ElMessage.success(response.message);
|
dialogFormVisibled.value = false;
|
cella.value = '';
|
totalPairQuantitya.value = '';
|
} else {
|
ElMessage.error(response.message);
|
}
|
} catch (error) {
|
console.error(error);
|
}
|
}
|
// 调度
|
const handleChange = async () => {
|
try {
|
const body = {
|
flag: ganghua.value,
|
};
|
|
var url="/hollowGlass/hollowGlassOutRelationInfo/dispatchHollowSwitch?flag="+ganghua.value;
|
const response = await request.post(url)
|
if (response.code == 200) {
|
ElMessage.success(response.message);
|
ganghua.value = response.data
|
}else {
|
ElMessage.error(response.message);
|
}
|
}
|
catch (error) {
|
console.error(error);
|
}
|
}
|
onBeforeUnmount(() => {
|
console.log("关闭了")
|
closeWebSocket();
|
});
|
</script>
|
<style scoped>
|
#dialog-footer {
|
text-align: center;
|
margin-top: -15px;
|
}</style>
|