Merge branch 'develop' of https://e.coding.net/ctcdevteam/hberp/hberp into develop
This commit is contained in:
commit
9a31871839
|
@ -61,6 +61,14 @@ export function getfifoList(query) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
//出入库记录删除
|
//出入库记录删除
|
||||||
|
export function deleteFifo(id, data) {
|
||||||
|
return request({
|
||||||
|
url: `/inm/fifo/${id}/`,
|
||||||
|
method: 'delete',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
//出入库记录删除
|
||||||
export function deleteFifoitem(id, data) {
|
export function deleteFifoitem(id, data) {
|
||||||
return request({
|
return request({
|
||||||
url: `/inm/fifoitem/${id}/`,
|
url: `/inm/fifoitem/${id}/`,
|
||||||
|
@ -114,3 +122,12 @@ export function saleMtest(id, data) {
|
||||||
data
|
data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//复验上传
|
||||||
|
export function itemfiles(id, data) {
|
||||||
|
return request({
|
||||||
|
url: `/inm/fifoitem/${id}/`,
|
||||||
|
method: 'put',
|
||||||
|
data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
@ -234,6 +234,7 @@ import {
|
||||||
createInventory,
|
createInventory,
|
||||||
getWarehouseList,
|
getWarehouseList,
|
||||||
deleteFifoitem,
|
deleteFifoitem,
|
||||||
|
deleteFifo,
|
||||||
audit,
|
audit,
|
||||||
} from "@/api/inm";
|
} from "@/api/inm";
|
||||||
import checkPermission from "@/utils/permission";
|
import checkPermission from "@/utils/permission";
|
||||||
|
@ -402,7 +403,7 @@ export default {
|
||||||
type: "error",
|
type: "error",
|
||||||
})
|
})
|
||||||
.then(async () => {
|
.then(async () => {
|
||||||
await deleteFifoitem(scope.row.id);
|
await deleteFifo(scope.row.id);
|
||||||
this.getList();
|
this.getList();
|
||||||
this.$message.success("成功");
|
this.$message.success("成功");
|
||||||
})
|
})
|
||||||
|
|
|
@ -48,20 +48,24 @@
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column label="文件">
|
||||||
|
<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 align="center" label="操作" width="220px">
|
<el-table-column align="center" label="操作" width="220px">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-link
|
<el-link type="primary" @click="handleMaterial(scope)" v-if="scope.row.need_test"
|
||||||
|
|
||||||
type="primary"
|
|
||||||
@click="handleMaterial(scope)"
|
|
||||||
>复验</el-link
|
>复验</el-link
|
||||||
>
|
>
|
||||||
<el-link
|
|
||||||
|
|
||||||
type="primary"
|
<el-link type="primary" @click="handleEdit(scope)">上传</el-link>
|
||||||
@click="handlefile(scope)"
|
|
||||||
>上传</el-link
|
|
||||||
>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
@ -73,8 +77,65 @@
|
||||||
@pagination="getList"
|
@pagination="getList"
|
||||||
/>
|
/>
|
||||||
</el-card>
|
</el-card>
|
||||||
|
<el-dialog
|
||||||
|
:close-on-click-modal="false"
|
||||||
|
:visible.sync="dialogVisible"
|
||||||
|
title="上传文件"
|
||||||
|
>
|
||||||
|
<el-form
|
||||||
|
ref="Form"
|
||||||
|
:model="FIFOItem"
|
||||||
|
label-width="100px"
|
||||||
|
label-position="right"
|
||||||
|
|
||||||
<el-dialog title="物料检查表" :close-on-click-modal="false" :visible.sync="outerVisible">
|
>
|
||||||
|
<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-select style="width: 100%" v-model="recordform" placeholder="请选择">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in recordformList"
|
v-for="item in recordformList"
|
||||||
|
@ -209,14 +270,18 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script>
|
<script>
|
||||||
import { getfifodetailList } from "@/api/inm";
|
import { getfifodetailList,itemfiles } from "@/api/inm";
|
||||||
import checkPermission from "@/utils/permission";
|
import checkPermission from "@/utils/permission";
|
||||||
import { getMaterialList, getrecordformList, getrffieldList } from "@/api/mtm";
|
import { getMaterialList, getrecordformList, getrffieldList } from "@/api/mtm";
|
||||||
import { createTestrecord } from "@/api/inm";
|
import { createTestrecord } from "@/api/inm";
|
||||||
import { getUserList } from "@/api/user";
|
|
||||||
|
import { upUrl, upHeaders } from "@/api/file";
|
||||||
import { genTree } from "@/utils";
|
import { genTree } from "@/utils";
|
||||||
import Pagination from "@/components/Pagination"; // secondary package based on el-pagination
|
import Pagination from "@/components/Pagination"; // secondary package based on el-pagination
|
||||||
|
const defaultfile = {
|
||||||
|
files:[],
|
||||||
|
need_test:false,
|
||||||
|
};
|
||||||
export default {
|
export default {
|
||||||
components: { Pagination },
|
components: { Pagination },
|
||||||
data() {
|
data() {
|
||||||
|
@ -227,6 +292,10 @@ export default {
|
||||||
fifodetailList: {
|
fifodetailList: {
|
||||||
count: 0,
|
count: 0,
|
||||||
},
|
},
|
||||||
|
upHeaders: upHeaders(),
|
||||||
|
upUrl: upUrl(),
|
||||||
|
fileList: [],
|
||||||
|
FIFOItem:defaultfile,
|
||||||
listQuery: {
|
listQuery: {
|
||||||
page: 1,
|
page: 1,
|
||||||
page_size: 20,
|
page_size: 20,
|
||||||
|
@ -242,18 +311,26 @@ export default {
|
||||||
listQueryrecordform: {
|
listQueryrecordform: {
|
||||||
page: 0,
|
page: 0,
|
||||||
},
|
},
|
||||||
|
fileData:{},
|
||||||
outerVisible: false,
|
outerVisible: false,
|
||||||
innerVisible: false,
|
innerVisible: false,
|
||||||
|
dialogVisible: false,
|
||||||
|
dialogType: "new",
|
||||||
testrecord: {},
|
testrecord: {},
|
||||||
rule1: {
|
rule1: {
|
||||||
name: [{ required: true, message: "请输入", trigger: "blur" }],
|
name: [{ required: true, message: "请输入", trigger: "blur" }],
|
||||||
},
|
},
|
||||||
|
fileList: [],
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: {},
|
computed: {},
|
||||||
watch: {},
|
watch: {},
|
||||||
created() {
|
created() {
|
||||||
this.getList();
|
this.getList();
|
||||||
|
|
||||||
|
},
|
||||||
|
mounted() {
|
||||||
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
checkPermission,
|
checkPermission,
|
||||||
|
@ -269,11 +346,75 @@ export default {
|
||||||
this.listLoading = false;
|
this.listLoading = false;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
//上传物料文件
|
|
||||||
handlefile(scope)
|
|
||||||
{
|
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) {
|
handleMaterial(scope) {
|
||||||
//调该物料对应的检查表
|
//调该物料对应的检查表
|
||||||
this.outerVisible = true;
|
this.outerVisible = true;
|
||||||
|
@ -302,10 +443,9 @@ export default {
|
||||||
let _this = this;
|
let _this = this;
|
||||||
_this.field = []; //检查项目
|
_this.field = []; //检查项目
|
||||||
this.fieldList.forEach((item) => {
|
this.fieldList.forEach((item) => {
|
||||||
|
|
||||||
_this.field.push({
|
_this.field.push({
|
||||||
form_field: item.id,
|
form_field: item.id,
|
||||||
field_value:item.sort
|
field_value: item.sort,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -256,7 +256,7 @@ getMaterial(){
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
getOrderList(){
|
getOrderList(){
|
||||||
getOrderList({product:this.material,page:0}).then((response) => {
|
getOrderList({material:this.material,page:0}).then((response) => {
|
||||||
if (response.data) {
|
if (response.data) {
|
||||||
this.orderlist = response.data;//物料关联的订单
|
this.orderlist = response.data;//物料关联的订单
|
||||||
|
|
||||||
|
@ -264,7 +264,7 @@ getMaterial(){
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
getplanList() {
|
getplanList() {
|
||||||
getProductionplanList({product:this.material,page:0}).then((response) => {
|
getProductionplanList({material:this.material,page:0}).then((response) => {
|
||||||
if (response.data) {
|
if (response.data) {
|
||||||
this.productionplanList = response.data;//物料关联计划
|
this.productionplanList = response.data;//物料关联计划
|
||||||
}
|
}
|
||||||
|
|
|
@ -129,12 +129,6 @@
|
||||||
@click="handlework(item)"
|
@click="handlework(item)"
|
||||||
>{{ item.name }}</el-button
|
>{{ item.name }}</el-button
|
||||||
>
|
>
|
||||||
<el-button
|
|
||||||
type="primary"
|
|
||||||
@click="handleAll()"
|
|
||||||
style="float: right"
|
|
||||||
>显示全部</el-button
|
|
||||||
>
|
|
||||||
<el-button
|
<el-button
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="handleScrapbcp()"
|
@click="handleScrapbcp()"
|
||||||
|
@ -142,6 +136,16 @@
|
||||||
style="float: right; display: none"
|
style="float: right; display: none"
|
||||||
>报废</el-button
|
>报废</el-button
|
||||||
>
|
>
|
||||||
|
<el-badge :value="count" class="item" style="float:right">
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
@click="handleAll()"
|
||||||
|
|
||||||
|
>显示全部</el-button
|
||||||
|
>
|
||||||
|
</el-badge>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<el-table
|
<el-table
|
||||||
:data="wproductData"
|
:data="wproductData"
|
||||||
|
@ -714,6 +718,12 @@
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
<style>
|
||||||
|
.item {
|
||||||
|
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
<script>
|
<script>
|
||||||
import { getsubproductionplanList, createPick_need } from "@/api/pm";
|
import { getsubproductionplanList, createPick_need } from "@/api/pm";
|
||||||
import checkPermission from "@/utils/permission";
|
import checkPermission from "@/utils/permission";
|
||||||
|
@ -832,6 +842,7 @@ export default {
|
||||||
{ lable: "划伤", value: 30 },
|
{ lable: "划伤", value: 30 },
|
||||||
{ lable: "其他", value: 40 },
|
{ lable: "其他", value: 40 },
|
||||||
],
|
],
|
||||||
|
count:null,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
process: "",
|
process: "",
|
||||||
|
@ -1100,7 +1111,10 @@ export default {
|
||||||
if (this.values++ > this.forms.length) this.values = 0;
|
if (this.values++ > this.forms.length) this.values = 0;
|
||||||
},
|
},
|
||||||
handleSelectionChange(val) {
|
handleSelectionChange(val) {
|
||||||
|
this.count=val.length;
|
||||||
|
console.log(this.count);
|
||||||
let _this = this;
|
let _this = this;
|
||||||
|
|
||||||
_this.wpID = [];
|
_this.wpID = [];
|
||||||
val.forEach((item) => {
|
val.forEach((item) => {
|
||||||
_this.wpID.push(item.id);
|
_this.wpID.push(item.id);
|
||||||
|
|
|
@ -147,7 +147,7 @@ class FIFOViewSet(ListModelMixin, DestroyModelMixin, GenericViewSet):
|
||||||
|
|
||||||
def destroy(self, request, *args, **kwargs):
|
def destroy(self, request, *args, **kwargs):
|
||||||
obj = self.get_object()
|
obj = self.get_object()
|
||||||
if obj.is_submited:
|
if obj.is_audited:
|
||||||
raise exceptions.APIException('该记录已审核,不可删除')
|
raise exceptions.APIException('该记录已审核,不可删除')
|
||||||
return super().destroy(request, *args, **kwargs)
|
return super().destroy(request, *args, **kwargs)
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ class PlanFilterSet(filters.FilterSet):
|
||||||
create_time_start = filters.DateFilter(field_name="create_time", lookup_expr='gte')
|
create_time_start = filters.DateFilter(field_name="create_time", lookup_expr='gte')
|
||||||
create_time_end = filters.DateFilter(field_name="create_time", lookup_expr='lte')
|
create_time_end = filters.DateFilter(field_name="create_time", lookup_expr='lte')
|
||||||
tag = filters.CharFilter(method='filter_tag')
|
tag = filters.CharFilter(method='filter_tag')
|
||||||
|
material = filters.NumberFilter(method='filter_material')
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ProductionPlan
|
model = ProductionPlan
|
||||||
fields = ['product', 'order', 'create_time_start', 'create_time_end']
|
fields = ['product', 'order', 'create_time_start', 'create_time_end']
|
||||||
|
@ -20,9 +21,16 @@ class PlanFilterSet(filters.FilterSet):
|
||||||
queryset = queryset.exclude(state__in=[ProductionPlan.PLAN_STATE_DONE, ProductionPlan.PLAN_MTEST_DONE])
|
queryset = queryset.exclude(state__in=[ProductionPlan.PLAN_STATE_DONE, ProductionPlan.PLAN_MTEST_DONE])
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
def filter_material(self, queryset, name, value):
|
||||||
|
"""
|
||||||
|
按物料筛选
|
||||||
|
"""
|
||||||
|
return queryset.filter(subplan_plan__progress_subplan__material__id=value).distinct()
|
||||||
|
|
||||||
class SubproductionProgressFilterSet(filters.FilterSet):
|
class SubproductionProgressFilterSet(filters.FilterSet):
|
||||||
|
|
||||||
operation = filters.NumberFilter(method='filter_operation')
|
operation = filters.NumberFilter(method='filter_operation')
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = SubProductionProgress
|
model = SubProductionProgress
|
||||||
fields = ['material', 'subproduction_plan', 'operation', 'type']
|
fields = ['material', 'subproduction_plan', 'operation', 'type']
|
||||||
|
@ -40,3 +48,5 @@ class SubproductionProgressFilterSet(filters.FilterSet):
|
||||||
queryset = queryset.exclude(material__type__in =[Material.MA_TYPE_HALFGOOD, Material.MA_TYPE_GOOD])
|
queryset = queryset.exclude(material__type__in =[Material.MA_TYPE_HALFGOOD, Material.MA_TYPE_GOOD])
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ class ProductionPlan(CommonAModel):
|
||||||
(PLAN_MTEST_DONE, '军检完成')
|
(PLAN_MTEST_DONE, '军检完成')
|
||||||
)
|
)
|
||||||
number = models.CharField('编号', max_length=50, unique=True)
|
number = models.CharField('编号', max_length=50, unique=True)
|
||||||
order = models.ForeignKey(Order, verbose_name='关联订单', null=True, blank=True, on_delete=models.SET_NULL)
|
order = models.ForeignKey(Order, verbose_name='关联订单', null=True, blank=True, on_delete=models.SET_NULL, related_name='plan_order')
|
||||||
state = models.PositiveIntegerField('状态', choices=state_choices, default=PLAN_STATE_PLANING)
|
state = models.PositiveIntegerField('状态', choices=state_choices, default=PLAN_STATE_PLANING)
|
||||||
product = models.ForeignKey(Material, verbose_name='生产产品', on_delete=models.CASCADE)
|
product = models.ForeignKey(Material, verbose_name='生产产品', on_delete=models.CASCADE)
|
||||||
count = models.PositiveIntegerField('生产数量', default=1)
|
count = models.PositiveIntegerField('生产数量', default=1)
|
||||||
|
|
|
@ -6,10 +6,17 @@ from apps.sam.models import Order
|
||||||
class OrderFilterSet(filters.FilterSet):
|
class OrderFilterSet(filters.FilterSet):
|
||||||
create_time_start = filters.DateFilter(field_name="create_time", lookup_expr='gte')
|
create_time_start = filters.DateFilter(field_name="create_time", lookup_expr='gte')
|
||||||
create_time_end = filters.DateFilter(field_name="create_time", lookup_expr='lte')
|
create_time_end = filters.DateFilter(field_name="create_time", lookup_expr='lte')
|
||||||
|
material = filters.NumberFilter(method='filter_material')
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Order
|
model = Order
|
||||||
fields = ['product', 'contract', 'customer', 'create_time_start', 'create_time_end']
|
fields = ['product', 'contract', 'customer', 'create_time_start', 'create_time_end']
|
||||||
|
|
||||||
|
def filter_material(self, queryset, name, value):
|
||||||
|
"""
|
||||||
|
按物料筛选
|
||||||
|
"""
|
||||||
|
return queryset.filter(plan_order__subplan_plan__progress_subplan__material__id=value).distinct()
|
||||||
|
|
||||||
|
|
||||||
class ContractFilterSet(filters.FilterSet):
|
class ContractFilterSet(filters.FilterSet):
|
||||||
create_time_start = filters.DateFilter(field_name="create_time", lookup_expr='gte')
|
create_time_start = filters.DateFilter(field_name="create_time", lookup_expr='gte')
|
||||||
|
|
Loading…
Reference in New Issue