hberp/hb_client/src/views/inm/fifodetail.vue

642 lines
20 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container">
<el-card style="margin-top: 2px">
<el-button
v-if="this.$route.params.pu_order != null"
type="primary"
icon="el-icon-plus"
@click="handlecgxCreate"
>
新增采购项入库
</el-button>
<el-table
v-loading="listLoading"
:data="fifodetailList.results"
border
fit
stripe
highlight-current-row
height="100"
v-el-height-adaptive-table="{ bottomOffset: 42 }"
>
<el-table-column type="index" width="50"/>
<el-table-column label="物料名称">
<template slot-scope="scope">{{ scope.row.material_.name }}</template>
</el-table-column>
<el-table-column label="物料批次">
<template slot-scope="scope">{{ scope.row.batch }}</template>
</el-table-column>
<el-table-column label="物料编号">
<template slot-scope="scope">{{scope.row.material_.number}}</template>
</el-table-column>
<el-table-column label="物料单位">
<template slot-scope="scope">{{ scope.row.material_.unit }}</template>
</el-table-column>
<el-table-column label="物料型号">
<template slot-scope="scope">{{scope.row.material_.specification}}</template>
</el-table-column>
<el-table-column label="出入库数量">
<template slot-scope="scope">{{ scope.row.count }}</template>
</el-table-column>
<el-table-column
label="是否需要复验"
v-if="this.$route.params.pu_order != null"
>
<template slot-scope="scope">
<el-tag v-if="scope.row.need_test == false"></el-tag>
<el-tag v-else></el-tag>
</template>
</el-table-column>
<el-table-column
label="复验是否合格"
v-if="this.$route.params.pu_order != null"
>
<template slot-scope="scope">
<el-tag v-if="scope.row.is_testok == false">不合格</el-tag>
<el-tag v-else>合格</el-tag>
</template>
</el-table-column>
<el-table-column
label="文件"
v-if="this.$route.params.pu_order != null"
>
<template slot-scope="scope" v-if="scope.row.files">
<div v-for="item in scope.row.files_" v-bind:key="item.id">
<el-link :href="item.path" target="_blank" type="primary">{{
item.name
}}
</el-link>
</div>
</template>
</el-table-column>
<el-table-column
v-if="this.$route.params.pu_order != null"
align="center"
label="操作"
width="220px"
>
<template slot-scope="scope">
<el-link
v-if="scope.row.need_test"
type="primary"
@click="handleMaterial(scope)"
>
复验
</el-link>
<el-link type="primary" @click="handleEdit(scope)">上传</el-link>
</template>
</el-table-column>
</el-table>
<pagination
v-show="fifodetailList.count > 0"
:total="fifodetailList.count"
:page.sync="listQuery.page"
:limit.sync="listQuery.page_size"
@pagination="getList"
/>
</el-card>
<el-dialog
:visible.sync="dialogVisibles"
:close-on-click-modal="false"
title="新增采购项入库"
>
<el-form
ref="Form1"
:model="inpur"
label-width="100px"
label-position="right"
:rules="rule1"
>
<el-row :gutter="24">
<el-col :span="12">
<div class="grid-content bg-purple">
<el-form-item label="采购订单项目" :prop="pu_order_item">
<el-select v-model="inpur.pu_order_item" @change="showmessage">
<el-option
v-for="item in puorderTtemoptions"
:key="item.id"
:value="item.id"
:label="item.material_.name"
>
</el-option>
</el-select>
</el-form-item>
</div>
</el-col>
<el-col :span="12">
<div class="grid-content bg-purple">
<el-form-item label="采购数量">
<el-input v-model="puorderItemdetial.count" :disabled="true">
</el-input>
</el-form-item>
</div>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<div class="grid-content bg-purple">
<el-form-item label="到货时间">
<el-input
v-model="puorderItemdetial.delivery_date"
:disabled="true"
>
</el-input>
</el-form-item>
</div>
</el-col>
<el-col :span="12">
<div class="grid-content bg-purple">
<el-form-item label="到货数量">
<el-input
v-model="puorderItemdetial.delivered_count"
:disabled="true"
>
</el-input>
</el-form-item>
</div>
</el-col>
</el-row>
<el-form-item label="仓库" :prop="warehouse">
<el-select v-model="inpur.warehouse">
<el-option
v-for="item in warehouseData"
:key="item.id"
:value="item.id"
:label="item.name"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="批次" :prop="batch">
<el-input v-model="inpur.batch" placeholder="批次号"></el-input>
</el-form-item>
<el-form-item label="有效期" :prop="expiration_date">
<el-date-picker
v-model="inpur.expiration_date"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd"
style="width: 100%"
>
</el-date-picker>
</el-form-item>
<el-form-item label="入库数量" :prop="count">
<el-input-number v-model="inpur.count" :min="0"></el-input-number>
</el-form-item>
</el-form>
<div style="text-align: right">
<el-button type="danger" @click="dialogVisibles = false"
>取消
</el-button>
<el-button type="primary" @click="confirminpur('Form1')"
>确认
</el-button>
</div>
</el-dialog>
<el-dialog
:close-on-click-modal="false"
:visible.sync="dialogVisible"
title="上传文件"
>
<el-form
ref="Form"
:model="FIFOItem"
label-width="100px"
label-position="right"
>
<el-form-item label="是否需要复验" prop="need_test">
<el-switch v-model="FIFOItem.need_test"></el-switch>
</el-form-item>
<el-form-item label="文件列表">
<el-upload
ref="upload"
:action="upUrl"
:before-upload="beforeUpload"
:on-success="handleUpSuccess"
:headers="upHeaders"
multiple
accept="image/*,.ppt,.pdf,.doc,.docx,.xls,.xlsx"
>
<el-button size="small" type="primary">上传文件</el-button>
<span class="el-upload__tip">
可上传多个pdf,word,ppt,excel,图片文件,单文件大小不超过50M
</span>
</el-upload>
</el-form-item>
<div
v-for="(item, index) in fileList"
v-bind:key="item.id"
style="margin-top: 2px"
>
<i
class="el-icon-delete"
@click="deleteFile(index)"
style="color: red"
></i>
<el-link :href="item.path" target="_blank" type="primary">{{
item.name
}}
</el-link>
</div>
</el-form>
<div style="text-align: right">
<el-button type="danger" @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="confirm()">确认</el-button>
</div>
</el-dialog>
<el-dialog
title="物料检查表"
:close-on-click-modal="false"
:visible.sync="outerVisible"
>
<el-select style="width: 100%" v-model="recordform" placeholder="请选择">
<el-option
v-for="item in recordformList"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
<el-dialog
width="30%"
title="检查项目"
:visible.sync="innerVisible"
:close-on-click-modal="false"
append-to-body
>
<el-form label-width="80px" label-position="right">
<el-row v-for="(item, $index) in fieldList" :key="$index">
<el-form-item
v-if="item.field_type === 'string'"
:label="item.field_name"
>
<el-input placeholder="请输入" v-model="item.sort"/>
</el-form-item>
<el-form-item
v-else-if="item.field_type === 'int'"
:label="item.field_name"
>
<el-input
v-model="item.sort"
type="number"
placeholder="请输入"
/>
</el-form-item>
<el-form-item
v-else-if="item.field_type === 'float'"
:label="item.field_name"
>
<el-input
v-model="item.sort"
type="number"
placeholder="请输入"
/>
</el-form-item>
<el-form-item
v-else-if="item.field_type === 'date'"
:label="item.field_name"
>
<el-date-picker
v-model="item.create_time"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd"
style="width: 100%"
>
</el-date-picker>
</el-form-item>
<el-form-item
v-else-if="item.field_type === 'datetime'"
:label="item.field_name"
>
<el-date-picker
v-model="item.create_time"
type="datetime"
placeholder="选择日期"
value-format="yyyy-MM-dd HH:mm:ss"
style="width: 100%"
>
</el-date-picker>
</el-form-item>
<el-form-item
v-else-if="item.field_type === 'select'"
:label="item.field_name"
>
<el-select
style="width: 100%"
v-model="item.sort"
placeholder="请选择"
>
<el-option
v-for="item1 in item.field_choice"
:key="item1"
:label="item1"
:value="item1"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item
v-else-if="item.field_type === 'selects'"
:label="item.field_name"
>
<el-select
style="width: 100%"
v-model="optio"
multiple
placeholder="请选择"
>
<el-option
v-for="item1 in item.field_choice"
:key="item1"
:label="item1"
:value="item1"
>
</el-option>
</el-select>
</el-form-item>
</el-row>
<el-row>
<el-form-item label="是否合格" prop="sort_str">
<el-radio v-model="is_testok" label="true">检查合格</el-radio>
<el-radio v-model="is_testok" label="false">检查不合格</el-radio>
</el-form-item>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="innerVisible = false"> </el-button>
<el-button type="primary" @click="submitfield">
提交检查项目
</el-button>
</div>
</el-dialog>
<div slot="footer" class="dialog-footer">
<el-button @click="outerVisible = false"> </el-button>
<el-button type="primary" @click="submitrecordform">
填写检查项目
</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
getfifodetailList,
itemfiles,
createfifoitem,
getWarehouseList,
} from "@/api/inm";
import checkPermission from "@/utils/permission";
import {getPuorderItemList, getpuorder} from "@/api/pum";
import {getMaterialList, getrecordformList, getrffieldList} from "@/api/mtm";
import {createTestrecord} from "@/api/inm";
import {upUrl, upHeaders} from "@/api/file";
import {genTree} from "@/utils";
import Pagination from "@/components/Pagination"; // secondary package based on el-pagination
const defaultfile = {
files: [],
need_test: false,
};
export default {
components: {Pagination},
data() {
return {
InventoryList: {
count: 0,
},
fifodetailList: {
count: 0,
},
inpur: {},
dialogVisibles: false,
upHeaders: upHeaders(),
upUrl: upUrl(),
fileList: [],
FIFOItem: defaultfile,
listQuery: {
page: 1,
page_size: 20,
},
fieldList: {
count: 0,
},
warehouseData: [],
is_testok: "true",
field: [],
recordformList: [],
recordform: "",
fifo_detail: "",
listQueryrecordform: {
page: 0,
},
fileData: {},
outerVisible: false,
innerVisible: false,
dialogVisible: false,
dialogVisibles: false,
dialogType: "new",
testrecord: {},
puorderItemdetial: [],
puorderTtemoptions: [],
rule1: {
name: [{required: true, message: "请输入", trigger: "blur"}],
},
fileList: [],
item: "",
};
},
computed: {},
watch: {},
created() {
this.getList();
},
mounted() {
},
methods: {
checkPermission,
getList() {
this.listLoading = true;
this.listQuery.fifo = this.$route.params.id;
getfifodetailList(this.listQuery).then((response) => {
if (response.data) {
this.fifodetailList = response.data;
}
this.listLoading = false;
});
},
showmessage(value) {
getpuorder(value).then((response) => {
if (response.data) {
this.puorderItemdetial = response.data;
}
});
},
//采购订单项入库
confirminpur() {
console.log(this.inpur);
this.inpur.material = this.puorderItemdetial.material_.id; //物料类型
this.inpur.fifo = this.$route.params.id; //出入库记录
createfifoitem(this.inpur).then((res) => {
if (res.code >= 200) {
this.getList();
this.dialogVisibles = false;
this.$message.success("成功");
}
});
},
handlecgxCreate() {
this.$nextTick(() => {
this.$refs["Form1"].clearValidate();
});
if (this.$route.params.pu_order != null) {
this.dialogVisibles = true;
this.getpuorderitemList();
this.getlists();
}
},
//仓库
getlists() {
getWarehouseList({page: 0}).then((response) => {
if (response.data) {
this.warehouseData = genTree(response.data);
}
this.listLoading = false;
});
},
//采购顶单项列表
getpuorderitemList() {
getPuorderItemList({
pu_order: this.$route.params.pu_order,
page: 0,
}).then((response) => {
if (response.data) {
this.puorderTtemoptions = response.data;
}
});
},
handleUpSuccess(res, file, filelist) {
this.fileList.push({
id: res.data.id,
name: res.data.name,
path: res.data.path,
});
this.handleRemove(file);
},
handleRemove(file) {
// 实现删除文件
let fileList = this.$refs.upload.uploadFiles;
let index = fileList.findIndex((fileItem) => {
return fileItem.uid === file.uid;
});
fileList.splice(index, 1);
},
beforeUpload(file) {
const isLt2M = file.size / 1024 / 1024 < 50;
if (!isLt2M) {
this.$message.error("单文件不能超过50MB!");
}
return isLt2M;
},
deleteFile(index) {
this.$confirm("确定删除该文件, 是否继续?", {type: "error"})
.then(() => {
this.fileList.splice(index, 1);
})
.catch((e) => {
});
},
yeschange(val) {
if (!val) {
this.fileList = [];
}
},
handleEdit(scope) {
this.FIFOItem = Object.assign({}, scope.row); // copy obj
(this.fileList = []), (this.dialogVisible = true);
for (var i = 0; i < this.FIFOItem.files_.length; i++) {
this.fileList.push({
id: this.FIFOItem.files_[i].id,
name: this.FIFOItem.files_[i].name,
path: this.FIFOItem.files_[i].path,
});
}
},
confirm() {
var files = [];
for (var i = 0; i < this.fileList.length; i++) {
files.push(this.fileList[i].id);
}
this.fileData.files = files;
this.fileData.need_test = this.FIFOItem.need_test;
console.log(this.fileData);
itemfiles(this.FIFOItem.id, this.fileData).then((res) => {
if (res.code >= 200) {
this.getList();
this.dialogVisible = false;
this.$message.success("成功");
}
});
},
handleMaterial(scope) {
//调该物料对应的检查表
this.outerVisible = true;
this.fifo_detail = scope.row.id;
this.listQueryrecordform.material = scope.row.material;
this.listQueryrecordform.type = 30;
getrecordformList(this.listQueryrecordform).then((response) => {
if (response.data) {
this.recordformList = response.data;
}
});
},
//根据选择的表渲染检查项目
submitrecordform() {
if (this.recordform != "") {
getrffieldList({form: this.recordform, page: 0}).then((response) => {
if (response.data) {
this.fieldList = response.data;
this.innerVisible = true;
}
});
} else this.$message.error("请选择检查表!");
},
//提交检查项目
submitfield() {
let _this = this;
_this.field = []; //检查项目
this.fieldList.forEach((item) => {
_this.field.push({
form_field: item.id,
field_value: item.sort,
});
});
console.log(this.recordform);
this.testrecord.form = this.recordform;
this.testrecord.record_data = _this.field;
this.testrecord.fifo_item = this.fifo_detail;
this.testrecord.is_testok = this.is_testok;
createTestrecord(this.testrecord).then((res) => {
if (res.code >= 200) {
this.innerVisible = false;
this.outerVisible = false;
this.getList();
}
});
},
},
};
</script>