You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

539 lines
20 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<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="materialCode">
<el-input
v-model="queryParams.materialCode"
placeholder="请输入物料编码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="物料名称" prop="materialName">
<el-input
v-model="queryParams.materialName"
placeholder="请输入物料名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</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="['mes:mesRaiseCapitalBom:add']"-->
<!-- >新增-->
<!-- </el-button>-->
<!-- </el-col>-->
<el-col :span="1.5">
<el-button
type="info"
plain
icon="el-icon-sort"
size="mini"
@click="toggleExpandAll"
>展开/折叠
</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList" :columns="columns"></right-toolbar>
</el-row>
<el-table
v-if="refreshTable"
v-loading="loading"
:data="mesRaiseCapitalBomList"
row-key="raiseCapitalId"
:default-expand-all="isExpandAll"
:tree-props="{children: 'children', hasChildren: 'hasChildren'}"
>
<el-table-column label="父级标识" prop="parentId" v-if="columns[1].visible"/>
<el-table-column label="祖级列表" align="center" prop="ancestors" v-if="columns[2].visible"/>
<el-table-column label="物料ID" align="center" prop="materialId" v-if="columns[3].visible"/>
<el-table-column label="物料编码" align="center" prop="materialCode"/>
<el-table-column label="物料名称" align="left" prop="materialName" v-if="columns[4].visible"/>
<el-table-column label="物料规格" align="center" prop="materialSpec"/>
<el-table-column label="BOM说明" align="center" prop="materialBomDesc" v-if="columns[15].visible"/>
<el-table-column label="任务编号" prop="taskCode" v-if="columns[1].visible"/>
<el-table-column label="标准数量" align="center" prop="standardAmount" v-if="columns[5].visible"/>
<el-table-column label="安装时长" align="center" prop="assembleTime" v-if="columns[16].visible">
<template slot-scope="scope">
<span>{{ formatDayHourMinutes(scope.row.assembleTime) }}</span>
</template>
</el-table-column>
<el-table-column label="顶级标识" align="center" prop="topFlag" v-if="columns[6].visible">
<template slot-scope="scope">
<dict-tag :options="dict.type.active_flag" :value="scope.row.topFlag"/>
</template>
</el-table-column>
<el-table-column label="校验类型" align="center" prop="checkType" v-if="columns[7].visible">
<template slot-scope="scope">
<dict-tag :options="dict.type.check_type" :value="scope.row.checkType"/>
</template>
</el-table-column>
<el-table-column label="项目ID" align="center" prop="projectId" v-if="columns[8].visible"/>
<el-table-column label="激活标识" align="center" prop="activeFlag" v-if="columns[9].visible">
<template slot-scope="scope">
<dict-tag :options="dict.type.active_flag" :value="scope.row.activeFlag"/>
</template>
</el-table-column>
<el-table-column label="修改标识" align="center" prop="updateFlag" v-if="columns[11].visible">
<template slot-scope="scope">
<dict-tag :options="dict.type.import_flag" :value="scope.row.updateFlag"/>
</template>
</el-table-column>
<el-table-column label="备注" align="center" prop="remark" v-if="columns[10].visible"/>
<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-if="scope.row.updateFlag === '0'"
v-hasPermi="['mes:mesRaiseCapitalBom:edit']"
>修改
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-plus"
@click="handleAdd(scope.row)"
v-if="scope.row.parentId === 0"
v-hasPermi="['mes:mesRaiseCapitalBom:add']"
>新增
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-if="scope.row.updateFlag === '0'"
v-hasPermi="['mes:mesRaiseCapitalBom:remove']"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
<!-- 添加或修改提资单BOM信息对话框 -->
<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="taskCode">
<el-input v-model="form.taskCode" disabled/>
</el-form-item>
<el-form-item label="父级BOM" prop="parentId" v-if="topBomVisible">
<treeselect v-model="form.parentId" :options="mesRaiseCapitalBomOptions" :normalizer="normalizer"
v-if="topBomVisible" disabled/>
</el-form-item>
<!-- <el-form-item label="物料ID" prop="materialId">-->
<!-- <el-input v-model="form.materialId" placeholder="请输入物料ID" />-->
<!-- </el-form-item>-->
<el-form-item :label="childBomName" prop="materialName">
<el-input v-model="form.materialName" placeholder="请点击右侧检索子BOM" readonly>
<el-button slot="append" icon="el-icon-search" @click="handleMaterialAdd"></el-button>
</el-input>
</el-form-item>
<el-form-item label="BOM说明" prop="materialBomDesc">
<el-input v-model="form.materialBomDesc" placeholder="请输入BOM说明(BOM版本)" disabled/>
</el-form-item>
<el-form-item label="安装时长" prop="assembleTime" v-if="assembleTimeVisible">
<el-input-number v-model="form.productionTimeDays" placeholder="请输入天数" :min="0" :max="10000"
:controls="false" :style="{ width: '50px' }"/>
<el-input-number v-model="form.productionTimeHours" placeholder="请输入小时" :min="0" :max="23"
:controls="false" :style="{ width: '50px' }"/>
小时
<el-input-number v-model="form.productionTimeMinutes" placeholder="请输入分钟" :min="0" :max="59"
:controls="false" :style="{ width: '50px' }"/>
分钟
</el-form-item>
<el-form-item label="标准数量" prop="standardAmount">
<el-input-number v-model="form.standardAmount" :min="1" placeholder="请输入标准数量"
:disabled="amountDisabled"/>
</el-form-item>
<!-- <el-form-item label="顶级标识" prop="topFlag">-->
<!-- <el-radio-group v-model="form.topFlag">-->
<!-- <el-radio-->
<!-- v-for="dict in dict.type.active_flag"-->
<!-- :key="dict.value"-->
<!-- :label="parseInt(dict.value)"-->
<!-- >{{dict.label}}</el-radio>-->
<!-- </el-radio-group>-->
<!-- </el-form-item>-->
<el-form-item label="校验类型" prop="checkType" v-if="form.topFlag !== TOP_FLAG.YES">
<el-radio-group v-model="form.checkType">
<el-radio
v-for="dict in dict.type.check_type"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="激活标识" prop="activeFlag">
<el-radio-group v-model="form.activeFlag">
<el-radio
v-for="dict in dict.type.active_flag"
:key="dict.value"
:label="dict.value"
>{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容"/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel">取 消</el-button>
</div>
</el-dialog>
<!-- 添加物料信息对话框 -->
<el-dialog title="选择物料信息" :visible.sync="materialOpen" append-to-body>
<select-material @selection="handleSelection" ref="materialRef" v-if="materialOpen"></select-material>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitMaterialForm">确 定</el-button>
<el-button @click="materialOpen = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
listMesRaiseCapitalBom,
getMesRaiseCapitalBom,
delMesRaiseCapitalBom,
addMesRaiseCapitalBom,
updateMesRaiseCapitalBom
} from "@/api/mes/mesRaiseCapitalBom";
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
import selectMaterial from "@/views/mes/materialinfo/selectMaterial";
export default {
name: "MesRaiseCapitalBom",
dicts: ['active_flag', 'check_type', 'import_flag'],
components: {
Treeselect,
'select-material': selectMaterial
},
data() {
return {
// 遮罩层
loading: true,
// 显示搜索条件
showSearch: true,
// 提资单BOM信息表格数据
mesRaiseCapitalBomList: [],
// 提资单BOM信息树选项
mesRaiseCapitalBomOptions: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 安装时长 顶级BOM不显示
assembleTimeVisible: true,
// 添加时顶级BOM不显示
topBomVisible: true,
// 顶级BOM数量不可输入
amountDisabled: false,
// 子级BOM名称变化
childBomName: "子级BOM",
// 是否显示物料弹出层
materialOpen: false,
// 是否展开,默认全部展开
isExpandAll: true,
// 重新渲染表格状态
refreshTable: true,
// 查询参数
queryParams: {
taskCode: null,
materialBomDesc: null,
parentId: null,
ancestors: null,
materialId: null,
materialName: null,
standardAmount: null,
topFlag: null,
checkType: null,
projectId: null,
assembleTime: null,
updateFlag: null,
activeFlag: null,
brand: null,
materialClassfication: null,
erpMaterialId: null
},
// 表单参数
form: {},
// 表单校验
rules: {
taskCode: [
{required: true, message: "任务编号不能为空", trigger: "blur"}
],
parentId: [
{required: true, message: "父级标识不能为空", trigger: "blur"}
],
materialId: [
{required: true, message: "物料ID不能为空", trigger: "blur"}
],
standardAmount: [
{required: true, message: "标准数量;最顶级数量须为1不能为空", trigger: "blur"}
],
activeFlag: [
{required: true, message: "激活标识不能为空", trigger: "blur"}
],
},
columns: [
{key: 0, label: `主键标识`, visible: false},
{key: 1, label: `父级标识`, visible: false},
{key: 2, label: `祖级列表`, visible: false},
{key: 3, label: `物料ID`, visible: false},
{key: 4, label: `物料名称`, visible: true},
{key: 5, label: `标准数量`, visible: true},
{key: 6, label: `顶级标识`, visible: true},
{key: 7, label: `校验类型`, visible: true},
{key: 8, label: `项目ID`, visible: false},
{key: 9, label: `激活标识`, visible: false},
{key: 10, label: `备注`, visible: true},
{key: 11, label: `创建人`, visible: true},
{key: 12, label: `创建时间`, visible: true},
{key: 13, label: `更新人`, visible: true},
{key: 14, label: `更新时间`, visible: true},
{key: 15, label: `BOM说明`, visible: true},
{key: 16, label: `安装时长`, visible: true},
{key: 17, label: `修改标识`, visible: true},
],
//顶级标识
TOP_FLAG: {
YES: 1,
NO: 0
}
};
},
created() {
let taskCode = this.$route.params && this.$route.params.taskCode;
if (taskCode != null){
this.queryParams.taskCode = taskCode
}
this.getList();
},
watch: {
'form.parentId': function (newValue, oldValue) {
if (newValue === 0) {
this.topBomVisible = false;
this.amountDisabled = true;
this.childBomName = "成品BOM";
} else {
this.topBomVisible = true;
this.amountDisabled = false;
this.childBomName = "子级BOM";
}
},
},
methods: {
/** 查询提资单BOM信息列表 */
getList() {
this.loading = true;
listMesRaiseCapitalBom(this.queryParams).then(response => {
this.mesRaiseCapitalBomList = this.handleTree(response.data, "raiseCapitalId", "parentId");
this.loading = false;
});
},
/** 转换提资单BOM信息数据结构 */
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.raiseCapitalId,
label: node.materialName,
children: node.children
};
},
/** 查询提资单BOM信息下拉树结构 */
getTreeselect() {
listMesRaiseCapitalBom().then(response => {
this.mesRaiseCapitalBomOptions = [];
const data = {raiseCapitalId: 0, materialName: '顶级节点', children: []};
data.children = this.handleTree(response.data, "raiseCapitalId", "parentId");
this.mesRaiseCapitalBomOptions.push(data);
});
},
/** 新增按钮操作 */
handleMaterialAdd() {
this.materialOpen = true;
},
handleSelection(selection) {
this.ids = selection.map(item => item.materialBomId)
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 提交物料信息按钮 */
submitMaterialForm() {
let selectedRow = this.$refs.materialRef.selectedRow;
this.$set(this.form, "materialId", selectedRow.materialId);
this.$set(this.form, "materialName", selectedRow.materialName);
this.$set(this.form, "erpMaterialId", selectedRow.erpId);
this.materialOpen = false;
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
raiseCapitalId: null,
taskCode: null,
materialBomDesc: null,
parentId: null,
ancestors: null,
materialId: null,
materialName: null,
standardAmount: null,
productionTimeDays: 0,
productionTimeHours: 0,
productionTimeMinutes: 0,
topFlag: 1,
checkType: '0',
projectId: null,
activeFlag: '1',
assembleTime: null,
remark: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
brand: null,
materialClassfication: null,
erpMaterialId: null
};
this.assembleTimeVisible = true;
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
/** 新增按钮操作 */
handleAdd(row) {
this.reset();
this.getTreeselect();
if (row != null && row.raiseCapitalId) {
this.form.parentId = row.raiseCapitalId;
this.form.topFlag = this.TOP_FLAG.NO;
this.form.taskCode = row.taskCode
this.form.materialBomDesc = row.materialBomDesc;
this.assembleTimeVisible = true;
} else {
this.form.parentId = 0;
this.form.topFlag = this.TOP_FLAG.YES;
this.assembleTimeVisible = false;
}
this.open = true;
this.title = "添加提资单BOM信息";
},
/** 展开/折叠操作 */
toggleExpandAll() {
this.refreshTable = false;
this.isExpandAll = !this.isExpandAll;
this.$nextTick(() => {
this.refreshTable = true;
});
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
this.getTreeselect();
if (row != null) {
this.form.parentId = row.raiseCapitalId;
}
getMesRaiseCapitalBom(row.raiseCapitalId).then(response => {
this.form = response.data;
if (this.form.parentId === 0) {
this.assembleTimeVisible = false;
}
this.open = true;
this.title = "修改提资单BOM信息";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
if (!/^[0-9]\d*$/.test(this.form.productionTimeDays)
|| !/^[0-9]\d*$/.test(this.form.productionTimeHours)
|| !/^[0-9]\d*$/.test(this.form.productionTimeMinutes)) {
this.$modal.msgError("安装时长天、小时、分钟需为大于等于0的正整数");
return;
}
this.convertToSeconds();
if (this.form.raiseCapitalId != null) {
updateMesRaiseCapitalBom(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addMesRaiseCapitalBom(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 天小时分钟转换为秒 */
convertToSeconds() {
const daysInSeconds = this.form.productionTimeDays * 24 * 60 * 60;
const hoursInSeconds = this.form.productionTimeHours * 60 * 60;
const minutesInSeconds = this.form.productionTimeMinutes * 60;
this.form.assembleTime = daysInSeconds + hoursInSeconds + minutesInSeconds;
},
/** 秒转换为天小时分钟 */
convertToTime() {
const totalSeconds = this.form.assembleTime;
const days = Math.floor(totalSeconds / (24 * 60 * 60));
const hours = Math.floor((totalSeconds % (24 * 60 * 60)) / 3600);
const minutes = Math.floor((totalSeconds % 3600) / 60);
// 更新到表单中
this.form.productionTimeDays = days;
this.form.productionTimeHours = hours;
this.form.productionTimeMinutes = minutes;
},
/** 删除按钮操作 */
handleDelete(row) {
this.$modal.confirm('是否确认删除物料名称为"' + row.materialName + '"的数据项?').then(function () {
return delMesRaiseCapitalBom(row.raiseCapitalId);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {
});
}
}
};
</script>