This commit is contained in:
tzy 2025-12-30 21:07:25 +08:00
parent 2f25b02533
commit 55a32a3831
13 changed files with 2329 additions and 216 deletions

View File

@ -69,3 +69,13 @@ export function delDetails(id) {
method: 'delete'
})
}
// 导入电气BOMExcel
export function importElectricalBom(formData) {
return request({
url: '/system/details/importElectricalBom',
method: 'post',
data: formData,
headers: { 'Content-Type': 'multipart/form-data' }
})
}

View File

@ -140,8 +140,19 @@ export function uploadPDF(id) {
// 下载生产工艺计划表
export function exportRoute(id) {
return request({
url: `/system/orderPro/exportRoute2?id=${id}`,
method: 'post',
url: '/system/orderPro/exportRoute2',
method: 'get',
params: { id },
responseType: 'blob'
})
}
// 下载工艺计划表(新路径 exportRoute3
export function exportRoute3(id) {
return request({
url: '/system/orderPro/exportRoute3',
method: 'get',
params: { id },
responseType: 'blob'
})
}

View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询100R设备规格参数列表
export function listSpec100r(query) {
return request({
url: '/system/spec100r/list',
method: 'get',
params: query
})
}
// 查询100R设备规格参数详细
export function getSpec100r(id) {
return request({
url: '/system/spec100r/' + id,
method: 'get'
})
}
// 新增100R设备规格参数
export function addSpec100r(data) {
return request({
url: '/system/spec100r',
method: 'post',
data: data
})
}
// 修改100R设备规格参数
export function updateSpec100r(data) {
return request({
url: '/system/spec100r',
method: 'put',
data: data
})
}
// 删除100R设备规格参数
export function delSpec100r(id) {
return request({
url: '/system/spec100r/' + id,
method: 'delete'
})
}

44
src/api/system/spec40r.js Normal file
View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询40R设备规格参数列表
export function listSpec40r(query) {
return request({
url: '/system/spec40r/list',
method: 'get',
params: query
})
}
// 查询40R设备规格参数详细
export function getSpec40r(id) {
return request({
url: '/system/spec40r/' + id,
method: 'get'
})
}
// 新增40R设备规格参数
export function addSpec40r(data) {
return request({
url: '/system/spec40r',
method: 'post',
data: data
})
}
// 修改40R设备规格参数
export function updateSpec40r(data) {
return request({
url: '/system/spec40r',
method: 'put',
data: data
})
}
// 删除40R设备规格参数
export function delSpec40r(id) {
return request({
url: '/system/spec40r/' + id,
method: 'delete'
})
}

44
src/api/system/spec40s.js Normal file
View File

@ -0,0 +1,44 @@
import request from '@/utils/request'
// 查询40S设备规格参数列表
export function listSpec40s(query) {
return request({
url: '/system/spec40s/list',
method: 'get',
params: query
})
}
// 查询40S设备规格参数详细
export function getSpec40s(id) {
return request({
url: '/system/spec40s/' + id,
method: 'get'
})
}
// 新增40S设备规格参数
export function addSpec40s(data) {
return request({
url: '/system/spec40s',
method: 'post',
data: data
})
}
// 修改40S设备规格参数
export function updateSpec40s(data) {
return request({
url: '/system/spec40s',
method: 'put',
data: data
})
}
// 删除40S设备规格参数
export function delSpec40s(id) {
return request({
url: '/system/spec40s/' + id,
method: 'delete'
})
}

View File

@ -129,23 +129,15 @@
<el-table-column label="执行单图" align="center" min-width="100">
<template slot-scope="scope">
<el-image
v-if="scope.row.drawingPath"
:src="getFullImageUrl(scope.row.drawingPath)"
v-if="scope.row.drawingPathUrl || scope.row.drawingPath"
:src="getFullImageUrl(scope.row)"
style="width:80px; height:80px; object-fit:cover; border-radius:4px;"
:preview-src-list="[getFullImageUrl(scope.row.drawingPath)]"
:preview-src-list="[getFullImageUrl(scope.row)]"
fit="cover"
/>
<span v-else style="color: #909399; font-size: 12px;">暂无执行单图</span>
</template>
</el-table-column>
<!-- <el-table-column label="项目类型" align="center" prop="drawingType">
<template slot-scope="scope">
<span v-if="scope.row.drawingType">
{{ getDrawingTypeLabel(scope.row.drawingType) }}
</span>
<span v-else>-</span>
</template>
</el-table-column>-->
<el-table-column label="项目状态" align="center" prop="imCategory">
<template slot-scope="scope">
@ -171,7 +163,7 @@
</span>
</template>
</el-table-column>
<el-table-column label="创建人" align="center" prop="createBy"/>
<el-table-column label="项目完成时间" align="center" prop="projectEndTime" width="180">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.projectEndTime, '{y}-{m}-{d}') }}</span>
@ -235,7 +227,21 @@
</el-divider>
<div style="padding: 20px;">
<!-- 第一部分销齿链型号表格管理 -->
<el-button type="primary" @click="openAddChainDialog" size="mini" style="margin-bottom:10px;">新增</el-button>
<div style="display: flex; align-items: center; gap: 8px; margin-bottom: 10px;">
<el-button type="primary" @click="openAddChainDialog" size="mini" v-hasPermi="['system:save:add']">新增</el-button>
<el-upload
:action="dwgUploadUrl"
:headers="uploadHeaders"
:show-file-list="false"
accept=".dwg"
:http-request="batchUploadDwg"
:before-upload="beforeBatchDwgUpload"
>
<el-button type="success" size="mini" :disabled="!selectedChainIds.length" v-hasPermi="['system:orderPro:uploadDwg']">
<i class="el-icon-upload2"></i> 上传图纸
</el-button>
</el-upload>
</div>
<el-table
:data="chainTable"
border
@ -244,8 +250,9 @@
style="width: 100%; margin-bottom: 10px;"
highlight-current-row
:header-cell-style="{ fontWeight: 'bold', background: '#f5f7fa' }"
@selection-change="handleChainSelectionChange"
>
<el-table-column type="selection" width="55" />
<el-table-column prop="figureNumber" label="产品型号" min-width="100"/>
<el-table-column prop="figureName" label="产品名称" min-width="140"/>
<el-table-column prop="jdInventory" label="行程" min-width="80"/>
@ -255,27 +262,12 @@
<el-table-column label="操作" width="200">
<template slot-scope="scope">
<div style="display: flex; align-items: center; gap: 8px;">
<el-upload
:action="dwgUploadUrl"
:headers="uploadHeaders"
:data="{ id: scope.row.id }"
:show-file-list="false"
:before-upload="(file) => beforeDwgUpload(file, scope.row)"
:on-success="(response, file) => handleDwgUploadSuccess(response, file, scope.row)"
:on-error="(error, file) => handleDwgUploadError(error, file, scope.row)"
accept=".dwg"
:disabled="form.isEnterpriseStandard === 1"
>
<el-button size="mini" type="primary" :disabled="form.isEnterpriseStandard === 1">
<i class="el-icon-upload2"></i> 上传
</el-button>
</el-upload>
<el-button type="text" size="mini" @click="editChain(scope.$index, scope.row)">
<el-button type="text" size="mini" @click="editChain(scope.$index, scope.row)" v-hasPermi="['system:save:edit']">
<i class="el-icon-edit"></i> 修改
</el-button>
<el-button type="text" size="mini" @click="removeChain(scope.$index)">
<el-button type="text" size="mini" @click="removeChain(scope.$index)" v-hasPermi="['system:save:remove']">
<i class="el-icon-delete"></i> 删除
</el-button>
</div>
@ -290,16 +282,31 @@
</el-divider>
<!-- 第二部分执行出图命令及日志展示 -->
<div style="margin-bottom: 20px;">
<el-button type="success" :loading="drawLoading" @click="executeDrawCommand" style="margin-bottom: 10px;">
执行出图
</el-button>
<el-button type="primary" @click="downloadPDF" style="margin-bottom: 10px; margin-left: 10px;">
下载PDF
</el-button>
<el-button type="warning" @click="downloadRoute" style="margin-bottom: 10px; margin-left: 10px;"
v-hasPermi="['system:route:exportRoute']">
下载生产工艺计划表
</el-button>
<div style="display: flex; align-items: center; gap: 10px; margin-bottom: 10px;">
<el-button type="success" :loading="drawLoading" @click="executeDrawCommand" v-hasPermi="['system:orderPro:executDrawing']">
执行出图
</el-button>
<el-button type="primary" @click="downloadPDF" v-hasPermi="['system:orderPro:uploadPDF']">
下载PDF
</el-button>
<el-button type="warning" @click="downloadRoute" v-hasPermi="['system:orderPro:exportRoute2']">
下载金蝶工艺计划表
</el-button>
<el-button type="primary" @click="downloadRoute3" v-hasPermi="['system:orderPro:exportRoute3']">
导出工艺计划表
</el-button>
<el-upload
:show-file-list="false"
:http-request="uploadElectricalBom"
:before-upload="beforeElectricalBomUpload"
accept=".xls,.xlsx"
style="display: inline-block;"
>
<el-button type="info" v-hasPermi="['system:details:importElectricalBom']">
导入电气BOM
</el-button>
</el-upload>
</div>
<el-progress :text-inside="true" :stroke-width="26" :percentage="percentage"></el-progress>
<el-card shadow="never" style="background: #f9f9f9; min-height: 120px; max-height: 220px; overflow-y: auto;">
<div style="font-size: 13px; color: #333; white-space: pre-line;">
@ -736,12 +743,8 @@
</el-card>
<!-- 新增/编辑弹窗 -->
<el-dialog
:title="isEditChain ? '编辑销齿链型号' : '新增销齿链型号'"
:visible.sync="chainDialogVisible"
width="420px"
append-to-body
>
<el-dialog :title="isEditChain ? '编辑销齿链型号' : '新增销齿链型号'" :visible.sync="chainDialogVisible"
width="420px" append-to-body >
<el-form :model="chainForm" label-width="100px">
<div
style="margin-bottom: 16px; padding: 12px; background-color: #f0f9ff; border: 1px solid #b3d8ff; border-radius: 4px; color: #409eff; font-size: 13px;">
@ -757,12 +760,13 @@
filterable
remote
reserve-keyword
placeholder="请输入行程/类型/名称/产品名(可选)"
:placeholder="isEditChain ? '编辑模式不使用此项' : '请输入行程/类型/名称/产品名(可选)'"
:remote-method="searchRigidChain"
:loading="chainLoading"
@change="onRigidChainSelect"
popper-class="chain-autocomplete-dropdown"
:default-first-option="false"
:disabled="isEditChain"
clearable
>
<el-option
@ -783,21 +787,32 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item label="产品名称" required>
<el-input v-model="chainForm.figureName" placeholder="请输入产品名称"/>
</el-form-item>
<el-form-item label="生产令号">
<el-input v-model="chainForm.productionCode" placeholder="请输入生产令号"/>
<el-input v-model="chainForm.productionCode" placeholder="请输入生产令号" disabled/>
</el-form-item>
<el-form-item label="产品型号" required>
<el-input v-model="chainForm.figureNumber" placeholder="请输入产品型号"/>
<el-form-item label="物料类型">
<el-select v-model="chainForm.productType" placeholder="请选择类型" clearable>
<el-option label="30S" value="30S" />
<el-option label="30D" value="30D" />
<el-option label="35R" value="35R" />
<el-option label="40S" value="40S" />
<el-option label="40R" value="40R" />
<el-option label="60R" value="60R" />
<el-option label="80R" value="80R" />
<el-option label="100R" value="100R" />
<el-option label="125R" value="125R" />
<el-option label="150R" value="150R" />
</el-select>
</el-form-item>
<el-form-item label="数量" required>
<el-form-item label="物料编码" required>
<el-input v-model="chainForm.figureNumber" placeholder="请输入图号"/>
</el-form-item>
<el-form-item label="物料名称" required>
<el-input v-model="chainForm.figureName" placeholder="请输入名称"/>
</el-form-item>
<el-form-item label="物料数量" required>
<el-input v-model="chainForm.figureNum" placeholder="请输入数量" type="number" min="1"/>
</el-form-item>
<el-form-item label="行程" required>
<el-input v-model="chainForm.jdInventory" placeholder="请输入行程"/>
</el-form-item>
<!-- 文件路径和DWG上传企标可编辑非企标只读+可上传 -->
<el-form-item label="文件路径">
<div>
@ -820,9 +835,7 @@
<el-input v-model="chainForm.drawPath" placeholder="请输入文件路径"/>
</div>
</el-form-item>
<el-form-item label="产品类型" required>
<el-input v-model="chainForm.productType" placeholder="请输入产品类型"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer" style="text-align: right;">
<el-button @click="chainDialogVisible = false"> </el-button>
@ -919,20 +932,23 @@ import {
delSave,
uploadPDF,
exportRoute,
exportRoute3,
getMRPResults,
getRouteLog,
getBomUploadStatus
} from "@/api/system/orderPro";
import {processList} from "../../../api/system/orderPro";
import {listRigidChain} from '@/api/system/pcRigidChain';
import {addProduct} from '@/api/system/orderPro';
import {addProduct, updateProduct} from '@/api/system/orderPro';
import {getstate} from '@/utils/external-api';
import {listConfigIni} from '@/api/system/configIni';
import ImageUpload from '@/components/ImageUpload';
import {getToken} from '@/utils/auth';
import axios from 'axios';
import bomInfo from '@/views/system/details/index.vue'; //bom
import processInfo from '@/views/system/route/index.vue'; //
import {listMrp, exportMrp} from '@/api/system/mrp';
import {importElectricalBom} from '@/api/system/details';
import dayjs from "dayjs";
export default {
@ -985,6 +1001,7 @@ export default {
planStartTime: undefined,
drawingType: undefined,
projectEndTime: undefined,
createBy: undefined,
unit: undefined,
quantity: undefined,
isEnterpriseStandard: undefined,
@ -1081,19 +1098,26 @@ export default {
chainTable: [], // 齿
chainForm: {
pid: '',
jdInventory: '',
figureNumber: '',
productType: '',
figureNum: '',
productName: '',
productionCode: '',
selectedFileType: '', //
productType: '',
figureNumber: '',
figureName: '',
figureNum: '',
jdInventory: '',
axialType: '',
boxType: '',
selectedFileType: '',
drawPath: '',
id: undefined,
},
chainDialogVisible: false, // /
isEditChain: false, // /
editChainIndex: null, //
rigidChainOptions: [],
typeOptions: [],
journeyOptions: [],
chainLoading: false,
selectedChainIds: [],
drawLog: '', //
drawLoading: false, // loading
currentPid: null, // id
@ -1131,7 +1155,7 @@ export default {
this.getDrawingTypeOptions();
this.getConfigIniOptions(); //
this.$api = {addProduct};
this.$api = {addProduct, updateProduct};
},
watch: {
'form.isEnterpriseStandard': function (newVal) {
@ -1316,13 +1340,11 @@ export default {
this.clearProcessLog();
return;
}
if (!latest) {
this.$message.info('暂无工艺上传日志');
this.clearProcessLog();
return;
}
// 使
// dayjs
this.processUploadLog = {
@ -1331,12 +1353,10 @@ export default {
duplicateRoutes: latest.duplicateRoutes || [],
failedRoutes: latest.failedRoutes || []
};
this.$message.success('已拉取最新日志');
} else {
this.$message.error(res && res.msg ? res.msg : '获取工艺上传日志失败');
}
} catch (e) {
console.error('获取工艺上传日志异常', e);
this.$message.error('获取工艺上传日志失败');
} finally {
this.processLogLoading = false;
@ -1400,12 +1420,10 @@ export default {
this.bomUploadLog = {
items: items
};
this.$message.success('已拉取最新BOM日志');
} else {
this.$message.error(res && res.msg ? res.msg : '获取BOM上传日志失败');
}
} catch (e) {
console.error('获取BOM上传日志异常', e);
this.$message.error('获取BOM上传日志失败');
} finally {
this.bomLogLoading = false;
@ -1926,26 +1944,45 @@ export default {
...this.queryParams
}, `orderPro_${new Date().getTime()}.xlsx`)
},
openAddChainDialog() {
this.isEditChain = false;
this.chainForm = {
productName: '',
openAddChainDialog() {
this.isEditChain = false;
this.chainForm = {
pid: this.id,
productionCode: this.productionObj.productionOrderNo,
figureName: '',
productType: '',
figureNumber: '',
figureName: '',
figureNum: '',
jdInventory: '',
productType: '',
selectedFileType: '', //
id: undefined, // id
axialType: '',
boxType: '',
selectedFileType: '',
drawPath: '',
id: undefined,
};
this.chainDialogVisible = true;
},
editChain(index, row) {
this.isEditChain = true;
this.editChainIndex = index;
this.chainForm = {...row};
this.chainForm = {
pid: this.productionObj && this.productionObj.id,
productionCode: this.productionObj && this.productionObj.productionOrderNo,
productType: row && (row.productType || row.type) || '',
figureNumber: row && row.figureNumber || '',
figureName: row && (row.figureName || row.productName) || '',
figureNum: row && row.figureNum || '',
jdInventory: row && row.jdInventory || '',
axialType: row && row.axialType || '',
boxType: row && row.boxType || '',
selectedFileType: row && (row.fileType || row.selectedFileType) || '',
drawPath: row && row.drawPath || '',
id: row && row.id
};
// 使 fileType
if (!this.chainForm.selectedFileType) {
this.setSelectedFileTypeFromPath(this.chainForm.drawPath);
}
this.chainDialogVisible = true;
},
removeChain(index) {
@ -1960,59 +1997,166 @@ export default {
//
});
},
handleChainSelectionChange(selection) {
this.selectedChainIds = selection.map(item => item.id).filter(Boolean);
},
beforeBatchDwgUpload(file) {
const name = file.name || '';
const suffix = name.substring(name.lastIndexOf('.') + 1).toLowerCase();
if (!this.selectedChainIds.length) {
this.$message.warning('请先勾选需要上传的行');
return false;
}
if (suffix !== 'dwg') {
this.$message.error('仅允许上传 DWG 文件');
return false;
}
return true;
},
async batchUploadDwg({ file }) {
try {
const formData = new FormData();
// Spring List<Long> ids使
this.selectedChainIds.forEach(id => formData.append('ids', id));
formData.append('file', file);
const res = await axios.post(this.dwgUploadUrl, formData, {
headers: {
...this.uploadHeaders
}
});
const payload = res && res.data ? res.data : {};
const ok = payload.code === 200 || payload.success === true;
const msg = payload.msg || '上传完成';
if (ok) {
this.$message.success(msg);
this.loadChainTableData();
} else {
this.$message.error(msg || '上传失败');
}
} catch (e) {
const status = e && e.response && e.response.status;
const serverMsg = (e && e.response && (e.response.data && (e.response.data.msg || e.response.data.message || e.response.data))) || '';
if (status === 413) {
this.$message.error('文件过大,已超过服务器限制');
} else if (status === 401) {
this.$message.error('未认证或登录已过期');
} else if (status === 403) {
this.$message.error('权限不足,无法上传');
} else if (status === 404) {
this.$message.error('上传接口不存在或路径错误');
} else if (status === 415) {
this.$message.error('服务器不支持当前文件类型');
} else if (status >= 500) {
this.$message.error('服务器内部错误:' + (serverMsg || '请联系管理员'));
} else {
this.$message.error('上传失败:' + (serverMsg || e.message || '请重试'));
}
}
},
beforeElectricalBomUpload(file) {
const name = file.name || '';
const suffix = name.substring(name.lastIndexOf('.') + 1).toLowerCase();
if (!(suffix === 'xls' || suffix === 'xlsx')) {
this.$message.error('仅支持Excel文件(xls/xlsx)');
return false;
}
return true;
},
async uploadElectricalBom({ file }) {
try {
const formData = new FormData();
formData.append('file', file);
const res = await importElectricalBom(formData);
if (res && (res.code === 200 || res.success)) {
let payload = res.data || res.msg || {};
if (typeof payload === 'string') {
try { payload = JSON.parse(payload); } catch (_) { payload = {}; }
}
const total = payload.totalRows ?? payload.total ?? 0;
const parsed = payload.parsedRows ?? 0;
const saved = payload.savedRows ?? payload.saved ?? 0;
const message = payload.message || '导入完成';
this.$message.success(`${message}(总:${total} 解析:${parsed} 保存:${saved}`);
this.fetchBomLog();
} else {
this.$message.error(res?.msg || '导入失败');
}
} catch (e) {
this.$message.error('导入失败: ' + (e.message || e));
}
},
async saveChainForm() {
//
if (!this.chainForm.figureName) {
this.$message.warning('产品名称不能为空');
if (!this.chainForm.productionCode) {
this.$message.warning('生产令号不能为空');
return;
}
if (!this.chainForm.figureNumber) {
this.$message.warning('产品型号不能为空');
this.$message.warning('图号不能为空');
return;
}
if (!this.chainForm.figureName) {
this.$message.warning('名称不能为空');
return;
}
if (!this.chainForm.figureNum || Number(this.chainForm.figureNum) < 1) {
this.$message.warning('数量不能为空且必须大于0');
return;
}
if (!this.chainForm.productType) {
this.$message.warning('产品类型不能为空');
return;
}
//
const payload = {
figureName: this.chainForm.figureName,
productionCode: this.chainForm.productionCode,
figureNumber: this.chainForm.figureNumber,
figureNum: this.chainForm.figureNum,
jdInventory: this.chainForm.jdInventory,
drawPath: this.chainForm.drawPath || '',
productType: this.chainForm.productType,
id: this.chainForm.id,
pid: this.productionObj.id,
productionCode: this.chainForm.productionCode,
productType: this.chainForm.productType,
figureNumber: this.chainForm.figureNumber,
figureName: this.chainForm.figureName,
figureNum: this.chainForm.figureNum,
jdInventory: this.chainForm.jdInventory || undefined,
axialType: this.chainForm.axialType || undefined,
boxType: this.chainForm.boxType || undefined,
selectedFileType: this.chainForm.selectedFileType || '',
drawPath: this.chainForm.drawPath || '',
};
// id
if (this.isEditChain && this.chainForm.id) {
payload.id = this.chainForm.id;
}
console.log('saveChainForm........', payload);
try {
await this.$api.addProduct(payload);
this.$message.success('添加成功');
if (this.isEditChain) {
await this.$api.updateProduct(payload);
this.$message.success('修改成功');
} else {
await this.$api.addProduct(payload);
this.$message.success('添加成功');
}
this.chainDialogVisible = false;
//
this.loadChainTableData();
} catch (e) {
this.$message.error('添加失败');
const msg = this.isEditChain ? '修改失败' : '添加失败';
this.$message.error(msg);
}
},
searchRigidChain(query) {
if (!query) {
this.rigidChainOptions = [];
this.typeOptions = [];
this.journeyOptions = [];
return;
}
this.chainLoading = true;
listRigidChain({typeName: query}).then(res => {
this.rigidChainOptions = (res.rows || []).slice(0, 10); // 10
this.rigidChainOptions = (res.rows || []).slice(0, 10);
const types = new Set();
const journeys = new Set();
this.rigidChainOptions.forEach(item => {
if (item.type) types.add(item.type);
if (item.typeName) types.add(item.typeName);
if (item.journey) journeys.add(item.journey);
});
this.typeOptions = Array.from(types);
this.journeyOptions = Array.from(journeys);
this.chainLoading = false;
}).catch(() => {
this.chainLoading = false;
@ -2020,30 +2164,23 @@ export default {
},
onRigidChainSelect(id) {
if (!id) {
//
this.chainForm.figureName = '';
this.chainForm.figureNumber = '';
this.chainForm.jdInventory = '';
this.chainForm.drawPath = '';
this.chainForm.productType = '';
this.chainForm.productName = '';
this.chainForm.figureNumber = '';
this.chainForm.figureName = '';
this.chainForm.drawPath = '';
return;
}
const selected = this.rigidChainOptions.find(item => item.id === id);
if (selected) {
this.chainForm.figureName = selected.productName || '';
this.chainForm.figureNumber = selected.typeName || '';
this.chainForm.jdInventory = selected.journey || '';
this.chainForm.drawPath = selected.drawPath || '';
this.chainForm.productType = selected.type || '';
this.chainForm.productName = selected.productName || '';
// 1
this.chainForm.figureNumber = selected.typeName || selected.figureNumber || '';
this.chainForm.figureName = selected.productName || '';
this.chainForm.drawPath = selected.drawPath || '';
if (!this.chainForm.figureNum) {
this.chainForm.figureNum = 1;
}
// id
if (!this.isEditChain) {
this.chainForm.id = undefined;
}
@ -2116,10 +2253,31 @@ export default {
this.chainForm.drawPath = selected.fileUrl;
}
},
getFullImageUrl(path) {
if (!path) return '';
return path;
setSelectedFileTypeFromPath(path) {
if (!path) {
this.chainForm.selectedFileType = '';
return;
}
const match = this.configIniOptions && this.configIniOptions.find(opt => opt.fileUrl === path);
if (match) {
this.chainForm.selectedFileType = match.fileType;
} else if (!this.configIniOptions || this.configIniOptions.length === 0) {
//
this.getConfigIniOptions();
this.$nextTick(() => {
const m = this.configIniOptions.find(opt => opt.fileUrl === path);
if (m) this.chainForm.selectedFileType = m.fileType;
});
}
},
getFullImageUrl(row) {
if (!row) return '';
let url = row.drawingPathUrl || row.drawingPath || '';
if (!url) return '';
if (typeof url === 'string') {
url = url.replace(/[`'"]/g, '').trim();
}
return url;
},
beforeDwgUpload(file, row) {
//
@ -2242,7 +2400,7 @@ export default {
link.click();
window.URL.revokeObjectURL(url);
this.$message.success('生产工艺计划表下载成功');
this.$message.success('生产工艺计划表下载成功');
})
.catch(error => {
console.error('下载失败:', error);
@ -2250,6 +2408,29 @@ export default {
this.$message.error('下载失败: ' + (error.message || '项目未出图'));
});
},
downloadRoute3() {
this.$message.success('开始导出工艺计划表');
console.log('开始下载生产令号ID:', this.productionObj.id);
exportRoute3(this.productionObj.id)
.then(response => {
if (response.size === 0) {
this.$message.error('文件为空或下载失败');
return;
}
const blob = new Blob([response], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
const url = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = `${this.productionObj.productionOrderNo}_工艺计划表.xlsx`;
link.click();
window.URL.revokeObjectURL(url);
this.$message.success('工艺计划表下载成功');
})
.catch(error => {
console.error('下载失败:', error);
this.$message.error('下载失败: ' + (error.message || '项目未出图'));
});
},
},
beforeMount() {
clearInterval(this.time);

View File

@ -154,10 +154,27 @@ export default {
'color': '#5692f0'
})
}
//
newObj.materialCode = newObj.materialCode || newObj.material_code || newObj.FNumber || '';
newObj.materialName = newObj.materialName || newObj.material_name || newObj.FName || '';
//
newObj.start_date = newObj.start_date || newObj.startDate || newObj.FStartDate || newObj.start_time || newObj.start;
newObj.end_date = newObj.end_date || newObj.endDate || newObj.FEndDate || newObj.end_time || newObj.end;
if (newObj.parent) {
var t = newObj.text || '';
var parts = t.trim().split(/\s+/);
if (parts.length >= 2) {
var code = parts[parts.length - 1];
var name = parts.slice(1, parts.length - 1).join(' ');
if (!newObj.materialCode) newObj.materialCode = code;
if (!newObj.materialName) newObj.materialName = name;
}
}
return newObj
})
// this.initData(); //
//
console.log('Gantt tasks (initData) sample:', (this.tasks.data || []).slice(0, 3));
this.tasks.data = this.groupByMaterialCode(this.tasks.data)
gantt.parse(this.tasks)
this.loading = false;
} else {
@ -238,6 +255,22 @@ export default {
'color': '#5692f0'
})
}
//
newObj.materialCode = newObj.materialCode || newObj.material_code || newObj.FNumber || '';
newObj.materialName = newObj.materialName || newObj.material_name || newObj.FName || '';
//
newObj.start_date = newObj.start_date || newObj.startDate || newObj.FStartDate || newObj.start_time || newObj.start;
newObj.end_date = newObj.end_date || newObj.endDate || newObj.FEndDate || newObj.end_time || newObj.end;
if (newObj.parent) {
var t = newObj.text || '';
var parts = t.trim().split(/\s+/);
if (parts.length >= 2) {
var code = parts[parts.length - 1];
var name = parts.slice(1, parts.length - 1).join(' ');
if (!newObj.materialCode) newObj.materialCode = code;
if (!newObj.materialName) newObj.materialName = name;
}
}
return newObj
})
@ -245,6 +278,8 @@ export default {
//this.initData(); //
gantt.clearAll()
//
console.log('Gantt tasks (selectChange) sample:', (this.tasks.data || []).slice(0, 3));
this.tasks.data = this.groupByMaterialCode(this.tasks.data)
gantt.parse(this.tasks)
this.loading = false;
} else {
@ -255,6 +290,33 @@ export default {
this.loading = false;
})
},
groupByMaterialCode(tasks) {
const childrenByParent = {};
tasks.forEach(t => {
if (t && t.parent != null) {
const p = t.parent;
if (!childrenByParent[p]) childrenByParent[p] = [];
childrenByParent[p].push(t);
}
});
const groups = [];
Object.keys(childrenByParent).forEach(pid => {
const list = childrenByParent[pid];
const map = {};
list.forEach(ch => {
const code = ch.materialCode || '';
if (code) {
if (!map[code]) {
const gid = `g_${pid}_${code}`;
map[code] = { id: gid, text: code, parent: Number(pid) || pid, open: true, materialCode: code, materialName: '' };
groups.push(map[code]);
}
ch.parent = map[code].id;
}
});
});
return tasks.concat(groups);
},
search() {
//
@ -303,15 +365,63 @@ export default {
width: 180,
align: "left",
editor: {type: 'text', map_to: 'text'},
onrender: function (task, node) {
node.setAttribute("class", "gantt_cell gantt_last_cell gantt_cell_tree " + task.status);
template: function (task) {
return task.text || task.productionOrderNo || '';
}
},
{
name: "materialCode",
label: "物料编码",
width: 120,
resize: true,
align: "left",
template: function (task) {
if (!task.parent) return '';
return task.materialCode || task.material_code || task.FNumber || '';
}
},
{
name: "materialName",
label: "物料名称",
width: 150,
resize: true,
align: "left",
template: function (task) {
if (!task.parent) return '';
return task.materialName || task.material_name || task.FName || '';
}
},
{
name: "start_date",
label: "开始时间",
width: 120,
resize: true,
align: "left",
template: function (task) {
var d = task.start_date || task.startDate;
if (!d) return '';
if (typeof d === 'string') {
return d.split('T')[0] || d;
}
return gantt.date.date_to_str("%Y-%m-%d")(d);
}
},
{name: "materialCode", label: "物料编码", width: 120, resize: true, align: "left"},
{name: "materialName", label: "物料名称", width: 150, resize: true, align: "left"},
{name: "start_date", label: "开始时间", width: 120, resize: true, align: "left"},
{name: "duration", label: "天数", width: 80, resize: true, align: "center"},
{name: 'end_date', label: '完成时间', width: 120, resize: true, align: "left"},
{
name: 'end_date',
label: '完成时间',
width: 120,
resize: true,
align: "left",
template: function (task) {
var d = task.end_date || task.endDate;
if (!d) return '';
if (typeof d === 'string') {
return d.split('T')[0] || d;
}
return gantt.date.date_to_str("%Y-%m-%d")(d);
}
},
]

View File

@ -44,7 +44,7 @@
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="el-icon-upload" size="mini" @click="handleImport"
v-hasPermi="['system:details:importRoute']">导入工艺
v-hasPermi="['system:route:importRoute']">导入工艺
</el-button>
</el-col>
<el-col :span="1.5">
@ -54,7 +54,7 @@
</el-col>
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-share" size="mini" @click="pushRouteBom"
v-hasPermi="['system:details:pushRouteBom']">推送工艺
v-hasPermi="['system:route:pushRouteBom']">推送工艺
</el-button>
</el-col>
<el-col :span="3">
@ -67,17 +67,17 @@
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-edit" size="mini" :disabled="multiple" @click="updateProcessPlan"
v-hasPermi="['system:details:updateProcessPlan']">更新计划时间
v-hasPermi="['system:route:updateProcessPlan']">更新计划时间
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="success" plain icon="el-icon-setting" size="mini" @click="updateProcesTime"
v-hasPermi="['system:details:updateProcesTime']">更新生产订单
v-hasPermi="['system:route:updateProcesTime']">更新生产订单
</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="primary" plain icon="el-icon-document" size="mini" @click="generatePDFs1"
v-hasPermi="['system:details:generatePDFs1']">生成PDF
v-hasPermi="['system:route:generatePDFs']">生成PDF
</el-button>
</el-col>
<el-col :span="1.5">
@ -116,8 +116,8 @@
scope.row.routeDescription }}</router-link>
</template>
</el-table-column> -->
<el-table-column label="物料编码" width="120" align="center" prop="materialCode"/>
<el-table-column label="名称" width="120" align="center" prop="materialName"/>
<el-table-column label="物料编码" width="120" align="center" prop="materialCode" fixed="left"/>
<el-table-column label="名称" width="120" align="center" prop="materialName" fixed="left"/>
<el-table-column label="材质" width="80" align="center" prop="material"/>
<el-table-column label="单重" width="60" align="center" prop="discWeight"/>
@ -134,7 +134,7 @@
<el-table-column label="本批数" width="60" align="center" prop="batchQuantity"/>
<!--
<el-table-column label="材料BOM物料编码" width="220"align="center" prop="rawMaterialCode" />
<el-table-column label="材料BOM物料编码" width="220"align="center" prop="ra wMaterialCode" />
<el-table-column label="材料BOM物料名称"width="220" align="center" prop="rawMaterialName" />
<el-table-column label="用量"width="60"align="center" prop="discUsage" />
<el-table-column label="单位"width="60" align="center" prop="bomUnit" />-->
@ -595,8 +595,8 @@
<el-table :data="processRoutes" stripe border v-loading="processLoading">
<el-table-column label="工艺编号" prop="fnumber" width="120" align="center"/>
<el-table-column label="项目令号" prop="project_code" width="180" align="center"/>
<el-table-column label="物料编码" prop="materialCode" width="140" align="center"/>
<el-table-column label="物料名称" prop="materialName" min-width="140" align="center"/>
<el-table-column label="物料编码" prop="materialCode" fixed="left" width="140" align="center"/>
<el-table-column label="物料名称" prop="materialName" fixed="left" min-width="140" align="center"/>
<el-table-column label="操作" width="120" align="center">
<template slot-scope="scope">
<el-button

View File

@ -138,8 +138,8 @@
<el-form-item label="最高安全库存" prop="maxSafetyStock">
<el-input v-model="form.maxSafetyStock" placeholder="请输入最高安全库存" />
</el-form-item>
<el-form-item label="即时库存" prop="currentStock">
<el-input v-model="form.currentStock" placeholder="请输入最高安全库存" />
<el-form-item label="类型" prop="type">
<el-input v-model="form.type" placeholder="请输入类型" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">

View File

@ -0,0 +1,585 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="行程变量" prop="travelLength">
<el-input
v-model="queryParams.travelLength"
placeholder="请输入行程变量"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="箱体" prop="boxType">
<el-select
v-model="queryParams.boxType"
placeholder="请选择箱体层数"
clearable
@change="handleQuery"
>
<el-option label="S(单层)" value="S" />
<el-option label="D(双层)" value="D" />
<el-option label="T(三层)" value="T" />
</el-select>
</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>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:spec100r:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:spec100r:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:spec100r:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:spec100r:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" border="true" :data="spec100rList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="行程" align="center" prop="travelLength" />
<el-table-column label="类型" align="center" prop="itemType" />
<el-table-column label="箱体" align="center" prop="boxType" />
<el-table-column label="v1" align="center" prop="v1" />
<el-table-column label="v2" align="center" prop="v2" />
<el-table-column label="v3" align="center" prop="v3" />
<el-table-column label="v4" align="center" prop="v4" />
<el-table-column label="v5" align="center" prop="v5" />
<el-table-column label="v6" align="center" prop="v6" />
<el-table-column label="v7" align="center" prop="v7" />
<el-table-column label="v8" align="center" prop="v8" />
<el-table-column label="g1" align="center" prop="g1" />
<el-table-column label="v9" align="center" prop="v9" />
<el-table-column label="g2" align="center" prop="g2" />
<el-table-column label="v10" align="center" prop="v10" />
<el-table-column label="g5" align="center" prop="g5" />
<el-table-column label="v11" align="center" prop="v11" />
<el-table-column label="v12" align="center" prop="v12" />
<el-table-column label="g6" align="center" prop="g6" />
<el-table-column label="v13" align="center" prop="v13" />
<el-table-column label="v14" align="center" prop="v14" />
<el-table-column label="g7" align="center" prop="g7" />
<el-table-column label="v15" align="center" prop="v15" />
<el-table-column label="v41" align="center" prop="v41" />
<el-table-column label="v42" align="center" prop="v42" />
<el-table-column label="v43" align="center" prop="v43" />
<el-table-column label="v44" align="center" prop="v44" />
<el-table-column label="v45" align="center" prop="v45" />
<el-table-column label="v46" align="center" prop="v46" />
<el-table-column label="v47" align="center" prop="v47" />
<el-table-column label="v48" align="center" prop="v48" />
<el-table-column label="v49" align="center" prop="v49" />
<el-table-column label="v50" align="center" prop="v50" />
<el-table-column label="v51" align="center" prop="v51" />
<el-table-column label="v52" align="center" prop="v52" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:spec100r:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:spec100r:remove']"
>删除</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"
/>
<!-- 添加或修改100R设备规格参数对话框 -->
<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="行程变量" prop="travelLength">
<el-input v-model="form.travelLength" placeholder="请输入行程变量" />
</el-form-item>
<el-form-item label="v1" prop="v1">
<el-input v-model="form.v1" placeholder="请输入行程" />
</el-form-item>
<el-form-item label="v2" prop="v2">
<el-input v-model="form.v2" placeholder="请输入设备总长" />
</el-form-item>
<el-form-item label="v3" prop="v3">
<el-input v-model="form.v3" placeholder="请输入地脚位置1" />
</el-form-item>
<el-form-item label="v4" prop="v4">
<el-input v-model="form.v4" placeholder="请输入地脚位置1" />
</el-form-item>
<el-form-item label="v5" prop="v5">
<el-input v-model="form.v5" placeholder="请输入箱体装配长度" />
</el-form-item>
<el-form-item label="v6" prop="v6">
<el-input v-model="form.v6" placeholder="请输入箱体地脚位置1" />
</el-form-item>
<el-form-item label="v7" prop="v7">
<el-input v-model="form.v7" placeholder="请输入箱体地脚位置1" />
</el-form-item>
<el-form-item label="v8" prop="v8">
<el-input v-model="form.v8" placeholder="请输入铝箱长度1" />
</el-form-item>
<el-form-item label="g1" prop="g1">
<el-input v-model="form.g1" placeholder="请输入铝箱1重量" />
</el-form-item>
<el-form-item label="v9" prop="v9">
<el-input v-model="form.v9" placeholder="请输入铝箱长度2" />
</el-form-item>
<el-form-item label="g2" prop="g2">
<el-input v-model="form.g2" placeholder="请输入铝箱2重量" />
</el-form-item>
<el-form-item label="v10" prop="v10">
<el-input v-model="form.v10" placeholder="请输入导向条长度1" />
</el-form-item>
<el-form-item label="g5" prop="g5">
<el-input v-model="form.g5" placeholder="请输入导向条1单重" />
</el-form-item>
<el-form-item label="v11" prop="v11">
<el-input v-model="form.v11" placeholder="请输入导向条长度1数量" />
</el-form-item>
<el-form-item label="v12" prop="v12">
<el-input v-model="form.v12" placeholder="请输入导向条长度2" />
</el-form-item>
<el-form-item label="g6" prop="g6">
<el-input v-model="form.g6" placeholder="请输入导向条2单重" />
</el-form-item>
<el-form-item label="v13" prop="v13">
<el-input v-model="form.v13" placeholder="请输入导向条2数量" />
</el-form-item>
<el-form-item label="v14" prop="v14">
<el-input v-model="form.v14" placeholder="请输入导向条长度3" />
</el-form-item>
<el-form-item label="g7" prop="g7">
<el-input v-model="form.g7" placeholder="请输入导向条3单重" />
</el-form-item>
<el-form-item label="v15" prop="v15">
<el-input v-model="form.v15" placeholder="请输入导向条3数量" />
</el-form-item>
<el-form-item label="v41" prop="v41">
<el-input v-model="form.v41" placeholder="请输入外链板" />
</el-form-item>
<el-form-item label="v42" prop="v42">
<el-input v-model="form.v42" placeholder="请输入内链板" />
</el-form-item>
<el-form-item label="v43" prop="v43">
<el-input v-model="form.v43" placeholder="请输入连接板" />
</el-form-item>
<el-form-item label="v44" prop="v44">
<el-input v-model="form.v44" placeholder="请输入滚轮轴" />
</el-form-item>
<el-form-item label="v45" prop="v45">
<el-input v-model="form.v45" placeholder="请输入隔套" />
</el-form-item>
<el-form-item label="v46" prop="v46">
<el-input v-model="form.v46" placeholder="请输入隔垫" />
</el-form-item>
<el-form-item label="v47" prop="v47">
<el-input v-model="form.v47" placeholder="请输入滚轮" />
</el-form-item>
<el-form-item label="v48" prop="v48">
<el-input v-model="form.v48" placeholder="请输入垫圈" />
</el-form-item>
<el-form-item label="v49" prop="v49">
<el-input v-model="form.v49" placeholder="请输入挡圈" />
</el-form-item>
<el-form-item label="v50" prop="v50">
<el-input v-model="form.v50" placeholder="请输入滚轮隔套" />
</el-form-item>
<el-form-item label="v51" prop="v51">
<el-input v-model="form.v51" placeholder="请输入内链板组件" />
</el-form-item>
<el-form-item label="v52" prop="v52">
<el-input v-model="form.v52" placeholder="请输入内链板组件" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listSpec100r, getSpec100r, delSpec100r, addSpec100r, updateSpec100r } from "@/api/system/spec100r";
export default {
name: "Spec100r",
data() {
return {
// loading
buttonLoading: false,
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
// 100R
spec100rList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
travelLength: undefined,
itemType: undefined,
axialType: undefined,
boxType: undefined,
V1: undefined,
V2: undefined,
V3: undefined,
V4: undefined,
V5: undefined,
V6: undefined,
V7: undefined,
V8: undefined,
G1: undefined,
V9: undefined,
G2: undefined,
V10: undefined,
G5: undefined,
V11: undefined,
V12: undefined,
G6: undefined,
V13: undefined,
V14: undefined,
G7: undefined,
V15: undefined,
V41: undefined,
V42: undefined,
V43: undefined,
V44: undefined,
V45: undefined,
V46: undefined,
V47: undefined,
V48: undefined,
V49: undefined,
V50: undefined,
V51: undefined,
V52: undefined,
},
//
form: {},
//
rules: {
id: [
{ required: true, message: "主键ID不能为空", trigger: "blur" }
],
travelLength: [
{ required: true, message: "行程变量不能为空", trigger: "blur" }
],
itemType: [
{ required: true, message: "类型不能为空", trigger: "change" }
],
axialType: [
{ required: true, message: "轴向不能为空", trigger: "change" }
],
boxType: [
{ required: true, message: "箱体不能为空", trigger: "change" }
],
V1: [
{ required: true, message: "行程不能为空", trigger: "blur" }
],
V2: [
{ required: true, message: "设备总长不能为空", trigger: "blur" }
],
V3: [
{ required: true, message: "地脚位置1不能为空", trigger: "blur" }
],
V4: [
{ required: true, message: "地脚位置1不能为空", trigger: "blur" }
],
V5: [
{ required: true, message: "箱体装配长度不能为空", trigger: "blur" }
],
V6: [
{ required: true, message: "箱体地脚位置1不能为空", trigger: "blur" }
],
V7: [
{ required: true, message: "箱体地脚位置1不能为空", trigger: "blur" }
],
V8: [
{ required: true, message: "铝箱长度1不能为空", trigger: "blur" }
],
G1: [
{ required: true, message: "铝箱1重量不能为空", trigger: "blur" }
],
V9: [
{ required: true, message: "铝箱长度2不能为空", trigger: "blur" }
],
G2: [
{ required: true, message: "铝箱2重量不能为空", trigger: "blur" }
],
V10: [
{ required: true, message: "导向条长度1不能为空", trigger: "blur" }
],
G5: [
{ required: true, message: "导向条1单重不能为空", trigger: "blur" }
],
V11: [
{ required: true, message: "导向条长度1数量不能为空", trigger: "blur" }
],
V12: [
{ required: true, message: "导向条长度2不能为空", trigger: "blur" }
],
G6: [
{ required: true, message: "导向条2单重不能为空", trigger: "blur" }
],
V13: [
{ required: true, message: "导向条2数量不能为空", trigger: "blur" }
],
V14: [
{ required: true, message: "导向条长度3不能为空", trigger: "blur" }
],
G7: [
{ required: true, message: "导向条3单重不能为空", trigger: "blur" }
],
V15: [
{ required: true, message: "导向条3数量不能为空", trigger: "blur" }
],
V41: [
{ required: true, message: "外链板不能为空", trigger: "blur" }
],
V42: [
{ required: true, message: "内链板不能为空", trigger: "blur" }
],
V43: [
{ required: true, message: "连接板不能为空", trigger: "blur" }
],
V44: [
{ required: true, message: "滚轮轴不能为空", trigger: "blur" }
],
V45: [
{ required: true, message: "隔套不能为空", trigger: "blur" }
],
V46: [
{ required: true, message: "隔垫不能为空", trigger: "blur" }
],
V47: [
{ required: true, message: "滚轮不能为空", trigger: "blur" }
],
V48: [
{ required: true, message: "垫圈不能为空", trigger: "blur" }
],
V49: [
{ required: true, message: "挡圈不能为空", trigger: "blur" }
],
V50: [
{ required: true, message: "滚轮隔套不能为空", trigger: "blur" }
],
V51: [
{ required: true, message: "内链板组件不能为空", trigger: "blur" }
],
V52: [
{ required: true, message: "内链板组件不能为空", trigger: "blur" }
],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询100R设备规格参数列表 */
getList() {
this.loading = true;
listSpec100r(this.queryParams).then(response => {
this.spec100rList = response.rows || [];
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: undefined,
travelLength: undefined,
itemType: undefined,
axialType: undefined,
boxType: undefined,
V1: undefined,
V2: undefined,
V3: undefined,
V4: undefined,
V5: undefined,
V6: undefined,
V7: undefined,
V8: undefined,
G1: undefined,
V9: undefined,
G2: undefined,
V10: undefined,
G5: undefined,
V11: undefined,
V12: undefined,
G6: undefined,
V13: undefined,
V14: undefined,
G7: undefined,
V15: undefined,
V41: undefined,
V42: undefined,
V43: undefined,
V44: undefined,
V45: undefined,
V46: undefined,
V47: undefined,
V48: undefined,
V49: undefined,
V50: undefined,
V51: undefined,
V52: undefined,
createTime: undefined,
updateTime: undefined,
createBy: undefined,
updateBy: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加100R设备规格参数";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
const id = row.id || this.ids
getSpec100r(id).then(response => {
this.loading = false;
this.form = response.data || {};
this.open = true;
this.title = "修改100R设备规格参数";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.id != null) {
updateSpec100r(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addSpec100r(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除100R设备规格参数编号为"' + ids + '"的数据项?').then(() => {
this.loading = true;
return delSpec100r(ids);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/spec100r/export', {
...this.queryParams
}, `spec100r_${new Date().getTime()}.xlsx`)
}
}
};
</script>

View File

@ -9,6 +9,18 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="箱体" prop="boxType">
<el-select
v-model="queryParams.boxType"
placeholder="请选择箱体层数"
clearable
@change="handleQuery"
>
<el-option label="S(单层)" value="S" />
<el-option label="D(双层)" value="D" />
<el-option label="T(三层)" value="T" />
</el-select>
</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>
@ -61,12 +73,11 @@
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="spec35rList" @selection-change="handleSelectionChange">
<el-table v-loading="loading" border :data="spec35rList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="主键ID" align="center" prop="id" v-if="true"/>
<el-table-column label="行程变量" align="center" prop="travelLength" />
<el-table-column label="行程" align="center" prop="travelLength" />
<el-table-column label="类型" align="center" prop="itemType" />
<el-table-column label="轴向" align="center" prop="axialType" />
<el-table-column label="箱体" align="center" prop="boxType" />
<el-table-column label="V1" align="center" prop="V1" />
<el-table-column label="V2" align="center" prop="V2" />
@ -89,6 +100,8 @@
<el-table-column label="V44" align="center" prop="V44" />
<el-table-column label="V45" align="center" prop="V45" />
<el-table-column label="V46" align="center" prop="V46" />
<el-table-column label="V47" align="center" prop="V47" />
<el-table-column label="V48" align="center" prop="V48" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
@ -186,6 +199,12 @@
<el-form-item label="V46" prop="V46">
<el-input v-model="form.V46" placeholder="请输入35E链板" />
</el-form-item>
<el-form-item label="V47" prop="V47">
<el-input v-model="form.V47" placeholder="请输入" />
</el-form-item>
<el-form-item label="V48" prop="V48">
<el-input v-model="form.V48" placeholder="请输入" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
@ -251,6 +270,8 @@ export default {
V44: undefined,
V45: undefined,
V46: undefined,
V47: undefined,
V48: undefined,
},
//
form: {},
@ -265,75 +286,11 @@ export default {
itemType: [
{ required: true, message: "类型不能为空", trigger: "change" }
],
axialType: [
{ required: true, message: "轴向不能为空", trigger: "change" }
],
boxType: [
{ required: true, message: "箱体不能为空", trigger: "change" }
],
V1: [
{ required: true, message: "行程不能为空", trigger: "blur" }
],
V2: [
{ required: true, message: "设备总长不能为空", trigger: "blur" }
],
V3: [
{ required: true, message: "地脚位置1不能为空", trigger: "blur" }
],
V5: [
{ required: true, message: "箱体装配长度不能为空", trigger: "blur" }
],
V6: [
{ required: true, message: "箱体地脚位置1不能为空", trigger: "blur" }
],
V8: [
{ required: true, message: "铝箱长度1不能为空", trigger: "blur" }
],
G1: [
{ required: true, message: "铝箱1重量不能为空", trigger: "blur" }
],
V9: [
{ required: true, message: "铝箱长度2不能为空", trigger: "blur" }
],
G2: [
{ required: true, message: "铝箱2重量不能为空", trigger: "blur" }
],
V10: [
{ required: true, message: "导向条长度1不能为空", trigger: "blur" }
],
G5: [
{ required: true, message: "导向条1单重不能为空", trigger: "blur" }
],
V12: [
{ required: true, message: "导向条长度2不能为空", trigger: "blur" }
],
G6: [
{ required: true, message: "导向条2单重不能为空", trigger: "blur" }
],
V14: [
{ required: true, message: "导向条长度3不能为空", trigger: "blur" }
],
G7: [
{ required: true, message: "导向条3单重不能为空", trigger: "blur" }
],
V41: [
{ required: true, message: "轴挡不能为空", trigger: "blur" }
],
V42: [
{ required: true, message: "35E链条滚轮不能为空", trigger: "blur" }
],
V43: [
{ required: true, message: "35E垫圈不能为空", trigger: "blur" }
],
V44: [
{ required: true, message: "35R链节轴2不能为空", trigger: "blur" }
],
V45: [
{ required: true, message: "35E链节轴2不能为空", trigger: "blur" }
],
V46: [
{ required: true, message: "35E链板不能为空", trigger: "blur" }
],
}
};
},
@ -394,6 +351,8 @@ export default {
V44: undefined,
V45: undefined,
V46: undefined,
V47: undefined,
V48: undefined,
createTime: undefined,
updateTime: undefined,
createBy: undefined,

View File

@ -0,0 +1,549 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="行程变量" prop="travelLength">
<el-input
v-model="queryParams.travelLength"
placeholder="请输入行程变量"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="箱体" prop="boxType">
<el-select
v-model="queryParams.boxType"
placeholder="请选择箱体层数"
clearable
@change="handleQuery"
>
<el-option label="S(单层)" value="S" />
<el-option label="D(双层)" value="D" />
<el-option label="T(三层)" value="T" />
</el-select>
</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>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:spec40r:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:spec40r:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:spec40r:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:spec40r:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" border :data="spec40rList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="行程变量" align="center" prop="travelLength" />
<el-table-column label="类型" align="center" prop="itemType" />
<el-table-column label="箱体" align="center" prop="boxType" />
<el-table-column label="v1" align="center" prop="v1" />
<el-table-column label="v2" align="center" prop="v2" />
<el-table-column label="v3" align="center" prop="v3" />
<el-table-column label="v5" align="center" prop="v5" />
<el-table-column label="v6" align="center" prop="v6" />
<el-table-column label="v8" align="center" prop="v8" />
<el-table-column label="g1" align="center" prop="g1" />
<el-table-column label="v9" align="center" prop="v9" />
<el-table-column label="g2" align="center" prop="g2" />
<el-table-column label="v10" align="center" prop="v10" />
<el-table-column label="g5" align="center" prop="g5" />
<el-table-column label="v11" align="center" prop="v11" />
<el-table-column label="v12" align="center" prop="v12" />
<el-table-column label="g6" align="center" prop="g6" />
<el-table-column label="v13" align="center" prop="v13" />
<el-table-column label="v14" align="center" prop="v14" />
<el-table-column label="g7" align="center" prop="g7" />
<el-table-column label="v15" align="center" prop="v15" />
<el-table-column label="v41" align="center" prop="v41" />
<el-table-column label="v42" align="center" prop="v42" />
<el-table-column label="v43" align="center" prop="v43" />
<el-table-column label="v44" align="center" prop="v44" />
<el-table-column label="v45" align="center" prop="v45" />
<el-table-column label="v46" align="center" prop="v46" />
<el-table-column label="v47" align="center" prop="v47" />
<el-table-column label="v48" align="center" prop="v48" />
<el-table-column label="v49" align="center" prop="v49" />
<el-table-column label="v50" align="center" prop="v50" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:spec40r:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:spec40r:remove']"
>删除</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"
/>
<!-- 添加或修改40R设备规格参数对话框 -->
<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="行程变量" prop="travelLength">
<el-input v-model="form.travelLength" placeholder="请输入行程变量" />
</el-form-item>
<el-form-item label="行程" prop="v1">
<el-input v-model="form.v1" placeholder="请输入行程" />
</el-form-item>
<el-form-item label="设备总长" prop="v2">
<el-input v-model="form.v2" placeholder="请输入设备总长" />
</el-form-item>
<el-form-item label="地脚位置1" prop="v3">
<el-input v-model="form.v3" placeholder="请输入地脚位置1" />
</el-form-item>
<el-form-item label="箱体装配长度" prop="v5">
<el-input v-model="form.v5" placeholder="请输入箱体装配长度" />
</el-form-item>
<el-form-item label="箱体地脚位置1" prop="v6">
<el-input v-model="form.v6" placeholder="请输入箱体地脚位置1" />
</el-form-item>
<el-form-item label="铝箱长度1" prop="v8">
<el-input v-model="form.v8" placeholder="请输入铝箱长度1" />
</el-form-item>
<el-form-item label="铝箱1重量" prop="g1">
<el-input v-model="form.g1" placeholder="请输入铝箱1重量" />
</el-form-item>
<el-form-item label="铝箱长度2" prop="v9">
<el-input v-model="form.v9" placeholder="请输入铝箱长度2" />
</el-form-item>
<el-form-item label="铝箱2重量" prop="g2">
<el-input v-model="form.g2" placeholder="请输入铝箱2重量" />
</el-form-item>
<el-form-item label="导向条长度1" prop="v10">
<el-input v-model="form.v10" placeholder="请输入导向条长度1" />
</el-form-item>
<el-form-item label="导向条1单重" prop="g5">
<el-input v-model="form.g5" placeholder="请输入导向条1单重" />
</el-form-item>
<el-form-item label="导向条长度1数量" prop="v11">
<el-input v-model="form.v11" placeholder="请输入导向条长度1数量" />
</el-form-item>
<el-form-item label="导向条长度2" prop="v12">
<el-input v-model="form.v12" placeholder="请输入导向条长度2" />
</el-form-item>
<el-form-item label="导向条2单重" prop="g6">
<el-input v-model="form.g6" placeholder="请输入导向条2单重" />
</el-form-item>
<el-form-item label="导向条2数量" prop="v13">
<el-input v-model="form.v13" placeholder="请输入导向条2数量" />
</el-form-item>
<el-form-item label="导向条长度3" prop="v14">
<el-input v-model="form.v14" placeholder="请输入导向条长度3" />
</el-form-item>
<el-form-item label="导向条3单重" prop="g7">
<el-input v-model="form.g7" placeholder="请输入导向条3单重" />
</el-form-item>
<el-form-item label="导向条3数量" prop="v15">
<el-input v-model="form.v15" placeholder="请输入导向条3数量" />
</el-form-item>
<el-form-item label="外链板" prop="v41">
<el-input v-model="form.v41" placeholder="请输入外链板" />
</el-form-item>
<el-form-item label="内链板" prop="v42">
<el-input v-model="form.v42" placeholder="请输入内链板" />
</el-form-item>
<el-form-item label="连接板" prop="v43">
<el-input v-model="form.v43" placeholder="请输入连接板" />
</el-form-item>
<el-form-item label="滚轮轴" prop="v44">
<el-input v-model="form.v44" placeholder="请输入滚轮轴" />
</el-form-item>
<el-form-item label="隔套" prop="v45">
<el-input v-model="form.v45" placeholder="请输入隔套" />
</el-form-item>
<el-form-item label="隔垫" prop="v46">
<el-input v-model="form.v46" placeholder="请输入隔垫" />
</el-form-item>
<el-form-item label="滚轮" prop="v47">
<el-input v-model="form.v47" placeholder="请输入滚轮" />
</el-form-item>
<el-form-item label="卡簧" prop="v48">
<el-input v-model="form.v48" placeholder="请输入卡簧" />
</el-form-item>
<el-form-item label="链套轴" prop="v49">
<el-input v-model="form.v49" placeholder="请输入链套轴" />
</el-form-item>
<el-form-item label="链套" prop="v50">
<el-input v-model="form.v50" placeholder="请输入链套" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listSpec40r, getSpec40r, delSpec40r, addSpec40r, updateSpec40r } from "@/api/system/spec40r";
export default {
name: "Spec40r",
data() {
return {
// loading
buttonLoading: false,
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
// 40R
spec40rList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
travelLength: undefined,
itemType: undefined,
axialType: undefined,
boxType: undefined,
v1: undefined,
v2: undefined,
v3: undefined,
v5: undefined,
v6: undefined,
v8: undefined,
g1: undefined,
v9: undefined,
g2: undefined,
v10: undefined,
g5: undefined,
v11: undefined,
v12: undefined,
g6: undefined,
v13: undefined,
v14: undefined,
g7: undefined,
v15: undefined,
v41: undefined,
v42: undefined,
v43: undefined,
v44: undefined,
v45: undefined,
v46: undefined,
v47: undefined,
v48: undefined,
v49: undefined,
v50: undefined,
},
//
form: {},
//
rules: {
id: [
{ required: true, message: "主键ID不能为空", trigger: "blur" }
],
travelLength: [
{ required: true, message: "行程变量不能为空", trigger: "blur" }
],
itemType: [
{ required: true, message: "类型不能为空", trigger: "change" }
],
axialType: [
{ required: true, message: "轴向不能为空", trigger: "change" }
],
boxType: [
{ required: true, message: "箱体不能为空", trigger: "change" }
],
v1: [
{ required: true, message: "行程不能为空", trigger: "blur" }
],
v2: [
{ required: true, message: "设备总长不能为空", trigger: "blur" }
],
v3: [
{ required: true, message: "地脚位置1不能为空", trigger: "blur" }
],
v5: [
{ required: true, message: "箱体装配长度不能为空", trigger: "blur" }
],
v6: [
{ required: true, message: "箱体地脚位置1不能为空", trigger: "blur" }
],
v8: [
{ required: true, message: "铝箱长度1不能为空", trigger: "blur" }
],
g1: [
{ required: true, message: "铝箱1重量不能为空", trigger: "blur" }
],
v9: [
{ required: true, message: "铝箱长度2不能为空", trigger: "blur" }
],
g2: [
{ required: true, message: "铝箱2重量不能为空", trigger: "blur" }
],
v10: [
{ required: true, message: "导向条长度1不能为空", trigger: "blur" }
],
g5: [
{ required: true, message: "导向条1单重不能为空", trigger: "blur" }
],
v11: [
{ required: true, message: "导向条长度1数量不能为空", trigger: "blur" }
],
v12: [
{ required: true, message: "导向条长度2不能为空", trigger: "blur" }
],
g6: [
{ required: true, message: "导向条2单重不能为空", trigger: "blur" }
],
v13: [
{ required: true, message: "导向条2数量不能为空", trigger: "blur" }
],
v14: [
{ required: true, message: "导向条长度3不能为空", trigger: "blur" }
],
g7: [
{ required: true, message: "导向条3单重不能为空", trigger: "blur" }
],
v15: [
{ required: true, message: "导向条3数量不能为空", trigger: "blur" }
],
v41: [
{ required: true, message: "外链板不能为空", trigger: "blur" }
],
v42: [
{ required: true, message: "内链板不能为空", trigger: "blur" }
],
v43: [
{ required: true, message: "连接板不能为空", trigger: "blur" }
],
v44: [
{ required: true, message: "滚轮轴不能为空", trigger: "blur" }
],
v45: [
{ required: true, message: "隔套不能为空", trigger: "blur" }
],
v46: [
{ required: true, message: "隔垫不能为空", trigger: "blur" }
],
v47: [
{ required: true, message: "滚轮不能为空", trigger: "blur" }
],
v48: [
{ required: true, message: "卡簧不能为空", trigger: "blur" }
],
v49: [
{ required: true, message: "链套轴不能为空", trigger: "blur" }
],
v50: [
{ required: true, message: "链套不能为空", trigger: "blur" }
],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询40R设备规格参数列表 */
getList() {
this.loading = true;
listSpec40r(this.queryParams).then(response => {
this.spec40rList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: undefined,
travelLength: undefined,
itemType: undefined,
axialType: undefined,
boxType: undefined,
v1: undefined,
v2: undefined,
v3: undefined,
v5: undefined,
v6: undefined,
v8: undefined,
g1: undefined,
v9: undefined,
g2: undefined,
v10: undefined,
g5: undefined,
v11: undefined,
v12: undefined,
g6: undefined,
v13: undefined,
v14: undefined,
g7: undefined,
v15: undefined,
v41: undefined,
v42: undefined,
v43: undefined,
v44: undefined,
v45: undefined,
v46: undefined,
v47: undefined,
v48: undefined,
v49: undefined,
v50: undefined,
createTime: undefined,
updateTime: undefined,
createBy: undefined,
updateBy: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加40R设备规格参数";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
const id = row.id || this.ids
getSpec40r(id).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改40R设备规格参数";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.id != null) {
updateSpec40r(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addSpec40r(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除40R设备规格参数编号为"' + ids + '"的数据项?').then(() => {
this.loading = true;
return delSpec40r(ids);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/spec40r/export', {
...this.queryParams
}, `spec40r_${new Date().getTime()}.xlsx`)
}
}
};
</script>

View File

@ -0,0 +1,576 @@
<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="行程变量" prop="travelLength">
<el-input
v-model="queryParams.travelLength"
placeholder="请输入行程变量"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="箱体" prop="boxType">
<el-select
v-model="queryParams.boxType"
placeholder="请选择箱体层数"
clearable
@change="handleQuery"
>
<el-option label="S(单层)" value="S" />
<el-option label="D(双层)" value="D" />
<el-option label="T(三层)" value="T" />
</el-select>
</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>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['system:spec40s:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['system:spec40s:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['system:spec40s:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['system:spec40s:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" border :data="spec40sList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="行程" align="center" prop="travelLength" />
<el-table-column label="类型" align="center" prop="itemType" />
<el-table-column label="箱体" align="center" prop="boxType" />
<el-table-column label="v1" align="center" prop="v1" />
<el-table-column label="v2" align="center" prop="v2" />
<el-table-column label="v22" align="center" prop="v22" />
<el-table-column label="v3" align="center" prop="v3" />
<el-table-column label="v23" align="center" prop="v23" />
<el-table-column label="v5" align="center" prop="v5" />
<el-table-column label="v6" align="center" prop="v6" />
<el-table-column label="v8" align="center" prop="v8" />
<el-table-column label="g1" align="center" prop="g1" />
<el-table-column label="v9" align="center" prop="v9" />
<el-table-column label="g2" align="center" prop="g2" />
<el-table-column label="v10" align="center" prop="v10" />
<el-table-column label="g5" align="center" prop="g5" />
<el-table-column label="v11" align="center" prop="v11" />
<el-table-column label="v12" align="center" prop="v12" />
<el-table-column label="g6" align="center" prop="g6" />
<el-table-column label="v13" align="center" prop="v13" />
<el-table-column label="v14" align="center" prop="v14" />
<el-table-column label="g7" align="center" prop="g7" />
<el-table-column label="v15" align="center" prop="v15" />
<el-table-column label="v41" align="center" prop="v41" />
<el-table-column label="v42" align="center" prop="v42" />
<el-table-column label="v43" align="center" prop="v43" />
<el-table-column label="v44" align="center" prop="v44" />
<el-table-column label="v45" align="center" prop="v45" />
<el-table-column label="v46" align="center" prop="v46" />
<el-table-column label="v47" align="center" prop="v47" />
<el-table-column label="v48" align="center" prop="v48" />
<el-table-column label="v49" align="center" prop="v49" />
<el-table-column label="v50" align="center" prop="v50" />
<el-table-column label="v51" align="center" prop="v51" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:spec40s:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:spec40s:remove']"
>删除</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"
/>
<!-- 添加或修改40S设备规格参数对话框 -->
<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="行程" prop="travelLength">
<el-input v-model="form.travelLength" placeholder="请输入行程变量" />
</el-form-item>
<el-form-item label="v1" prop="v1">
<el-input v-model="form.v1" placeholder="请输入行程" />
</el-form-item>
<el-form-item label="v2" prop="v2">
<el-input v-model="form.v2" placeholder="请输入设备总长" />
</el-form-item>
<el-form-item label="v22" prop="v22">
<el-input v-model="form.v22" placeholder="请输入P40SI设备总仓" />
</el-form-item>
<el-form-item label="v3" prop="v3">
<el-input v-model="form.v3" placeholder="请输入地脚位置1" />
</el-form-item>
<el-form-item label="v23" prop="v23">
<el-input v-model="form.v23" placeholder="请输入P40SI地脚位置" />
</el-form-item>
<el-form-item label="v5" prop="v5">
<el-input v-model="form.v5" placeholder="请输入箱体装配长度" />
</el-form-item>
<el-form-item label="v6" prop="v6">
<el-input v-model="form.v6" placeholder="请输入箱体地脚位置1" />
</el-form-item>
<el-form-item label="v8" prop="v8">
<el-input v-model="form.v8" placeholder="请输入铝箱长度1" />
</el-form-item>
<el-form-item label="g1" prop="g1">
<el-input v-model="form.g1" placeholder="请输入铝箱1重量" />
</el-form-item>
<el-form-item label="v9" prop="v9">
<el-input v-model="form.v9" placeholder="请输入铝箱长度2" />
</el-form-item>
<el-form-item label="g2" prop="g2">
<el-input v-model="form.g2" placeholder="请输入铝箱2重量" />
</el-form-item>
<el-form-item label="v10" prop="v10">
<el-input v-model="form.v10" placeholder="请输入导向条长度1" />
</el-form-item>
<el-form-item label="g5" prop="g5">
<el-input v-model="form.g5" placeholder="请输入导向条1单重" />
</el-form-item>
<el-form-item label="v11" prop="v11">
<el-input v-model="form.v11" placeholder="请输入导向条长度1数量" />
</el-form-item>
<el-form-item label="v12" prop="v12">
<el-input v-model="form.v12" placeholder="请输入导向条长度2" />
</el-form-item>
<el-form-item label="g6" prop="g6">
<el-input v-model="form.g6" placeholder="请输入导向条2单重" />
</el-form-item>
<el-form-item label="v13" prop="v13">
<el-input v-model="form.v13" placeholder="请输入导向条2数量" />
</el-form-item>
<el-form-item label="v14" prop="v14">
<el-input v-model="form.v14" placeholder="请输入导向条长度3" />
</el-form-item>
<el-form-item label="g7" prop="g7">
<el-input v-model="form.g7" placeholder="请输入导向条3单重" />
</el-form-item>
<el-form-item label="v15" prop="v15">
<el-input v-model="form.v15" placeholder="请输入导向条3数量" />
</el-form-item>
<el-form-item label="v41" prop="v41">
<el-input v-model="form.v41" placeholder="请输入外链板" />
</el-form-item>
<el-form-item label="v42" prop="v42">
<el-input v-model="form.v42" placeholder="请输入内链板" />
</el-form-item>
<el-form-item label="v43" prop="v43">
<el-input v-model="form.v43" placeholder="请输入连接板" />
</el-form-item>
<el-form-item label="v44" prop="v44">
<el-input v-model="form.v44" placeholder="请输入滚轮轴" />
</el-form-item>
<el-form-item label="v45" prop="v45">
<el-input v-model="form.v45" placeholder="请输入隔套" />
</el-form-item>
<el-form-item label="v46" prop="v46">
<el-input v-model="form.v46" placeholder="请输入隔垫" />
</el-form-item>
<el-form-item label="v47" prop="v47">
<el-input v-model="form.v47" placeholder="请输入滚轮" />
</el-form-item>
<el-form-item label="v48" prop="v48">
<el-input v-model="form.v48" placeholder="请输入垫圈" />
</el-form-item>
<el-form-item label="v49" prop="v49">
<el-input v-model="form.v49" placeholder="请输入挡圈" />
</el-form-item>
<el-form-item label="v50" prop="v50">
<el-input v-model="form.v50" placeholder="请输入滚轮隔套" />
</el-form-item>
<el-form-item label="v51" prop="v51">
<el-input v-model="form.v51" placeholder="请输入内链板组件" />
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button :loading="buttonLoading" type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listSpec40s, getSpec40s, delSpec40s, addSpec40s, updateSpec40s } from "@/api/system/spec40s";
export default {
name: "Spec40s",
data() {
return {
// loading
buttonLoading: false,
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
// 40S
spec40sList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
travelLength: undefined,
itemType: undefined,
axialType: undefined,
boxType: undefined,
v1: undefined,
v2: undefined,
v22: undefined,
v3: undefined,
v23: undefined,
v5: undefined,
v6: undefined,
v8: undefined,
g1: undefined,
v9: undefined,
g2: undefined,
v10: undefined,
g5: undefined,
v11: undefined,
v12: undefined,
g6: undefined,
v13: undefined,
v14: undefined,
g7: undefined,
v15: undefined,
v41: undefined,
v42: undefined,
v43: undefined,
v44: undefined,
v45: undefined,
v46: undefined,
v47: undefined,
v48: undefined,
v49: undefined,
v50: undefined,
v51: undefined,
},
//
form: {},
//
rules: {
id: [
{ required: true, message: "主键ID不能为空", trigger: "blur" }
],
travelLength: [
{ required: true, message: "行程变量不能为空", trigger: "blur" }
],
itemType: [
{ required: true, message: "类型不能为空", trigger: "change" }
],
axialType: [
{ required: true, message: "轴向不能为空", trigger: "change" }
],
boxType: [
{ required: true, message: "箱体不能为空", trigger: "change" }
],
v1: [
{ required: true, message: "行程不能为空", trigger: "blur" }
],
v2: [
{ required: true, message: "设备总长不能为空", trigger: "blur" }
],
v22: [
{ required: true, message: "P40SI设备总仓不能为空", trigger: "blur" }
],
v3: [
{ required: true, message: "地脚位置1不能为空", trigger: "blur" }
],
v23: [
{ required: true, message: "P40SI地脚位置不能为空", trigger: "blur" }
],
v5: [
{ required: true, message: "箱体装配长度不能为空", trigger: "blur" }
],
v6: [
{ required: true, message: "箱体地脚位置1不能为空", trigger: "blur" }
],
v8: [
{ required: true, message: "铝箱长度1不能为空", trigger: "blur" }
],
g1: [
{ required: true, message: "铝箱1重量不能为空", trigger: "blur" }
],
v9: [
{ required: true, message: "铝箱长度2不能为空", trigger: "blur" }
],
g2: [
{ required: true, message: "铝箱2重量不能为空", trigger: "blur" }
],
v10: [
{ required: true, message: "导向条长度1不能为空", trigger: "blur" }
],
g5: [
{ required: true, message: "导向条1单重不能为空", trigger: "blur" }
],
v11: [
{ required: true, message: "导向条长度1数量不能为空", trigger: "blur" }
],
v12: [
{ required: true, message: "导向条长度2不能为空", trigger: "blur" }
],
g6: [
{ required: true, message: "导向条2单重不能为空", trigger: "blur" }
],
v13: [
{ required: true, message: "导向条2数量不能为空", trigger: "blur" }
],
v14: [
{ required: true, message: "导向条长度3不能为空", trigger: "blur" }
],
g7: [
{ required: true, message: "导向条3单重不能为空", trigger: "blur" }
],
v15: [
{ required: true, message: "导向条3数量不能为空", trigger: "blur" }
],
v41: [
{ required: true, message: "外链板不能为空", trigger: "blur" }
],
v42: [
{ required: true, message: "内链板不能为空", trigger: "blur" }
],
v43: [
{ required: true, message: "连接板不能为空", trigger: "blur" }
],
v44: [
{ required: true, message: "滚轮轴不能为空", trigger: "blur" }
],
v45: [
{ required: true, message: "隔套不能为空", trigger: "blur" }
],
v46: [
{ required: true, message: "隔垫不能为空", trigger: "blur" }
],
v47: [
{ required: true, message: "滚轮不能为空", trigger: "blur" }
],
v48: [
{ required: true, message: "垫圈不能为空", trigger: "blur" }
],
v49: [
{ required: true, message: "挡圈不能为空", trigger: "blur" }
],
v50: [
{ required: true, message: "滚轮隔套不能为空", trigger: "blur" }
],
v51: [
{ required: true, message: "内链板组件不能为空", trigger: "blur" }
],
}
};
},
created() {
this.getList();
},
methods: {
/** 查询40S设备规格参数列表 */
getList() {
this.loading = true;
listSpec40s(this.queryParams).then(response => {
this.spec40sList = response.rows;
this.total = response.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
id: undefined,
travelLength: undefined,
itemType: undefined,
axialType: undefined,
boxType: undefined,
v1: undefined,
v2: undefined,
v22: undefined,
v3: undefined,
v23: undefined,
v5: undefined,
v6: undefined,
v8: undefined,
g1: undefined,
v9: undefined,
g2: undefined,
v10: undefined,
g5: undefined,
v11: undefined,
v12: undefined,
g6: undefined,
v13: undefined,
v14: undefined,
g7: undefined,
v15: undefined,
v41: undefined,
v42: undefined,
v43: undefined,
v44: undefined,
v45: undefined,
v46: undefined,
v47: undefined,
v48: undefined,
v49: undefined,
v50: undefined,
v51: undefined,
createTime: undefined,
updateTime: undefined,
createBy: undefined,
updateBy: undefined
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "添加40S设备规格参数";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.loading = true;
this.reset();
const id = row.id || this.ids
getSpec40s(id).then(response => {
this.loading = false;
this.form = response.data;
this.open = true;
this.title = "修改40S设备规格参数";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.buttonLoading = true;
if (this.form.id != null) {
updateSpec40s(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
} else {
addSpec40s(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
}).finally(() => {
this.buttonLoading = false;
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除40S设备规格参数编号为"' + ids + '"的数据项?').then(() => {
this.loading = true;
return delSpec40s(ids);
}).then(() => {
this.loading = false;
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
}).finally(() => {
this.loading = false;
});
},
/** 导出按钮操作 */
handleExport() {
this.download('system/spec40s/export', {
...this.queryParams
}, `spec40s_${new Date().getTime()}.xlsx`)
}
}
};
</script>