Merge branch 'develop' of https://e.coding.net/ctcdevteam/hberp/hberp into develop
This commit is contained in:
commit
76fdd2eea6
|
@ -150,3 +150,11 @@ export function itemfiles(id, data) {
|
|||
data
|
||||
})
|
||||
}
|
||||
//其他出库
|
||||
export function outOther(data) {
|
||||
return request({
|
||||
url: `/inm/fifo/out_other/`,
|
||||
method: 'POST',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
|
|
@ -393,8 +393,8 @@
|
|||
],
|
||||
state_: {
|
||||
10: "合格",
|
||||
|
||||
40: "禁用",
|
||||
40: "禁用",
|
||||
50: "报废",
|
||||
},
|
||||
options: [
|
||||
{
|
||||
|
@ -404,6 +404,11 @@
|
|||
{
|
||||
value: 40,
|
||||
label: "禁用",
|
||||
}
|
||||
,
|
||||
{
|
||||
value: 50,
|
||||
label: "报废",
|
||||
},
|
||||
],
|
||||
listQuery: {
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
icon="el-icon-plus"
|
||||
@click="handlecgCreate"
|
||||
>
|
||||
新增采购入库
|
||||
采购入库
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="checkPermission(['fifo_in_other'])"
|
||||
|
@ -16,7 +16,15 @@
|
|||
icon="el-icon-plus"
|
||||
@click="handleCreate"
|
||||
>
|
||||
新增其他入库
|
||||
其他入库
|
||||
</el-button>
|
||||
<el-button
|
||||
v-if="checkPermission(['fifo_out_other'])"
|
||||
type="primary"
|
||||
icon="el-icon-plus"
|
||||
@click="handleoutCreate"
|
||||
>
|
||||
其他出库
|
||||
</el-button>
|
||||
<el-input
|
||||
v-model="listQuery.search"
|
||||
|
@ -54,12 +62,11 @@
|
|||
height="100"
|
||||
v-el-height-adaptive-table="{ bottomOffset: 42 }"
|
||||
>
|
||||
<el-table-column type="index" width="50"/>
|
||||
<el-table-column label="记录编号" prop="number">
|
||||
</el-table-column>
|
||||
<el-table-column type="index" width="50" />
|
||||
<el-table-column label="记录编号" prop="number"> </el-table-column>
|
||||
<el-table-column label="操作人员">
|
||||
<template slot-scope="scope" v-if="scope.row.create_by">
|
||||
{{scope.row.create_by_.name}}
|
||||
{{ scope.row.create_by_.name }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="出/入库时间" prop="inout_date">
|
||||
|
@ -73,12 +80,11 @@
|
|||
<el-tag v-else>已审核</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="创建时间" prop="create_time">
|
||||
</el-table-column>
|
||||
<el-table-column label="创建时间" prop="create_time"> </el-table-column>
|
||||
<el-table-column align="center" label="操作" width="220px">
|
||||
<template slot-scope="scope">
|
||||
<el-link
|
||||
v-if="checkPermission(['fifo_pack'])&&scope.row.type==2"
|
||||
v-if="checkPermission(['fifo_pack']) && scope.row.type == 2"
|
||||
type="primary"
|
||||
@click="handlePack(scope)"
|
||||
>
|
||||
|
@ -92,7 +98,9 @@
|
|||
查看
|
||||
</el-link>
|
||||
<el-link
|
||||
v-if="checkPermission(['fifo_hear'])&&scope.row.is_audited == false"
|
||||
v-if="
|
||||
checkPermission(['fifo_hear']) && scope.row.is_audited == false
|
||||
"
|
||||
type="primary"
|
||||
@click="handleAudit(scope)"
|
||||
>
|
||||
|
@ -141,16 +149,121 @@
|
|||
</el-form-item>
|
||||
</el-form>
|
||||
<div style="text-align: right">
|
||||
<el-button
|
||||
type="danger"
|
||||
@click="dialogVisibles = false"
|
||||
>
|
||||
<el-button type="danger" @click="dialogVisibles = false">
|
||||
取消
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="confirminpur('Form1')"
|
||||
>
|
||||
<el-button type="primary" @click="confirminpur('Form1')">
|
||||
确认
|
||||
</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
<el-dialog
|
||||
:visible.sync="dialogVisibleout"
|
||||
:close-on-click-modal="false"
|
||||
title="新增出库记录"
|
||||
>
|
||||
<el-form
|
||||
ref="Formout"
|
||||
:model="outfifo"
|
||||
label-width="80px"
|
||||
label-position="right"
|
||||
:rules="rule1"
|
||||
>
|
||||
<div v-for="(item, index) in outfifo.details" :key="index">
|
||||
<el-row>
|
||||
<el-col :span="10" style="margin-right: 10px">
|
||||
<el-form-item
|
||||
class="material_batch"
|
||||
label="批次:"
|
||||
:prop="'details.' + index + '.material_batch'"
|
||||
>
|
||||
<el-select
|
||||
v-model="item.material_batch"
|
||||
filterable
|
||||
size="small"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in materialbatchoptions"
|
||||
:key="item.id"
|
||||
:value="item.id"
|
||||
:label="item.batch"
|
||||
>
|
||||
<span style="float: left">{{ item.batch }}</span>
|
||||
<span
|
||||
style="float: right; color: #8492a6; font-size: 13px"
|
||||
>{{ item.material_.name }}</span
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8" style="margin-right: 50px">
|
||||
<el-form-item
|
||||
class="count"
|
||||
label="出库数量"
|
||||
:prop="'details.' + index + '.count'"
|
||||
>
|
||||
<el-input-number
|
||||
v-model="item.count"
|
||||
:min="0"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<!-- 删除按钮 -->
|
||||
<el-col :span="1">
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
content="删除"
|
||||
placement="top"
|
||||
>
|
||||
<el-button
|
||||
@click="deleteItem1(index)"
|
||||
style="
|
||||
border: none;
|
||||
background: none;
|
||||
padding: 0px;
|
||||
margin-top: 4px;
|
||||
"
|
||||
>
|
||||
<i class="el-icon-remove-outline" style="font-size: 20px"></i>
|
||||
</el-button>
|
||||
</el-tooltip>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<div>
|
||||
<el-tooltip
|
||||
class="item"
|
||||
effect="dark"
|
||||
content="添加条件"
|
||||
placement="top"
|
||||
>
|
||||
<el-button
|
||||
@click="addConditions1"
|
||||
style="
|
||||
cursor: pointer;
|
||||
width: 95%;
|
||||
color: #fe000c;
|
||||
border: 1px dashed #fe000c;
|
||||
height: 40px;
|
||||
padding: 0px;
|
||||
margin-top: 2px;
|
||||
margin-left: 20px;
|
||||
font-size: 26px;
|
||||
"
|
||||
>
|
||||
+
|
||||
</el-button>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</el-form>
|
||||
<div style="text-align: right">
|
||||
<el-button type="danger" @click="dialogVisibleout = false">
|
||||
取消
|
||||
</el-button>
|
||||
<el-button type="primary" @click="confirmoutfifo('Formout')">
|
||||
确认
|
||||
</el-button>
|
||||
</div>
|
||||
|
@ -247,7 +360,7 @@
|
|||
type="date"
|
||||
placeholder="选择日期"
|
||||
value-format="yyyy-MM-dd"
|
||||
style="width:100%"
|
||||
style="width: 100%"
|
||||
>
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
@ -309,233 +422,298 @@
|
|||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import {
|
||||
getfifoList,
|
||||
createInventory,
|
||||
createInother,
|
||||
getWarehouseList,
|
||||
deleteFifoitem,
|
||||
deleteFifo,
|
||||
audit,
|
||||
} from "@/api/inm";
|
||||
import {getPuorderList} from "@/api/pum";
|
||||
import checkPermission from "@/utils/permission";
|
||||
import {getpVendorList} from "@/api/vendor";
|
||||
import {getMaterialList} from "@/api/mtm";
|
||||
import {getUserList} from "@/api/user";
|
||||
import {genTree} from "@/utils";
|
||||
import Pagination from "@/components/Pagination"; // secondary package based on el-pagination
|
||||
const defaulteinventory = {
|
||||
vendor: null,
|
||||
details: [
|
||||
{
|
||||
warehouse: "", //仓库
|
||||
material: "", // 物料
|
||||
count: "", //数量
|
||||
batch: "", //批次
|
||||
},
|
||||
],
|
||||
};
|
||||
export default {
|
||||
components: {Pagination},
|
||||
data() {
|
||||
return {
|
||||
inventory: defaulteinventory,
|
||||
fifoList: {
|
||||
count: 0,
|
||||
},
|
||||
types_: {
|
||||
1: "生产领料",
|
||||
2: "销售提货",
|
||||
3: "采购入库",
|
||||
4: "生产入库",
|
||||
5: "其他入库",
|
||||
},
|
||||
inpur: {},
|
||||
listQuery: {
|
||||
page: 1,
|
||||
page_size: 20,
|
||||
},
|
||||
puorderoptions: [],
|
||||
warehouseData: [],
|
||||
materialoptions: [],
|
||||
vendoroptions: [],
|
||||
listLoading: true,
|
||||
dialogVisible: false,
|
||||
dialogType: "new",
|
||||
dialogVisibles: false,
|
||||
rule1: {
|
||||
name: [{required: true, message: "请输入", trigger: "blur"}],
|
||||
},
|
||||
};
|
||||
import {
|
||||
getfifoList,
|
||||
createInventory,
|
||||
createInother,
|
||||
getWarehouseList,
|
||||
deleteFifoitem,
|
||||
getmaterialbatchList,
|
||||
deleteFifo,
|
||||
audit,
|
||||
outOther,
|
||||
} from "@/api/inm";
|
||||
import { getPuorderList } from "@/api/pum";
|
||||
import checkPermission from "@/utils/permission";
|
||||
import { getpVendorList } from "@/api/vendor";
|
||||
import { getMaterialList } from "@/api/mtm";
|
||||
import { getUserList } from "@/api/user";
|
||||
import { genTree } from "@/utils";
|
||||
import Pagination from "@/components/Pagination"; // secondary package based on el-pagination
|
||||
const defaulteinventory = {
|
||||
vendor: null,
|
||||
details: [
|
||||
{
|
||||
warehouse: "", //仓库
|
||||
material: "", // 物料
|
||||
count: "", //数量
|
||||
batch: "", //批次
|
||||
},
|
||||
computed: {},
|
||||
watch: {},
|
||||
created() {
|
||||
this.getlists();
|
||||
this.getList();
|
||||
this.getListgys();
|
||||
this.getmaterialList();
|
||||
this.getpuorderList();
|
||||
],
|
||||
};
|
||||
const defaulteoutfifo = {
|
||||
details: [
|
||||
{
|
||||
material_batch: null,
|
||||
count: null,
|
||||
},
|
||||
methods: {
|
||||
checkPermission,
|
||||
],
|
||||
};
|
||||
export default {
|
||||
components: { Pagination },
|
||||
data() {
|
||||
return {
|
||||
inventory: defaulteinventory,
|
||||
outfifo: defaulteoutfifo,
|
||||
dialogVisibleout: false,
|
||||
fifoList: {
|
||||
count: 0,
|
||||
},
|
||||
types_: {
|
||||
1: "生产领料",
|
||||
2: "销售提货",
|
||||
3: "采购入库",
|
||||
4: "生产入库",
|
||||
5: "其他入库",
|
||||
6:"其他出库",
|
||||
},
|
||||
inpur: {},
|
||||
listQuery: {
|
||||
page: 1,
|
||||
page_size: 20,
|
||||
},
|
||||
puorderoptions: [],
|
||||
materialbatchoptions: [],
|
||||
warehouseData: [],
|
||||
materialoptions: [],
|
||||
vendoroptions: [],
|
||||
listLoading: true,
|
||||
dialogVisible: false,
|
||||
dialogType: "new",
|
||||
dialogVisibles: false,
|
||||
rule1: {
|
||||
name: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||
},
|
||||
};
|
||||
},
|
||||
computed: {},
|
||||
watch: {},
|
||||
created() {
|
||||
this.getlists();
|
||||
this.getList();
|
||||
this.getListgys();
|
||||
this.getmaterialList();
|
||||
this.getpuorderList();
|
||||
},
|
||||
methods: {
|
||||
checkPermission,
|
||||
|
||||
getList() {
|
||||
this.listLoading = true;
|
||||
getList() {
|
||||
this.listLoading = true;
|
||||
|
||||
getfifoList(this.listQuery).then((response) => {
|
||||
if (response.data) {
|
||||
this.fifoList = response.data;
|
||||
}
|
||||
this.listLoading = false;
|
||||
});
|
||||
},
|
||||
//出入库详情
|
||||
handleDetail(scope) {
|
||||
this.$router.push({
|
||||
name: "fifodetail",
|
||||
params: {id: scope.row.id, pu_order: scope.row.pu_order},
|
||||
});
|
||||
},
|
||||
|
||||
//供应商列表
|
||||
getListgys() {
|
||||
getpVendorList({page: 0}).then((response) => {
|
||||
if (response.data) {
|
||||
this.vendoroptions = response.data;
|
||||
}
|
||||
});
|
||||
},
|
||||
//采购订单
|
||||
getpuorderList() {
|
||||
getPuorderList({page: 0}).then((response) => {
|
||||
if (response.data) {
|
||||
this.puorderoptions = response.data;
|
||||
}
|
||||
});
|
||||
},
|
||||
//采购入库提交
|
||||
confirminpur() {
|
||||
createInventory(this.inpur).then((res) => {
|
||||
if (res.code >= 200) {
|
||||
this.getList();
|
||||
this.dialogVisibles = false;
|
||||
this.$message.success("成功");
|
||||
}
|
||||
});
|
||||
},
|
||||
//仓库
|
||||
getlists() {
|
||||
getWarehouseList({page: 0}).then((response) => {
|
||||
if (response.data) {
|
||||
this.warehouseData = genTree(response.data);
|
||||
}
|
||||
this.listLoading = false;
|
||||
});
|
||||
},
|
||||
handlecgCreate() {
|
||||
this.dialogVisibles = true;
|
||||
},
|
||||
addConditions() {
|
||||
if (this.inventory.details.length <= 10) {
|
||||
this.inventory.details.push({
|
||||
warehouse: "", //仓库
|
||||
material: "", // 物料
|
||||
count: "", //数量
|
||||
batch: "", // 批次
|
||||
});
|
||||
} else {
|
||||
this.$message("最多可添加十项条件");
|
||||
getfifoList(this.listQuery).then((response) => {
|
||||
if (response.data) {
|
||||
this.fifoList = response.data;
|
||||
}
|
||||
},
|
||||
deleteItem(index) {
|
||||
this.inventory.details.splice(index, 1);
|
||||
},
|
||||
//物料
|
||||
getmaterialList() {
|
||||
this.listLoading = true;
|
||||
getMaterialList({pageoff: true}).then((response) => {
|
||||
if (response.data) {
|
||||
this.materialoptions = genTree(response.data);
|
||||
}
|
||||
this.listLoading = false;
|
||||
});
|
||||
},
|
||||
handleCreate() {
|
||||
this.inventory.details = [
|
||||
{
|
||||
warehouse: "", // 仓库
|
||||
material: "", // 物料
|
||||
count: "", //数量
|
||||
batch: "", //批次
|
||||
},
|
||||
];
|
||||
this.inventory = Object.assign({}, defaulteinventory);
|
||||
this.dialogType = "new";
|
||||
this.dialogVisible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs["Form"].clearValidate();
|
||||
});
|
||||
},
|
||||
//审核
|
||||
handleAudit(scope) {
|
||||
this.$confirm("是否通过?", "提示", {
|
||||
confirmButtonText: "确认",
|
||||
cancelButtonText: "取消",
|
||||
type: "success",
|
||||
})
|
||||
.then(async () => {
|
||||
await audit(scope.row.id);
|
||||
this.getList();
|
||||
this.$message.success("已审核");
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err);
|
||||
});
|
||||
},
|
||||
handleFilter() {
|
||||
this.listQuery.page = 1;
|
||||
this.getList();
|
||||
},
|
||||
resetFilter() {
|
||||
this.listQuery = {
|
||||
page: 1,
|
||||
page_size: 20,
|
||||
};
|
||||
this.getList();
|
||||
},
|
||||
this.listLoading = false;
|
||||
});
|
||||
},
|
||||
//出入库详情
|
||||
handleDetail(scope) {
|
||||
this.$router.push({
|
||||
name: "fifodetail",
|
||||
params: { id: scope.row.id, pu_order: scope.row.pu_order },
|
||||
});
|
||||
},
|
||||
|
||||
async confirm(form) {
|
||||
console.log(this.inventory);
|
||||
|
||||
createInother(this.inventory).then((res) => {
|
||||
if (res.code >= 200) {
|
||||
this.getList();
|
||||
this.dialogVisible = false;
|
||||
this.$message.success("成功");
|
||||
}
|
||||
//供应商列表
|
||||
getListgys() {
|
||||
getpVendorList({ page: 0 }).then((response) => {
|
||||
if (response.data) {
|
||||
this.vendoroptions = response.data;
|
||||
}
|
||||
});
|
||||
},
|
||||
//采购订单
|
||||
getpuorderList() {
|
||||
getPuorderList({ page: 0 }).then((response) => {
|
||||
if (response.data) {
|
||||
this.puorderoptions = response.data;
|
||||
}
|
||||
});
|
||||
},
|
||||
//采购入库提交
|
||||
confirminpur() {
|
||||
createInventory(this.inpur).then((res) => {
|
||||
if (res.code >= 200) {
|
||||
this.getList();
|
||||
this.dialogVisibles = false;
|
||||
this.$message.success("成功");
|
||||
}
|
||||
});
|
||||
},
|
||||
//仓库
|
||||
getlists() {
|
||||
getWarehouseList({ page: 0 }).then((response) => {
|
||||
if (response.data) {
|
||||
this.warehouseData = genTree(response.data);
|
||||
}
|
||||
this.listLoading = false;
|
||||
});
|
||||
},
|
||||
handlecgCreate() {
|
||||
this.dialogVisibles = true;
|
||||
},
|
||||
addConditions1() {
|
||||
if (this.outfifo.details.length <= 10) {
|
||||
this.outfifo.details.push({
|
||||
material_batch: null,
|
||||
count: null,
|
||||
});
|
||||
},
|
||||
handleDelete(scope) {
|
||||
this.$confirm("确认删除?", "警告", {
|
||||
confirmButtonText: "确认",
|
||||
cancelButtonText: "取消",
|
||||
type: "error",
|
||||
})
|
||||
.then(async () => {
|
||||
await deleteFifo(scope.row.id);
|
||||
this.getList();
|
||||
this.$message.success("成功");
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err);
|
||||
});
|
||||
},
|
||||
//装箱
|
||||
handlePack(scope) {
|
||||
this.$router.push({name: "salesdetail", params: {id: scope.row.sale},})
|
||||
} else {
|
||||
this.$message("最多可添加十项条件");
|
||||
}
|
||||
},
|
||||
};
|
||||
addConditions() {
|
||||
|
||||
if (this.inventory.details.length <= 10) {
|
||||
this.inventory.details.push({
|
||||
warehouse: "", //仓库
|
||||
material: "", // 物料
|
||||
count: "", //数量
|
||||
batch: "", // 批次
|
||||
});
|
||||
} else {
|
||||
this.$message("最多可添加十项条件");
|
||||
}
|
||||
},
|
||||
deleteItem(index) {
|
||||
this.inventory.details.splice(index, 1);
|
||||
},
|
||||
deleteItem1(index) {
|
||||
this.outfifo.details.splice(index, 1);
|
||||
},
|
||||
//物料
|
||||
getmaterialList() {
|
||||
this.listLoading = true;
|
||||
getMaterialList({ pageoff: true }).then((response) => {
|
||||
if (response.data) {
|
||||
this.materialoptions = genTree(response.data);
|
||||
}
|
||||
this.listLoading = false;
|
||||
});
|
||||
},
|
||||
|
||||
//其他入库
|
||||
handleCreate() {
|
||||
this.inventory.details = [
|
||||
{
|
||||
warehouse: "", // 仓库
|
||||
material: "", // 物料
|
||||
count: "", //数量
|
||||
batch: "", //批次
|
||||
},
|
||||
];
|
||||
this.inventory = Object.assign({}, defaulteinventory);
|
||||
this.dialogType = "new";
|
||||
this.dialogVisible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs["Form"].clearValidate();
|
||||
});
|
||||
},
|
||||
//其他出库
|
||||
handleoutCreate() {
|
||||
this.outfifo.details = [
|
||||
{
|
||||
material_batch: null,
|
||||
count: null,
|
||||
},
|
||||
];
|
||||
this.outfifo = Object.assign({}, defaulteoutfifo);
|
||||
this.dialogVisibleout = true;
|
||||
|
||||
getmaterialbatchList({ page: 0 }).then((response) => {
|
||||
if (response.data) {
|
||||
this.materialbatchoptions = response.data;
|
||||
}
|
||||
});
|
||||
|
||||
this.$nextTick(() => {
|
||||
this.$refs["Formout"].clearValidate();
|
||||
});
|
||||
},
|
||||
confirmoutfifo() {
|
||||
console.log(this.outfifo);
|
||||
outOther(this.outfifo).then((res) => {
|
||||
if (res.code >= 200) {
|
||||
this.getList();
|
||||
this.dialogVisibleout = false;
|
||||
this.$message.success("成功");
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
//审核
|
||||
handleAudit(scope) {
|
||||
this.$confirm("是否通过?", "提示", {
|
||||
confirmButtonText: "确认",
|
||||
cancelButtonText: "取消",
|
||||
type: "success",
|
||||
})
|
||||
.then(async () => {
|
||||
await audit(scope.row.id);
|
||||
this.getList();
|
||||
this.$message.success("已审核");
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err);
|
||||
});
|
||||
},
|
||||
handleFilter() {
|
||||
this.listQuery.page = 1;
|
||||
this.getList();
|
||||
},
|
||||
resetFilter() {
|
||||
this.listQuery = {
|
||||
page: 1,
|
||||
page_size: 20,
|
||||
};
|
||||
this.getList();
|
||||
},
|
||||
|
||||
async confirm(form) {
|
||||
console.log(this.inventory);
|
||||
|
||||
createInother(this.inventory).then((res) => {
|
||||
if (res.code >= 200) {
|
||||
this.getList();
|
||||
this.dialogVisible = false;
|
||||
this.$message.success("成功");
|
||||
}
|
||||
});
|
||||
},
|
||||
handleDelete(scope) {
|
||||
this.$confirm("确认删除?", "警告", {
|
||||
confirmButtonText: "确认",
|
||||
cancelButtonText: "取消",
|
||||
type: "error",
|
||||
})
|
||||
.then(async () => {
|
||||
await deleteFifo(scope.row.id);
|
||||
this.getList();
|
||||
this.$message.success("成功");
|
||||
})
|
||||
.catch((err) => {
|
||||
console.error(err);
|
||||
});
|
||||
},
|
||||
//装箱
|
||||
handlePack(scope) {
|
||||
this.$router.push({
|
||||
name: "salesdetail",
|
||||
params: { id: scope.row.sale },
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
|
|
@ -95,7 +95,7 @@
|
|||
</el-card>
|
||||
<el-dialog
|
||||
:visible.sync="dialogVisible"
|
||||
:title="dialogType === 'edit' ? '编辑设备' : '新增设备'"
|
||||
:title="dialogType === 'edit' ? '编辑供应商' : '新增供应商'"
|
||||
>
|
||||
<el-form
|
||||
ref="Form"
|
||||
|
|
|
@ -49,6 +49,9 @@
|
|||
</el-table-column>
|
||||
<el-table-column label="生产数量" >
|
||||
<template slot-scope="scope">{{ scope.row.count }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态" width="110">
|
||||
<template slot-scope="scope">{{ state_[scope.row.state] }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="计划开工时间" >
|
||||
<template slot-scope="scope">{{ scope.row.start_date }}</template>
|
||||
|
@ -88,6 +91,16 @@ export default {
|
|||
|
||||
productionplan:"",
|
||||
orderdetail:"",
|
||||
state_: {
|
||||
10: "制定中",
|
||||
20: "已下达",
|
||||
30: "已接受",
|
||||
40: "生产中",
|
||||
50: "已完成",
|
||||
60: "军检完成",
|
||||
70: "暂停",
|
||||
80: "终止",
|
||||
},
|
||||
|
||||
};
|
||||
},
|
||||
|
|
|
@ -76,7 +76,7 @@
|
|||
<el-table-column label="装箱单号" show-overflow-tooltip>
|
||||
<template slot-scope="scope">{{ scope.row.packnum }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="未装箱说明" show-overflow-tooltip>
|
||||
<el-table-column label="备注" show-overflow-tooltip>
|
||||
<template slot-scope="scope">{{ scope.row.remark }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="操作" width="220px">
|
||||
|
|
|
@ -4,7 +4,7 @@ from rest_framework.response import Response
|
|||
from celery import shared_task
|
||||
import os
|
||||
import subprocess
|
||||
from server.settings_pro import DATABASES, BACKUP_DATABASE_PATH
|
||||
from server.settings_pro import DATABASES, BACKUP_PATH, SH_PATH
|
||||
|
||||
@shared_task
|
||||
def backup_database():
|
||||
|
@ -17,14 +17,14 @@ def backup_database():
|
|||
DATABASES['default']['USER'],
|
||||
DATABASES['default']['PASSWORD'],
|
||||
DATABASES['default']['NAME'],
|
||||
BACKUP_DATABASE_PATH,
|
||||
BACKUP_PATH + '/database',
|
||||
name)
|
||||
completed = subprocess.run(command, shell=True, capture_output=True, text=True)
|
||||
return completed
|
||||
|
||||
@shared_task
|
||||
def reload_server():
|
||||
command = 'bash /home/lighthouse/hberp/hb_server/sh/git.sh'
|
||||
command = 'bash {}/git.sh'.format(SH_PATH)
|
||||
completed = subprocess.run(command, shell=True, capture_output=True, text=True)
|
||||
return completed
|
||||
|
||||
|
@ -36,7 +36,7 @@ def reload_server_only():
|
|||
|
||||
@shared_task
|
||||
def backup_media():
|
||||
command = 'bash /home/lighthouse/hberp/hb_server/sh/backup_media.sh'
|
||||
command = 'bash {}/backup_media.sh'.format(SH_PATH)
|
||||
completed = subprocess.run(command, shell=True, capture_output=True, text=True)
|
||||
return completed
|
||||
|
||||
|
|
|
@ -17,11 +17,13 @@ class Equipment(CommonAModel):
|
|||
EQUIP_STATE_LIMIT = 20
|
||||
EQUIP_STATE_FIX = 30
|
||||
EQUIP_STATE_DISABLE = 40
|
||||
EQUIP_STATE_scrap = 50
|
||||
state_choices = (
|
||||
(EQUIP_STATE_OK, '完好'),
|
||||
(EQUIP_STATE_LIMIT, '限用'),
|
||||
(EQUIP_STATE_FIX, '在修'),
|
||||
(EQUIP_STATE_DISABLE, '禁用')
|
||||
(EQUIP_STATE_DISABLE, '禁用'),
|
||||
(EQUIP_STATE_scrap, '报废')
|
||||
|
||||
)
|
||||
state2_choices = (
|
||||
|
|
|
@ -69,12 +69,14 @@ class FIFO(CommonADModel):
|
|||
FIFO_TYPE_PUR_IN = 3
|
||||
FIFO_TYPE_DO_IN = 4
|
||||
FIFO_TYPE_OTHER_IN = 5
|
||||
FIFO_TYPE_OTHER_OUT = 6
|
||||
type_choices = (
|
||||
(FIFO_TYPE_DO_OUT, '生产领料'),
|
||||
(FIFO_TYPE_SALE_OUT, '销售提货'),
|
||||
(FIFO_TYPE_PUR_IN, '采购入库'),
|
||||
(FIFO_TYPE_DO_IN, '生产入库'),
|
||||
(FIFO_TYPE_OTHER_IN, '其他入库')
|
||||
(FIFO_TYPE_OTHER_IN, '其他入库'),
|
||||
(FIFO_TYPE_OTHER_OUT, '其他出库')
|
||||
)
|
||||
number = models.CharField('记录编号', max_length=100)
|
||||
type = models.IntegerField('出入库类型', default=1)
|
||||
|
|
|
@ -77,23 +77,31 @@ class FIFOListSerializer(serializers.ModelSerializer):
|
|||
fields = '__all__'
|
||||
|
||||
class FIFOItemCreateSerializer(serializers.ModelSerializer):
|
||||
material_batch = serializers.PrimaryKeyRelatedField(queryset=MaterialBatch.objects.all(), label="物料批次ID", required=False)
|
||||
class Meta:
|
||||
model = FIFOItem
|
||||
fields = ['warehouse',
|
||||
'material', 'batch', 'fifo', 'files', 'pu_order_item', 'count', 'expiration_date']
|
||||
'material', 'batch', 'fifo', 'files', 'pu_order_item', 'count', 'expiration_date', 'material_batch']
|
||||
|
||||
def create(self, validated_data):
|
||||
fifo = validated_data['fifo']
|
||||
if fifo.is_audited:
|
||||
raise ValidationError('该出入库记录已审核')
|
||||
pu_order_item = validated_data.get('pu_order_item', None)
|
||||
if pu_order_item:
|
||||
material_batch = validated_data.pop('material_batch', None)
|
||||
if fifo.type == FIFO.FIFO_TYPE_PUR_IN and pu_order_item is None:
|
||||
raise ValidationError('采购入库需关联采购项')
|
||||
else:
|
||||
if fifo.pu_order != pu_order_item.pu_order:
|
||||
raise ValidationError('项目与采购订单不一致')
|
||||
validated_data['material']=pu_order_item.material
|
||||
if fifo.type == FIFO.FIFO_TYPE_OTHER_OUT and material_batch is None:
|
||||
raise ValidationError('其他出库需关联批次号')
|
||||
else:
|
||||
if fifo.pu_order is not None:
|
||||
raise ValidationError('非采购订单')
|
||||
validated_data['material'] = material_batch.material
|
||||
validated_data['batch'] = material_batch.batch
|
||||
validated_data['warehouse'] = material_batch.warehouse
|
||||
|
||||
return super().create(validated_data)
|
||||
|
||||
def validate_batch(self, value):
|
||||
|
@ -106,7 +114,7 @@ class FIFOItemCreateSerializer(serializers.ModelSerializer):
|
|||
class FIFOItemUpdateSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = FIFOItem
|
||||
fields = ['warehouse', 'batch', 'files', 'count', 'expiration_date']
|
||||
fields = ['files', 'count', 'expiration_date']
|
||||
|
||||
class FIFOItemSerializer(serializers.ModelSerializer):
|
||||
warehouse_ = WareHouseSimpleSerializer(source='warehouse', read_only=True)
|
||||
|
@ -142,11 +150,41 @@ class MaterialBatchQuerySerializer(serializers.Serializer):
|
|||
warehouse = serializers.IntegerField(label="仓库ID", required=False)
|
||||
materials = serializers.ListField(child=serializers.IntegerField(label="物料ID"), required=False)
|
||||
|
||||
class FIFODetailOutOtherSerializer(serializers.Serializer):
|
||||
material_batch = serializers.PrimaryKeyRelatedField(queryset=MaterialBatch.objects.all(), label="物料批次ID")
|
||||
count = serializers.IntegerField(label="数量", min_value=0)
|
||||
|
||||
class FIFOOutOtherSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
其他出库序列化
|
||||
"""
|
||||
details = FIFODetailOutOtherSerializer(many=True, required=True)
|
||||
|
||||
class Meta:
|
||||
model = FIFO
|
||||
fields = ['details']
|
||||
|
||||
def create(self, validated_data):
|
||||
details = validated_data.pop('details')
|
||||
with transaction.atomic():
|
||||
validated_data['type'] = FIFO.FIFO_TYPE_OTHER_OUT
|
||||
validated_data['number'] = 'CK' + ranstr(7)
|
||||
obj = FIFO(**validated_data)
|
||||
obj.save()
|
||||
for i in details:
|
||||
mb = i.pop('material_batch')
|
||||
i['material'] = mb.material
|
||||
i['batch'] = mb.batch
|
||||
i['warehouse'] = mb.warehouse
|
||||
i['fifo'] = obj
|
||||
FIFOItem.objects.create(**i)
|
||||
return obj
|
||||
|
||||
class FIFOInOtherSerializer(serializers.ModelSerializer):
|
||||
"""
|
||||
其他入库序列化
|
||||
"""
|
||||
details = FIFODetailInPurSerializer(many=True, required=False)
|
||||
details = FIFODetailInPurSerializer(many=True, required=True)
|
||||
vendor = serializers.PrimaryKeyRelatedField(label='供应商ID',
|
||||
queryset=Vendor.objects.all())
|
||||
class Meta:
|
||||
|
|
|
@ -59,7 +59,7 @@ class InmService:
|
|||
pu_order_item.delivered_count = delivered_count
|
||||
pu_order_item.save()
|
||||
|
||||
elif instance.type in [FIFO.FIFO_TYPE_DO_OUT, FIFO.FIFO_TYPE_SALE_OUT]: # 生产领料 销售出库
|
||||
elif instance.type in [FIFO.FIFO_TYPE_DO_OUT, FIFO.FIFO_TYPE_SALE_OUT, FIFO.FIFO_TYPE_OTHER_OUT]: # 生产领料 销售出库
|
||||
# 更新相关表
|
||||
for i in FIFOItem.objects.filter(fifo=instance):
|
||||
material = i.material
|
||||
|
|
|
@ -6,7 +6,7 @@ from rest_framework.viewsets import GenericViewSet, ModelViewSet
|
|||
from apps.inm.filters import IProductFilterSet, MbFilterSet
|
||||
|
||||
from apps.inm.models import FIFO, FIFOItem, IProduct, MaterialBatch, WareHouse, Inventory
|
||||
from apps.inm.serializers import FIFOInOtherSerializer, FIFOItemCreateSerializer, FIFOItemSerializer, FIFOInPurSerializer, FIFOItemUpdateSerializer, FIFOListSerializer, IProductListSerializer, \
|
||||
from apps.inm.serializers import FIFOInOtherSerializer, FIFOItemCreateSerializer, FIFOItemSerializer, FIFOInPurSerializer, FIFOItemUpdateSerializer, FIFOListSerializer, FIFOOutOtherSerializer, IProductListSerializer, \
|
||||
InmTestRecordCreateSerializer, MaterialBatchQuerySerializer, MaterialBatchSerializer, WareHouseSerializer, \
|
||||
WareHouseCreateUpdateSerializer, InventorySerializer
|
||||
from apps.inm.services import InmService
|
||||
|
@ -183,6 +183,17 @@ class FIFOViewSet(ListModelMixin, DestroyModelMixin, GenericViewSet):
|
|||
serializer.save(create_by=request.user)
|
||||
return Response()
|
||||
|
||||
@action(methods=['post'], detail=False, perms_map={'post': 'fifo_out_other'},
|
||||
serializer_class=FIFOOutOtherSerializer)
|
||||
def out_other(self, request, pk=None):
|
||||
"""
|
||||
其他出库
|
||||
"""
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save(create_by=request.user)
|
||||
return Response()
|
||||
|
||||
@action(methods=['post'], detail=True, perms_map={'post': 'fifo_audit'}, serializer_class=serializers.Serializer)
|
||||
@transaction.atomic
|
||||
def audit(self, request, pk=None):
|
||||
|
|
|
@ -44,7 +44,6 @@ class RbacPermission(BasePermission):
|
|||
perms = cache.get(request.user.username + '__perms')
|
||||
if not perms:
|
||||
perms = get_permission_list(request.user)
|
||||
|
||||
if 'admin' in perms:
|
||||
return True
|
||||
elif not hasattr(view, 'perms_map'):
|
||||
|
|
Loading…
Reference in New Issue