282 lines
12 KiB
Vue
282 lines
12 KiB
Vue
<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> |