Files
xgy-oa/klp-ui/src/views/lines/panels/quality/index.vue
2025-10-10 14:40:29 +08:00

282 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div>
<el-row>
<!-- 查询表单保持不变 -->
<el-form :inline="true" :model="queryForm" ref="queryForm" label-width="100px">
<el-form-item label="钢卷号" prop="coilid">
<el-input size="mini" v-model="queryForm.coilid" placeholder="请输入钢卷号"></el-input>
</el-form-item>
<el-form-item label="开始日期" prop="startDate">
<el-date-picker size="mini" v-model="queryForm.startDate" type="date" placeholder="选择开始日期"
value-format="yyyy-MM-dd" clearable></el-date-picker>
</el-form-item>
<el-form-item label="结束日期" prop="endDate">
<el-date-picker size="mini" v-model="queryForm.endDate" type="date" placeholder="选择结束日期"
value-format="yyyy-MM-dd" clearable></el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="handleQuery" :loading="btnLoading" icon="el-icon-search"
size="mini">查询</el-button>
<el-button @click="handleReset" icon="el-icon-refresh" size="mini">重置</el-button>
<el-button type="success" @click="handleAdd" icon="el-icon-plus" size="mini">补录</el-button>
</el-form-item>
</el-form>
<!-- 数据表格保持不变 -->
<el-table v-loading="tableLoading" :data="tableData" border style="width: 100%; margin-top: 20px;"
@row-click="handleRowClick" highlight-current-row>
<el-table-column prop="exitMatId" label="成品卷" width="150" align="center" />
<el-table-column prop="entryMatId" label="来料卷" width="150" align="center" />
<el-table-column prop="subId" label="分切数" width="100" align="center" />
<el-table-column prop="status" label="状态" width="100" align="center" />
<el-table-column prop="startPosition" label="开始位置" width="100" align="center" />
<el-table-column prop="endPosition" label="结束位置" width="100" align="center" />
<el-table-column prop="planId" label="计划ID" width="120" align="center" />
<el-table-column prop="planNo" label="计划号" width="150" align="center" />
<el-table-column prop="prodCode" label="产品类型" width="120" align="center" />
<el-table-column prop="groupNo" label="班号" width="100" align="center" />
<el-table-column prop="shiftNo" label="组号" width="100" align="center" />
<el-table-column prop="steelGrade" label="钢种" width="100" align="center" />
<el-table-column prop="entryThick" label="来料厚度" width="100" align="center" />
<el-table-column prop="entryWidth" label="来料宽带" width="100" align="center" />
<el-table-column prop="entryLength" label="来料长度" width="100" align="center" />
<el-table-column prop="entryWeight" label="来料重量" width="100" align="center" />
<el-table-column prop="weightTop" label="上表面镀锌" width="100" align="center" />
<el-table-column prop="weightBottom" label="下表面镀锌" width="100" align="center" />
<el-table-column prop="exitLength" label="成品长度" width="100" align="center" />
<el-table-column prop="exitNetWeight" label="成品带涂料重量" width="120" align="center" />
<el-table-column prop="theoryWeight" label="理论重量" width="100" align="center" />
<el-table-column prop="actualWeight" label="实际重量" width="100" align="center" />
<el-table-column prop="exitOuterDiameter" label="成品外径" width="100" align="center" />
<el-table-column prop="exitThickness" label="成品厚度" width="100" align="center" />
<el-table-column prop="exitWidth" label="成品宽度" width="100" align="center" />
<el-table-column prop="customer" label="客户" width="120" align="center" />
<el-table-column label="上线时间" prop="onlineTime" width="180" align="center">
<template slot-scope="scope">{{ parseTime(scope.row.onlineTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</template>
</el-table-column>
<el-table-column label="开始时间" prop="startTime" width="180" align="center">
<template slot-scope="scope">{{ parseTime(scope.row.startTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</template>
</el-table-column>
<el-table-column label="结束时间" prop="endTime" width="180" align="center">
<template slot-scope="scope">{{ parseTime(scope.row.endTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</template>
</el-table-column>
<el-table-column prop="unitCode" label="机组号" width="100" align="center" />
<el-table-column prop="processCode" label="工序号" width="100" align="center" />
<el-table-column label="是否尾卷" width="100" align="center">
<template slot-scope="scope">
<span>{{ scope.row.lastFlag ? '是' : '否' }}</span>
</template>
</el-table-column>
<el-table-column label="是否分卷" width="100" align="center">
<template slot-scope="scope">
<span>{{ scope.row.separateFlag ? '是' : '否' }}</span>
</template>
</el-table-column>
<el-table-column label="计划来源" align="center" prop="planOrigin" width="120">
<template slot-scope="scope">
<dict-tag :options="dict.type.pdo_plan_origin" :value="scope.row.planOrigin" />
</template>
</el-table-column>
<el-table-column label="操作" width="200" align="center" fixed="right" prop="action">
<template slot-scope="scope">
<el-button size="mini" type="primary" @click="handleEdit(scope.row)" icon="el-icon-edit">操作</el-button>
<el-button size="mini" type="danger" @click="handleDelete(scope.row)" :loading="scope.row.deleteLoading"
icon="el-icon-delete">删除</el-button>
</template>
</el-table-column>
</el-table>
</el-row>
<el-row>
<el-col :span="3">
<pdo-summary :table-data="tableData" />
</el-col>
<el-col :span="21">
<line-chart :enCoilID="currentRow.exitMatId" :baseURL="baseURL" />
</el-col>
</el-row>
<!-- 编辑/新增弹窗根据isAdd条件渲染内容 -->
<el-dialog
:title="dialogTitle"
:visible.sync="dialogVisible"
width="60%"
:close-on-click-modal="false"
>
<!-- 补录新增仅显示数据修正组件无tab -->
<div v-if="isAdd">
<pdo-data-correction
:detail="formData"
:save-callback="handleSave"
:save-loading="saveLoading"
></pdo-data-correction>
</div>
<!-- 编辑保留原有tab显示数据修正+标签打印 -->
<el-tabs v-else v-model="activeTab">
<el-tab-pane label="数据修正" name="basicInfo">
<pdo-data-correction
:detail="formData"
:save-callback="handleSave"
:save-loading="saveLoading"
></pdo-data-correction>
</el-tab-pane>
<el-tab-pane label="标签打印" name="labelPrint">
<pdo-label-print
:detail="formData"
></pdo-label-print>
</el-tab-pane>
</el-tabs>
</el-dialog>
</div>
</template>
<script>
// import { getPdoList, addPdo, updatePdo, deletePdo } from '@/api/l2/pdo'
import createFetch from '@/api/l2/pdo'
import LineChart from './components/line.vue'
// 引入封装的两个组件
import PdoDataCorrection from './components/DataCorrection.vue'
import PdoLabelPrint from './components/LabelPrint.vue'
import PdoSummary from './components/PdoSummary.vue'
export default {
name: 'PdoManagement',
dicts: ['pdo_plan_origin'],
components: {
LineChart,
PdoDataCorrection, // 注册数据修正组件
PdoLabelPrint, // 注册标签打印组件
PdoSummary
},
props: {
baseURL: {
type: String,
default: ''
}
},
data() {
return {
fetchApi: {},
activeTab: 'basicInfo',
queryForm: { coilid: '', startDate: '', endDate: '' },
tableData: [],
tableLoading: false,
btnLoading: false,
dialogVisible: false,
dialogTitle: '新增实绩',
// 新增:区分「补录(新增)」和「编辑」的状态标识
isAdd: false,
// 传递给子组件的详情数据(父组件仅做数据中转,不直接修改)
formData: {},
saveLoading: false,
currentRow: {},
socketType: [
{ value: 'alarm', label: '报警' },
{ value: 'track_position', label: '跟踪位置' },
{ value: 'track_measure', label: '跟踪测量' },
{ value: 'track_signal', label: '跟踪信号' },
{ value: 'track_matmap', label: '跟踪料号' },
{ value: 'calc_setup_result', label: '计算结果' }
]
}
},
created() {
this.fetchApi = createFetch(this.baseURL)
this.getPdoList()
},
methods: {
// 获取列表数据(保持不变)
getPdoList() {
this.tableLoading = true
this.fetchApi.getPdoList(this.queryForm).then(res => {
this.tableData = res.data.map(item => ({ ...item, deleteLoading: false }))
}).catch(err => {
console.error(err)
this.$message.error('获取数据失败')
}).finally(() => {
this.tableLoading = false
this.btnLoading = false
})
},
// 查询(保持不变)
handleQuery() {
this.btnLoading = true;
this.getPdoList()
},
// 重置(保持不变)
handleReset() {
this.$refs.queryForm.resetFields();
this.getPdoList()
},
// 行点击(保持不变)
handleRowClick(row) {
this.currentRow = row;
},
// 补录新增设置isAdd=true初始化空表单
handleAdd() {
this.isAdd = true; // 标记为「补录」
this.dialogTitle = '新增实绩';
// 初始化空表单数据(传递给子组件)
this.formData = {
subId: 0,
startPosition: 0,
endPosition: 0,
planId: 0,
entryThick: 0,
entryWidth: 0,
entryLength: 0,
entryWeight: 0,
weightTop: 0,
weightBottom: 0,
exitLength: 0,
exitNetWeight: 0,
theoryWeight: 0,
actualWeight: 0,
exitOuterDiameter: 0,
exitThickness: 0,
exitWidth: 0,
lastFlag: false,
separateFlag: false
};
this.dialogVisible = true
},
// 编辑设置isAdd=false赋值行数据
handleEdit(row) {
this.isAdd = false; // 标记为「编辑」
this.dialogTitle = '编辑实绩';
// 深拷贝行数据(避免直接修改表格数据)
this.formData = JSON.parse(JSON.stringify(row));
this.dialogVisible = true
},
// 删除(保持不变)
handleDelete(row) {
this.$confirm(`确定删除成品卷 ${row.exitMatId}?`, '确认删除', { type: 'danger' }).then(() => {
row.deleteLoading = true
this.fetchApi.deletePdo(row.exitMatId, row.planId).then(res => {
if (res.code === 200) {
this.$message.success('删除成功');
this.getPdoList()
} else this.$message.error(res.msg || '删除失败')
}).finally(() => row.deleteLoading = false)
})
},
// 保存回调子组件触发处理实际API调用
handleSave(formData) {
this.saveLoading = true
// 根据是否有id判断是新增还是编辑
const request = formData.id ? this.fetchApi.updatePdo(formData) : this.fetchApi.addPdo(formData)
request.then(res => {
if (res.code === 200) {
this.$message.success('保存成功');
this.dialogVisible = false;
this.getPdoList() // 刷新列表
} else this.$message.error(res.msg || '保存失败')
}).finally(() => {
this.saveLoading = false
})
},
}
}
</script>