二级修改
This commit is contained in:
47
apps/l2/src/api/business/annealingFurnaceTension.js
Normal file
47
apps/l2/src/api/business/annealingFurnaceTension.js
Normal file
@@ -0,0 +1,47 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 查询退火炉张力列表
|
||||
export function listTensionAnnealingFurnace(query) {
|
||||
return request({
|
||||
url: '/business/tension/annealing-furnace/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 查询退火炉张力详细
|
||||
export function getTensionAnnealingFurnace(steelGrade, thick, yieldStren) {
|
||||
return request({
|
||||
url: '/business/tension/annealing-furnace',
|
||||
method: 'get',
|
||||
params: { steelGrade, thick, yieldStren }
|
||||
})
|
||||
}
|
||||
|
||||
// 新增退火炉张力
|
||||
export function addTensionAnnealingFurnace(data) {
|
||||
return request({
|
||||
url: '/business/tension/annealing-furnace',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 修改退火炉张力
|
||||
export function updateTensionAnnealingFurnace(data) {
|
||||
return request({
|
||||
url: '/business/tension/annealing-furnace',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除退火炉张力
|
||||
export function delTensionAnnealingFurnace(steelGrade, thick, yieldStren) {
|
||||
return request({
|
||||
url: '/business/tension/annealing-furnace',
|
||||
method: 'delete',
|
||||
params: { steelGrade, thick, yieldStren }
|
||||
})
|
||||
}
|
||||
|
||||
46
apps/l2/src/api/business/fullLineTension.js
Normal file
46
apps/l2/src/api/business/fullLineTension.js
Normal file
@@ -0,0 +1,46 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 查询全线张力列表
|
||||
export function listTensionAllLine(query) {
|
||||
return request({
|
||||
url: '/business/tension/all-line/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 查询全线张力详细
|
||||
export function getTensionAllLine(steelGrade, thick, yieldStren) {
|
||||
return request({
|
||||
url: '/business/tension/all-line',
|
||||
method: 'get',
|
||||
params: { steelGrade, thick, yieldStren }
|
||||
})
|
||||
}
|
||||
|
||||
// 新增全线张力
|
||||
export function addTensionAllLine(data) {
|
||||
return request({
|
||||
url: '/business/tension/all-line',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 修改全线张力
|
||||
export function updateTensionAllLine(data) {
|
||||
return request({
|
||||
url: '/business/tension/all-line',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除全线张力
|
||||
export function delTensionAllLine(steelGrade, thick, yieldStren) {
|
||||
return request({
|
||||
url: '/business/tension/all-line',
|
||||
method: 'delete',
|
||||
params: { steelGrade, thick, yieldStren }
|
||||
})
|
||||
}
|
||||
47
apps/l2/src/api/business/levelerTension.js
Normal file
47
apps/l2/src/api/business/levelerTension.js
Normal file
@@ -0,0 +1,47 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 查询平整机张力列表
|
||||
export function listTensionLeveler(query) {
|
||||
return request({
|
||||
url: '/business/tension/leveler/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 查询平整机张力详细
|
||||
export function getTensionLeveler(steelGrade, thick, yieldStren) {
|
||||
return request({
|
||||
url: '/business/tension/leveler',
|
||||
method: 'get',
|
||||
params: { steelGrade, thick, yieldStren }
|
||||
})
|
||||
}
|
||||
|
||||
// 新增平整机张力
|
||||
export function addTensionLeveler(data) {
|
||||
return request({
|
||||
url: '/business/tension/leveler',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 修改平整机张力
|
||||
export function updateTensionLeveler(data) {
|
||||
return request({
|
||||
url: '/business/tension/leveler',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除平整机张力
|
||||
export function delTensionLeveler(steelGrade, thick, yieldStren) {
|
||||
return request({
|
||||
url: '/business/tension/leveler',
|
||||
method: 'delete',
|
||||
params: { steelGrade, thick, yieldStren }
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 查询【请填写功能名称】列表
|
||||
// 查询张力参数列表
|
||||
export function listSetup(query) {
|
||||
return request({
|
||||
url: '/business/setup/list',
|
||||
@@ -9,15 +9,15 @@ export function listSetup(query) {
|
||||
})
|
||||
}
|
||||
|
||||
// 查询【请填写功能名称】详细
|
||||
export function getSetup(ID) {
|
||||
// 查询张力参数详细
|
||||
export function getSetup(id) {
|
||||
return request({
|
||||
url: '/business/setup/' + ID,
|
||||
url: '/business/setup/' + id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 新增【请填写功能名称】
|
||||
// 新增张力参数
|
||||
export function addSetup(data) {
|
||||
return request({
|
||||
url: '/business/setup',
|
||||
@@ -26,7 +26,7 @@ export function addSetup(data) {
|
||||
})
|
||||
}
|
||||
|
||||
// 修改【请填写功能名称】
|
||||
// 修改张力参数
|
||||
export function updateSetup(data) {
|
||||
return request({
|
||||
url: '/business/setup',
|
||||
@@ -35,10 +35,10 @@ export function updateSetup(data) {
|
||||
})
|
||||
}
|
||||
|
||||
// 删除【请填写功能名称】
|
||||
export function delSetup(ID) {
|
||||
// 删除张力参数
|
||||
export function delSetup(id) {
|
||||
return request({
|
||||
url: '/business/setup/' + ID,
|
||||
url: '/business/setup/' + id,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
47
apps/l2/src/api/business/straightenerTension.js
Normal file
47
apps/l2/src/api/business/straightenerTension.js
Normal file
@@ -0,0 +1,47 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 查询矫直机张力列表
|
||||
export function listTensionStraightener(query) {
|
||||
return request({
|
||||
url: '/business/tension/straightener/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 查询矫直机张力详细
|
||||
export function getTensionStraightener(steelGrade, thick, yieldStren) {
|
||||
return request({
|
||||
url: '/business/tension/straightener',
|
||||
method: 'get',
|
||||
params: { steelGrade, thick, yieldStren }
|
||||
})
|
||||
}
|
||||
|
||||
// 新增矫直机张力
|
||||
export function addTensionStraightener(data) {
|
||||
return request({
|
||||
url: '/business/tension/straightener',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 修改矫直机张力
|
||||
export function updateTensionStraightener(data) {
|
||||
return request({
|
||||
url: '/business/tension/straightener',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除矫直机张力
|
||||
export function delTensionStraightener(steelGrade, thick, yieldStren) {
|
||||
return request({
|
||||
url: '/business/tension/straightener',
|
||||
method: 'delete',
|
||||
params: { steelGrade, thick, yieldStren }
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,18 +1,21 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 兼容旧接口(如果后端仍保留旧路由,可以继续使用)
|
||||
// 注意:现在全线张力推荐使用 /business/tension/all-line 这套接口(按三主键)
|
||||
|
||||
// 查询全线张力列表
|
||||
export function listTension(query) {
|
||||
return request({
|
||||
url: '/business/tension/list',
|
||||
url: '/business/tension/all-line/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 查询全线张力详细
|
||||
// 查询全线张力详细(按三主键)
|
||||
export function getTension(query) {
|
||||
return request({
|
||||
url: '/business/tension',
|
||||
url: '/business/tension/all-line',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
@@ -21,7 +24,7 @@ export function getTension(query) {
|
||||
// 新增全线张力
|
||||
export function addTension(data) {
|
||||
return request({
|
||||
url: '/business/tension',
|
||||
url: '/business/tension/all-line',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
@@ -30,17 +33,17 @@ export function addTension(data) {
|
||||
// 修改全线张力
|
||||
export function updateTension(data) {
|
||||
return request({
|
||||
url: '/business/tension',
|
||||
url: '/business/tension/all-line',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除全线张力
|
||||
// 删除全线张力(按三主键)
|
||||
export function delTension(query) {
|
||||
return request({
|
||||
url: '/business/tension/tension',
|
||||
data: query,
|
||||
method: 'delete'
|
||||
url: '/business/tension/all-line',
|
||||
method: 'delete',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
@@ -1,142 +1,86 @@
|
||||
<template>
|
||||
<div class="setup-form-wrapper">
|
||||
<div v-if="!canGenerate" class="setup-hint">
|
||||
<el-alert
|
||||
type="info"
|
||||
:closable="false"
|
||||
title="工艺参数生成提示"
|
||||
>
|
||||
<div class="hint-text">
|
||||
请先补齐以下基础信息,系统才可以自动匹配推荐的工艺参数:
|
||||
</div>
|
||||
<el-alert type="info" :closable="false" title="工艺参数生成提示">
|
||||
<div class="hint-text">请先补齐以下基础信息,系统才可以自动匹配推荐的工艺参数:</div>
|
||||
<div class="hint-tags">
|
||||
<el-tag
|
||||
v-for="label in missingFieldLabels"
|
||||
:key="label"
|
||||
size="mini"
|
||||
effect="dark"
|
||||
>
|
||||
<el-tag v-for="label in missingFieldLabels" :key="label" size="mini" effect="dark">
|
||||
{{ label }}
|
||||
</el-tag>
|
||||
</div>
|
||||
</el-alert>
|
||||
</div>
|
||||
|
||||
<el-row v-else :gutter="16">
|
||||
<el-col :span="14">
|
||||
<el-form :model="form" label-width="150px" v-loading="loading">
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="开卷机张力">
|
||||
<el-input v-model="form.porTension" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="入口活套张力">
|
||||
<el-input v-model="form.celTension" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="开卷机张力">
|
||||
<el-input v-model="form.porTension" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="入口活套张力">
|
||||
<el-input v-model="form.celTension" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="清洗段张力">
|
||||
<el-input v-model="form.cleanTension" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="清洗段张力">
|
||||
<el-input v-model="form.cleanTension" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="钝化段张力">
|
||||
<el-input v-model="form.passivationTension" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="出口活套张力">
|
||||
<el-input v-model="form.cxlTension" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="卷取机张力">
|
||||
<el-input v-model="form.trTension" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="炉区张力">
|
||||
<el-input v-model="form.furTension" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="平整机入口张力">
|
||||
<el-input v-model="form.levelerEntryTension" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="平整机出口张力">
|
||||
<el-input v-model="form.levelerExitTension" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="矫直机出口张力">
|
||||
<el-input v-model="form.straightenerExitTension" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="冷却塔张力">
|
||||
<el-input v-model="form.towerTension" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="光整机不投张力">
|
||||
<el-input v-model="form.tmNoneTension" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="光整机入口张力">
|
||||
<el-input v-model="form.tmEntryTension" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="光整机出口张力">
|
||||
<el-input v-model="form.tmExitTension" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="光整机轧制力">
|
||||
<el-input v-model="form.tmRollforce" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="光整机弯辊力">
|
||||
<el-input v-model="form.tmBendforce" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="光整机防皱辊插入量">
|
||||
<el-input v-model="form.tmAcrMesh" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="光整机防颤辊插入量">
|
||||
<el-input v-model="form.tmBrMesh" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="拉矫机延伸率">
|
||||
<el-input v-model="form.tlElong" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="拉矫机矫直辊插入量1">
|
||||
<el-input v-model="form.tlLvlMesh1" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="拉矫机矫直辊插入量2">
|
||||
<el-input v-model="form.tlLvlMesh2" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="炉火段预热段出口板温">
|
||||
<el-input v-model="form.preheatingSection" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="炉火段加热段出口板温">
|
||||
<el-input v-model="form.heatingSection" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="炉火段冷却段出口板温">
|
||||
<el-input v-model="form.coolingSection" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="炉区张力">
|
||||
<el-input v-model="form.furTension" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="冷却塔张力">
|
||||
<el-input v-model="form.towerTension" @change="syncModal" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-col>
|
||||
|
||||
<el-col v-if="showRecommendationPanel" :span="10">
|
||||
<el-card class="recommend-card" shadow="never">
|
||||
<div class="recommend-header">
|
||||
@@ -146,15 +90,13 @@
|
||||
</div>
|
||||
<el-button type="text" @click="applyAll" :disabled="!hasRecommendation">全部套用</el-button>
|
||||
</div>
|
||||
|
||||
<div v-if="!hasRecommendation" class="empty-recommend">
|
||||
<el-empty description="暂无推荐数据" :image-size="100"></el-empty>
|
||||
</div>
|
||||
|
||||
<div v-else class="recommend-groups">
|
||||
<div
|
||||
v-for="group in parameterGroups"
|
||||
:key="group.title"
|
||||
class="recommend-group"
|
||||
>
|
||||
<div v-for="group in parameterGroups" :key="group.title" class="recommend-group">
|
||||
<div class="group-title">{{ group.title }}</div>
|
||||
<div class="recommend-items">
|
||||
<div
|
||||
@@ -165,9 +107,7 @@
|
||||
@click="applyRecommended(item.key)"
|
||||
>
|
||||
<div class="label">{{ item.label }}</div>
|
||||
<div class="value">
|
||||
{{ formatValue(recommendation[item.key]) }}
|
||||
</div>
|
||||
<div class="value">{{ formatValue(recommendation[item.key]) }}</div>
|
||||
<i class="el-icon-top-right"></i>
|
||||
</div>
|
||||
</div>
|
||||
@@ -180,64 +120,39 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { getBendforce } from '@/api/business/bendforce' // 光整机弯辊力
|
||||
import { getTension } from '@/api/business/tension' // 全线张力
|
||||
import { getRollforce } from '@/api/business/rollforce' // 光整机轧制力
|
||||
import { getTl } from '@/api/business/tl' // 拉矫机
|
||||
import { getMesh } from '@/api/business/mesh' // 光整机插入量
|
||||
import { getFur } from '@/api/business/fur' // 炉火段
|
||||
import { listTensionAllLine } from '@/api/business/fullLineTension'
|
||||
import { listTensionLeveler } from '@/api/business/levelerTension'
|
||||
import { listTensionStraightener } from '@/api/business/straightenerTension'
|
||||
import { listTensionAnnealingFurnace } from '@/api/business/annealingFurnaceTension'
|
||||
import { PARAMETER_GROUPS } from './setupRecommendationConfig'
|
||||
|
||||
const REQUIRED_FIELDS = [
|
||||
'entryThick',
|
||||
'yieldPoint',
|
||||
'steelGrade',
|
||||
'spmElongation',
|
||||
'spmRollforce',
|
||||
'entryWidth'
|
||||
]
|
||||
const REQUIRED_FIELDS = ['entryThick', 'yieldPoint', 'steelGrade']
|
||||
|
||||
const FIELD_LABEL_MAP = {
|
||||
entryThick: '入口厚度',
|
||||
yieldPoint: '屈服点',
|
||||
steelGrade: '钢种',
|
||||
spmElongation: '延伸率(%)',
|
||||
spmRollforce: 'SPM轧制力',
|
||||
entryWidth: '入口宽度'
|
||||
steelGrade: '钢种'
|
||||
}
|
||||
|
||||
const createDefaultForm = () => ({
|
||||
// 全线张力
|
||||
porTension: undefined, // 开卷机张力
|
||||
celTension: undefined, // 入口活套张力
|
||||
cleanTension: undefined, // 清洗段张力
|
||||
furTension: undefined, // 炉区张力
|
||||
towerTension: undefined, // 冷却塔张力
|
||||
tmNoneTension: undefined, // 光整机不投张力
|
||||
tmEntryTension: undefined, // 光整机入口张力
|
||||
tmExitTension: undefined, // 光整机出口张力
|
||||
tlNoneTension: undefined, // 拉矫机不投张力
|
||||
tlExitTension: undefined, // 拉矫机出口张力
|
||||
coatTension: undefined, // 后处理张力
|
||||
cxlTension: undefined, // 出口活套张力
|
||||
trTension: undefined, // 卷取机张力
|
||||
porTension: undefined,
|
||||
celTension: undefined,
|
||||
cleanTension: undefined,
|
||||
passivationTension: undefined,
|
||||
cxlTension: undefined,
|
||||
trTension: undefined,
|
||||
|
||||
// 光整机
|
||||
tmRollforce: undefined, // 光整机轧制力
|
||||
tmBendforce: undefined, // 光整机弯辊力
|
||||
tmAcrMesh: undefined, // 光整机防皱辊插入量
|
||||
tmBrMesh: undefined, // 光整机防颤辊插入量
|
||||
// 平整机张力
|
||||
levelerEntryTension: undefined,
|
||||
levelerExitTension: undefined,
|
||||
|
||||
// 拉矫机
|
||||
tlElong: undefined, // 拉矫机延伸率
|
||||
tlLvlMesh1: undefined, // 拉矫机矫直辊插入量1
|
||||
tlLvlMesh2: undefined, // 拉矫机矫直辊插入量2
|
||||
tlAcbMesh: undefined, // 拉矫机防横弓插入量
|
||||
// 矫直机张力
|
||||
straightenerExitTension: undefined,
|
||||
|
||||
// 炉火段
|
||||
preheatingSection: undefined, // 炉火段预热段出口板温
|
||||
heatingSection: undefined, // 炉火段加热段出口板温
|
||||
coolingSection: undefined, // 炉火段冷却段出口板温
|
||||
// 退火炉张力
|
||||
furTension: undefined,
|
||||
towerTension: undefined
|
||||
})
|
||||
|
||||
export default {
|
||||
@@ -269,16 +184,16 @@ export default {
|
||||
},
|
||||
computed: {
|
||||
missingFieldKeys() {
|
||||
return REQUIRED_FIELDS.filter(key => !this.hasValue(this.income && this.income[key]))
|
||||
return REQUIRED_FIELDS.filter((key) => !this.hasValue(this.income && this.income[key]))
|
||||
},
|
||||
missingFieldLabels() {
|
||||
return this.missingFieldKeys.map(key => FIELD_LABEL_MAP[key])
|
||||
return this.missingFieldKeys.map((key) => FIELD_LABEL_MAP[key])
|
||||
},
|
||||
canGenerate() {
|
||||
return this.missingFieldKeys.length === 0
|
||||
},
|
||||
hasRecommendation() {
|
||||
return Object.values(this.recommendation).some(val => this.hasValue(val))
|
||||
return Object.values(this.recommendation).some((val) => this.hasValue(val))
|
||||
},
|
||||
parameterGroups() {
|
||||
return PARAMETER_GROUPS
|
||||
@@ -297,8 +212,12 @@ export default {
|
||||
hasValue(value) {
|
||||
return !(value === null || value === undefined || value === '')
|
||||
},
|
||||
formatValue(val) {
|
||||
return this.hasValue(val) ? val : '-'
|
||||
},
|
||||
generateSignature() {
|
||||
return REQUIRED_FIELDS.map(key => (this.income && this.income[key]) ?? '').join('|')
|
||||
// 只要这些字段变化,就重新推荐
|
||||
return REQUIRED_FIELDS.map((key) => (this.income && this.income[key]) ?? '').join('|')
|
||||
},
|
||||
async handleIncomeChange() {
|
||||
if (!this.canGenerate) {
|
||||
@@ -308,94 +227,113 @@ export default {
|
||||
return
|
||||
}
|
||||
const signature = this.generateSignature()
|
||||
if (signature === this.lastSignature) {
|
||||
return
|
||||
}
|
||||
if (signature === this.lastSignature) return
|
||||
this.lastSignature = signature
|
||||
await this.fetchSetup()
|
||||
},
|
||||
|
||||
// 评分排序:优先 steelGrade 匹配,其次厚度差、屈服差、最后按更新时间
|
||||
scoreRow(row, cond) {
|
||||
const rowSteel = (row.steelGrade ?? row.steel_grade ?? '').toString()
|
||||
const rowThick = Number(row.thick)
|
||||
const rowYield = Number(row.yieldStren ?? row.yield_stren)
|
||||
|
||||
const condSteel = (cond.steelGrade ?? '').toString()
|
||||
const condThick = Number(cond.thick)
|
||||
const condYield = Number(cond.yieldStren)
|
||||
|
||||
const steelMatch = condSteel && rowSteel ? (rowSteel === condSteel ? 1 : 0) : 0
|
||||
const thickDiff = Number.isFinite(condThick) && Number.isFinite(rowThick) ? Math.abs(rowThick - condThick) : 999
|
||||
const yieldDiff = Number.isFinite(condYield) && Number.isFinite(rowYield) ? Math.abs(rowYield - condYield) : 999
|
||||
|
||||
// 时间越新越好:用负的时间戳作为加分
|
||||
const ts = row.updateTime ? new Date(row.updateTime).getTime() : (row.createTime ? new Date(row.createTime).getTime() : 0)
|
||||
|
||||
// 权重:钢种匹配(大权重),厚度差、屈服差(越小越好),时间(越新越好)
|
||||
return steelMatch * 100000 - thickDiff * 1000 - yieldDiff * 10 + (ts ? ts / 1e10 : 0)
|
||||
},
|
||||
|
||||
pickBest(rows, cond) {
|
||||
const list = Array.isArray(rows) ? rows : []
|
||||
if (!list.length) return null
|
||||
const scored = list
|
||||
.map((r) => ({ r, s: this.scoreRow(r, cond) }))
|
||||
.sort((a, b) => b.s - a.s)
|
||||
return scored[0].r
|
||||
},
|
||||
|
||||
async fetchSetup() {
|
||||
if (!this.canGenerate) return
|
||||
this.loading = true
|
||||
this.recommendation = createDefaultForm()
|
||||
const {
|
||||
entryThick,
|
||||
yieldPoint,
|
||||
|
||||
const { entryThick, yieldPoint, steelGrade } = this.income
|
||||
const cond = {
|
||||
steelGrade,
|
||||
spmElongation,
|
||||
spmRollforce,
|
||||
entryWidth
|
||||
} = this.income
|
||||
thick: entryThick,
|
||||
yieldStren: yieldPoint
|
||||
}
|
||||
|
||||
try {
|
||||
const [
|
||||
tensionRes,
|
||||
tlRes,
|
||||
rollforceRes,
|
||||
bendforceRes,
|
||||
meshRes,
|
||||
furRes
|
||||
] = await Promise.allSettled([
|
||||
getTension({ thick: entryThick, yieldStren: yieldPoint }),
|
||||
getTl({ thick: entryThick, yieldStren: yieldPoint, steelGrade }),
|
||||
getRollforce({ thick: entryThick, yieldStren: yieldPoint, steelGrade, elong: spmElongation }),
|
||||
getBendforce({ width: entryWidth, rollForce: spmRollforce }),
|
||||
getMesh({ thick: entryThick, yieldStren: yieldPoint, steelGrade }),
|
||||
getFur(steelGrade)
|
||||
// 方案B:分别拉四张表的 list,然后按已填条件打分选最优
|
||||
const query = {
|
||||
// list 接口支持条件过滤的话会减少数据量(后端已支持三字段)
|
||||
steelGrade,
|
||||
thick: entryThick,
|
||||
yieldStren: yieldPoint,
|
||||
pageNum: 1,
|
||||
pageSize: 10
|
||||
}
|
||||
|
||||
const [allLineRes, levelerRes, straightenerRes, furnaceRes] = await Promise.allSettled([
|
||||
listTensionAllLine(query),
|
||||
listTensionLeveler(query),
|
||||
listTensionStraightener(query),
|
||||
listTensionAnnealingFurnace(query)
|
||||
])
|
||||
|
||||
if (tensionRes.status === 'fulfilled' && tensionRes.value.data) {
|
||||
const data = tensionRes.value.data
|
||||
this.recommendation.porTension = data.value1
|
||||
this.recommendation.celTension = data.value2
|
||||
this.recommendation.cleanTension = data.value3
|
||||
this.recommendation.furTension = data.value4
|
||||
this.recommendation.towerTension = data.value5
|
||||
this.recommendation.tmNoneTension = data.value6
|
||||
this.recommendation.tmEntryTension = data.value7
|
||||
this.recommendation.tmExitTension = data.value8
|
||||
this.recommendation.tlNoneTension = data.value9
|
||||
this.recommendation.tlExitTension = data.value10
|
||||
this.recommendation.coatTension = data.value11
|
||||
this.recommendation.cxlTension = data.value12
|
||||
this.recommendation.trTension = data.value13
|
||||
// 统一取 rows(若依 TableDataInfo)
|
||||
const allLineRows = allLineRes.status === 'fulfilled' ? (allLineRes.value.rows || []) : []
|
||||
const levelerRows = levelerRes.status === 'fulfilled' ? (levelerRes.value.rows || []) : []
|
||||
const straightenerRows = straightenerRes.status === 'fulfilled' ? (straightenerRes.value.rows || []) : []
|
||||
const furnaceRows = furnaceRes.status === 'fulfilled' ? (furnaceRes.value.rows || []) : []
|
||||
|
||||
const bestAllLine = this.pickBest(allLineRows, cond)
|
||||
const bestLeveler = this.pickBest(levelerRows, cond)
|
||||
const bestStraightener = this.pickBest(straightenerRows, cond)
|
||||
const bestFurnace = this.pickBest(furnaceRows, cond)
|
||||
|
||||
// 映射到推荐字段(按 setup_tension_new.sql 的 value1...)
|
||||
if (bestAllLine) {
|
||||
this.recommendation.porTension = bestAllLine.value1
|
||||
this.recommendation.celTension = bestAllLine.value2
|
||||
this.recommendation.cleanTension = bestAllLine.value3
|
||||
this.recommendation.passivationTension = bestAllLine.value4
|
||||
this.recommendation.cxlTension = bestAllLine.value5
|
||||
this.recommendation.trTension = bestAllLine.value6
|
||||
}
|
||||
|
||||
if (tlRes.status === 'fulfilled' && tlRes.value.data) {
|
||||
const data = tlRes.value.data
|
||||
this.recommendation.tlElong = data.value1
|
||||
this.recommendation.tlLvlMesh1 = data.value2
|
||||
this.recommendation.tlLvlMesh2 = data.value3
|
||||
this.recommendation.tlAcbMesh = data.value4
|
||||
if (bestLeveler) {
|
||||
this.recommendation.levelerEntryTension = bestLeveler.value1
|
||||
this.recommendation.levelerExitTension = bestLeveler.value2
|
||||
}
|
||||
|
||||
if (rollforceRes.status === 'fulfilled' && rollforceRes.value.data) {
|
||||
this.recommendation.tmRollforce = rollforceRes.value.data.value1
|
||||
if (bestStraightener) {
|
||||
this.recommendation.straightenerExitTension = bestStraightener.value1
|
||||
}
|
||||
|
||||
if (bendforceRes.status === 'fulfilled' && bendforceRes.value.data) {
|
||||
this.recommendation.tmBendforce = bendforceRes.value.data.value1
|
||||
if (bestFurnace) {
|
||||
this.recommendation.furTension = bestFurnace.value1
|
||||
this.recommendation.towerTension = bestFurnace.value2
|
||||
}
|
||||
|
||||
if (meshRes.status === 'fulfilled' && meshRes.value.data) {
|
||||
const data = meshRes.value.data
|
||||
this.recommendation.tmAcrMesh = data.value1
|
||||
this.recommendation.tmBrMesh = data.value2
|
||||
}
|
||||
|
||||
if (furRes.status === 'fulfilled' && furRes.value.data) {
|
||||
const data = furRes.value.data
|
||||
this.recommendation.preheatingSection = data.value1
|
||||
this.recommendation.heatingSection = data.value2
|
||||
this.recommendation.coolingSection = data.value3
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('获取工艺参数提示失败', error)
|
||||
} catch (e) {
|
||||
console.error('获取推荐张力参数失败', e)
|
||||
} finally {
|
||||
this.loading = false
|
||||
this.emitRecommendationChange()
|
||||
}
|
||||
},
|
||||
|
||||
emitRecommendationChange() {
|
||||
this.$emit('recommendation-change', { ...this.recommendation })
|
||||
},
|
||||
@@ -413,9 +351,6 @@ export default {
|
||||
})
|
||||
this.syncModal()
|
||||
},
|
||||
formatValue(val) {
|
||||
return this.hasValue(val) ? val : '-'
|
||||
},
|
||||
syncModal() {
|
||||
this.$emit('input', this.form)
|
||||
}
|
||||
@@ -534,4 +469,4 @@ export default {
|
||||
.empty-recommend {
|
||||
padding: 40px 0;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
||||
@@ -1,104 +1,54 @@
|
||||
<template>
|
||||
<el-tabs>
|
||||
<el-tab-pane label="全线张力">
|
||||
<el-descriptions :column="1">
|
||||
<el-descriptions :column="2">
|
||||
<el-descriptions-item label="开卷机张力">
|
||||
{{ setupForm.porTension }}
|
||||
{{ setupForm.porTension ?? '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="入口活套张力">
|
||||
{{ setupForm.celTension }}
|
||||
{{ setupForm.celTension ?? '-' }}
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="清洗段张力">
|
||||
{{ setupForm.cleanTension }}
|
||||
{{ setupForm.cleanTension ?? '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="炉区张力">
|
||||
{{ setupForm.furTension }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="冷却塔张力">
|
||||
{{ setupForm.towerTension }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="光整机不投张力">
|
||||
{{ setupForm.tmNoneTension }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="光整机入口张力">
|
||||
{{ setupForm.tmEntryTension }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="光整机出口张力">
|
||||
{{ setupForm.tmExitTension }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="拉矫机不投张力">
|
||||
{{ setupForm.tlNoneTension }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="拉矫机出口张力">
|
||||
{{ setupForm.tlExitTension }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="后处理张力">
|
||||
{{ setupForm.coatTension }}
|
||||
<el-descriptions-item label="钝化段张力">
|
||||
{{ setupForm.passivationTension ?? '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="出口活套张力">
|
||||
{{ setupForm.cxlTension }}
|
||||
{{ setupForm.cxlTension ?? '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="卷取机张力">
|
||||
{{ setupForm.trTension }}
|
||||
{{ setupForm.trTension ?? '-' }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="拉矫机参数">
|
||||
<el-tab-pane label="平整机张力">
|
||||
<el-descriptions :column="1">
|
||||
<el-descriptions-item label="拉矫机延伸率">
|
||||
{{ setupForm.tlElong }}
|
||||
<el-descriptions-item label="平整机入口张力">
|
||||
{{ setupForm.levelerEntryTension ?? '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="拉矫机矫直辊插入量1">
|
||||
{{ setupForm.tlLvlMesh1 }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="拉矫机矫直辊插入量2">
|
||||
{{ setupForm.tlLvlMesh2 }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="拉矫机防横弓插入量">
|
||||
{{ setupForm.tlAcbMesh }}
|
||||
<el-descriptions-item label="平整机出口张力">
|
||||
{{ setupForm.levelerExitTension ?? '-' }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="光整机弯辊力">
|
||||
<el-tab-pane label="矫直机张力">
|
||||
<el-descriptions :column="1">
|
||||
<el-descriptions-item label="光整机弯辊力">
|
||||
{{ setupForm.tmBendforce }}
|
||||
<el-descriptions-item label="矫直机出口张力">
|
||||
{{ setupForm.straightenerExitTension ?? '-' }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="光整机插入量">
|
||||
<el-tab-pane label="退火炉张力">
|
||||
<el-descriptions :column="1">
|
||||
<el-descriptions-item label="光整机防皱辊插入量">
|
||||
{{ setupForm.tmAcrMesh }}
|
||||
<el-descriptions-item label="炉区张力">
|
||||
{{ setupForm.furTension ?? '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="光整机防颤辊插入量">
|
||||
{{ setupForm.tmBrMesh }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="光整机轧制力">
|
||||
<el-descriptions :column="1">
|
||||
<el-descriptions-item label="光整机轧制力">
|
||||
{{ setupForm.tmRollforce }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="炉火段">
|
||||
<el-descriptions :column="1">
|
||||
<el-descriptions-item label="预热段出口板温">
|
||||
{{ setupForm.preheatingSection }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="加热段出口板温">
|
||||
{{ setupForm.heatingSection }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="冷却段出口板温">
|
||||
{{ setupForm.coolingSection }}
|
||||
<el-descriptions-item label="冷却塔张力">
|
||||
{{ setupForm.towerTension ?? '-' }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
@@ -113,6 +63,6 @@ export default {
|
||||
type: Object,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -1,47 +1,33 @@
|
||||
export const PARAMETER_GROUPS = [
|
||||
{
|
||||
title: 'Full Line Tension', // 全线张力
|
||||
title: '全线张力',
|
||||
items: [
|
||||
{ label: 'Pay-off Reel Tension', key: 'porTension' }, // 开卷机张力
|
||||
{ label: 'Entry Loop Tension', key: 'celTension' }, // 入口活套张力
|
||||
{ label: 'Cleaning Section Tension', key: 'cleanTension' }, // 清洗段张力
|
||||
{ label: 'Furnace Zone Tension', key: 'furTension' }, // 炉区张力
|
||||
{ label: 'Cooling Tower Tension', key: 'towerTension' }, // 冷却塔张力
|
||||
{ label: 'TM No Tension', key: 'tmNoneTension' }, // 光整机不投张力
|
||||
{ label: 'TM Entry Tension', key: 'tmEntryTension' }, // 光整机入口张力
|
||||
{ label: 'TM Exit Tension', key: 'tmExitTension' }, // 光整机出口张力
|
||||
{ label: 'TL No Tension', key: 'tlNoneTension' }, // 拉矫机不投张力
|
||||
{ label: 'TL Exit Tension', key: 'tlExitTension' }, // 拉矫机出口张力
|
||||
{ label: 'Post-treatment Tension', key: 'coatTension' }, // 后处理张力
|
||||
{ label: 'Exit Loop Tension', key: 'cxlTension' }, // 出口活套张力
|
||||
{ label: 'Take-up Reel Tension', key: 'trTension' } // 卷取机张力
|
||||
{ label: '开卷机张力', key: 'porTension' },
|
||||
{ label: '入口活套张力', key: 'celTension' },
|
||||
{ label: '清洗段张力', key: 'cleanTension' },
|
||||
{ label: '钝化段张力', key: 'passivationTension' },
|
||||
{ label: '出口活套张力', key: 'cxlTension' },
|
||||
{ label: '卷取机张力', key: 'trTension' }
|
||||
]
|
||||
},
|
||||
{
|
||||
title: 'TM Parameters', // 光整机参数
|
||||
title: '平整机张力',
|
||||
items: [
|
||||
{ label: 'TM Roll Force', key: 'tmRollforce' }, // 光整机轧制力
|
||||
{ label: 'TM Bending Force', key: 'tmBendforce' }, // 光整机弯辊力
|
||||
{ label: 'TM Anti-crimping Roll Mesh', key: 'tmAcrMesh' }, // 光整机防皱辊插入量
|
||||
{ label: 'TM Anti-tremor Roll Mesh', key: 'tmBrMesh' } // 光整机防颤辊插入量
|
||||
{ label: '平整机入口张力', key: 'levelerEntryTension' },
|
||||
{ label: '平整机出口张力', key: 'levelerExitTension' }
|
||||
]
|
||||
},
|
||||
{
|
||||
title: 'TL Parameters', // 拉矫机参数
|
||||
title: '矫直机张力',
|
||||
items: [
|
||||
{ label: 'TL Elongation', key: 'tlElong' }, // 拉矫机延伸率
|
||||
{ label: 'Leveling Roll Mesh 1', key: 'tlLvlMesh1' }, // 矫直辊插入量1
|
||||
{ label: 'Leveling Roll Mesh 2', key: 'tlLvlMesh2' }, // 矫直辊插入量2
|
||||
{ label: 'Anti-crossbow Mesh', key: 'tlAcbMesh' } // 防横弓插入量
|
||||
{ label: '矫直机出口张力', key: 'straightenerExitTension' }
|
||||
]
|
||||
},
|
||||
{
|
||||
title: 'Furnace Section Parameters', // 炉火段参数
|
||||
title: '退火炉张力',
|
||||
items: [
|
||||
{ label: 'Preheating Section Exit Strip Temp', key: 'preheatingSection' }, // 预热段出口板温
|
||||
{ label: 'Heating Section Exit Strip Temp', key: 'heatingSection' }, // 加热段出口板温
|
||||
{ label: 'Cooling Section Exit Strip Temp', key: 'coolingSection' } // 冷却段出口板温
|
||||
{ label: '炉区张力', key: 'furTension' },
|
||||
{ label: '冷却塔张力', key: 'towerTension' }
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
<template>
|
||||
<!-- 炉火参数设置,查看不同的炉具的参数和为炉具写入参数 -->
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
</script>
|
||||
@@ -1,60 +1,64 @@
|
||||
<template>
|
||||
<div class="app-container setup-container">
|
||||
<el-row :gutter="20" class="setup-layout">
|
||||
<!-- Left sidebar navigation / 左侧侧边栏导航 -->
|
||||
<!-- 左侧侧边栏导航 -->
|
||||
<el-col :span="4" class="sidebar-col">
|
||||
<div class="sidebar-wrapper">
|
||||
<div class="sidebar-header">
|
||||
<h3>工艺参数分类</h3>
|
||||
<!-- 工艺参数分类 -->
|
||||
</div>
|
||||
<el-menu
|
||||
:default-active="activeTab"
|
||||
class="sidebar-menu"
|
||||
@select="handleMenuSelect"
|
||||
>
|
||||
<el-menu :default-active="activeTab" class="sidebar-menu" @select="handleMenuSelect">
|
||||
<el-menu-item index="1">
|
||||
<i class="el-icon-setting"></i>
|
||||
<span slot="title">全线张力</span>
|
||||
<!-- 全线张力 -->
|
||||
</el-menu-item>
|
||||
<el-menu-item index="2">
|
||||
<i class="el-icon-setting"></i>
|
||||
<span slot="title">拉校机参数</span>
|
||||
<!-- 拉校机参数 -->
|
||||
<span slot="title">平整机张力</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="3">
|
||||
<i class="el-icon-setting"></i>
|
||||
<span slot="title">光整机弯辊力</span>
|
||||
<!-- 光整机弯辊力 -->
|
||||
<span slot="title">矫直机张力</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="4">
|
||||
<i class="el-icon-setting"></i>
|
||||
<span slot="title">光整机插入量</span>
|
||||
<!-- 光整机插入量 -->
|
||||
<span slot="title">退火炉张力</span>
|
||||
</el-menu-item>
|
||||
<el-menu-item index="5">
|
||||
<i class="el-icon-setting"></i>
|
||||
<span slot="title">光整机轧制力</span>
|
||||
<!-- 光整机轧制力 -->
|
||||
</el-menu-item>
|
||||
<!-- <el-menu-item index="6">
|
||||
<i class="el-icon-setting"></i>
|
||||
<span slot="title">Furnace Section</span>
|
||||
</el-menu-item> -->
|
||||
</el-menu>
|
||||
</div>
|
||||
</el-col>
|
||||
|
||||
<!-- Right main content area / 右侧主内容区 -->
|
||||
<!-- 右侧主内容区 -->
|
||||
<el-col :span="20" class="content-col">
|
||||
<div class="content-wrapper">
|
||||
<T1 v-if="activeTab === '1'" ref="t1" />
|
||||
<T2 v-if="activeTab === '2'" ref="t2" />
|
||||
<T3 v-if="activeTab === '3'" ref="t3" />
|
||||
<T4 v-if="activeTab === '4'" ref="t4" />
|
||||
<T5 v-if="activeTab === '5'" ref="t5" />
|
||||
<!-- <T6 v-if="activeTab === '6'" ref="t6" /> -->
|
||||
<TensionTable
|
||||
v-if="activeTab === '1'"
|
||||
title="全线张力"
|
||||
:apis="apisAllLine"
|
||||
:schema="schemaAllLine"
|
||||
:accept-keys="acceptKeys"
|
||||
/>
|
||||
<TensionTable
|
||||
v-if="activeTab === '2'"
|
||||
title="平整机张力"
|
||||
:apis="apisLeveler"
|
||||
:schema="schemaLeveler"
|
||||
:accept-keys="acceptKeys"
|
||||
/>
|
||||
<TensionTable
|
||||
v-if="activeTab === '3'"
|
||||
title="矫直机张力"
|
||||
:apis="apisStraightener"
|
||||
:schema="schemaStraightener"
|
||||
:accept-keys="acceptKeys"
|
||||
/>
|
||||
<TensionTable
|
||||
v-if="activeTab === '4'"
|
||||
title="退火炉张力"
|
||||
:apis="apisAnnealingFurnace"
|
||||
:schema="schemaAnnealingFurnace"
|
||||
:accept-keys="acceptKeys"
|
||||
/>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -62,31 +66,117 @@
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import T1 from './panels/T1.vue';
|
||||
import T2 from './panels/T2.vue';
|
||||
import T3 from './panels/T3.vue';
|
||||
import T4 from './panels/T4.vue';
|
||||
import T5 from './panels/T5.vue';
|
||||
// import T6 from './panels/T6.vue';
|
||||
import TensionTable from './panels/TensionTable.vue'
|
||||
|
||||
import {
|
||||
listTensionAllLine,
|
||||
getTensionAllLine,
|
||||
addTensionAllLine,
|
||||
updateTensionAllLine,
|
||||
delTensionAllLine
|
||||
} from '@/api/business/fullLineTension'
|
||||
|
||||
import {
|
||||
listTensionLeveler,
|
||||
getTensionLeveler,
|
||||
addTensionLeveler,
|
||||
updateTensionLeveler,
|
||||
delTensionLeveler
|
||||
} from '@/api/business/levelerTension'
|
||||
|
||||
import {
|
||||
listTensionStraightener,
|
||||
getTensionStraightener,
|
||||
addTensionStraightener,
|
||||
updateTensionStraightener,
|
||||
delTensionStraightener
|
||||
} from '@/api/business/straightenerTension'
|
||||
|
||||
import {
|
||||
listTensionAnnealingFurnace,
|
||||
getTensionAnnealingFurnace,
|
||||
addTensionAnnealingFurnace,
|
||||
updateTensionAnnealingFurnace,
|
||||
delTensionAnnealingFurnace
|
||||
} from '@/api/business/annealingFurnaceTension'
|
||||
|
||||
export default {
|
||||
name: 'Setup',
|
||||
components: {
|
||||
T1,
|
||||
T2,
|
||||
T3,
|
||||
T4,
|
||||
T5,
|
||||
// T6
|
||||
TensionTable
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
activeTab: '1' // Default select first category / 默认选中第一个分类
|
||||
activeTab: '1',
|
||||
// 三主键
|
||||
acceptKeys: ['steelGrade', 'thick', 'yieldStren'],
|
||||
|
||||
apisAllLine: {
|
||||
list: listTensionAllLine,
|
||||
get: ({ steelGrade, thick, yieldStren }) => getTensionAllLine(steelGrade, thick, yieldStren),
|
||||
add: addTensionAllLine,
|
||||
update: updateTensionAllLine,
|
||||
del: ({ steelGrade, thick, yieldStren }) => delTensionAllLine(steelGrade, thick, yieldStren)
|
||||
},
|
||||
apisLeveler: {
|
||||
list: listTensionLeveler,
|
||||
get: ({ steelGrade, thick, yieldStren }) => getTensionLeveler(steelGrade, thick, yieldStren),
|
||||
add: addTensionLeveler,
|
||||
update: updateTensionLeveler,
|
||||
del: ({ steelGrade, thick, yieldStren }) => delTensionLeveler(steelGrade, thick, yieldStren)
|
||||
},
|
||||
apisStraightener: {
|
||||
list: listTensionStraightener,
|
||||
get: ({ steelGrade, thick, yieldStren }) => getTensionStraightener(steelGrade, thick, yieldStren),
|
||||
add: addTensionStraightener,
|
||||
update: updateTensionStraightener,
|
||||
del: ({ steelGrade, thick, yieldStren }) => delTensionStraightener(steelGrade, thick, yieldStren)
|
||||
},
|
||||
apisAnnealingFurnace: {
|
||||
list: listTensionAnnealingFurnace,
|
||||
get: ({ steelGrade, thick, yieldStren }) => getTensionAnnealingFurnace(steelGrade, thick, yieldStren),
|
||||
add: addTensionAnnealingFurnace,
|
||||
update: updateTensionAnnealingFurnace,
|
||||
del: ({ steelGrade, thick, yieldStren }) => delTensionAnnealingFurnace(steelGrade, thick, yieldStren)
|
||||
},
|
||||
|
||||
// 字段schema(表格列/表单)
|
||||
schemaAllLine: [
|
||||
{ prop: 'steelGrade', label: '钢种', required: true },
|
||||
{ prop: 'thick', label: '厚度', required: true },
|
||||
{ prop: 'yieldStren', label: '屈服强度', required: true },
|
||||
{ prop: 'value1', label: '开卷机张力' },
|
||||
{ prop: 'value2', label: '入口活套张力' },
|
||||
{ prop: 'value3', label: '清洗段张力' },
|
||||
{ prop: 'value4', label: '钝化段张力' },
|
||||
{ prop: 'value5', label: '出口活套张力' },
|
||||
{ prop: 'value6', label: '卷取机张力' }
|
||||
],
|
||||
schemaLeveler: [
|
||||
{ prop: 'steelGrade', label: '钢种', required: true },
|
||||
{ prop: 'thick', label: '厚度', required: true },
|
||||
{ prop: 'yieldStren', label: '屈服强度', required: true },
|
||||
{ prop: 'value1', label: '平整机入口张力' },
|
||||
{ prop: 'value2', label: '平整机出口张力' }
|
||||
],
|
||||
schemaStraightener: [
|
||||
{ prop: 'steelGrade', label: '钢种', required: true },
|
||||
{ prop: 'thick', label: '厚度', required: true },
|
||||
{ prop: 'yieldStren', label: '屈服强度', required: true },
|
||||
{ prop: 'value1', label: '矫直机出口张力' }
|
||||
],
|
||||
schemaAnnealingFurnace: [
|
||||
{ prop: 'steelGrade', label: '钢种', required: true },
|
||||
{ prop: 'thick', label: '厚度', required: true },
|
||||
{ prop: 'yieldStren', label: '屈服强度', required: true },
|
||||
{ prop: 'value1', label: '炉区张力' },
|
||||
{ prop: 'value2', label: '冷却塔张力' }
|
||||
]
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleMenuSelect(index) {
|
||||
this.activeTab = index;
|
||||
this.activeTab = index
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,592 +0,0 @@
|
||||
<!-- ProcessParamCardTemplate.vue 改造后(新增processAcceptKeys筛选区) -->
|
||||
<template>
|
||||
<div class="panel-container">
|
||||
<el-row>
|
||||
<!-- 筛选区域:动态渲染processAcceptKeys对应的筛选控件 -->
|
||||
<el-col :span="19.5">
|
||||
<el-row :gutter="8" align="middle" class="filter-row">
|
||||
<!-- 循环processAcceptKeys,生成筛选控件 -->
|
||||
<el-form inline>
|
||||
<el-form-item v-for="key in processAcceptKeys" :key="key" :label="getFieldLabel(key)" class="filter-form-item" label-width="100px">
|
||||
<!-- 输入框 -->
|
||||
<el-input v-if="getFieldComponentType(key) === 'el-input'" v-model="queryParams[key]"
|
||||
:placeholder="`请输入${getFieldLabel(key)}`" size="mini" clearable @keyup.enter="handleQuery" />
|
||||
<!-- 下拉选择框 -->
|
||||
<el-select v-else-if="getFieldComponentType(key) === 'el-select'" v-model="queryParams[key]"
|
||||
:placeholder="`请选择${getFieldLabel(key)}`" size="mini" clearable @change="handleQuery">
|
||||
<el-option v-for="item in getFieldOptions(key)" :key="item.value" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
<!-- 其他自定义组件(兼容扩展) -->
|
||||
<component v-else :is="getFieldComponentType(key)" v-model="queryParams[key]"
|
||||
:placeholder="`Please ${getFieldInputHint(key)}`" size="mini" clearable :options="getFieldOptions(key)"
|
||||
@change="handleQuery" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<!-- 筛选操作按钮:查询 + 重置 -->
|
||||
<el-col :xs="24" :sm="12" :md="6" class="filter-btn-group">
|
||||
<el-button type="primary" plain icon="el-icon-search" size="mini" @click="handleQuery">查询</el-button>
|
||||
<el-button type="default" plain icon="el-icon-refresh-left" size="mini" @click="handleResetFilter"
|
||||
style="margin-left: 8px;">重置</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<!-- 顶部操作栏 -->
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="success" plain icon="el-icon-refresh" size="mini" @click="handleRefresh">刷新</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- 卡片网格布局 -->
|
||||
<div v-loading="loading" class="card-grid-container">
|
||||
<el-row :gutter="12">
|
||||
<el-col v-for="(item, index) in paramList" :key="index" :xs="24" :sm="12" :md="8" :lg="6" :xl="4"
|
||||
class="card-col">
|
||||
<el-card class="parameter-card" shadow="never" :body-style="{ padding: '10px' }">
|
||||
<!-- 卡片头部:processAcceptKeys 字段(编辑禁用的标识字段) -->
|
||||
<div slot="header" class="card-header">
|
||||
<span class="card-title">
|
||||
<template v-for="(key, idx) in processAcceptKeys">
|
||||
{{ getFieldLabel(key) }}: {{ getFieldDisplayValue(key, item[key]) || '-' }}
|
||||
{{ idx < processAcceptKeys.length - 1 ? ' | ' : '' }} </template>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<!-- 卡片主体:processReturnKeys 字段(业务参数) -->
|
||||
<div class="card-body">
|
||||
<div class="param-row" v-for="(row, rowIdx) in getGroupedReturnKeys" :key="rowIdx">
|
||||
<div class="param-item" v-for="(key, colIdx) in row" :key="colIdx">
|
||||
<span class="param-label">{{ getFieldLabel(key) }}:</span>
|
||||
<span class="param-value">{{ getFieldDisplayValue(key, item[key]) || '-' }}</span>
|
||||
</div>
|
||||
<!-- 补全空项(保证每行两个布局) -->
|
||||
<div class="param-item" v-if="row.length === 1"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 卡片底部:操作按钮 -->
|
||||
<div class="card-footer">
|
||||
<el-button size="mini" type="text" icon="el-icon-copy-document" @click="handleCopy(item)">复制</el-button>
|
||||
<el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdate(item)">编辑</el-button>
|
||||
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(item)">删除</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- 空数据提示 -->
|
||||
<div v-if="paramList.length === 0 && !loading" class="empty-data">
|
||||
<el-empty description="No data"></el-empty>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 分页组件 -->
|
||||
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize"
|
||||
@pagination="getList" />
|
||||
|
||||
<!-- 新增/编辑弹窗 -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="600px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="formRules" label-width="100px">
|
||||
<!-- 第一部分:processAcceptKeys(编辑禁用,新增可编辑) -->
|
||||
<el-form-item v-for="(key, idx) in processAcceptKeys" :key="`accept-${idx}-${key}`" :label="getFieldLabel(key)"
|
||||
:prop="key">
|
||||
<el-input v-if="getFieldComponentType(key) == 'el-input'" v-model="form[key]" placeholder="Please enter"
|
||||
:disabled="isEdit" />
|
||||
<el-select v-else-if="getFieldComponentType(key) == 'el-select'" v-model="form[key]"
|
||||
placeholder="请选择" :disabled="isEdit">
|
||||
<el-option v-for="item in getFieldOptions(key)" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
<component v-else :is="getFieldComponentType(key)" v-model="form[key]"
|
||||
:placeholder="`请${getFieldInputHint(key)}${getFieldLabel(key)}`" :disabled="isEdit"
|
||||
:options="getFieldOptions(key)" />
|
||||
</el-form-item>
|
||||
|
||||
<!-- 第二部分:processReturnKeys(始终可编辑) -->
|
||||
<el-form-item v-for="(key, idx) in processReturnKeys" :key="`return-${idx}-${key}`" :label="getFieldLabel(key)"
|
||||
:prop="key">
|
||||
<el-input v-if="getFieldComponentType(key) == 'el-input'" v-model="form[key]" placeholder="Please enter" />
|
||||
<el-select v-else-if="getFieldComponentType(key) == 'el-select'" v-model="form[key]"
|
||||
placeholder="请选择">
|
||||
<el-option v-for="item in getFieldOptions(key)" :key="item.value" :label="item.label" :value="item.value" />
|
||||
</el-select>
|
||||
<component v-else :is="getFieldComponentType(key)" v-model="form[key]"
|
||||
:placeholder="`请${getFieldInputHint(key)}${getFieldLabel(key)}`" :options="getFieldOptions(key)" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">Confirm</el-button>
|
||||
<el-button @click="cancel">Cancel</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "ProcessParamCardTemplate",
|
||||
props: {
|
||||
// 1. 接口集合:list/get/add/update/del/export
|
||||
apis: {
|
||||
type: Object,
|
||||
required: true,
|
||||
validator: (val) => {
|
||||
const requiredKeys = ['list', 'get', 'add', 'update', 'del', 'export'];
|
||||
return requiredKeys.every(key => typeof val[key] === 'function');
|
||||
}
|
||||
},
|
||||
// 2. 字段配置schema(数组格式):[{
|
||||
// prop: 字段名,
|
||||
// label: 字段标签,
|
||||
// required?: 是否必填,
|
||||
// type?: 'input'|'select'(默认input),
|
||||
// options?: 下拉选项数组(type=select时生效),
|
||||
// dict?: 字典转换函数(用于显示值转换,如钢种ID转名称)
|
||||
// }]
|
||||
schema: {
|
||||
type: Array,
|
||||
required: true,
|
||||
validator: (val) => val.every(item => !!item.prop && !!item.label)
|
||||
},
|
||||
// 3. 工艺参数接受值:字符串数组(编辑禁用的字段prop)
|
||||
processAcceptKeys: {
|
||||
type: Array,
|
||||
required: true,
|
||||
validator: (val) => val.every(item => typeof item === 'string')
|
||||
},
|
||||
// 4. 工艺参数返回值:字符串数组(可编辑的业务参数字段prop)
|
||||
processReturnKeys: {
|
||||
type: Array,
|
||||
required: true,
|
||||
validator: (val) => val.every(item => typeof item === 'string')
|
||||
},
|
||||
// 7. 额外查询参数(如钢种筛选)
|
||||
extraQueryParams: {
|
||||
type: Object,
|
||||
default: () => ({})
|
||||
}
|
||||
},
|
||||
data() {
|
||||
// 合并所有需要绑定的字段,初始化空值(解决响应式问题)
|
||||
const allKeys = [...this.processAcceptKeys, ...this.processReturnKeys];
|
||||
const initForm = {};
|
||||
allKeys.forEach(key => {
|
||||
initForm[key] = ''; // 为每个字段初始化空字符串,保证响应式
|
||||
});
|
||||
|
||||
// 初始化查询参数:合并分页参数、额外参数、processAcceptKeys空值
|
||||
const initQueryParams = {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
...this.extraQueryParams
|
||||
};
|
||||
// 为processAcceptKeys每个字段初始化查询参数空值
|
||||
this.processAcceptKeys.forEach(key => {
|
||||
initQueryParams[key] = '';
|
||||
});
|
||||
|
||||
return {
|
||||
// 加载状态
|
||||
loading: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 参数列表数据
|
||||
paramList: [],
|
||||
// 弹窗标题
|
||||
title: "",
|
||||
// 弹窗显隐
|
||||
open: false,
|
||||
// 查询参数(初始化包含processAcceptKeys字段)
|
||||
queryParams: initQueryParams,
|
||||
// 表单数据(初始化所有字段)
|
||||
form: initForm,
|
||||
// 是否为新增状态
|
||||
isAdd: false,
|
||||
// 表单校验规则
|
||||
formRules: {}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
// 初始化表单校验规则
|
||||
this.initFormRules();
|
||||
// 查询列表
|
||||
this.getList();
|
||||
},
|
||||
computed: {
|
||||
// 将processReturnKeys按每行2个分组(适配卡片布局)
|
||||
getGroupedReturnKeys() {
|
||||
const groups = [];
|
||||
for (let i = 0; i < this.processReturnKeys.length; i += 2) {
|
||||
groups.push(this.processReturnKeys.slice(i, i + 2));
|
||||
}
|
||||
return groups;
|
||||
},
|
||||
// 编辑状态(更直观的计算属性)
|
||||
isEdit() {
|
||||
return !this.isAdd;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
/** 根据字段prop获取标签(从schema数组中匹配) */
|
||||
getFieldLabel(prop) {
|
||||
const field = this.schema.find(item => item.prop === prop);
|
||||
return field ? field.label : prop;
|
||||
},
|
||||
|
||||
/** 根据字段prop获取控件类型(默认input) */
|
||||
getFieldComponentType(prop) {
|
||||
const field = this.schema.find(item => item.prop === prop);
|
||||
return field?.type || 'el-input';
|
||||
},
|
||||
|
||||
/** 根据字段prop获取输入提示(输入/选择) */
|
||||
getFieldInputHint(prop) {
|
||||
const field = this.schema.find(item => item.prop === prop);
|
||||
return field?.type === 'el-select' ? '请选择' : '请输入';
|
||||
},
|
||||
|
||||
/** 根据字段prop获取下拉选项 */
|
||||
getFieldOptions(prop) {
|
||||
const field = this.schema.find(item => item.prop === prop);
|
||||
return field?.options || [];
|
||||
},
|
||||
|
||||
/** 根据字段prop和值获取显示值(支持字典转换) */
|
||||
getFieldDisplayValue(prop, value) {
|
||||
if (value === '' || value === null || value === undefined) return '-';
|
||||
const field = this.schema.find(item => item.prop === prop);
|
||||
// 有字典转换函数则执行转换
|
||||
if (field?.dict && typeof field.dict === 'function') {
|
||||
return field.dict(value);
|
||||
}
|
||||
// 下拉选项转换(ID转label)
|
||||
if (field?.type === 'el-select' && field?.options.length) {
|
||||
const option = field.options.find(item => item.value == value);
|
||||
return option ? option.label : value;
|
||||
}
|
||||
return value;
|
||||
},
|
||||
|
||||
/** 初始化表单校验规则(基于schema中的required配置) */
|
||||
initFormRules() {
|
||||
this.formRules = {};
|
||||
// 遍历所有字段(接受值+返回值)生成校验规则
|
||||
const allKeys = [...this.processAcceptKeys, ...this.processReturnKeys];
|
||||
allKeys.forEach(key => {
|
||||
const field = this.schema.find(item => item.prop === key);
|
||||
if (field?.required !== false) { // 默认必填,除非显式设置required: false
|
||||
this.formRules[key] = [
|
||||
{ required: true, message: `${this.getFieldInputHint(key)} ${this.getFieldLabel(key)}`, trigger: 'blur' }
|
||||
];
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
handleRefresh() {
|
||||
this.getList();
|
||||
},
|
||||
|
||||
/** 搜索操作(适配筛选区查询) */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1; // 筛选时重置页码为第一页
|
||||
this.getList();
|
||||
},
|
||||
|
||||
/** 重置筛选条件 */
|
||||
handleResetFilter() {
|
||||
// 重置processAcceptKeys对应的筛选字段为空
|
||||
this.processAcceptKeys.forEach(key => {
|
||||
this.queryParams[key] = '';
|
||||
});
|
||||
// 重置额外查询参数(可选:若需要保留额外参数,可注释此行)
|
||||
// Object.keys(this.extraQueryParams).forEach(key => {
|
||||
// this.queryParams[key] = this.extraQueryParams[key];
|
||||
// });
|
||||
this.queryParams.pageNum = 1; // 重置页码
|
||||
this.getList(); // 重新查询
|
||||
},
|
||||
|
||||
/** 查询参数列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
// 合并额外查询参数(最终查询参数:分页+筛选+额外参数)
|
||||
const queryParams = { ...this.queryParams, ...this.extraQueryParams };
|
||||
this.apis.list(queryParams).then(response => {
|
||||
this.paramList = response.rows || [];
|
||||
this.total = response.total || 0;
|
||||
this.loading = false;
|
||||
}).catch(() => {
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
|
||||
/** 取消弹窗 */
|
||||
cancel() {
|
||||
this.open = false;
|
||||
this.resetForm();
|
||||
},
|
||||
|
||||
/** 重置表单(重新初始化所有字段,保证响应式) */
|
||||
resetForm() {
|
||||
const allKeys = [...this.processAcceptKeys, ...this.processReturnKeys];
|
||||
const initForm = {};
|
||||
allKeys.forEach(key => {
|
||||
initForm[key] = '';
|
||||
});
|
||||
this.form = initForm; // 重置为初始化状态
|
||||
if (this.$refs.form) {
|
||||
this.$refs.form.resetFields(); // 重置Element UI表单状态
|
||||
}
|
||||
},
|
||||
|
||||
/** 新增操作 */
|
||||
handleAdd() {
|
||||
this.isAdd = true;
|
||||
this.resetForm();
|
||||
this.open = true;
|
||||
this.title = `新增工艺参数`;
|
||||
},
|
||||
|
||||
/** 复制新增操作 */
|
||||
handleCopy(row) {
|
||||
this.isAdd = true;
|
||||
this.resetForm();
|
||||
// 复制行数据到表单
|
||||
const allKeys = [...this.processAcceptKeys, ...this.processReturnKeys];
|
||||
allKeys.forEach(key => {
|
||||
this.form[key] = row[key] || '';
|
||||
});
|
||||
this.open = true;
|
||||
this.title = `复制新增工艺参数`;
|
||||
},
|
||||
|
||||
/** 修改操作(优化异常处理和数据赋值) */
|
||||
handleUpdate(row) {
|
||||
this.isAdd = false; // 标记为编辑态
|
||||
this.resetForm(); // 重置表单
|
||||
this.apis.get(row).then(response => {
|
||||
const data = response.data || {};
|
||||
// 赋值到表单(处理undefined情况,保证字段有值)
|
||||
const allKeys = [...this.processAcceptKeys, ...this.processReturnKeys];
|
||||
allKeys.forEach(key => {
|
||||
this.form[key] = data[key] !== undefined ? data[key] : '';
|
||||
});
|
||||
this.open = true;
|
||||
this.title = `编辑工艺参数`;
|
||||
}).catch(error => {
|
||||
this.$modal.msgError('获取详情失败,请稍后重试。');
|
||||
console.error('获取详情失败:', error);
|
||||
});
|
||||
},
|
||||
|
||||
/** 提交表单 */
|
||||
submitForm() {
|
||||
this.$refs.form.validate(valid => {
|
||||
if (valid) {
|
||||
const api = this.isAdd ? this.apis.add : this.apis.update;
|
||||
api(this.form).then(() => {
|
||||
this.$modal.msgSuccess(this.isAdd ? "新增成功" : "更新成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
}).catch(error => {
|
||||
this.$modal.msgError(this.isAdd ? "新增失败" : "更新失败");
|
||||
console.error('提交失败:', error);
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
/** 删除操作 */
|
||||
handleDelete(row) {
|
||||
this.$modal.confirm('确定删除该工艺参数吗?').then(() => {
|
||||
return this.apis.del(row);
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("删除成功");
|
||||
}).catch(() => { });
|
||||
},
|
||||
|
||||
/** 导出操作 */
|
||||
handleExport() {
|
||||
try {
|
||||
this.download(this.apis.export, {
|
||||
...this.queryParams
|
||||
}, `工艺参数_${new Date().getTime()}.xlsx`);
|
||||
} catch (error) {
|
||||
this.$modal.msgWarning('导出功能暂未配置,请联系管理员。');
|
||||
console.error('导出失败:', error);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
// 样式部分新增筛选区样式,其余保持不变
|
||||
.panel-container {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
// 筛选区样式
|
||||
.filter-row {
|
||||
padding: 2px 0;
|
||||
background: #fafafa;
|
||||
padding: 8px;
|
||||
border-radius: 4px;
|
||||
border: 1px solid #e8e8e8;
|
||||
}
|
||||
|
||||
.filter-col {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.filter-form-item {
|
||||
margin-bottom: 0 !important;
|
||||
font-size: 12px;
|
||||
|
||||
::v-deep .el-form-item__label {
|
||||
font-size: 11px;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
::v-deep .el-input--mini,
|
||||
::v-deep .el-select--mini {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.filter-btn-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.card-grid-container {
|
||||
flex: 1;
|
||||
overflow-y: auto;
|
||||
margin-top: 10px;
|
||||
padding-right: 5px;
|
||||
min-height: 0;
|
||||
|
||||
&::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
}
|
||||
|
||||
&::-webkit-scrollbar-thumb {
|
||||
background: #c0c0c0;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
&::-webkit-scrollbar-track {
|
||||
background: #f0f0f0;
|
||||
}
|
||||
}
|
||||
|
||||
.card-col {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.parameter-card {
|
||||
height: 100%;
|
||||
border: 1px solid #d4d4d4;
|
||||
border-radius: 2px;
|
||||
|
||||
::v-deep .el-card__header {
|
||||
padding: 8px 10px;
|
||||
background: #f5f5f5;
|
||||
border-bottom: 1px solid #d4d4d4;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
border-color: #999;
|
||||
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
}
|
||||
|
||||
.card-header {
|
||||
.card-title {
|
||||
font-weight: 500;
|
||||
font-size: 12px;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
.card-body {
|
||||
.param-row {
|
||||
display: flex;
|
||||
margin-bottom: 6px;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.param-item {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 4px 6px;
|
||||
border-right: 1px solid #e8e8e8;
|
||||
|
||||
&:last-child {
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
&:only-child {
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
.param-label {
|
||||
color: #666;
|
||||
font-size: 11px;
|
||||
margin-bottom: 2px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.param-value {
|
||||
color: #333;
|
||||
font-weight: 500;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.card-footer {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
gap: 8px;
|
||||
padding-top: 8px;
|
||||
border-top: 1px solid #e8e8e8;
|
||||
margin-top: 8px;
|
||||
|
||||
.el-button {
|
||||
font-size: 12px;
|
||||
padding: 0 4px;
|
||||
}
|
||||
}
|
||||
|
||||
.empty-data {
|
||||
text-align: center;
|
||||
padding: 40px 0;
|
||||
}
|
||||
|
||||
.mb8 {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.dialog-footer {
|
||||
text-align: right;
|
||||
}
|
||||
</style>
|
||||
@@ -1,54 +0,0 @@
|
||||
<template>
|
||||
<ProcessParamCardTemplate :apis="tensionApis" :schema="tensionSchema" :processAcceptKeys="processAcceptKeys"
|
||||
:processReturnKeys="processReturnKeys" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import ProcessParamCardTemplate from './T.vue';
|
||||
import { listTension, getTension, delTension, addTension, updateTension } from "@/api/business/tension";
|
||||
|
||||
export default {
|
||||
name: "Tension",
|
||||
components: { ProcessParamCardTemplate },
|
||||
data() {
|
||||
return {
|
||||
// 1. 接口集合
|
||||
tensionApis: {
|
||||
list: listTension,
|
||||
get: getTension,
|
||||
add: addTension,
|
||||
update: updateTension,
|
||||
del: (row) => delTension({ thicks: [row.thick], yieldStrens: [row.yieldStren] }),
|
||||
export: 'business/tension/export'
|
||||
},
|
||||
// 2. 字段配置schema(数组格式)
|
||||
tensionSchema: [
|
||||
// 标识字段(processAcceptKeys)
|
||||
{ prop: 'thick', label: '厚度', required: true },
|
||||
{ prop: 'yieldStren', label: '屈服强度', required: true },
|
||||
// 业务参数(processReturnKeys)
|
||||
{ prop: 'value1', label: '开卷机张力', required: true },
|
||||
{ prop: 'value2', label: '入口活套', required: true },
|
||||
{ prop: 'value3', label: '清洗段', required: true },
|
||||
{ prop: 'value4', label: '炉区张力', required: true },
|
||||
{ prop: 'value5', label: '冷却塔', required: true },
|
||||
{ prop: 'value6', label: '平整机(停机状态)', required: true },
|
||||
{ prop: 'value7', label: '平整机入口', required: true },
|
||||
{ prop: 'value8', label: '平整机出口', required: true },
|
||||
{ prop: 'value9', label: '张力矫直机(停机状态)', required: true },
|
||||
{ prop: 'value10', label: '张力矫直机出口', required: true },
|
||||
{ prop: 'value11', label: '后处理段', required: true },
|
||||
{ prop: 'value12', label: '出口活套', required: true },
|
||||
{ prop: 'value13', label: '卷取机', required: true }
|
||||
],
|
||||
// 3. 工艺参数接受值(编辑禁用的字段prop)
|
||||
processAcceptKeys: ['thick', 'yieldStren'],
|
||||
// 4. 工艺参数返回值(可编辑的业务参数字段prop)
|
||||
processReturnKeys: [
|
||||
'value1', 'value2', 'value3', 'value4', 'value5', 'value6',
|
||||
'value7', 'value8', 'value9', 'value10', 'value11', 'value12', 'value13'
|
||||
]
|
||||
};
|
||||
}
|
||||
};
|
||||
</script>
|
||||
@@ -1,74 +0,0 @@
|
||||
<template>
|
||||
<ProcessParamCardTemplate
|
||||
:apis="apis"
|
||||
:schema="schema"
|
||||
:processAcceptKeys="processAcceptKeys"
|
||||
:processReturnKeys="processReturnKeys"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import ProcessParamCardTemplate from './T.vue';
|
||||
import { listTl, getTl, delTl, addTl, updateTl } from "@/api/business/tl";
|
||||
import { getSteelGradeList } from "@/api/l2/steelGrade";
|
||||
|
||||
export default {
|
||||
name: "Tl",
|
||||
components: { ProcessParamCardTemplate },
|
||||
data() {
|
||||
return {
|
||||
showSearch: true,
|
||||
// 接口配置
|
||||
apis: {
|
||||
list: listTl,
|
||||
get: getTl,
|
||||
add: addTl,
|
||||
update: updateTl,
|
||||
del: (row) => delTl({
|
||||
steelGrades: [row.steelGrade],
|
||||
yieldStrens: [row.yieldStren],
|
||||
thicks: [row.thick],
|
||||
}),
|
||||
export: 'business/tl/export'
|
||||
},
|
||||
// 字段配置
|
||||
schema: [],
|
||||
// 编辑禁用字段
|
||||
processAcceptKeys: ['steelGrade', 'yieldStren', 'thick'],
|
||||
// 可编辑业务字段
|
||||
processReturnKeys: ['value1', 'value2', 'value3', 'value4']
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.initSchema();
|
||||
},
|
||||
methods: {
|
||||
async initSchema() {
|
||||
// 获取钢种列表
|
||||
const steelGradeRes = await getSteelGradeList();
|
||||
const steelGradeList = steelGradeRes.data || [];
|
||||
|
||||
// 定义字段schema
|
||||
this.schema = [
|
||||
{
|
||||
prop: 'steelGrade',
|
||||
label: '钢种',
|
||||
required: true,
|
||||
type: 'el-select',
|
||||
options: steelGradeList.map(item => ({ label: item.name, value: item.gradeid })),
|
||||
dict: (gradeId) => {
|
||||
const grade = steelGradeList.find(item => item.gradeid === gradeId);
|
||||
return grade ? grade.name : gradeId;
|
||||
}
|
||||
},
|
||||
{ prop: 'yieldStren', label: '屈服强度', required: true },
|
||||
{ prop: 'thick', label: '厚度', required: true },
|
||||
{ prop: 'value1', label: '伸长率', required: true },
|
||||
{ prop: 'value2', label: '一级级头插入力', required: true },
|
||||
{ prop: 'value3', label: '二级级头插入力', required: true },
|
||||
{ prop: 'value4', label: '反跨弓插入力', required: true }
|
||||
];
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
@@ -1,45 +0,0 @@
|
||||
<template>
|
||||
<ProcessParamCardTemplate
|
||||
:apis="apis"
|
||||
:schema="schema"
|
||||
:processAcceptKeys="processAcceptKeys"
|
||||
:processReturnKeys="processReturnKeys"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import ProcessParamCardTemplate from './T.vue';
|
||||
import { listBendforce, getBendforce, delBendforce, addBendforce, updateBendforce } from "@/api/business/bendforce";
|
||||
|
||||
export default {
|
||||
name: "Bendforce",
|
||||
components: { ProcessParamCardTemplate },
|
||||
data() {
|
||||
return {
|
||||
showSearch: true,
|
||||
// 接口配置
|
||||
apis: {
|
||||
list: listBendforce,
|
||||
get: getBendforce,
|
||||
add: addBendforce,
|
||||
update: updateBendforce,
|
||||
del: (row) => delBendforce({
|
||||
widths: [row.width],
|
||||
rollForces: [row.rollForce]
|
||||
}),
|
||||
export: 'business/bendforce/export'
|
||||
},
|
||||
// 字段配置
|
||||
schema: [
|
||||
{ prop: 'width', label: '宽度', required: true },
|
||||
{ prop: 'rollForce', label: '轧制力', required: true },
|
||||
{ prop: 'value1', label: '弯曲力', required: true }
|
||||
],
|
||||
// 编辑禁用字段
|
||||
processAcceptKeys: ['width', 'rollForce'],
|
||||
// 可编辑业务字段
|
||||
processReturnKeys: ['value1']
|
||||
};
|
||||
}
|
||||
};
|
||||
</script>
|
||||
@@ -1,72 +0,0 @@
|
||||
<template>
|
||||
<ProcessParamCardTemplate
|
||||
:apis="apis"
|
||||
:schema="schema"
|
||||
:processAcceptKeys="processAcceptKeys"
|
||||
:processReturnKeys="processReturnKeys"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import ProcessParamCardTemplate from './T.vue';
|
||||
import { listMesh, getMesh, delMesh, addMesh, updateMesh } from "@/api/business/mesh";
|
||||
import { getSteelGradeList } from "@/api/l2/steelGrade";
|
||||
|
||||
export default {
|
||||
name: "Mesh",
|
||||
components: { ProcessParamCardTemplate },
|
||||
data() {
|
||||
return {
|
||||
showSearch: true,
|
||||
// 接口配置
|
||||
apis: {
|
||||
list: listMesh,
|
||||
get: getMesh,
|
||||
add: addMesh,
|
||||
update: updateMesh,
|
||||
del: (row) => delMesh({
|
||||
steelGrades: [row.steelGrade],
|
||||
yieldStrens: [row.yieldStren],
|
||||
thicks: [row.thick]
|
||||
}),
|
||||
export: 'business/mesh/export'
|
||||
},
|
||||
// 字段配置
|
||||
schema: [],
|
||||
// 编辑禁用字段
|
||||
processAcceptKeys: ['steelGrade', 'thick', 'yieldStren'],
|
||||
// 可编辑业务字段
|
||||
processReturnKeys: ['value1', 'value2']
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.initSchema();
|
||||
},
|
||||
methods: {
|
||||
async initSchema() {
|
||||
// 获取钢种列表
|
||||
const steelGradeRes = await getSteelGradeList();
|
||||
const steelGradeList = steelGradeRes.data || [];
|
||||
|
||||
// 定义字段schema
|
||||
this.schema = [
|
||||
{
|
||||
prop: 'steelGrade',
|
||||
label: '钢种',
|
||||
required: true,
|
||||
type: 'el-select',
|
||||
options: steelGradeList.map(item => ({ label: item.name, value: item.gradeid })),
|
||||
dict: (gradeId) => {
|
||||
const grade = steelGradeList.find(item => item.gradeid == gradeId);
|
||||
return grade ? grade.name : gradeId;
|
||||
}
|
||||
},
|
||||
{ prop: 'thick', label: '厚度', required: true },
|
||||
{ prop: 'yieldStren', label: '屈服强度', required: true },
|
||||
{ prop: 'value1', label: '防皱辊插入量', required: true },
|
||||
{ prop: 'value2', label: '防颤辊插入量', required: true }
|
||||
];
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
@@ -1,73 +0,0 @@
|
||||
<template>
|
||||
<ProcessParamCardTemplate
|
||||
:apis="apis"
|
||||
:schema="schema"
|
||||
:processAcceptKeys="processAcceptKeys"
|
||||
:processReturnKeys="processReturnKeys"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import ProcessParamCardTemplate from './T.vue';
|
||||
import { listRollforce, getRollforce, delRollforce, addRollforce, updateRollforce } from "@/api/business/rollforce";
|
||||
import { getSteelGradeList } from "@/api/l2/steelGrade";
|
||||
|
||||
export default {
|
||||
name: "Rollforce",
|
||||
components: { ProcessParamCardTemplate },
|
||||
data() {
|
||||
return {
|
||||
showSearch: true,
|
||||
// 接口配置
|
||||
apis: {
|
||||
list: listRollforce,
|
||||
get: getRollforce,
|
||||
add: addRollforce,
|
||||
update: updateRollforce,
|
||||
del: (row) => delRollforce({
|
||||
steelGrades: [row.steelGrade],
|
||||
yieldStrens: [row.yieldStren],
|
||||
thicks: [row.thick],
|
||||
elong: [row.elong]
|
||||
}),
|
||||
export: 'business/rollforce/export'
|
||||
},
|
||||
// 字段配置
|
||||
schema: [],
|
||||
// 编辑禁用字段
|
||||
processAcceptKeys: ['steelGrade', 'thick', 'yieldStren', 'elong'],
|
||||
// 可编辑业务字段
|
||||
processReturnKeys: ['value1']
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.initSchema();
|
||||
},
|
||||
methods: {
|
||||
async initSchema() {
|
||||
// 获取钢种列表
|
||||
const steelGradeRes = await getSteelGradeList();
|
||||
const steelGradeList = steelGradeRes.data || [];
|
||||
|
||||
// 定义字段schema
|
||||
this.schema = [
|
||||
{
|
||||
prop: 'steelGrade',
|
||||
label: '钢种',
|
||||
required: true,
|
||||
type: 'el-select',
|
||||
options: steelGradeList.map(item => ({ label: item.name, value: item.gradeid })),
|
||||
dict: (gradeId) => {
|
||||
const grade = steelGradeList.find(item => item.gradeid == gradeId);
|
||||
return grade ? grade.name : gradeId;
|
||||
}
|
||||
},
|
||||
{ prop: 'thick', label: '厚度', required: true },
|
||||
{ prop: 'yieldStren', label: '屈服强度', required: true },
|
||||
{ prop: 'elong', label: '延展力', required: true },
|
||||
{ prop: 'value1', label: '轧制力', required: true }
|
||||
];
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
@@ -1,396 +0,0 @@
|
||||
<template>
|
||||
<div class="panel-container">
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="primary"
|
||||
plain
|
||||
icon="el-icon-plus"
|
||||
size="mini"
|
||||
@click="handleAdd"
|
||||
>Add</el-button>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button
|
||||
type="warning"
|
||||
plain
|
||||
icon="el-icon-download"
|
||||
size="mini"
|
||||
@click="handleExport"
|
||||
>Export</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- 卡片网格布局 -->
|
||||
<div v-loading="loading" class="card-grid-container">
|
||||
<el-row :gutter="12">
|
||||
<el-col
|
||||
v-for="(item, index) in furList"
|
||||
:key="index"
|
||||
:xs="24"
|
||||
:sm="12"
|
||||
:md="8"
|
||||
:lg="5"
|
||||
:xl="4"
|
||||
class="card-col"
|
||||
>
|
||||
<el-card class="parameter-card" shadow="never" :body-style="{ padding: '10px' }">
|
||||
<div slot="header" class="card-header">
|
||||
<span class="card-title">Steel Grade: {{ getSteelGradeName(item.steelGrade) || '-' }}</span>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="param-row">
|
||||
<div class="param-item">
|
||||
<span class="param-label">Preheat section exit temperature:</span>
|
||||
<span class="param-value">{{ item.value1 || '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item">
|
||||
<span class="param-label">Heating section exit temperature:</span>
|
||||
<span class="param-value">{{ item.value2 || '-' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="param-row">
|
||||
<div class="param-item">
|
||||
<span class="param-label">Cooling section exit temperature:</span>
|
||||
<span class="param-value">{{ item.value3 || '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-edit"
|
||||
@click="handleUpdate(item)"
|
||||
>Edit</el-button>
|
||||
<el-button
|
||||
size="mini"
|
||||
type="text"
|
||||
icon="el-icon-delete"
|
||||
@click="handleDelete(item)"
|
||||
>Delete</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div v-if="furList.length === 0 && !loading" class="empty-data">
|
||||
<el-empty description="No data"></el-empty>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<pagination
|
||||
v-show="total>0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- Add / Edit Furnace process parameters dialog -->
|
||||
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||||
<el-form-item label="Steel Grade" prop="steelGrade">
|
||||
<el-select v-model="form.steelGrade" placeholder="Please select">
|
||||
<el-option v-for="item in steelGradeList" :key="item.gradeid" :label="item.name" :value="item.gradeid" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="Preheat section exit temperature" prop="value1">
|
||||
<el-input v-model="form.value1" placeholder="Please enter" />
|
||||
</el-form-item>
|
||||
<el-form-item label="Heating section exit temperature" prop="value2">
|
||||
<el-input v-model="form.value2" placeholder="Please enter" />
|
||||
</el-form-item>
|
||||
<el-form-item label="Cooling section exit temperature" prop="value3">
|
||||
<el-input v-model="form.value3" placeholder="Please enter" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">Confirm</el-button>
|
||||
<el-button @click="cancel">Cancel</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { listFur, getFur, delFur, addFur, updateFur } from "@/api/business/fur";
|
||||
import { getSteelGradeList } from "@/api/l2/steelGrade";
|
||||
|
||||
export default {
|
||||
name: "Fur",
|
||||
data() {
|
||||
return {
|
||||
isAdd: false,
|
||||
steelGradeList: [],
|
||||
// 遮罩层
|
||||
loading: true,
|
||||
// 选中数组
|
||||
ids: [],
|
||||
// 非单个禁用
|
||||
single: true,
|
||||
// 非多个禁用
|
||||
multiple: true,
|
||||
// 显示搜索条件
|
||||
showSearch: true,
|
||||
// 总条数
|
||||
total: 0,
|
||||
// 炉火段工艺参数表格数据
|
||||
furList: [],
|
||||
// 弹出层标题
|
||||
title: "",
|
||||
// 是否显示弹出层
|
||||
open: false,
|
||||
// 查询参数
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
steelGrade: null
|
||||
},
|
||||
// 表单参数
|
||||
form: {},
|
||||
// 表单校验
|
||||
rules: {
|
||||
}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.getList();
|
||||
this.getSteelGradeList();
|
||||
},
|
||||
methods: {
|
||||
/** 查询炉火段工艺参数列表 */
|
||||
getList() {
|
||||
this.loading = true;
|
||||
listFur(this.queryParams).then(response => {
|
||||
this.furList = response.rows;
|
||||
this.total = response.total;
|
||||
this.loading = false;
|
||||
});
|
||||
},
|
||||
getSteelGradeList() {
|
||||
getSteelGradeList().then(response => {
|
||||
this.steelGradeList = response.data;
|
||||
});
|
||||
},
|
||||
// 取消按钮
|
||||
cancel() {
|
||||
this.open = false;
|
||||
this.reset();
|
||||
},
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
steelGrade: null,
|
||||
value1: null,
|
||||
value2: null,
|
||||
value3: null,
|
||||
value4: null,
|
||||
value5: null,
|
||||
value6: null,
|
||||
value7: null,
|
||||
value8: null,
|
||||
value9: null,
|
||||
value10: null,
|
||||
updateTime: null,
|
||||
createTime: null
|
||||
};
|
||||
this.resetForm("form");
|
||||
},
|
||||
/** 搜索按钮操作 */
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1;
|
||||
this.getList();
|
||||
},
|
||||
/** 重置按钮操作 */
|
||||
resetQuery() {
|
||||
this.resetForm("queryForm");
|
||||
this.handleQuery();
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.steelGrade)
|
||||
this.single = selection.length!==1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
/** 新增按钮操作 */
|
||||
handleAdd() {
|
||||
this.isAdd = true;
|
||||
this.reset();
|
||||
this.open = true;
|
||||
this.title = "Add Furnace process parameters";
|
||||
},
|
||||
/** 修改按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.isAdd = false;
|
||||
this.reset();
|
||||
const steelGrade = row.steelGrade || this.ids
|
||||
getFur(steelGrade).then(response => {
|
||||
this.form = response.data;
|
||||
this.open = true;
|
||||
this.title = "Edit Furnace process parameters";
|
||||
});
|
||||
},
|
||||
/** 提交按钮 */
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (!this.isAdd) {
|
||||
updateFur(this.form).then(response => {
|
||||
this.$modal.msgSuccess("Updated successfully");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
} else {
|
||||
addFur(this.form).then(response => {
|
||||
this.$modal.msgSuccess("Added successfully");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const steelGrades = row.steelGrade || this.ids;
|
||||
this.$modal.confirm('Are you sure you want to delete furnace parameters for steelGrade "' + steelGrades + '"?').then(function() {
|
||||
return delFur(steelGrades);
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("Deleted successfully");
|
||||
}).catch(() => {});
|
||||
},
|
||||
/** 导出按钮操作 */
|
||||
handleExport() {
|
||||
this.download('business/fur/export', {
|
||||
...this.queryParams
|
||||
}, `fur_${new Date().getTime()}.xlsx`)
|
||||
},
|
||||
/** 获取钢种名称 */
|
||||
getSteelGradeName(gradeId) {
|
||||
const grade = this.steelGradeList.find(item => item.gradeid === gradeId);
|
||||
return grade ? grade.name : gradeId;
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.panel-container {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.card-grid-container {
|
||||
flex: 1;
|
||||
overflow-y: auto;
|
||||
margin-top: 10px;
|
||||
padding-right: 5px;
|
||||
min-height: 0;
|
||||
|
||||
&::-webkit-scrollbar {
|
||||
width: 6px;
|
||||
}
|
||||
|
||||
&::-webkit-scrollbar-thumb {
|
||||
background: #c0c0c0;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
&::-webkit-scrollbar-track {
|
||||
background: #f0f0f0;
|
||||
}
|
||||
}
|
||||
|
||||
.card-col {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.parameter-card {
|
||||
height: 100%;
|
||||
border: 1px solid #d4d4d4;
|
||||
border-radius: 2px;
|
||||
|
||||
::v-deep .el-card__header {
|
||||
padding: 8px 10px;
|
||||
background: #f5f5f5;
|
||||
border-bottom: 1px solid #d4d4d4;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
border-color: #999;
|
||||
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
}
|
||||
|
||||
.card-header {
|
||||
.card-title {
|
||||
font-weight: 500;
|
||||
font-size: 12px;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
.card-body {
|
||||
.param-row {
|
||||
display: flex;
|
||||
margin-bottom: 6px;
|
||||
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.param-item {
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding: 4px 6px;
|
||||
border-right: 1px solid #e8e8e8;
|
||||
|
||||
&:last-child {
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
&:only-child {
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
.param-label {
|
||||
color: #666;
|
||||
font-size: 11px;
|
||||
margin-bottom: 2px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.param-value {
|
||||
color: #333;
|
||||
font-weight: 500;
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.card-footer {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
gap: 8px;
|
||||
padding-top: 8px;
|
||||
border-top: 1px solid #e8e8e8;
|
||||
margin-top: 8px;
|
||||
|
||||
.el-button {
|
||||
font-size: 12px;
|
||||
padding: 0 4px;
|
||||
}
|
||||
}
|
||||
|
||||
.empty-data {
|
||||
text-align: center;
|
||||
padding: 40px 0;
|
||||
}
|
||||
</style>
|
||||
236
apps/l2/src/views/l2/setup/panels/TensionTable.vue
Normal file
236
apps/l2/src/views/l2/setup/panels/TensionTable.vue
Normal file
@@ -0,0 +1,236 @@
|
||||
<template>
|
||||
<div class="tension-table-container">
|
||||
<!-- 查询区域 -->
|
||||
<el-form :inline="true" size="mini" class="query-form" @submit.native.prevent>
|
||||
<el-form-item v-for="k in acceptKeys" :key="k" :label="getLabel(k)">
|
||||
<el-input
|
||||
v-model="queryParams[k]"
|
||||
clearable
|
||||
:placeholder="`请输入${getLabel(k)}`"
|
||||
@keyup.enter.native="handleQuery"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" @click="handleQuery">查询</el-button>
|
||||
<el-button icon="el-icon-refresh-left" @click="handleReset">重置</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<!-- 操作栏 -->
|
||||
<div class="toolbar">
|
||||
<div class="title">{{ title }}</div>
|
||||
<div class="actions">
|
||||
<el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="getList">刷新</el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 表格 -->
|
||||
<el-table v-loading="loading" :data="list" border stripe height="calc(100% - 148px)">
|
||||
<el-table-column type="index" label="#" width="50" />
|
||||
|
||||
<el-table-column
|
||||
v-for="col in schema"
|
||||
:key="col.prop"
|
||||
:prop="col.prop"
|
||||
:label="col.label"
|
||||
:min-width="col.minWidth || 120"
|
||||
show-overflow-tooltip
|
||||
/>
|
||||
|
||||
<el-table-column label="操作" width="180" fixed="right">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="text" size="mini" icon="el-icon-edit" @click="handleEdit(scope.row)">编辑</el-button>
|
||||
<el-button type="text" size="mini" icon="el-icon-delete" @click="handleDelete(scope.row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!-- 分页 -->
|
||||
<pagination
|
||||
v-show="total > 0"
|
||||
:total="total"
|
||||
:page.sync="queryParams.pageNum"
|
||||
:limit.sync="queryParams.pageSize"
|
||||
@pagination="getList"
|
||||
/>
|
||||
|
||||
<!-- 新增/编辑弹窗 -->
|
||||
<el-dialog :title="dialogTitle" :visible.sync="dialogOpen" width="720px" append-to-body>
|
||||
<el-form ref="form" :model="form" :rules="rules" label-width="110px" size="mini">
|
||||
<el-row :gutter="12">
|
||||
<el-col :span="12" v-for="col in schema" :key="'f-' + col.prop">
|
||||
<el-form-item :label="col.label" :prop="col.prop">
|
||||
<el-input v-model="form[col.prop]" :disabled="isEdit && acceptKeys.includes(col.prop)" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogOpen = false">取消</el-button>
|
||||
<el-button type="primary" :loading="submitLoading" @click="submitForm">确定</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'TensionTable',
|
||||
props: {
|
||||
title: { type: String, default: '' },
|
||||
apis: {
|
||||
type: Object,
|
||||
required: true,
|
||||
validator(val) {
|
||||
return ['list', 'get', 'add', 'update', 'del'].every(k => typeof val[k] === 'function')
|
||||
}
|
||||
},
|
||||
schema: { type: Array, required: true },
|
||||
acceptKeys: { type: Array, required: true }
|
||||
},
|
||||
data() {
|
||||
const qp = { pageNum: 1, pageSize: 10 }
|
||||
this.acceptKeys.forEach(k => (qp[k] = ''))
|
||||
|
||||
const fm = {}
|
||||
;(this.schema || []).forEach(c => {
|
||||
fm[c.prop] = ''
|
||||
})
|
||||
|
||||
return {
|
||||
loading: false,
|
||||
total: 0,
|
||||
list: [],
|
||||
queryParams: qp,
|
||||
dialogOpen: false,
|
||||
dialogTitle: '',
|
||||
isEdit: false,
|
||||
form: fm,
|
||||
rules: {},
|
||||
submitLoading: false
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.buildRules()
|
||||
this.getList()
|
||||
},
|
||||
methods: {
|
||||
getLabel(prop) {
|
||||
return (this.schema.find(s => s.prop === prop) || {}).label || prop
|
||||
},
|
||||
buildRules() {
|
||||
const r = {}
|
||||
this.schema.forEach(c => {
|
||||
if (c.required) {
|
||||
r[c.prop] = [{ required: true, message: `请输入${c.label}`, trigger: 'blur' }]
|
||||
}
|
||||
})
|
||||
this.rules = r
|
||||
},
|
||||
handleQuery() {
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
handleReset() {
|
||||
this.acceptKeys.forEach(k => (this.queryParams[k] = ''))
|
||||
this.queryParams.pageNum = 1
|
||||
this.getList()
|
||||
},
|
||||
async getList() {
|
||||
this.loading = true
|
||||
try {
|
||||
const res = await this.apis.list({ ...this.queryParams })
|
||||
this.list = res.rows || res.data || []
|
||||
this.total = res.total || 0
|
||||
} finally {
|
||||
this.loading = false
|
||||
}
|
||||
},
|
||||
resetForm() {
|
||||
const fm = {}
|
||||
this.schema.forEach(c => {
|
||||
fm[c.prop] = ''
|
||||
})
|
||||
this.form = fm
|
||||
this.$nextTick(() => {
|
||||
this.$refs.form && this.$refs.form.clearValidate()
|
||||
})
|
||||
},
|
||||
handleAdd() {
|
||||
this.isEdit = false
|
||||
this.dialogTitle = `新增${this.title}`
|
||||
this.resetForm()
|
||||
this.dialogOpen = true
|
||||
},
|
||||
async handleEdit(row) {
|
||||
this.isEdit = true
|
||||
this.dialogTitle = `编辑${this.title}`
|
||||
this.resetForm()
|
||||
// 详情按三主键
|
||||
const keyObj = {}
|
||||
this.acceptKeys.forEach(k => (keyObj[k] = row[k]))
|
||||
const res = await this.apis.get(keyObj)
|
||||
const data = res.data || res
|
||||
this.schema.forEach(c => {
|
||||
this.form[c.prop] = data[c.prop]
|
||||
})
|
||||
this.dialogOpen = true
|
||||
},
|
||||
submitForm() {
|
||||
this.$refs.form.validate(async valid => {
|
||||
if (!valid) return
|
||||
this.submitLoading = true
|
||||
try {
|
||||
if (this.isEdit) {
|
||||
await this.apis.update(this.form)
|
||||
this.$message.success('更新成功')
|
||||
} else {
|
||||
await this.apis.add(this.form)
|
||||
this.$message.success('新增成功')
|
||||
}
|
||||
this.dialogOpen = false
|
||||
this.getList()
|
||||
} finally {
|
||||
this.submitLoading = false
|
||||
}
|
||||
})
|
||||
},
|
||||
handleDelete(row) {
|
||||
this.$confirm('确认删除该记录吗?', '提示', { type: 'warning' })
|
||||
.then(async () => {
|
||||
const keyObj = {}
|
||||
this.acceptKeys.forEach(k => (keyObj[k] = row[k]))
|
||||
await this.apis.del(keyObj)
|
||||
this.$message.success('删除成功')
|
||||
this.getList()
|
||||
})
|
||||
.catch(() => {})
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.tension-table-container {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
.query-form {
|
||||
padding: 10px 10px 0;
|
||||
border: 1px solid #ebeef5;
|
||||
background: #fafafa;
|
||||
}
|
||||
.toolbar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 10px 0;
|
||||
}
|
||||
.title {
|
||||
font-weight: 600;
|
||||
color: #303133;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -15,6 +15,18 @@
|
||||
<el-input v-model="queryParams.planid" placeholder="请输入计划号" clearable
|
||||
@keyup.enter.native="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="钢种" prop="steelGrade">
|
||||
<el-input v-model="queryParams.steelGrade" placeholder="请输入钢种" clearable
|
||||
@keyup.enter.native="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="厚度" prop="thick">
|
||||
<el-input v-model="queryParams.thick" placeholder="请输入厚度" clearable
|
||||
@keyup.enter.native="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="屈服强度" prop="yieldStren">
|
||||
<el-input v-model="queryParams.yieldStren" placeholder="请输入屈服强度" clearable
|
||||
@keyup.enter.native="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
||||
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
||||
@@ -34,7 +46,8 @@
|
||||
<div class="card-title-row">
|
||||
<span class="card-title">钢卷号: {{ item.coilid || '-' }}</span>
|
||||
</div>
|
||||
<div class="card-subtitle">计划号: {{ item.planid || '-' }} | 更改次数: {{ item.type || '-' }}</div>
|
||||
<div class="card-subtitle">计划号: {{ item.planid || '-' }}</div>
|
||||
<div class="card-subtitle">钢种: {{ item.steelGrade || '-' }}</div>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
<el-button size="mini" type="text" icon="el-icon-delete" @click="handleDelete(item)">删除</el-button>
|
||||
@@ -46,12 +59,13 @@
|
||||
:limit.sync="queryParams.pageSize" @pagination="getList" />
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<div v-if="currentRow && currentRow.coilid" class="parameter-detail">
|
||||
<div v-if="currentRow && currentRow.id" class="parameter-detail">
|
||||
<div class="card-header">
|
||||
<div class="card-title-row">
|
||||
<span class="card-title">钢卷号: {{ currentRow.coilid || '-' }}</span>
|
||||
</div>
|
||||
<div class="card-subtitle">计划号: {{ currentRow.planid || '-' }} | 更改次数: {{ currentRow.type || '-' }}</div>
|
||||
<div class="card-subtitle">计划号: {{ currentRow.planid || '-' }}</div>
|
||||
<div class="card-subtitle">钢种: {{ currentRow.steelGrade || '-' }} | 厚度: {{ currentRow.thick || '-' }} | 屈服强度: {{ currentRow.yieldStren || '-' }}</div>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<!-- 全线张力 -->
|
||||
@@ -60,61 +74,59 @@
|
||||
<div class="param-row">
|
||||
<div class="param-item">
|
||||
<span class="param-label">开卷机张力:</span>
|
||||
<span class="param-value">{{ currentRow.porTension || '-' }}</span>
|
||||
<span class="param-value">{{ currentRow.porTension ?? '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item">
|
||||
<span class="param-label">入口活套张力:</span>
|
||||
<span class="param-value">{{ currentRow.celTension || '-' }}</span>
|
||||
<span class="param-value">{{ currentRow.celTension ?? '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item">
|
||||
<span class="param-label">清洗段张力:</span>
|
||||
<span class="param-value">{{ currentRow.cleanTension || '-' }}</span>
|
||||
<span class="param-value">{{ currentRow.cleanTension ?? '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item">
|
||||
<span class="param-label">炉区张力:</span>
|
||||
<span class="param-value">{{ currentRow.furTension || '-' }}</span>
|
||||
<span class="param-label">钝化段张力:</span>
|
||||
<span class="param-value">{{ currentRow.passivationTension ?? '-' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="param-row">
|
||||
<div class="param-item">
|
||||
<span class="param-label">冷却塔张力:</span>
|
||||
<span class="param-value">{{ currentRow.towerTension || '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item">
|
||||
<span class="param-label">光整机不投张力:</span>
|
||||
<span class="param-value">{{ currentRow.tmNoneTension || '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item">
|
||||
<span class="param-label">光整机入口张力:</span>
|
||||
<span class="param-value">{{ currentRow.tmEntryTension || '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item">
|
||||
<span class="param-label">光整机出口张力:</span>
|
||||
<span class="param-value">{{ currentRow.tmExitTension || '-' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="param-row">
|
||||
<div class="param-item">
|
||||
<span class="param-label">拉矫机不投张力:</span>
|
||||
<span class="param-value">{{ currentRow.tlNoneTension || '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item">
|
||||
<span class="param-label">拉矫机出口张力:</span>
|
||||
<span class="param-value">{{ currentRow.tlExitTension || '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item">
|
||||
<span class="param-label">后处理张力:</span>
|
||||
<span class="param-value">{{ currentRow.coatTension || '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item">
|
||||
<span class="param-label">出口活套张力:</span>
|
||||
<span class="param-value">{{ currentRow.cxlTension || '-' }}</span>
|
||||
<span class="param-value">{{ currentRow.cxlTension ?? '-' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="param-row">
|
||||
<div class="param-item">
|
||||
<span class="param-label">卷取机张力:</span>
|
||||
<span class="param-value">{{ currentRow.trTension || '-' }}</span>
|
||||
<span class="param-value">{{ currentRow.trTension ?? '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item"></div>
|
||||
<div class="param-item"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 平整机张力 -->
|
||||
<div class="param-group">
|
||||
<div class="group-title">平整机张力</div>
|
||||
<div class="param-row">
|
||||
<div class="param-item">
|
||||
<span class="param-label">平整机入口张力:</span>
|
||||
<span class="param-value">{{ currentRow.levelerEntryTension ?? '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item">
|
||||
<span class="param-label">平整机出口张力:</span>
|
||||
<span class="param-value">{{ currentRow.levelerExitTension ?? '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item"></div>
|
||||
<div class="param-item"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 矫直机张力 -->
|
||||
<div class="param-group">
|
||||
<div class="group-title">矫直机张力</div>
|
||||
<div class="param-row">
|
||||
<div class="param-item">
|
||||
<span class="param-label">矫直机出口张力:</span>
|
||||
<span class="param-value">{{ currentRow.straightenerExitTension ?? '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item"></div>
|
||||
<div class="param-item"></div>
|
||||
@@ -122,75 +134,26 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 光整机参数 -->
|
||||
<!-- 退火炉张力 -->
|
||||
<div class="param-group">
|
||||
<div class="group-title">光整机参数</div>
|
||||
<div class="group-title">退火炉张力</div>
|
||||
<div class="param-row">
|
||||
<div class="param-item">
|
||||
<span class="param-label">光整机轧制力:</span>
|
||||
<span class="param-value">{{ currentRow.tmRollforce || '-' }}</span>
|
||||
<span class="param-label">炉区张力:</span>
|
||||
<span class="param-value">{{ currentRow.furTension ?? '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item">
|
||||
<span class="param-label">光整机弯辊力:</span>
|
||||
<span class="param-value">{{ currentRow.tmBendforce || '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item">
|
||||
<span class="param-label">防皱辊插入量:</span>
|
||||
<span class="param-value">{{ currentRow.tmAcrMesh || '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item">
|
||||
<span class="param-label">防颤辊插入量:</span>
|
||||
<span class="param-value">{{ currentRow.tmBrMesh || '-' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 拉矫机参数 -->
|
||||
<div class="param-group">
|
||||
<div class="group-title">拉矫机参数</div>
|
||||
<div class="param-row">
|
||||
<div class="param-item">
|
||||
<span class="param-label">拉矫机延伸率:</span>
|
||||
<span class="param-value">{{ currentRow.tlElong || '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item">
|
||||
<span class="param-label">矫直辊插入量1:</span>
|
||||
<span class="param-value">{{ currentRow.tlLvlMesh1 || '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item">
|
||||
<span class="param-label">矫直辊插入量2:</span>
|
||||
<span class="param-value">{{ currentRow.tlLvlMesh2 || '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item">
|
||||
<span class="param-label">防横弓插入量:</span>
|
||||
<span class="param-value">{{ currentRow.tlAcbMesh || '-' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 炉段温度 -->
|
||||
<div class="param-group">
|
||||
<div class="group-title">炉段温度</div>
|
||||
<div class="param-row">
|
||||
<div class="param-item">
|
||||
<span class="param-label">预热段出口板温:</span>
|
||||
<span class="param-value">{{ currentRow.preheatingSection || '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item">
|
||||
<span class="param-label">加热段出口板温:</span>
|
||||
<span class="param-value">{{ currentRow.heatingSection || '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item">
|
||||
<span class="param-label">冷却段出口板温:</span>
|
||||
<span class="param-value">{{ currentRow.coolingSection || '-' }}</span>
|
||||
<span class="param-label">冷却塔张力:</span>
|
||||
<span class="param-value">{{ currentRow.towerTension ?? '-' }}</span>
|
||||
</div>
|
||||
<div class="param-item"></div>
|
||||
<div class="param-item"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<el-empty v-else description="请在左侧选择钢卷查看工艺历史"></el-empty>
|
||||
<el-empty v-else description="请在左侧选择记录查看参数详情"></el-empty>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
@@ -203,6 +166,7 @@
|
||||
<span class="selected-label">已选中:</span>
|
||||
<span class="selected-value">钢卷 {{ currentRow.coilid }}</span>
|
||||
<span class="selected-detail" v-if="currentRow.planid">计划号: {{ currentRow.planid }}</span>
|
||||
<span class="selected-detail">钢种: {{ currentRow.steelGrade || '-' }} | 厚度: {{ currentRow.thick || '-' }} | 屈服强度: {{ currentRow.yieldStren || '-' }}</span>
|
||||
</div>
|
||||
<div v-else class="selected-info empty">
|
||||
<i class="el-icon-info"></i>
|
||||
@@ -249,8 +213,11 @@ export default {
|
||||
queryParams: {
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
COILID: null,
|
||||
PLANID: null,
|
||||
coilid: null,
|
||||
planid: null,
|
||||
steelGrade: null,
|
||||
thick: null,
|
||||
yieldStren: null,
|
||||
porTension: null,
|
||||
celTension: null,
|
||||
cleanTension: null,
|
||||
@@ -303,9 +270,12 @@ export default {
|
||||
// 表单重置
|
||||
reset() {
|
||||
this.form = {
|
||||
ID: null,
|
||||
COILID: null,
|
||||
PLANID: null,
|
||||
id: null,
|
||||
coilid: null,
|
||||
planid: null,
|
||||
steelGrade: null,
|
||||
thick: null,
|
||||
yieldStren: null,
|
||||
porTension: null,
|
||||
celTension: null,
|
||||
cleanTension: null,
|
||||
@@ -346,7 +316,7 @@ export default {
|
||||
},
|
||||
// 多选框选中数据
|
||||
handleSelectionChange(selection) {
|
||||
this.ids = selection.map(item => item.ID)
|
||||
this.ids = selection.map(item => item.id)
|
||||
this.single = selection.length !== 1
|
||||
this.multiple = !selection.length
|
||||
},
|
||||
@@ -355,7 +325,7 @@ export default {
|
||||
return this.ids.includes(this.getItemKey(item))
|
||||
},
|
||||
getItemKey(item) {
|
||||
return item.id ?? item.ID
|
||||
return item.id
|
||||
},
|
||||
// 切换选中状态
|
||||
toggleSelection(item, checked) {
|
||||
@@ -379,8 +349,8 @@ export default {
|
||||
/** 编辑按钮操作 */
|
||||
handleUpdate(row) {
|
||||
this.reset();
|
||||
const ID = row.ID || this.ids
|
||||
getSetup(ID).then(response => {
|
||||
const id = row.id || this.ids
|
||||
getSetup(id).then(response => {
|
||||
this.form = response.data;
|
||||
this.open = true;
|
||||
this.title = "编辑工艺参数配置";
|
||||
@@ -395,7 +365,7 @@ export default {
|
||||
submitForm() {
|
||||
this.$refs["form"].validate(valid => {
|
||||
if (valid) {
|
||||
if (this.form.ID != null) {
|
||||
if (this.form.id != null) {
|
||||
updateSetup(this.form).then(response => {
|
||||
this.$modal.msgSuccess("编辑成功");
|
||||
this.open = false;
|
||||
@@ -413,11 +383,11 @@ export default {
|
||||
},
|
||||
/** 删除按钮操作 */
|
||||
handleDelete(row) {
|
||||
const IDs = row.id || this.ids;
|
||||
this.$modal.confirm(`确定要删除编号为"${IDs}"的工艺参数配置记录吗?`, '确认删除', {
|
||||
const ids = row.id || this.ids;
|
||||
this.$modal.confirm(`确定要删除编号为"${ids}"的张力参数记录吗?`, '确认删除', {
|
||||
type: 'warning'
|
||||
}).then(function () {
|
||||
return delSetup(IDs);
|
||||
return delSetup(ids);
|
||||
}).then(() => {
|
||||
this.getList();
|
||||
this.$modal.msgSuccess("删除成功");
|
||||
|
||||
Reference in New Issue
Block a user