feat(ems): 添加备件库记录盘点功能

- 新增盘点记录相关API和UI
- 实现备件库记录的动态列展示
- 添加盘点记录的添加和删除功能
- 优化表单布局和数据处理逻辑
boardTest
zch 3 weeks ago
parent 63ba32711e
commit 4878e9a10d

@ -9,6 +9,15 @@ export function listSparePartsInventory(query) {
}) })
} }
// 查询备件库记录主列表(包含动态列)
export function listSparePartsInventoryWithDynamicColumns(query) {
return request({
url: '/ems/info/sparePartsInventory/listWithDynamicColumns',
method: 'get',
params: query
})
}
// 查询备件库记录主详细 // 查询备件库记录主详细
export function getSparePartsInventory(objid) { export function getSparePartsInventory(objid) {
return request({ return request({
@ -17,6 +26,14 @@ export function getSparePartsInventory(objid) {
}) })
} }
// 查询备件库记录主详细(包含动态列)
export function getSparePartsInventoryWithDynamicColumns(objid) {
return request({
url: '/ems/info/sparePartsInventory/withDynamicColumns/' + objid,
method: 'get'
})
}
// 新增备件库记录主 // 新增备件库记录主
export function addSparePartsInventory(data) { export function addSparePartsInventory(data) {
return request({ return request({
@ -26,6 +43,15 @@ export function addSparePartsInventory(data) {
}) })
} }
// 新增备件库记录主(包含动态列)
export function addSparePartsInventoryWithDynamicColumns(data) {
return request({
url: '/ems/info/sparePartsInventory/withDynamicColumns',
method: 'post',
data: data
})
}
// 修改备件库记录主 // 修改备件库记录主
export function updateSparePartsInventory(data) { export function updateSparePartsInventory(data) {
return request({ return request({
@ -35,6 +61,15 @@ export function updateSparePartsInventory(data) {
}) })
} }
// 修改备件库记录主(包含动态列)
export function updateSparePartsInventoryWithDynamicColumns(data) {
return request({
url: '/ems/info/sparePartsInventory/withDynamicColumns',
method: 'put',
data: data
})
}
// 删除备件库记录主 // 删除备件库记录主
export function delSparePartsInventory(objid) { export function delSparePartsInventory(objid) {
return request({ return request({
@ -42,3 +77,11 @@ export function delSparePartsInventory(objid) {
method: 'delete' method: 'delete'
}) })
} }
// 获取所有动态列名
export function getDynamicColumns() {
return request({
url: '/ems/info/sparePartsInventory/dynamicColumns',
method: 'get'
})
}

@ -318,6 +318,9 @@
form: {}, form: {},
// //
rules: { rules: {
date: [
{ required: true, message: "日期不能为空", trigger: "blur" }
],
}, },
columns: [ columns: [
{ key: 0, label: `主键自增ID`, visible: false }, { key: 0, label: `主键自增ID`, visible: false },

@ -279,6 +279,13 @@
form: {}, form: {},
// //
rules: { rules: {
faultDate: [
{ required: true, message: "故障日期不能为空", trigger: "blur" }
],
faultLocation: [
{ required: true, message: "故障位置不能为空", trigger: "blur" }
],
}, },
columns: [ columns: [
{ key: 0, label: `主键自增ID`, visible: false }, { key: 0, label: `主键自增ID`, visible: false },

@ -485,6 +485,12 @@
form: {}, form: {},
// //
rules: { rules: {
installationCabinetName: [
{ required: true, message: "安装柜体名称不能为空", trigger: "blur" }
],
locationDescription: [
{ required: true, message: "位置描述不能为空", trigger: "blur" }
],
}, },
columns: [ columns: [
{ key: 0, label: `主键自增ID`, visible: false }, { key: 0, label: `主键自增ID`, visible: false },

@ -507,6 +507,9 @@
form: {}, form: {},
// //
rules: { rules: {
referenceLocation: [
{ required: true, message: "参照位置不能为空", trigger: "blur" }
]
}, },
columns: [ columns: [
{ key: 0, label: `主键自增ID`, visible: false }, { key: 0, label: `主键自增ID`, visible: false },

@ -129,16 +129,29 @@
<el-table v-loading="loading" :data="sparePartsInventoryList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="sparePartsInventoryList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="主键" align="center" prop="objid" v-if="columns[0].visible"/> <el-table-column label="主键" align="center" prop="objid" v-if="columns[0].visible"/>
<el-table-column label="入库时间" align="center" prop="warehouseDate" v-if="columns[1].visible"/> <el-table-column label="入库时间" align="center" prop="warehouseDate" v-if="columns[1].visible"/>
<el-table-column label="采购方式" align="center" prop="purchaseMethod" v-if="columns[2].visible"/> <el-table-column label="采购方式" align="center" prop="purchaseMethod" v-if="columns[2].visible"/>
<el-table-column label="库存位置" align="center" prop="storageLocation" v-if="columns[3].visible"/> <el-table-column label="库存位置" align="center" prop="storageLocation" v-if="columns[3].visible"/>
<el-table-column label="物品名称" align="center" prop="itemName" v-if="columns[4].visible"/> <el-table-column label="物品名称" align="center" prop="itemName" v-if="columns[4].visible"/>
<el-table-column label="原厂编号" align="center" prop="originalPartNumber" v-if="columns[5].visible"/> <el-table-column label="原厂编号" align="center" prop="originalPartNumber" v-if="columns[5].visible"/>
<el-table-column label="型号" align="center" prop="model" v-if="columns[6].visible"/> <el-table-column label="型号" align="center" prop="model" v-if="columns[6].visible"/>
<el-table-column label="入库数量" align="center" prop="warehouseQuantity" v-if="columns[7].visible"/> <el-table-column label="入库数量" align="center" prop="warehouseQuantity" v-if="columns[7].visible"/>
<el-table-column label="剩余数量" align="center" prop="remainingQuantity" v-if="columns[8].visible"/> <el-table-column label="剩余数量" align="center" prop="remainingQuantity" v-if="columns[8].visible"/>
<el-table-column label="备注" align="center" prop="remarks" v-if="columns[9].visible"/> <el-table-column label="备注" align="center" prop="remarks" v-if="columns[9].visible"/>
<!-- 动态盘点列 -->
<el-table-column
v-for="(checkColumn, index) in dynamicColumns"
:key="'check_' + index"
:label="checkColumn"
align="center"
width="120">
<template slot-scope="scope">
<span>{{ getCheckValue(scope.row, checkColumn) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
@ -168,41 +181,112 @@
/> />
<!-- 添加或修改备件库记录主对话框 --> <!-- 添加或修改备件库记录主对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="100px"> <el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-form-item label="入库时间" prop="warehouseDate"> <el-row>
<el-date-picker <el-col :span="12">
v-model="form.warehouseDate" <el-form-item label="入库时间" prop="warehouseDate">
type="datetime" <el-date-picker
placeholder="请选择入库时间" v-model="form.warehouseDate"
value-format="yyyy/MM/dd" type="date"
format="yyyy/MM/dd" placeholder="请选择入库时间"
/> value-format="yyyy-MM-dd"
</el-form-item> format="yyyy-MM-dd"
<el-form-item label="采购方式" prop="purchaseMethod"> />
<el-input v-model="form.purchaseMethod" placeholder="请输入采购方式" /> </el-form-item>
</el-form-item> </el-col>
<el-form-item label="库存位置" prop="storageLocation"> <el-col :span="12">
<el-input v-model="form.storageLocation" placeholder="请输入库存位置" /> <el-form-item label="采购方式" prop="purchaseMethod">
</el-form-item> <el-input v-model="form.purchaseMethod" placeholder="请输入采购方式" />
<el-form-item label="物品名称" prop="itemName"> </el-form-item>
<el-input v-model="form.itemName" placeholder="请输入物品名称" /> </el-col>
</el-form-item> </el-row>
<el-form-item label="原厂编号" prop="originalPartNumber"> <el-row>
<el-input v-model="form.originalPartNumber" placeholder="请输入原厂编号" /> <el-col :span="12">
</el-form-item> <el-form-item label="库存位置" prop="storageLocation">
<el-form-item label="型号" prop="model"> <el-input v-model="form.storageLocation" placeholder="请输入库存位置" />
<el-input v-model="form.model" placeholder="请输入型号" /> </el-form-item>
</el-form-item> </el-col>
<el-form-item label="入库数量" prop="warehouseQuantity"> <el-col :span="12">
<el-input v-model="form.warehouseQuantity" placeholder="请输入入库数量" /> <el-form-item label="物品名称" prop="itemName">
</el-form-item> <el-input v-model="form.itemName" placeholder="请输入物品名称" />
<el-form-item label="剩余数量" prop="remainingQuantity"> </el-form-item>
<el-input v-model="form.remainingQuantity" placeholder="请输入剩余数量" /> </el-col>
</el-form-item> </el-row>
<el-form-item label="备注" prop="remarks"> <el-row>
<el-input v-model="form.remarks" type="textarea" placeholder="请输入内容" /> <el-col :span="12">
</el-form-item> <el-form-item label="原厂编号" prop="originalPartNumber">
<el-input v-model="form.originalPartNumber" placeholder="请输入原厂编号" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="型号" prop="model">
<el-input v-model="form.model" placeholder="请输入型号" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="入库数量" prop="warehouseQuantity">
<el-input v-model="form.warehouseQuantity" placeholder="请输入入库数量" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="剩余数量" prop="remainingQuantity">
<el-input v-model="form.remainingQuantity" placeholder="请输入剩余数量" />
</el-form-item>
</el-col>
</el-row>
<el-form-item label="备注" prop="remarks">
<el-input v-model="form.remarks" type="textarea" placeholder="请输入内容" />
</el-form-item>
<!-- 盘点记录部分 -->
<el-divider content-position="left">盘点记录</el-divider>
<div style="margin-bottom: 10px;">
<el-button
type="primary"
size="small"
icon="el-icon-plus"
@click="addCheckRecord"
>添加盘点记录</el-button>
</div>
<el-table
:data="form.checkData"
border
style="width: 100%; margin-bottom: 20px;"
max-height="300"
>
<el-table-column label="盘点名称" width="200">
<template slot-scope="scope">
<el-input
v-model="scope.row.checkName"
placeholder="如: 2023.3盘点"
size="small"
/>
</template>
</el-table-column>
<el-table-column label="盘点数量" width="150">
<template slot-scope="scope">
<el-input-number
v-model="scope.row.checkQuantity"
:min="0"
size="small"
style="width: 100%"
/>
</template>
</el-table-column>
<el-table-column label="操作" width="80">
<template slot-scope="scope">
<el-button
type="danger"
size="mini"
icon="el-icon-delete"
@click="removeCheckRecord(scope.$index)"
></el-button>
</template>
</el-table-column>
</el-table>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button> <el-button type="primary" @click="submitForm"> </el-button>
@ -227,11 +311,7 @@
<i class="el-icon-upload"></i> <i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div> <div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip"> <div class="el-upload__tip text-center" slot="tip">
<!-- <div class="el-upload__tip" slot="tip">-->
<!-- <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的数据-->
<!-- </div>-->
<span>仅允许导入xlsxlsx格式文件</span> <span>仅允许导入xlsxlsx格式文件</span>
<!-- <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate"></el-link>-->
</div> </div>
</el-upload> </el-upload>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
@ -243,7 +323,14 @@
</template> </template>
<script> <script>
import { listSparePartsInventory, getSparePartsInventory, delSparePartsInventory, addSparePartsInventory, updateSparePartsInventory } from "@/api/ems/info/sparePartsInventory"; import {
listSparePartsInventoryWithDynamicColumns,
getSparePartsInventoryWithDynamicColumns,
delSparePartsInventory,
addSparePartsInventoryWithDynamicColumns,
updateSparePartsInventoryWithDynamicColumns,
getDynamicColumns
} from "@/api/ems/info/sparePartsInventory";
export default { export default {
name: "SparePartsInventory", name: "SparePartsInventory",
@ -262,7 +349,9 @@
// //
total: 0, total: 0,
// //
sparePartsInventoryList: [], sparePartsInventoryList: [],
//
dynamicColumns: [],
// //
title: "", title: "",
// //
@ -271,32 +360,35 @@
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
warehouseDate: null, warehouseDate: null,
purchaseMethod: null, purchaseMethod: null,
storageLocation: null, storageLocation: null,
itemName: null, itemName: null,
originalPartNumber: null, originalPartNumber: null,
model: null, model: null,
warehouseQuantity: null, warehouseQuantity: null,
remainingQuantity: null, remainingQuantity: null,
remarks: null remarks: null
}, },
// //
form: {}, form: {},
// //
rules: { rules: {
warehouseDate: [
{ required: true, message: "入库时间不能为空", trigger: "blur" }
],
}, },
columns: [ columns: [
{ key: 0, label: `主键`, visible: false }, { key: 0, label: `主键`, visible: false },
{ key: 1, label: `入库时间`, visible: true }, { key: 1, label: `入库时间`, visible: true },
{ key: 2, label: `采购方式`, visible: true }, { key: 2, label: `采购方式`, visible: true },
{ key: 3, label: `库存位置`, visible: true }, { key: 3, label: `库存位置`, visible: true },
{ key: 4, label: `物品名称`, visible: true }, { key: 4, label: `物品名称`, visible: true },
{ key: 5, label: `原厂编号`, visible: true }, { key: 5, label: `原厂编号`, visible: true },
{ key: 6, label: `型号`, visible: true }, { key: 6, label: `型号`, visible: true },
{ key: 7, label: `入库数量`, visible: true }, { key: 7, label: `入库数量`, visible: true },
{ key: 8, label: `剩余数量`, visible: true }, { key: 8, label: `剩余数量`, visible: true },
{ key: 9, label: `备注`, visible: true }, { key: 9, label: `备注`, visible: true },
], ],
upload: { upload: {
title: "导入备件库记录", title: "导入备件库记录",
@ -310,6 +402,7 @@
}, },
created() { created() {
this.getList(); this.getList();
this.getDynamicColumnsList();
this.upload.url = process.env.VUE_APP_BASE_API + "/ems/info/sparePartsInventory/importData"; this.upload.url = process.env.VUE_APP_BASE_API + "/ems/info/sparePartsInventory/importData";
this.upload.headers = { Authorization: "Bearer " + this.$store.getters.token }; this.upload.headers = { Authorization: "Bearer " + this.$store.getters.token };
}, },
@ -317,12 +410,44 @@
/** 查询备件库记录主列表 */ /** 查询备件库记录主列表 */
getList() { getList() {
this.loading = true; this.loading = true;
listSparePartsInventory(this.queryParams).then(response => { listSparePartsInventoryWithDynamicColumns(this.queryParams).then(response => {
this.sparePartsInventoryList = response.rows; this.sparePartsInventoryList = response.rows;
this.total = response.total; this.total = response.total;
this.loading = false; this.loading = false;
}); });
}, },
/** 获取动态列列表 */
getDynamicColumnsList() {
getDynamicColumns().then(response => {
this.dynamicColumns = response.data || [];
});
},
/** 获取盘点值 */
getCheckValue(row, checkName) {
if (row.checkData && row.checkData[checkName] !== undefined && row.checkData[checkName] !== null) {
return row.checkData[checkName];
}
return '';
},
/** 添加盘点记录 */
addCheckRecord() {
if (!this.form.checkData) {
this.form.checkData = [];
}
this.form.checkData.push({
checkName: '',
checkQuantity: 0
});
},
/** 删除盘点记录 */
removeCheckRecord(index) {
this.form.checkData.splice(index, 1);
},
// //
cancel() { cancel() {
this.open = false; this.open = false;
@ -331,16 +456,17 @@
// //
reset() { reset() {
this.form = { this.form = {
objid: null, objid: null,
warehouseDate: null, warehouseDate: null,
purchaseMethod: null, purchaseMethod: null,
storageLocation: null, storageLocation: null,
itemName: null, itemName: null,
originalPartNumber: null, originalPartNumber: null,
model: null, model: null,
warehouseQuantity: null, warehouseQuantity: null,
remainingQuantity: null, remainingQuantity: null,
remarks: null remarks: null,
checkData: []
}; };
this.resetForm("form"); this.resetForm("form");
}, },
@ -370,8 +496,18 @@
handleUpdate(row) { handleUpdate(row) {
this.reset(); this.reset();
const objid = row.objid || this.ids const objid = row.objid || this.ids
getSparePartsInventory(objid).then(response => { getSparePartsInventoryWithDynamicColumns(objid).then(response => {
this.form = response.data; this.form = response.data;
//
if (this.form.checkData && typeof this.form.checkData === 'object') {
//
this.form.checkData = Object.keys(this.form.checkData).map(key => ({
checkName: key,
checkQuantity: this.form.checkData[key]
}));
} else {
this.form.checkData = [];
}
this.open = true; this.open = true;
this.title = "修改备件库记录主"; this.title = "修改备件库记录主";
}); });
@ -380,17 +516,32 @@
submitForm() { submitForm() {
this.$refs["form"].validate(valid => { this.$refs["form"].validate(valid => {
if (valid) { if (valid) {
//
const submitData = { ...this.form };
if (submitData.checkData && Array.isArray(submitData.checkData)) {
const checkDataObj = {};
submitData.checkData.forEach(item => {
if (item.checkName && item.checkName.trim() !== '') {
// LongJavaScriptNumber
checkDataObj[item.checkName] = item.checkQuantity || 0;
}
});
submitData.checkData = checkDataObj;
}
if (this.form.objid != null) { if (this.form.objid != null) {
updateSparePartsInventory(this.form).then(response => { updateSparePartsInventoryWithDynamicColumns(submitData).then(response => {
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess("修改成功");
this.open = false; this.open = false;
this.getList(); this.getList();
this.getDynamicColumnsList();
}); });
} else { } else {
addSparePartsInventory(this.form).then(response => { addSparePartsInventoryWithDynamicColumns(submitData).then(response => {
this.$modal.msgSuccess("新增成功"); this.$modal.msgSuccess("新增成功");
this.open = false; this.open = false;
this.getList(); this.getList();
this.getDynamicColumnsList();
}); });
} }
} }
@ -406,38 +557,39 @@
this.$modal.msgSuccess("删除成功"); this.$modal.msgSuccess("删除成功");
}).catch(() => {}); }).catch(() => {});
}, },
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
this.download('ems/info/sparePartsInventory/export', { this.download('ems/info/sparePartsInventory/export', {
...this.queryParams ...this.queryParams
}, `sparePartsInventory_${new Date().getTime()}.xlsx`) }, `sparePartsInventory_${new Date().getTime()}.xlsx`)
}, },
/** 导入按钮操作 */ /** 导入按钮操作 */
handleImport() { handleImport() {
this.upload.title = "导入备件库记录"; this.upload.title = "导入备件库记录";
this.upload.open = true; this.upload.open = true;
}, },
/** 下载模板操作 */ /** 下载模板操作 */
importTemplate() { importTemplate() {
this.download('ems/info/sparePartsInventory/importTemplate', { this.download('ems/info/sparePartsInventory/importTemplate', {
}, `备件库记录数据模板_${new Date().getTime()}.xlsx`) }, `备件库记录数据模板_${new Date().getTime()}.xlsx`)
}, },
// //
handleFileUploadProgress(event, file, fileList) { handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true; this.upload.isUploading = true;
}, },
// //
handleFileSuccess(response, file, fileList) { handleFileSuccess(response, file, fileList) {
this.upload.open = false; this.upload.open = false;
this.upload.isUploading = false; this.upload.isUploading = false;
this.$refs.upload.clearFiles(); this.$refs.upload.clearFiles();
this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true }); this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
this.getList(); this.getList();
}, this.getDynamicColumnsList();
// },
submitFileForm() { //
this.$refs.upload.submit(); submitFileForm() {
} this.$refs.upload.submit();
} }
}
}; };
</script> </script>

@ -1,42 +1,58 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<!-- <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px"> <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
<el-form-item label="类型" prop="type"> <!-- <el-form-item label="日期" prop="date">-->
<!-- <el-input-->
<!-- v-model="queryParams.date"-->
<!-- placeholder="请输入日期"-->
<!-- clearable-->
<!-- @keyup.enter.native="handleQuery"-->
<!-- />-->
<!-- </el-form-item>-->
<el-form-item label="备件名称" prop="sparePartsName">
<el-input <el-input
v-model="queryParams.type" v-model="queryParams.sparePartsName"
placeholder="请输入类型" placeholder="请输入备件名称"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="参照位置" prop="referenceLocation"> <el-form-item label="备件型号" prop="sparePartModel">
<el-input <el-input
v-model="queryParams.referenceLocation" v-model="queryParams.sparePartModel"
placeholder="请输入参照位置" placeholder="请输入备件型号"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="位置描述" prop="locationDescription"> <!-- <el-form-item label="废存数量" prop="wasteQuantity">
<el-input <el-input
v-model="queryParams.locationDescription" v-model="queryParams.wasteQuantity"
placeholder="请输入位置描述" placeholder="请输入废存数量"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item> -->
<el-form-item label="存放位置" prop="storageLocation">
<el-input
v-model="queryParams.storageLocation"
placeholder="请输入存放位置"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="取电" prop="powerSource"> <el-form-item label="登记人" prop="registrar">
<el-input <el-input
v-model="queryParams.powerSource" v-model="queryParams.registrar"
placeholder="请输入取电" placeholder="请输入登记人"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="电池类型" prop="batteryType"> <el-form-item label="库管确认" prop="warehouseConfirmation">
<el-input <el-input
v-model="queryParams.batteryType" v-model="queryParams.warehouseConfirmation"
placeholder="请输入电池类型" placeholder="请输入库管确认"
clearable clearable
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
@ -49,115 +65,11 @@
@keyup.enter.native="handleQuery" @keyup.enter.native="handleQuery"
/> />
</el-form-item> </el-form-item>
<el-form-item label="图片位置" prop="imageLocation">
<el-input
v-model="queryParams.imageLocation"
placeholder="请输入图片位置"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="第1次" prop="firstInstance">
<el-input
v-model="queryParams.firstInstance"
placeholder="请输入第1次"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="第2次" prop="secondInstance">
<el-input
v-model="queryParams.secondInstance"
placeholder="请输入第2次"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="第3次" prop="thirdInstance">
<el-input
v-model="queryParams.thirdInstance"
placeholder="请输入第3次"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="第4次" prop="fourthInstance">
<el-input
v-model="queryParams.fourthInstance"
placeholder="请输入第4次"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="第5次" prop="fifthInstance">
<el-input
v-model="queryParams.fifthInstance"
placeholder="请输入第5次"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="第6次" prop="sixthInstance">
<el-input
v-model="queryParams.sixthInstance"
placeholder="请输入第6次"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="第7次" prop="seventhInstance">
<el-input
v-model="queryParams.seventhInstance"
placeholder="请输入第7次"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="第8次" prop="eighthInstance">
<el-input
v-model="queryParams.eighthInstance"
placeholder="请输入第8次"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="第9次" prop="ninthInstance">
<el-input
v-model="queryParams.ninthInstance"
placeholder="请输入第9次"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="第10次" prop="tenthInstance">
<el-input
v-model="queryParams.tenthInstance"
placeholder="请输入第10次"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="第11次" prop="eleventhInstance">
<el-input
v-model="queryParams.eleventhInstance"
placeholder="请输入第11次"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="第12次" prop="twelfthInstance">
<el-input
v-model="queryParams.twelfthInstance"
placeholder="请输入第12次"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery"></el-button> <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-button icon="el-icon-refresh" size="mini" @click="resetQuery"></el-button>
</el-form-item> </el-form-item>
</el-form> --> </el-form>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
@ -192,16 +104,6 @@
v-hasPermi="['ems/info:sparePartsRegistration:remove']" v-hasPermi="['ems/info:sparePartsRegistration:remove']"
>删除</el-button> >删除</el-button>
</el-col> </el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['ems/info:sparePartsRegistration:export']"
>导出</el-button>
</el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button
type="info" type="info"
@ -212,35 +114,37 @@
v-hasPermi="['ems/info:sparePartsRegistration:add']" v-hasPermi="['ems/info:sparePartsRegistration:add']"
>导入</el-button> >导入</el-button>
</el-col> </el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['ems/info:sparePartsRegistration:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar> <right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
</el-row> </el-row>
<el-table v-loading="loading" :data="sparePartsRegistrationList" @selection-change="handleSelectionChange"> <el-table v-loading="loading" :data="sparePartsRegistrationList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="主键自增ID" align="center" prop="objid" v-if="columns[0].visible"/> <el-table-column label="主键自增ID" align="center" prop="objid" v-if="columns[0].visible"/>
<el-table-column label="类型" align="center" prop="type" v-if="columns[1].visible"/> <el-table-column label="日期" align="center" prop="date" v-if="columns[1].visible">
<el-table-column label="参照位置" align="center" prop="referenceLocation" v-if="columns[2].visible"/> </el-table-column>
<el-table-column label="位置描述" align="center" prop="locationDescription" v-if="columns[3].visible"/> <el-table-column label="备件名称" align="center" prop="sparePartsName" v-if="columns[2].visible">
<el-table-column label="取电" align="center" prop="powerSource" v-if="columns[4].visible"/> </el-table-column>
<el-table-column label="电池类型" align="center" prop="batteryType" v-if="columns[5].visible"/> <el-table-column label="备件型号" align="center" prop="sparePartModel" v-if="columns[8].visible"/>
<el-table-column label="备注" align="center" prop="remarks" v-if="columns[6].visible"/> <el-table-column label="废存数量" align="center" prop="wasteQuantity" v-if="columns[3].visible">
<el-table-column label="图片位置" align="center" prop="imageLocation" v-if="columns[7].visible"> </el-table-column>
<template slot-scope="scope"> <el-table-column label="存放位置" align="center" prop="storageLocation" v-if="columns[4].visible">
<image-preview :src="scope.row.imageLocation":width="50" :height="50"></image-preview> </el-table-column>
</template> <el-table-column label="登记人" align="center" prop="registrar" v-if="columns[5].visible">
</el-table-column>
<el-table-column label="库管确认" align="center" prop="warehouseConfirmation" v-if="columns[6].visible">
</el-table-column>
<el-table-column label="备注" align="center" prop="remarks" v-if="columns[7].visible">
</el-table-column> </el-table-column>
<el-table-column label="第1次" align="center" prop="firstInstance" v-if="columns[8].visible"/>
<el-table-column label="第2次" align="center" prop="secondInstance" v-if="columns[9].visible"/>
<el-table-column label="第3次" align="center" prop="thirdInstance" v-if="columns[10].visible"/>
<el-table-column label="第4次" align="center" prop="fourthInstance" v-if="columns[11].visible"/>
<el-table-column label="第5次" align="center" prop="fifthInstance" v-if="columns[12].visible"/>
<el-table-column label="第6次" align="center" prop="sixthInstance" v-if="columns[13].visible"/>
<el-table-column label="第7次" align="center" prop="seventhInstance" v-if="columns[14].visible"/>
<el-table-column label="第8次" align="center" prop="eighthInstance" v-if="columns[15].visible"/>
<el-table-column label="第9次" align="center" prop="ninthInstance" v-if="columns[16].visible"/>
<el-table-column label="第10次" align="center" prop="tenthInstance" v-if="columns[17].visible"/>
<el-table-column label="第11次" align="center" prop="eleventhInstance" v-if="columns[18].visible"/>
<el-table-column label="第12次" align="center" prop="twelfthInstance" v-if="columns[19].visible"/>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100"> <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="100">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button
@ -272,135 +176,36 @@
<!-- 添加或修改动力能源部行输科废旧备件登记对话框 --> <!-- 添加或修改动力能源部行输科废旧备件登记对话框 -->
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="100px"> <el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-form-item label="类型" prop="type"> <el-form-item label="日期" prop="date">
<el-input v-model="form.type" placeholder="请输入类型" /> <el-date-picker
v-model="form.date"
type="date"
placeholder="请选择日期"
value-format="yyyy/MM/dd"
format="yyyy/MM/dd"
/>
</el-form-item> </el-form-item>
<el-form-item label="参照位置" prop="referenceLocation"> <el-form-item label="备件名称" prop="sparePartsName">
<el-input v-model="form.referenceLocation" placeholder="请输入参照位置" /> <el-input v-model="form.sparePartsName" placeholder="请输入备件名称" />
</el-form-item> </el-form-item>
<el-form-item label="位置描述" prop="locationDescription"> <el-form-item label="备件型号" prop="sparePartModel">
<el-input v-model="form.locationDescription" placeholder="请输入位置描述" /> <el-input v-model="form.sparePartModel" placeholder="请输入备件型号" />
</el-form-item> </el-form-item>
<el-form-item label="取电" prop="powerSource"> <el-form-item label="废存数量" prop="wasteQuantity">
<el-input v-model="form.powerSource" placeholder="请输入取电" /> <el-input-number v-model="form.wasteQuantity" placeholder="请输入废存数量" />
</el-form-item> </el-form-item>
<el-form-item label="电池类型" prop="batteryType"> <el-form-item label="存放位置" prop="storageLocation">
<el-input v-model="form.batteryType" placeholder="请输入电池类型" /> <el-input v-model="form.storageLocation" placeholder="请输入存放位置" />
</el-form-item>
<el-form-item label="登记人" prop="registrar">
<el-input v-model="form.registrar" placeholder="请输入登记人" />
</el-form-item>
<el-form-item label="库管确认" prop="warehouseConfirmation">
<el-input v-model="form.warehouseConfirmation" placeholder="请输入库管确认" />
</el-form-item> </el-form-item>
<el-form-item label="备注" prop="remarks"> <el-form-item label="备注" prop="remarks">
<el-input v-model="form.remarks" placeholder="请输入备注" /> <el-input v-model="form.remarks" placeholder="请输入备注" />
</el-form-item> </el-form-item>
<el-form-item label="图片位置" prop="imageLocation">
<image-upload v-model="form.imageLocation" />
</el-form-item>
<el-form-item label="第1次" prop="firstInstance">
<el-date-picker
v-model="form.firstInstance"
type="date"
placeholder="请选择第1次日期"
value-format="yyyy/MM/dd"
format="yyyy/MM/dd"
/>
</el-form-item>
<el-form-item label="第2次" prop="secondInstance">
<el-date-picker
v-model="form.secondInstance"
type="date"
placeholder="请选择第2次日期"
value-format="yyyy/MM/dd"
format="yyyy/MM/dd"
/>
</el-form-item>
<el-form-item label="第3次" prop="thirdInstance">
<el-date-picker
v-model="form.thirdInstance"
type="date"
placeholder="请选择第3次日期"
value-format="yyyy/MM/dd"
format="yyyy/MM/dd"
/>
</el-form-item>
<el-form-item label="第4次" prop="fourthInstance">
<el-date-picker
v-model="form.fourthInstance"
type="date"
placeholder="请选择第4次日期"
value-format="yyyy/MM/dd"
format="yyyy/MM/dd"
/>
</el-form-item>
<el-form-item label="第5次" prop="fifthInstance">
<el-date-picker
v-model="form.fifthInstance"
type="date"
placeholder="请选择第5次日期"
value-format="yyyy/MM/dd"
format="yyyy/MM/dd"
/>
</el-form-item>
<el-form-item label="第6次" prop="sixthInstance">
<el-date-picker
v-model="form.sixthInstance"
type="date"
placeholder="请选择第6次日期"
value-format="yyyy/MM/dd"
format="yyyy/MM/dd"
/>
</el-form-item>
<el-form-item label="第7次" prop="seventhInstance">
<el-date-picker
v-model="form.seventhInstance"
type="date"
placeholder="请选择第7次日期"
value-format="yyyy/MM/dd"
format="yyyy/MM/dd"
/>
</el-form-item>
<el-form-item label="第8次" prop="eighthInstance">
<el-date-picker
v-model="form.eighthInstance"
type="date"
placeholder="请选择第8次日期"
value-format="yyyy/MM/dd"
format="yyyy/MM/dd"
/>
</el-form-item>
<el-form-item label="第9次" prop="ninthInstance">
<el-date-picker
v-model="form.ninthInstance"
type="date"
placeholder="请选择第9次日期"
value-format="yyyy/MM/dd"
format="yyyy/MM/dd"
/>
</el-form-item>
<el-form-item label="第10次" prop="tenthInstance">
<el-date-picker
v-model="form.tenthInstance"
type="date"
placeholder="请选择第10次日期"
value-format="yyyy/MM/dd"
format="yyyy/MM/dd"
/>
</el-form-item>
<el-form-item label="第11次" prop="eleventhInstance">
<el-date-picker
v-model="form.eleventhInstance"
type="date"
placeholder="请选择第11次日期"
value-format="yyyy/MM/dd"
format="yyyy/MM/dd"
/>
</el-form-item>
<el-form-item label="第12次" prop="twelfthInstance">
<el-date-picker
v-model="form.twelfthInstance"
type="date"
placeholder="请选择第12次日期"
value-format="yyyy/MM/dd"
format="yyyy/MM/dd"
/>
</el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button> <el-button type="primary" @click="submitForm"> </el-button>
@ -408,28 +213,17 @@
</div> </div>
</el-dialog> </el-dialog>
<!-- 导入对话框 --> <!-- 数据导入对话框 -->
<el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body> <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
<el-upload <el-upload ref="upload" :limit="1" accept=".xlsx, .xls" :headers="upload.headers" :action="upload.url + '?updateSupport=' + upload.updateSupport" :disabled="upload.isUploading" :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>
ref="upload"
:limit="1"
accept=".xlsx, .xls"
:headers="upload.headers"
:action="upload.url + '?updateSupport=' + upload.updateSupport"
:disabled="upload.isUploading"
:on-progress="handleFileUploadProgress"
:on-success="handleFileSuccess"
:auto-upload="false"
drag
>
<i class="el-icon-upload"></i> <i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处<em>点击上传</em></div> <div class="el-upload__text">将文件拖到此处<em>点击上传</em></div>
<div class="el-upload__tip text-center" slot="tip"> <div class="el-upload__tip text-center" slot="tip">
<!-- <div class="el-upload__tip" slot="tip">--> <div class="el-upload__tip" slot="tip">
<!-- <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的数据--> <el-checkbox v-model="upload.updateSupport" />是否更新已经存在的数据
<!-- </div>--> </div>
<span>仅允许导入xlsxlsx格式文件</span> <span>仅允许导入xlsxlsx格式文件</span>
<!-- <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate"></el-link>--> <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline" @click="importTemplate"></el-link>
</div> </div>
</el-upload> </el-upload>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
@ -442,6 +236,7 @@
<script> <script>
import { listSparePartsRegistration, getSparePartsRegistration, delSparePartsRegistration, addSparePartsRegistration, updateSparePartsRegistration } from "@/api/ems/info/sparePartsRegistration"; import { listSparePartsRegistration, getSparePartsRegistration, delSparePartsRegistration, addSparePartsRegistration, updateSparePartsRegistration } from "@/api/ems/info/sparePartsRegistration";
import { getToken } from "@/utils/auth";
export default { export default {
name: "SparePartsRegistration", name: "SparePartsRegistration",
@ -469,67 +264,53 @@
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
type: null, date: null,
referenceLocation: null, sparePartsName: null,
locationDescription: null, wasteQuantity: null,
powerSource: null, storageLocation: null,
batteryType: null, registrar: null,
remarks: null, warehouseConfirmation: null,
imageLocation: null, remarks: null
firstInstance: null,
secondInstance: null,
thirdInstance: null,
fourthInstance: null,
fifthInstance: null,
sixthInstance: null,
seventhInstance: null,
eighthInstance: null,
ninthInstance: null,
tenthInstance: null,
eleventhInstance: null,
twelfthInstance: null
}, },
// //
form: {}, form: {},
// //
rules: { rules: {
date: [
{ required: true, message: "日期不能为空", trigger: "blur" }
],
}, },
columns: [ columns: [
{ key: 0, label: `主键自增ID`, visible: false }, { key: 0, label: `主键自增ID`, visible: false },
{ key: 1, label: `类型`, visible: true }, { key: 1, label: `日期`, visible: true },
{ key: 2, label: `参照位置`, visible: true }, { key: 2, label: `备件名称`, visible: true },
{ key: 3, label: `位置描述`, visible: true }, { key: 3, label: `废存数量`, visible: true },
{ key: 4, label: `取电`, visible: true }, { key: 4, label: `存放位置`, visible: true },
{ key: 5, label: `电池类型`, visible: true }, { key: 5, label: `登记人`, visible: true },
{ key: 6, label: `备注`, visible: true }, { key: 6, label: `库管确认`, visible: true },
{ key: 7, label: `图片位置`, visible: true }, { key: 7, label: `备注`, visible: true },
{ key: 8, label: `第1次`, visible: true }, { key: 8, label: `备件型号`, visible: true },
{ key: 9, label: `第2次`, visible: true },
{ key: 10, label: `第3次`, visible: true },
{ key: 11, label: `第4次`, visible: true },
{ key: 12, label: `第5次`, visible: true },
{ key: 13, label: `第6次`, visible: true },
{ key: 14, label: `第7次`, visible: true },
{ key: 15, label: `第8次`, visible: true },
{ key: 16, label: `第9次`, visible: true },
{ key: 17, label: `第10次`, visible: true },
{ key: 18, label: `第11次`, visible: true },
{ key: 19, label: `第12次`, visible: true },
], ],
//
upload: { upload: {
title: "导入动力能源部行输科废旧备件登记", //
open: false, open: false,
url: "", //
updateSupport: false, title: "",
//
isUploading: false, isUploading: false,
headers: {} //
updateSupport: 0,
//
headers: { Authorization: "Bearer " + getToken() },
//
url: process.env.VUE_APP_BASE_API + "/ems/info/sparePartsRegistration/importData"
} }
}; };
}, },
created() { created() {
this.getList(); this.getList();
this.upload.url = process.env.VUE_APP_BASE_API + "/ems/info/sparePartsRegistration/importData";
this.upload.headers = { Authorization: "Bearer " + this.$store.getters.token };
}, },
methods: { methods: {
/** 查询动力能源部行输科废旧备件登记列表 */ /** 查询动力能源部行输科废旧备件登记列表 */
@ -550,25 +331,13 @@
reset() { reset() {
this.form = { this.form = {
objid: null, objid: null,
type: null, date: null,
referenceLocation: null, sparePartsName: null,
locationDescription: null, wasteQuantity: null,
powerSource: null, storageLocation: null,
batteryType: null, registrar: null,
remarks: null, warehouseConfirmation: null,
imageLocation: null, remarks: null
firstInstance: null,
secondInstance: null,
thirdInstance: null,
fourthInstance: null,
fifthInstance: null,
sixthInstance: null,
seventhInstance: null,
eighthInstance: null,
ninthInstance: null,
tenthInstance: null,
eleventhInstance: null,
twelfthInstance: null
}; };
this.resetForm("form"); this.resetForm("form");
}, },
@ -640,31 +409,31 @@
...this.queryParams ...this.queryParams
}, `sparePartsRegistration_${new Date().getTime()}.xlsx`) }, `sparePartsRegistration_${new Date().getTime()}.xlsx`)
}, },
/** 导入按钮操作 */ /** 导入按钮操作 */
handleImport() { handleImport() {
this.upload.title = "导入动力能源部行输科废旧备件登记"; this.upload.title = "废旧备件登记导入";
this.upload.open = true; this.upload.open = true;
}, },
/** 下载模板操作 */ /** 下载模板操作 */
importTemplate() { importTemplate() {
this.download('ems/info/sparePartsRegistration/importTemplate', { this.download('ems/info/sparePartsRegistration/importTemplate', {
}, `备件登记数据模板_${new Date().getTime()}.xlsx`) }, `sparePartsRegistration_template_${new Date().getTime()}.xlsx`);
}, },
// //
handleFileUploadProgress(event, file, fileList) { handleFileUploadProgress(event, file, fileList) {
this.upload.isUploading = true; this.upload.isUploading = true;
}, },
// //
handleFileSuccess(response, file, fileList) { handleFileSuccess(response, file, fileList) {
this.upload.open = false; this.upload.open = false;
this.upload.isUploading = false; this.upload.isUploading = false;
this.$refs.upload.clearFiles(); this.$refs.upload.clearFiles();
this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true }); this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
this.getList(); this.getList();
}, },
// //
submitFileForm() { submitFileForm() {
this.$refs.upload.submit(); this.$refs.upload.submit();
} }
} }
}; };

@ -309,6 +309,9 @@
form: {}, form: {},
// //
rules: { rules: {
date: [
{ required: true, message: "日期不能为空", trigger: "blur" }
],
}, },
columns: [ columns: [
{ key: 0, label: `主键自增ID`, visible: false }, { key: 0, label: `主键自增ID`, visible: false },

@ -352,6 +352,9 @@
form: {}, form: {},
// //
rules: { rules: {
date: [
{ required: true, message: "日期不能为空", trigger: "blur" }
],
}, },
columns: [ columns: [
{ key: 0, label: `主键自增ID`, visible: false }, { key: 0, label: `主键自增ID`, visible: false },

@ -484,6 +484,12 @@
form: {}, form: {},
// //
rules: { rules: {
upsInstallationCabinetName: [
{ required: true, message: "UPS安装柜体名称不能为空", trigger: "blur" }
],
referenceLocation: [
{ required: true, message: "参照位置不能为空", trigger: "blur" }
]
}, },
columns: [ columns: [
{ key: 0, label: `主键自增ID`, visible: false }, { key: 0, label: `主键自增ID`, visible: false },

Loading…
Cancel
Save