feat(生产日报):
1.新增生产日报前台逻辑
This commit is contained in:
parent
c0959c8b3e
commit
26566c3e3a
51
src/api/mes/prd/product-daily-report.js
Normal file
51
src/api/mes/prd/product-daily-report.js
Normal file
@ -0,0 +1,51 @@
|
||||
// 生产入库单申请-分页查询
|
||||
import request from "@/router/axios";
|
||||
import {iep} from "@/api/prefix";
|
||||
|
||||
|
||||
|
||||
// 搜索
|
||||
export function getObj(obj, params) {
|
||||
return request({
|
||||
url: iep('/z-product-daily-report/search'),
|
||||
method: 'post',
|
||||
data: obj,
|
||||
params: params
|
||||
})
|
||||
}
|
||||
|
||||
// 保存事件
|
||||
export function greatSaveOrUpdate(obj) {
|
||||
return request({
|
||||
url: iep('/z-product-daily-report/greatSaveOrUpdate'),
|
||||
method: 'post',
|
||||
data: obj
|
||||
})
|
||||
}
|
||||
|
||||
// 资源弹窗
|
||||
export function fetchResourceList(query) {
|
||||
return request({
|
||||
url: iep('/z-product-daily-report/findResource'),
|
||||
method: 'get',
|
||||
params:query
|
||||
})
|
||||
}
|
||||
// 工单弹窗
|
||||
export function fetchShopOrderList(query) {
|
||||
return request({
|
||||
url: iep('/z-product-daily-report/findShopOrder'),
|
||||
method: 'get',
|
||||
params:query
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
// 班次数据来源
|
||||
export function fetchUserWorkShiftList(query) {
|
||||
return request({
|
||||
url: iep('/user-work-shift/page'),
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
454
src/views/mes/prd/product-daily-report/index.vue
Normal file
454
src/views/mes/prd/product-daily-report/index.vue
Normal file
@ -0,0 +1,454 @@
|
||||
<template>
|
||||
<div class="execution">
|
||||
<!-- 资源弹出框 -->
|
||||
<input-multiple-select-checkbox-dialog
|
||||
:modal-obj="resrceDialogObj"
|
||||
:modal-fetch-fun="resrceDialogFetchFun"
|
||||
:modal-show.sync="resrceDialogVisible"
|
||||
@inputDialogSelected="resrceDialogSelected"
|
||||
></input-multiple-select-checkbox-dialog>
|
||||
|
||||
<!-- 工单号弹出框 -->
|
||||
<input-multiple-select-checkbox-dialog
|
||||
:modal-obj="shopOrderDialogObj"
|
||||
:modal-fetch-fun="shopOrderDialogFetchFun"
|
||||
:modal-show.sync="shopOrderDialogVisible"
|
||||
@inputDialogSelected="shopOrderDialogSelected"
|
||||
></input-multiple-select-checkbox-dialog>
|
||||
|
||||
<!-- 主页面 -->
|
||||
<basic-container>
|
||||
<el-form
|
||||
ref="form"
|
||||
:model="form"
|
||||
label-width="120px"
|
||||
label-suffix=":"
|
||||
:rules="rules"
|
||||
>
|
||||
<el-row :gutter="24">
|
||||
<!-- 生产日期 -->
|
||||
<el-col :span="12">
|
||||
<el-form-item label="生产日期" prop="timeRange">
|
||||
<el-date-picker
|
||||
v-model="form.timeRange"
|
||||
type="daterange"
|
||||
:picker-options="pickerOptions"
|
||||
range-separator="~"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
format="yyyy-MM-dd"
|
||||
valueFormat="yyyy-MM-dd"
|
||||
style="width: 100%"
|
||||
align="right">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<!-- 班次 -->
|
||||
<el-col :span="12">
|
||||
<el-form-item label="班次" prop="workShiftList">
|
||||
<el-select v-model="form.workShiftList" multiple clearable>
|
||||
<el-option
|
||||
v-for="item in userWorkShiftList"
|
||||
:key="item.userWorkShift"
|
||||
:label="item.description"
|
||||
:value="item.userWorkShift"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="24">
|
||||
<!-- 设备编码 -->
|
||||
<el-col :span="12">
|
||||
<el-form-item label="设备编码" prop="resrce">
|
||||
<el-input v-model="form.resrce" clearable>
|
||||
<i
|
||||
slot="suffix"
|
||||
class="el-input__icon el-icon-copy-document"
|
||||
@click.stop="showResrceDialog"
|
||||
></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<!-- 工单号 -->
|
||||
<el-col :span="12">
|
||||
<el-form-item label="工单号" prop="shopOrder">
|
||||
<el-input v-model="form.shopOrder" clearable >
|
||||
<i
|
||||
slot="suffix"
|
||||
class="el-input__icon el-icon-copy-document"
|
||||
@click.stop="showShopOrderDialog"
|
||||
></i>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row style="text-align: center; margin-bottom: 5px" :gutter="24">
|
||||
<el-col :span="24">
|
||||
<el-button type="primary" @click="doSearch">搜索</el-button>
|
||||
<el-button type="primary" @click="doSave">保存</el-button>
|
||||
<el-button type="primary" @click="doReset">清空</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="24">
|
||||
<el-col :span="24">
|
||||
<el-table
|
||||
ref="productDailyReportData"
|
||||
stripe
|
||||
:data="productDailyReportList"
|
||||
tooltip-effect="dark"
|
||||
height="calc(100vh - 480px)"
|
||||
style="width: 100%"
|
||||
:header-cell-style="{ 'text-align': 'center' }"
|
||||
:cell-style="{ 'text-align': 'center' }"
|
||||
@selection-change="handleSelectionChange">
|
||||
<el-table-column :reserve-selection="true" type="selection" width="45"/>
|
||||
<!-- 顺序 -->
|
||||
<el-table-column prop="seq" align="center" width="70" label="序号" />
|
||||
<el-table-column prop="productDate" label="日期" />
|
||||
<el-table-column prop="fabNo" label="车间" />
|
||||
<el-table-column prop="fabNoDesc" label="车间描述" />
|
||||
<el-table-column prop="userWorkShift" label="班次" />
|
||||
<el-table-column prop="workShiftDesc" label="班次描述" />
|
||||
<el-table-column prop="resrce" label="设备" />
|
||||
<el-table-column prop="resrceDesc" label="设备描述" />
|
||||
<el-table-column prop="shopOrder" label="工单号" />
|
||||
<el-table-column prop="productItem" label="物料号" />
|
||||
<el-table-column prop="productItemDesc" label="物料描述" />
|
||||
<el-table-column prop="productModel" label="产品型号" />
|
||||
<el-table-column prop="thickness" label="产品厚度" />
|
||||
<el-table-column prop="density" label="密度" header-align="center" width="120px">
|
||||
<template slot-scope="scope">
|
||||
<div>
|
||||
<el-input v-model="scope.row.density" type="number" clearable/>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="transitionFilmYield" label="过渡膜产量" header-align="center" width="120px">
|
||||
<template slot-scope="scope">
|
||||
<div>
|
||||
<el-input v-model="scope.row.transitionFilmYield" type="number" clearable/>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="rawMaterialUsage" label="过渡膜原料用量" header-align="center" width="120px">
|
||||
<template slot-scope="scope">
|
||||
<div>
|
||||
<el-input v-model="scope.row.rawMaterialUsage" type="number" clearable/>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="impactMaterial" label="冲击料" header-align="center" width="120px">
|
||||
<template slot-scope="scope">
|
||||
<div>
|
||||
<el-input v-model="scope.row.impactMaterial" type="number" clearable/>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="releaseFilmLength" label="管底离型膜长度" header-align="center" width="120px">
|
||||
<template slot-scope="scope">
|
||||
<div>
|
||||
<el-input v-model="scope.row.releaseFilmLength" type="number" clearable/>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="consumeItem" label="消耗物料编码" />
|
||||
<el-table-column prop="consumeItemDesc" label="消耗物料描述" />
|
||||
<el-table-column prop="consumeSumQty" label="消耗数量" />
|
||||
<el-table-column prop="particleSumQty" label="粒子总用量" />
|
||||
<el-table-column prop="consumeItemGroup" label="消耗物料的物料组" />
|
||||
<el-table-column prop="inspectionLevelDesc" label="质检状态" />
|
||||
<el-table-column prop="aplusSumQty" label="生产A+级品M" />
|
||||
<el-table-column prop="asumQty" label="生产A级品M" />
|
||||
<el-table-column prop="bsumQty" label="生产B级品M" />
|
||||
<el-table-column prop="productTotalQty" label="生产总米数" />
|
||||
<el-table-column prop="finishedWeight" label="成品重量" />
|
||||
<el-table-column prop="wasteMaterials" label="废边料" />
|
||||
<el-table-column prop="utilizationRate" label="班别原料利用率" />
|
||||
</el-table>
|
||||
<div style="width: 100%; display: flex; flex-direction: column; align-items: flex-end; justify-content: center">
|
||||
<el-pagination @current-change="handleCurrentChange"
|
||||
@size-change="handleSizeChange"
|
||||
:current-page.sync="page.current"
|
||||
:page-sizes="[20, 50, 100, 200]"
|
||||
:page-size="page.size"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="page.total">
|
||||
</el-pagination>
|
||||
</div>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
</el-form>
|
||||
</basic-container>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import {
|
||||
pickerOptions
|
||||
} from "@/views/mes/wip/product-storag-request/init";
|
||||
|
||||
import {
|
||||
getObj,
|
||||
greatSaveOrUpdate,
|
||||
fetchResourceList,
|
||||
fetchShopOrderList,
|
||||
fetchUserWorkShiftList
|
||||
} from "@/api/mes/prd/product-daily-report";
|
||||
import {isBlank} from "@/util/string";
|
||||
import { mapGetters } from 'vuex'
|
||||
import { getStore } from '@/util/store'
|
||||
import {hideLoading, showLoading} from '@/const/loading'
|
||||
import {setSeq} from "@/util/table";
|
||||
import {resrceDialogObj, shopOrderDialogObj} from "@/views/mes/prd/product-daily-report/init";
|
||||
import moment from "moment/moment";
|
||||
|
||||
export default {
|
||||
name: 'product-storag-request',
|
||||
mixins: [],
|
||||
components: {},
|
||||
data() {
|
||||
return {
|
||||
site: getStore({name: 'tenantId'}),
|
||||
username: getStore({name: 'userInfo'}).username,
|
||||
form: {},
|
||||
initData: {
|
||||
site: getStore({name: 'tenantId'}),
|
||||
timeRange: [moment(new Date()).format('YYYY-MM-DD'), moment(new Date()).format('YYYY-MM-DD')],
|
||||
userWorkShift: '',
|
||||
workShiftList:[],
|
||||
resrce: '',
|
||||
shopOrder: '',
|
||||
},
|
||||
userWorkShiftList:[],
|
||||
rules: {
|
||||
timeRange: [
|
||||
{
|
||||
required: true,
|
||||
message: '生产日期必填',
|
||||
trigger: ['blur', 'change'],
|
||||
},
|
||||
],
|
||||
},
|
||||
// 设备
|
||||
resrceDialogVisible: false,
|
||||
resrceDialogFetchFun: fetchResourceList,
|
||||
resrceDialogObj,
|
||||
|
||||
// 工单
|
||||
shopOrderDialogVisible: false,
|
||||
shopOrderDialogFetchFun: fetchShopOrderList,
|
||||
shopOrderDialogObj,
|
||||
|
||||
// 便捷时间范围选项
|
||||
pickerOptions,
|
||||
productDailyReportList:[],
|
||||
multipleSelection: [],
|
||||
titleText: '',
|
||||
selectedIndex: 0,
|
||||
page: {
|
||||
total: 0,
|
||||
current: 1,
|
||||
size: 20
|
||||
},
|
||||
}
|
||||
},
|
||||
created() {
|
||||
// 初始化数据
|
||||
this.form = Object.assign({}, this.initData);
|
||||
this.getUserWorkShiftList();
|
||||
},
|
||||
|
||||
mounted() {
|
||||
},
|
||||
computed: {
|
||||
...mapGetters(['permissions']),
|
||||
permissionList() {
|
||||
return {}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 获取班次
|
||||
getUserWorkShiftList() {
|
||||
fetchUserWorkShiftList(
|
||||
Object.assign(
|
||||
{
|
||||
current: '1',
|
||||
size: '1000',
|
||||
},
|
||||
)
|
||||
).then((res) => {
|
||||
this.userWorkShiftList = res.data.data.records
|
||||
})
|
||||
},
|
||||
//字符串不为空
|
||||
isNotBank(str) {
|
||||
return !isBlank(str);
|
||||
},
|
||||
|
||||
// 显示设备选择弹窗
|
||||
showResrceDialog() {
|
||||
this.resrceDialogVisible = true
|
||||
},
|
||||
|
||||
// 设备编号选取
|
||||
resrceDialogSelected(row) {
|
||||
let me = this
|
||||
let resourceStr = '';
|
||||
if (row.length > 0) {
|
||||
for (let i = 0; i < row.length; i++) {
|
||||
if (isBlank(resourceStr)) {
|
||||
resourceStr = row[i].RESRCE;
|
||||
} else {
|
||||
resourceStr = resourceStr + ';' + row[i].RESRCE;
|
||||
}
|
||||
}
|
||||
me.form.resrce = resourceStr;
|
||||
}
|
||||
},
|
||||
|
||||
// 显示工单选择弹窗
|
||||
showShopOrderDialog() {
|
||||
// 如果设备不为空,则根据设备查找派工表中对应的工单
|
||||
if (this.isNotBank(this.form.resrce)) {
|
||||
// 工单号不可为空
|
||||
this.shopOrderDialogObj.queryParam.resrce = this.form.resrce;
|
||||
}
|
||||
this.shopOrderDialogVisible = true;
|
||||
},
|
||||
|
||||
// 工单号选取
|
||||
shopOrderDialogSelected(row) {
|
||||
let me = this
|
||||
let shopOrderStr = '';
|
||||
if (row.length > 0) {
|
||||
for (let i = 0; i < row.length; i++) {
|
||||
if (isBlank(shopOrderStr)) {
|
||||
shopOrderStr = row[i].SHOP_ORDER;
|
||||
} else {
|
||||
shopOrderStr = shopOrderStr + ';' + row[i].SHOP_ORDER;
|
||||
}
|
||||
}
|
||||
me.form.shopOrder = shopOrderStr;
|
||||
}
|
||||
},
|
||||
|
||||
// 保存
|
||||
doSave() {
|
||||
let me = this;
|
||||
let list = me.$refs.productDailyReportData.selection
|
||||
if (list.length === 0) {
|
||||
return this.$message.warning('请选择需要保存的数据')
|
||||
}
|
||||
|
||||
let param = {
|
||||
list: list,
|
||||
};
|
||||
|
||||
showLoading();
|
||||
greatSaveOrUpdate(param).then(response => {
|
||||
hideLoading();
|
||||
if (response.data.code != 0) {
|
||||
return me.$message.error(response.data.msg);
|
||||
}
|
||||
me.form.documentNo = response.data.data;
|
||||
me.doSearch();
|
||||
me.$message.success('保存成功');
|
||||
me.$refs.productDailyReportData.clearSelection();
|
||||
}).catch(e => {
|
||||
console.log(e);
|
||||
hideLoading();
|
||||
});
|
||||
},
|
||||
|
||||
// 搜索事件
|
||||
doSearch(flag) {
|
||||
let me = this;
|
||||
let timeRange = me.form.timeRange;
|
||||
|
||||
let startTime = "";
|
||||
let endTime = "";
|
||||
if(!timeRange || timeRange == null) {
|
||||
// 生产日期不可为空
|
||||
return this.$message.error('生产日期' + this.$t('mes.wms.messages.doNotEmpty'))
|
||||
} else {
|
||||
startTime = timeRange[0];
|
||||
endTime = timeRange[1];
|
||||
}
|
||||
|
||||
let param = {
|
||||
"site": me.site,
|
||||
"startTime": startTime,
|
||||
"endTime": endTime,
|
||||
"workShiftList": me.form.workShiftList,
|
||||
"resrce": me.form.resrce,
|
||||
"shopOrder": me.form.shopOrder,
|
||||
};
|
||||
me.$refs.productDailyReportData.clearSelection();
|
||||
me.productDailyReportList = [];
|
||||
|
||||
showLoading();
|
||||
getObj(param,me.page).then(res => {
|
||||
hideLoading();
|
||||
if (res.data.code !== 0) {
|
||||
return me.$message.error(res.data.msg);
|
||||
}
|
||||
if(res.data.data.records.length === 0) {
|
||||
if (flag === 'delete') {
|
||||
me.form.documentNo = "";
|
||||
} else {
|
||||
return me.$message.error("查询无数据");
|
||||
}
|
||||
}
|
||||
me.productDailyReportList = res.data.data.records;
|
||||
// me.form.notes = res.data.data.records[0].masterNotes;
|
||||
me.page.total = res.data.data.total;
|
||||
me.page.current = res.data.data.current;
|
||||
setSeq(this.productDailyReportList, 'seq')
|
||||
}).catch(() => {
|
||||
hideLoading();
|
||||
})
|
||||
},
|
||||
|
||||
// // 导出excel
|
||||
// doExcel() {
|
||||
// this.downBlobFile(mom_wms('/z-storag-request/exportData'), this.form, '生产入库单.xlsx');
|
||||
// this.$refs.productDailyReportData.clearSelection();
|
||||
// },
|
||||
//表格多选
|
||||
handleSelectionChange(val) {
|
||||
this.multipleSelection = val;
|
||||
},
|
||||
// 清空
|
||||
doReset() {
|
||||
this.form = Object.assign({}, this.initData);
|
||||
this.page = {
|
||||
total: 0,
|
||||
current: 1,
|
||||
size: 20
|
||||
};
|
||||
this.$refs.productDailyReportData.clearSelection();
|
||||
this.multipleSelection = [];
|
||||
// 清空列表信息
|
||||
this.productDailyReportList = [];
|
||||
},
|
||||
|
||||
handleSizeChange(val) {
|
||||
let me = this
|
||||
me.page.size = val
|
||||
me.doSearch()
|
||||
},
|
||||
handleCurrentChange(val) {
|
||||
let me = this
|
||||
me.page.current = val
|
||||
me.doSearch()
|
||||
},
|
||||
|
||||
},
|
||||
}
|
||||
</script>
|
||||
22
src/views/mes/prd/product-daily-report/init.js
Normal file
22
src/views/mes/prd/product-daily-report/init.js
Normal file
@ -0,0 +1,22 @@
|
||||
// 设备
|
||||
export const resrceDialogObj = {
|
||||
title: '设备选择',
|
||||
"condition": "searchText",
|
||||
tableColumn: [
|
||||
{prop: 'RESRCE', label: '设备编码'},
|
||||
{prop: 'RESRCE_DESC', label: '设备描述'},
|
||||
],
|
||||
// 查询参数
|
||||
queryParam: {}
|
||||
}
|
||||
|
||||
// 工单
|
||||
export const shopOrderDialogObj = {
|
||||
title: '工单选择',
|
||||
condition: "searchText",
|
||||
tableColumn: [
|
||||
{prop: 'SHOP_ORDER', label: '工单号'},
|
||||
],
|
||||
// 查询参数
|
||||
queryParam: {}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user