<template>
|
<div class="add-common">
|
<el-dialog
|
:title="editCommonConfig.title + '报废单'"
|
:visible.sync="editConfig.visible"
|
:width="dialogWidth"
|
:before-close="handleClose"
|
>
|
<!-- 头 -->
|
<div slot="title" class="dialog-header">
|
<span>{{ editCommonConfig.title + "报废单" }}</span>
|
<div class="header_btns">
|
<span class="btn">
|
<i class="el-icon-printer"></i>
|
<span>打印</span>
|
</span>
|
<span class="btn" style="margin-left: 15px">
|
<i class="el-icon-s-tools"></i>
|
<span>动作</span>
|
</span>
|
<el-button v-if="showEdit" plain size="mini" style="margin-left: 15px" @click="editClick">编辑</el-button>
|
</div>
|
</div>
|
<!-- 内容 -->
|
<el-form
|
ref="form"
|
:model="editConfig.infomation"
|
:rules="rules"
|
label-position="right"
|
label-width="120px"
|
size="mini"
|
>
|
<div>
|
<!-- <div>aaa</div> -->
|
<StatusCommonView
|
:list="list"
|
:showButton="showButton"
|
:showOther="false"
|
:isValidateClick="isValidateClick"
|
@validateClick="validateClick"
|
/>
|
</div>
|
<div class="basic-info">
|
<div class="basic-info-view">
|
<el-row>
|
<el-col :span="12">
|
<el-form-item label="报废单号" prop="number">
|
<el-input
|
style="width: 85%"
|
v-if="
|
editConfig.title == '编辑' ||
|
editConfig.title == '查看' ||
|
(editConfig.title == '新建' && codenumer && (explain != '' || isIdDisabled))
|
"
|
:disabled="editConfig.title != '新建'"
|
v-model="editConfig.infomation.number"
|
placeholder="请输入编码"
|
>
|
</el-input>
|
<span v-else-if="editConfig.title == '新建'" style="color: #f56c6c; width: 85%"
|
>请优先配置编码规范 <el-button type="text" @click="numberClick"> 配置规范 </el-button></span
|
>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="产品" prop="productName">
|
<SimpleSearchInput
|
:echoValue="editConfig.infomation.productName"
|
:echoName="editConfig.infomation.productName"
|
checkedNum="1"
|
:clearable="true"
|
@select-user="selProductChange"
|
:disabled="!showFooter"
|
style="width: 90%"
|
>
|
</SimpleSearchInput>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="源位置" prop="fromLocationId">
|
<el-select
|
v-model="editConfig.infomation.fromLocationId"
|
placeholder="请选择"
|
size="mini"
|
style="width: 90%"
|
:disabled="!showFooter"
|
>
|
<el-option v-for="item in toLocationOptions" :key="item.id" :label="item.name" :value="item.id">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="数量" prop="amount">
|
<el-input-number
|
v-model="editConfig.infomation.amount"
|
placeholder=""
|
:min="0"
|
:precision="2"
|
:controls="false"
|
style="width: 90%"
|
:disabled="!showFooter"
|
></el-input-number>
|
<span>{{ " " + unit }}</span>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="报废位置" prop="toLocationId">
|
<el-select
|
v-model="editConfig.infomation.toLocationId"
|
placeholder="请选择"
|
size="mini"
|
style="width: 90%"
|
:disabled="!showFooter"
|
>
|
<el-option v-for="item in toLocationOptions1" :key="item.id" :label="item.name" :value="item.id">
|
</el-option>
|
</el-select>
|
</el-form-item>
|
</el-col>
|
<el-col :span="12">
|
<el-form-item label="来源单据" prop="sourceNumber">
|
<el-input
|
v-model="editConfig.infomation.sourceNumber"
|
placeholder="例如:PO0032"
|
style="width: 90%"
|
:disabled="!showFooter"
|
></el-input>
|
</el-form-item>
|
</el-col>
|
</el-row>
|
</div>
|
</div>
|
</el-form>
|
<!-- 尾 -->
|
<div slot="footer" class="dialog-footer">
|
<el-button type="primary" size="small" @click="saveClick('form')" :disabled="!showFooter">保存</el-button>
|
<el-button size="small" @click="editConfig.visible = false">取消</el-button>
|
</div>
|
</el-dialog>
|
</div>
|
</template>
|
|
<script>
|
import { getProductList } from "@/api/product/product"
|
import { getLocationList } from "@/api/overview/overview"
|
import { addDisuse, finishDisuse, updateScrap } from "@/api/operate/scrap"
|
import SimpleSearchInput from "@/components/makepager/SimpleSearchInput"
|
import codeMixin from "@/views/overview/mixin/codeMixin"
|
export default {
|
name: "AddScrapDialog",
|
mixins: [codeMixin],
|
props: {
|
editCommonConfig: {
|
type: Object,
|
default: () => {
|
return {
|
visible: false,
|
title: "新建",
|
infomation: {}
|
}
|
}
|
}
|
},
|
components: { SimpleSearchInput },
|
computed: {},
|
data() {
|
return {
|
dialogWidth: "50%",
|
editConfig: this.editCommonConfig,
|
rules: {
|
// 产品,数量必填
|
productName: [{ required: true, validator: this.validatorProduct, trigger: "change" }],
|
amount: [{ required: true, message: "请输入数量", trigger: "blur" }],
|
fromLocationId: [{ required: true, message: "请选择源位置", trigger: "change" }],
|
toLocationId: [{ required: true, message: "请选择报废位置", trigger: "change" }],
|
sourceNumber: [{ required: true, message: "请输入来源单据", trigger: "blur" }],
|
number: [{ required: true, validator: this.validateCheckCode, trigger: ["change", "blur"] }]
|
},
|
memberOptions: [],
|
productOptions: [],
|
toLocationOptions: [],
|
toLocationOptions1: [],
|
list: [
|
{ label: "草稿", status: "todo", value: 1 },
|
{ label: "就绪", status: "todo", value: 3 },
|
{ label: "完成", status: "todo", value: 4 }
|
],
|
showEdit: false, // 是否显示编辑按钮
|
showFooter: false, // 是否显示取消保存
|
currentState: "todo", // 当前状态
|
unit: "",
|
showButton: true,
|
isValidateClick: false // 验证是否显示
|
}
|
},
|
created() {
|
this.setBottonView()
|
this.getProductList()
|
this.getLocationList({
|
isScrapLocation: true,
|
page: 0,
|
pageSize: 0
|
})
|
this.getLocationList({
|
// isScrapLocation: true,
|
page: 0,
|
pageSize: 0
|
})
|
this.unit = this.editConfig.infomation.unit || ""
|
this.formInfo()
|
},
|
methods: {
|
formInfo() {
|
this.objCode.type = "仓库报废编码"
|
this.objCode.codeStandID = ""
|
if (this.editConfig.infomation.codeStandardID) {
|
this.objCode.codeStandID = this.editConfig.infomation.codeStandardID
|
}
|
this.getRCodeStandardList()
|
},
|
// 产品
|
async getProductList() {
|
await getProductList({
|
page: 1,
|
pageSize: 100
|
}).then((res) => {
|
// console.log(res.data)
|
if (res.code === 200) {
|
if (res.data && res.data.length > 0) {
|
this.productOptions = res.data
|
}
|
}
|
})
|
},
|
// 获取仓库位置列表
|
async getLocationList(params) {
|
if(params.isScrapLocation){
|
await getLocationList(params).then((res) => {
|
console.log(res)
|
if (res.code === 200) {
|
this.toLocationOptions1 = res.data
|
}
|
})
|
}else{
|
await getLocationList(params).then((res) => {
|
console.log(res)
|
if (res.code === 200) {
|
this.toLocationOptions = res.data
|
}
|
})
|
}
|
},
|
// 设置删除/打印/编辑是否显示
|
setBottonView() {
|
if (this.editConfig.title === "新建" || this.editConfig.title === "编辑") {
|
this.showButton = false
|
this.showEdit = false
|
this.showFooter = true
|
this.isValidateClick = false
|
} else if (this.editConfig.infomation.status === 4) {
|
this.showButton = false
|
this.showEdit = false
|
this.showFooter = false
|
this.isValidateClick = false
|
} else {
|
this.showButton = true
|
this.showEdit = false
|
this.showFooter = false
|
this.isValidateClick = true
|
}
|
if (this.editConfig.title === "新建") {
|
this.list[0].status = "active"
|
} else {
|
this.list.map((item) => {
|
if (item.value === this.editConfig.infomation.status) {
|
item.status = "active"
|
} else {
|
item.status = "todo"
|
}
|
})
|
}
|
},
|
// 关闭
|
handleClose() {
|
this.editConfig.visible = false
|
},
|
// 编辑
|
editClick() {
|
this.showEdit = false
|
this.showFooter = true
|
},
|
// 保存
|
saveClick(formName) {
|
if (this.editCommonConfig.title === "新建") {
|
this.$refs[formName].validate((valid) => {
|
if (valid) {
|
this.editConfig.infomation.productId = this.productId
|
this.editConfig.infomation.productName = this.productName
|
this.editConfig.infomation.unit = this.unit
|
addDisuse({
|
...this.editConfig.infomation
|
}).then((res) => {
|
console.log(res)
|
this.editConfig.visible = false
|
if (res.code === 200) {
|
this.$message.success("添加成功")
|
this.$parent.getData()
|
}
|
})
|
}
|
})
|
} else if (this.editCommonConfig.title === "编辑") {
|
this.$refs[formName].validate((valid) => {
|
if (valid) {
|
let params = {
|
amount: this.editConfig.infomation.amount,
|
baseOperationType: this.editConfig.infomation.baseOperationType,
|
fromLocationId: this.editConfig.infomation.fromLocationId,
|
id: this.editConfig.infomation.id,
|
number: this.editConfig.infomation.number,
|
operationDate: this.editConfig.infomation.operationDate,
|
productId: this.editConfig.infomation.productId,
|
sourceNumber: this.editConfig.infomation.sourceNumber,
|
status: this.editConfig.infomation.status,
|
toLocationId: this.editConfig.infomation.toLocationId
|
}
|
updateScrap(params).then((res) => {
|
console.log(res)
|
this.editConfig.visible = false
|
if (res.code === 200) {
|
this.$message.success("修改成功")
|
this.$parent.getData()
|
}
|
})
|
}
|
})
|
}
|
},
|
// 选择产品
|
selProductChange(val) {
|
this.unit = val.unit
|
this.productName = val.name
|
this.productId = val.id
|
this.editConfig.infomation.productName = val.name
|
},
|
// 验证
|
async validateClick() {
|
console.log(this.editConfig.infomation.id, "xxx")
|
await finishDisuse(this.editConfig.infomation.id).then((res) => {
|
console.log(res)
|
this.editConfig.visible = false
|
if (res.code === 200) {
|
this.$message.success("验证成功")
|
this.$parent.getData()
|
}
|
})
|
},
|
// 产品单独校验
|
validatorProduct(rule, value, callback) {
|
if (this.editConfig.infomation.productName && this.editConfig.infomation.productName.length > 0) {
|
callback()
|
} else {
|
callback(new Error("请选择产品"))
|
}
|
}
|
}
|
}
|
</script>
|
|
<!-- Add "scoped" attribute to limit CSS to this component only -->
|
<style lang="scss" scoped>
|
.dialog-header {
|
display: flex;
|
align-items: center;
|
font-size: 14px;
|
color: #333;
|
.header_btns {
|
margin-left: auto;
|
margin-right: 60px;
|
.btn {
|
cursor: no-drop;
|
}
|
}
|
}
|
.content-status {
|
display: flex;
|
}
|
.basic-info {
|
height: calc(100% - 80px);
|
overflow: auto;
|
margin: 20px;
|
// border: 1px solid #dcdfe6;
|
// box-shadow: inset 0 0 2px #dee2e6;
|
// -moz-box-shadow: inset 0 0 2px #dee2e6;
|
// -webkit-box-shadow: inset 0 0 2px #dee2e6;
|
// .basic-info-view {
|
// margin-top: 20px;
|
// }
|
}
|
.purchase-view {
|
display: flex;
|
.left {
|
width: 50%;
|
}
|
.right {
|
width: 50%;
|
}
|
}
|
.second-label {
|
margin-left: 20px;
|
border-bottom: 1px solid #d9d9d9;
|
margin-bottom: 10px;
|
}
|
::v-deep {
|
.el-dialog__headerbtn {
|
position: absolute;
|
top: 18px;
|
}
|
.el-button {
|
&:hover {
|
border: 1px solid #dcdfe6;
|
color: #333;
|
}
|
}
|
.el-tabs--card > .el-tabs__header .el-tabs__nav {
|
margin-left: 20px;
|
}
|
.el-tabs__item {
|
height: 30px;
|
line-height: 30px;
|
font-size: 13px;
|
}
|
.el-input__inner {
|
text-align: left;
|
}
|
}
|
</style>
|