Browse Source

Merge branch 'dev_web' into dev_web_online

dev_web_online 1.23.0823
安虹睿 2 years ago
parent
commit
d8a0a19c33
  1. 2
      fe/PC/public/version.json
  2. 29
      fe/PC/src/api/wms-api.js
  3. 2
      fe/PC/src/api/wms-job.js
  4. 4
      fe/PC/src/components/commonTabel-drawer/index.vue
  5. 1
      fe/PC/src/components/currenForm/index.vue
  6. 3
      fe/PC/src/components/currenTable/index.vue
  7. 45
      fe/PC/src/components/pdf/index.vue
  8. 41
      fe/PC/src/components/umyTable/index.vue
  9. 17
      fe/PC/src/router/index.js
  10. 1
      fe/PC/src/utils/request.js
  11. 2
      fe/PC/src/utils/summaryTableColumns/index.js
  12. 2
      fe/PC/src/utils/tableColumns/index.js
  13. 5
      fe/PC/src/views/activeReportManage/reportForm/InventoryBookDetail.vue
  14. 596
      fe/PC/src/views/activeReportManage/reportForm/InventoryBookDetail_innerPage.vue
  15. 96
      fe/PC/src/views/rawMaterialManage/quality/InspectRequest.vue

2
fe/PC/public/version.json

@ -1,3 +1,3 @@
{ {
"version": "1.0.66" "version": "1.0.70"
} }

29
fe/PC/src/api/wms-api.js

@ -584,6 +584,35 @@ export function getListPageSafety(data, url) {
}) })
} }
// 库存流水帐明细 报表页面
export function getInventoryTransactionSerials(data,params) {
return request({
url: baseURL + 'wms/inventory/inventory-transaction/item-serial-list',
method: 'post',
data:data,
params:params
})
}
// 库存流水帐明细 获取账期
export function getInterfaceCalendar(data) {
return request({
url: baseURL + 'basedata/interface-calendar/list',
method: 'post',
data:data
})
}
// 获取文件
export function getFilestore(data) {
return request({
url: baseURL + 'filestore/file',
method: 'get',
params:data
})
}
// 根据编号获取字典信息 // 根据编号获取字典信息
// export function getDictByCode(code) { // export function getDictByCode(code) {
// return request({ // return request({

2
fe/PC/src/api/wms-job.js

@ -201,7 +201,7 @@ export function completeSummaryDetailStatus(params, data) {
return request({ return request({
url: baseURL + 'wms/store/inspect-job/complete-summary-detail-status/' + params.id, url: baseURL + 'wms/store/inspect-job/complete-summary-detail-status/' + params.id,
method: 'post', method: 'post',
params: params, params: {summaryDetailId:params.summaryDetailId},
data data
}) })
} }

4
fe/PC/src/components/commonTabel-drawer/index.vue

@ -377,8 +377,8 @@ export default {
alertoldSkipCountDetails (val) { alertoldSkipCountDetails (val) {
this.$emit('alertoldSkipCountDetails', val) this.$emit('alertoldSkipCountDetails', val)
}, },
buttonClick(row) { buttonClick(row, index, label,item) {
this.$emit("buttonClick", row); this.$emit("buttonClick", row, index, label,item);
}, },
// tabs // tabs
handleClick (val) { handleClick (val) {

1
fe/PC/src/components/currenForm/index.vue

@ -811,6 +811,7 @@ export default {
} else { } else {
this.searchData[item.prop].push(val); this.searchData[item.prop].push(val);
} }
this.$emit('changeUpload',val,item)
}, },
uploadListView() { uploadListView() {
this.$emit('uploadListView') this.$emit('uploadListView')

3
fe/PC/src/components/currenTable/index.vue

@ -242,8 +242,9 @@
</el-form-item> </el-form-item>
<!-- table表添加按钮事件 v-show="scope.row.number == 'PRJ202210060001'" --> <!-- table表添加按钮事件 v-show="scope.row.number == 'PRJ202210060001'" -->
<el-form-item v-if="item.type == 'button'" > <el-form-item v-if="item.type == 'button'" >
<!-- v-show="scope.row[item.prop]==undefined?true:false" -->
<el-button <el-button
v-show="scope.row[item.prop]==undefined?true:false" v-show="item.alwaysShow ? true : ((scope.row[item.prop]==undefined || scope.row[item.prop] == '' || !scope.row[item.prop])?false:true)"
type="primary" type="primary"
size="mini" size="mini"
@click="buttonClick(scope.row, scope.$index, item.label)" @click="buttonClick(scope.row, scope.$index, item.label)"

45
fe/PC/src/components/pdf/index.vue

@ -1,13 +1,14 @@
<template> <template>
<el-dialog <el-dialog
:title="title" :title="title"
:v-loading="loadingPDF" :visible="isShowPDF"
:visible.sync="isShowPDF" :modal-append-to-body="true"
:modal-append-to-body="false"
:append-to-body="true" :append-to-body="true"
:close-on-click-modal="true"
@close="close"
top="1vh" top="1vh"
> >
<div> <div v-loading="loadingPDF">
<el-button-group> <el-button-group>
<el-button type="primary" icon="el-icon-arrow-left" size="mini" @click="prePage">上一页</el-button> <el-button type="primary" icon="el-icon-arrow-left" size="mini" @click="prePage">上一页</el-button>
<el-button type="primary" size="mini" @click="nextPage">下一页<i class="el-icon-arrow-right el-icon--right"></i></el-button> <el-button type="primary" size="mini" @click="nextPage">下一页<i class="el-icon-arrow-right el-icon--right"></i></el-button>
@ -21,6 +22,7 @@
></pdf> ></pdf>
</div> </div>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer">
<el-button v-if="showDownLoad && !loadingPDF" type="success" @click="downLoad"> </el-button>
<el-button @click="close"> </el-button> <el-button @click="close"> </el-button>
</span> </span>
</el-dialog> </el-dialog>
@ -43,14 +45,25 @@ export default {
} }
}, },
props: { props: {
// data:application/pdf;base64,
urlPDF: { urlPDF: {
type: String, type: String,
default: '', default: '',
}, },
// base64data:application/pdf;base64,
base64PDF:{
type: String,
default: '',
},
title: { title: {
type: String, type: String,
default: '', default: '',
}, },
//
showDownLoad: {
type: Boolean,
default: false
},
isShowPDF: { isShowPDF: {
type: Boolean, type: Boolean,
default: false default: false
@ -75,6 +88,30 @@ export default {
}, },
close(){ close(){
this.$emit('closePDF') this.$emit('closePDF')
},
// base64
base64ToArrayBuffer (base64) {
var binaryString = window.atob(base64)
var binaryLen = binaryString.length
var bytes = new Uint8Array(binaryLen)
for (var i = 0; i < binaryLen; i++) {
var ascii = binaryString.charCodeAt(i)
bytes[i] = ascii
}
return bytes
},
downLoad(){
console.log(this.base64PDF)
let byte = this.base64ToArrayBuffer(this.base64PDF)
const link = document.createElement('a') // a
const blob = new Blob([byte], {
type: 'application/vnd.ms-excel;charset=utf-8',
}) // response
const objectUrl = URL.createObjectURL(blob)
link.href = objectUrl
link.download = this.title
link.click() //
URL.revokeObjectURL(objectUrl)
} }
} }
} }

41
fe/PC/src/components/umyTable/index.vue

@ -2,21 +2,22 @@
<!-- 解决el-table 数据量过大导致卡顿现象 --> <!-- 解决el-table 数据量过大导致卡顿现象 -->
<u-table <u-table
:id="_uid" :id="_uid"
:key="isUpdate"
v-loading="tableLoading" v-loading="tableLoading"
element-loading-text="拼命加载中..." element-loading-text="拼命加载中..."
@sort-change="sortChange" @sort-change="sortChange"
@selection-change="handleSelectionChange" @selection-change="handleSelectionChange"
ref="multipleTable" ref="multipleTable"
:data="tableData" :data="tableData"
:height="uTableHeight"
:row-key="rowKey" :row-key="rowKey"
:border="tableBorder" :border="tableBorder"
style="width: 100%" style="width: 100%"
:cell-style="cellStyle" :cell-style="cellStyle"
use-virtual :key="isUpdate"
:row-height="50" :row-height="50"
:height="uTableHeight"
header-row-class-name="uTableHeader" header-row-class-name="uTableHeader"
use-virtual
:cell-class-name="cellClassName"
> >
<!-- :tree-props="treeProps" height 不能共存 此组件暂不支持tree的格式--> <!-- :tree-props="treeProps" height 不能共存 此组件暂不支持tree的格式-->
<u-table-column v-if="selectionTable" fixed="left" type="selection" :reserve-selection="true" /> <u-table-column v-if="selectionTable" fixed="left" type="selection" :reserve-selection="true" />
@ -29,8 +30,8 @@
:fixed="setItemFixed(item,index)" :fixed="setItemFixed(item,index)"
:show-overflow-tooltip="showOverflowTooltip" :show-overflow-tooltip="showOverflowTooltip"
:width="item.width" :width="item.width"
:align="item.tableAlign" :align="item.tableAlign || tableAlign"
:header-align="item.tableHeaderAlign" :header-align="item.tableHeaderAlign || tableHeaderAlign"
v-if="item.istrue==null?true:item.istrue" v-if="item.istrue==null?true:item.istrue"
> >
<template #header> <template #header>
@ -248,13 +249,14 @@
</el-form-item> </el-form-item>
<!-- table表添加按钮事件 v-show="scope.row.number == 'PRJ202210060001'" --> <!-- table表添加按钮事件 v-show="scope.row.number == 'PRJ202210060001'" -->
<!-- <el-form-item v-if="item.type == 'button'" > --> <!-- <el-form-item v-if="item.type == 'button'" > -->
<!-- v-show="scope.row[item.prop]==undefined?true:false" -->
<div v-if="item.type == 'button'"> <div v-if="item.type == 'button'">
<el-button <el-button
v-show="scope.row[item.prop]==undefined?true:false" v-show="item.alwaysShow ? true : ((scope.row[item.prop]==undefined || scope.row[item.prop] == '' || !scope.row[item.prop])?false:true)"
type="primary" type="primary"
size="mini" size="mini"
@click="buttonClick(scope.row, scope.$index, item.label)" @click="buttonClick(scope.row, scope.$index, item.label,item)"
>{{item.label}}</el-button> >{{item.buttonName || item.label}}</el-button>
</div> </div>
<!-- </el-form-item> --> <!-- </el-form-item> -->
@ -415,6 +417,14 @@ export default {
type: Boolean, type: Boolean,
default: false, default: false,
}, },
tableAlign:{
type: String,
default: 'left',
},
tableHeaderAlign:{
type: String,
default: 'left',
},
// itemfixed // itemfixed
firstFixed: { firstFixed: {
type: Boolean, type: Boolean,
@ -483,6 +493,12 @@ export default {
return Function; return Function;
} }
}, },
cellClassName: {
type: Function,
default: () => {
return Function;
}
},
// app-main100% // app-main100%
setUTableHeight: { setUTableHeight: {
type: Number, type: Number,
@ -815,8 +831,8 @@ export default {
this.$emit("showJsonTable", row); this.$emit("showJsonTable", row);
}, },
// //
buttonClick(row, index, label) { buttonClick(row, index, label,item) {
this.$emit("buttonClick", row, index, label); this.$emit("buttonClick", row, index, label,item);
}, },
//table //table
buttonOperationClick(row, label) { buttonOperationClick(row, label) {
@ -897,4 +913,9 @@ span {
.u-table::before { .u-table::before {
height: 0px; height: 0px;
} }
.u-table{
td{
height: 50px;
}
}
</style> </style>

17
fe/PC/src/router/index.js

@ -119,6 +119,11 @@ export const constantRoutes = [
} }
}] }]
}, },
{
path: '/InventoryBookDetail_innerPage',
component: () => import('@/views/activeReportManage/reportForm/InventoryBookDetail_innerPage'),
hidden: true
},
// { // {
// path: '/', // path: '/',
// component: Layout, // component: Layout,
@ -140,15 +145,15 @@ export const constantRoutes = [
// { // {
// path: '/', // path: '/',
// component: Layout, // component: Layout,
// redirect: '/TestSchool', // redirect: '/ceshi',
// hidden: true, // hidden: true,
// children: [{ // children: [{
// path: 'TestSchool', // path: 'ceshi',
// component: () => import('@/views/interfaceBoard/TestSchool.vue'), // component: () => import('@/views/ceshi/ceshi.vue'),
// name: 'TestSchool', // name: 'ceshi',
// meta: { // meta: {
// title: 'TestSchool', // title: 'ceshi',
// icon: '拆分记录', // icon: '',
// } // }
// }] // }]
// }, // },

1
fe/PC/src/utils/request.js

@ -56,7 +56,6 @@ service.interceptors.response.use(
* You can also judge the status by HTTP Status Code * You can also judge the status by HTTP Status Code
*/ */
response => { response => {
const res = response.data const res = response.data
if(response.headers['content-disposition']){ if(response.headers['content-disposition']){
res.disposition = response.headers['content-disposition'] res.disposition = response.headers['content-disposition']

2
fe/PC/src/utils/summaryTableColumns/index.js

@ -35,7 +35,7 @@ export const InspectRequest = [
{ label: "样品率", prop: 'samplePercent' }, { label: "样品率", prop: 'samplePercent' },
{ label: "破坏数量", prop: 'crackQty' }, { label: "破坏数量", prop: 'crackQty' },
{ label: "最终不合格数量", prop: 'notPassedQty' }, { label: "最终不合格数量", prop: 'notPassedQty' },
{ label: "检验报告", prop: 'inspectReport' }, { label: "检验报告", fixed: "right",prop: 'inspectReport',type:'button',buttonName:'查看报告' },
{ label: "事务ID", prop: "tenantId" }, { label: "事务ID", prop: "tenantId" },
{ label: "检验类型", prop: "inspectType", type: "filter", filters: "inspectType" }, { label: "检验类型", prop: "inspectType", type: "filter", filters: "inspectType" },
{ label: "不合格原因代码", prop: 'failedReason' }, { label: "不合格原因代码", prop: 'failedReason' },

2
fe/PC/src/utils/tableColumns/index.js

@ -1261,7 +1261,7 @@ export const unqualifiedInfo = [
{ label: "质量缺陷", prop: "massDefect" }, { label: "质量缺陷", prop: "massDefect" },
{ label: "到货日期", prop: "arriveDate",type: "dateTime" }, { label: "到货日期", prop: "arriveDate",type: "dateTime" },
{ label: "过期时间", prop: "expireDate",type: "dateTime" }, { label: "过期时间", prop: "expireDate",type: "dateTime" },
{ label:"查看照片",type:"button", fixed: "right",tableAlign:"center",tableHeaderAlign:"center" }, { label:"查看照片",prop: 'inspectPhotoJson',type:"button", fixed: "right",tableAlign:"center",tableHeaderAlign:"center" },
{ label: "创建时间", prop: "creationTime",type: "dateTime" }, { label: "创建时间", prop: "creationTime",type: "dateTime" },
{ label: "上次修改时间", prop: 'lastModificationTime', type: "dateTime" }, { label: "上次修改时间", prop: 'lastModificationTime', type: "dateTime" },
{ label: "订单号", prop: "poNumber" }, { label: "订单号", prop: "poNumber" },

5
fe/PC/src/views/activeReportManage/reportForm/InventoryBookDetail.vue

@ -14,7 +14,10 @@ export default {
}, },
methods:{ methods:{
openHandle(){ openHandle(){
createNewTabs(reportsAddress.InventoryBookDetail + '?title=' + this.$route.meta.title) let _url = window.location.href.slice(0,window.location.href.indexOf('/#/'))
let _page = _url + '/#/InventoryBookDetail_innerPage?title=' + this.$route.meta.title
createNewTabs(_page)
// createNewTabs(reportsAddress.InventoryBookDetail + '?title=' + this.$route.meta.title)
} }
} }
} }

596
fe/PC/src/views/activeReportManage/reportForm/InventoryBookDetail_innerPage.vue

@ -0,0 +1,596 @@
<template>
<div class="InventoryBookDetail_innerPage" v-loading="loading">
<!-- 搜索 -->
<el-form ref="searchForm" :inline="true" :rules="formRule" :model="searchForm" size="small" class="searchHeader">
<el-form-item label="ERP储位" prop="erpLocatioCode">
<el-input v-model="searchForm.erpLocatioCode" placeholder="请输入ERP储位"></el-input>
</el-form-item>
<el-form-item label="零件" prop="itemCode">
<el-input v-model="searchForm.itemCode" placeholder="请输入零件"></el-input>
</el-form-item>
<el-form-item label="账期" prop="interfaceCalendar">
<el-select
:loading="calendarLoading"
@change="calendarChange"
v-model="searchForm.interfaceCalendar"
placeholder="请选择账期"
>
<el-option
v-for="item in calendarList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="开始时间" prop="beginDate">
<el-date-picker
@change="timeChange"
value-format="yyyy-MM-dd"
v-model="searchForm.beginDate"
type="date"
placeholder="选择日期">
</el-date-picker>
</el-form-item>
<el-form-item label="结束时间" prop="endDate">
<el-date-picker
@change="timeChange"
value-format="yyyy-MM-dd"
v-model="searchForm.endDate"
type="date"
placeholder="选择日期">
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="searchHandle">查询</el-button>
</el-form-item>
</el-form>
<!-- table -->
<div class="tableContent" v-if="tableData">
<ul class="tableHeader">
<li>{{tableHeader.companyName}}</li>
<li><span class="tableName">库存流水帐 (料品)</span></li>
<li class="timeLi">
<div class="item">交易年月: {{ getYearMonth(tableHeader.beginDate) }} - {{ getYearMonth(tableHeader.endDate) }}</div>
<div class="item">制表日期{{ getNow() }}</div>
</li>
</ul>
<el-table
:data="tableData"
class="tableEl"
height="calc(100vh - 180px)"
:span-method="verticalMergeCell"
:row-class-name="tableRowClass"
>
<!-- <el-table-column type="index" label="序号"></el-table-column> -->
<el-table-column
v-for="(item,key) in tableTh"
:prop="item.prop"
:label="item.label"
:align="item.prop.toLowerCase().indexOf('qty') >= 0 ? 'right' : 'left'"
:width="item.width"
>
<template slot-scope="scope">
<div v-if="scope.row.total_erp || scope.row.total_erp2 || scope.row.total_item">
<div v-if="scope.row.total_erp2">
<span v-if="totalProps[0] == item.prop" style="color: blue;font-weight:bold">库位小计</span>
<span v-if="totalProps.indexOf(item.prop) >= 0">{{scope.row.total_erp2[item.prop]}}</span>
</div>
<div v-if="scope.row.total_erp">
<span v-if="totalProps[0] == item.prop" style="color: #ff6000;font-weight:bold">储位小计</span>
<span v-if="totalProps.indexOf(item.prop) >= 0">{{scope.row.total_erp[item.prop]}}</span>
</div>
<div v-if="scope.row.total_item">
<span v-if="totalProps[0] == item.prop" style="color: #24b924;font-weight:bold">物料小计</span>
<span v-if="totalProps.indexOf(item.prop) >= 0">{{scope.row.total_item[item.prop]}}</span>
</div>
</div>
<div v-else>
<div v-if="item.prop == 'itemCode'">
<div>物料代码:<br/>{{ scope.row.level1[item.prop] }}</div>
<br/>
<div>物料名称:<br/>{{ scope.row.level1.itemName }}</div>
<br/>
<div>物料描述1:<br/>{{ scope.row.level1.itemDesc1 }}</div>
<br/>
<div v-if="scope.row.level1.configuration">配置码:<br/>{{ scope.row.level1.configuration }}</div>
</div>
<div v-else-if="item.prop == 'erpLocatioCode'">{{ scope.row.level2[item.prop] }}</div>
<div v-else>
<div v-if="scope.row.level4">
<div v-if="item.prop == 'sumInQty'">{{ scope.row.level4.inQty }}</div>
<div v-else-if="item.prop == 'sumOutQty'">{{ scope.row.level4.outQty }}</div>
<div v-else-if="item.prop == 'createDateTime'">{{ formatTime(scope.row.level4.createDateTime) }}</div>
<div v-else-if="item.prop == 'locationCode'">{{ scope.row.level4.locatioCode }}</div>
<div v-else-if="item.prop == 'interFaceName'">{{getInterFaceName(scope.row.level4)}}</div>
<div v-else-if="item.prop == 'enumTransType' || item.prop == 'enumTransSubType'">{{ scope.row.level4[item.prop] | trigger(item.option, "label") }}</div>
<div v-else>{{ scope.row.level4[item.prop] }}</div>
</div>
<div v-else>{{ scope.row.level3[item.prop] }}</div>
</div>
</div>
</template>
</el-table-column>
</el-table>
</div>
</div>
</template>
<script>
import { getInventoryTransactionSerials,getInterfaceCalendar } from '@/api/wms-api'
import { formatTimeStampToNorm,formatTimeStrToStr } from '@/utils/formatTime'
export default {
name:"InventoryBookDetail_innerPage",
data(){
return{
loading:false,//
calendarLoading:false,//
tableData:null,//table
calendarList:[],//
//
searchForm:{
interfaceCalendar:null,
erpLocatioCode:null,
itemCode:null,//VW316C1A028A,UTT06PP5483
beginDate: '',//2021-10-01
endDate: '',//2023-11-28T23:59:59
},
//
formRule: {
beginDate: [{ required: true, trigger: ['blur','change'], message: "不可为空" }],
endDate: [{ required: true, trigger: ['blur','change'], message: "不可为空" }],
// itemCode: [{ required: true, trigger: "blur", message: "" }],
},
// table
tableHeader:{
beginDate: '',
endDate: '',
companyName:localStorage.getItem('companyName')
},
// table
tableTh:[
{label:'物料信息',prop:'itemCode',width:180},
{label:'ERP储位',prop:'erpLocatioCode',width:80},
{label:'库位代码',prop:'locationCode',width:90},
{label:'单号',prop:'number',width:170},
{label:'创建时间',prop:'createDateTime',width:160},
{label:'业务编号',prop:'docNumber',width:140},
{label:'业务主类型',prop:'enumTransType',type:'filter',option:'TransTypeBase'},
{label:'业务子类型',prop:'enumTransSubType',type:'filter',option:'transSubType'},
{label:'对应接口',prop:'interFaceName',width:220},
{label:'期初库存',prop:'firstQty'},
{label:'入库',prop:'sumInQty'},
{label:'出库',prop:'sumOutQty'},
{label:'结存',prop:'nowQty'},
{label:'期末库存',prop:'lastQty'},
],
totalProps:['firstQty','lastQty','nowQty','sumInQty','sumOutQty'],//
indexArray_item: [], //itemCode
indexArray_erp: [], //erpLocatioCode
indexArray_erp2: [], //locationCode
}
},
mounted () {
this.getInterfaceCalendarList()
},
methods:{
//
formatTime(data){
// return data.slice(0,scope.row.level4.createDateTime.indexOf('T')
return formatTimeStrToStr(data)
},
//
getInterfaceCalendarList(){
this.calendarLoading = true
let _data = {
condition: {
filters: []
},
Sorting: "code DESC",
SkipCount: 0,
MaxResultCount: 1000
}
getInterfaceCalendar(_data).then(res => {
this.calendarList=res.items
this.calendarLoading = false
}).catch(err => {
this.calendarLoading = false
})
},
//
calendarChange(id){
let _item = this.calendarList.filter(item=>{
return item.id == id
})[0]
this.searchForm.beginDate = _item.beginTime
this.searchForm.endDate = _item.endTime
},
//
timeChange(data){
if(data){
this.searchForm.interfaceCalendar = ""
}
},
//
searchHandle(){
this.$refs.searchForm.validate((valid) => {
if (valid) {
this.getTableData()
} else {
return false;
}
});
},
//
getYearMonth(date){
return date.replaceAll('-',"").slice(0,8)
},
//
getNow(){
return formatTimeStampToNorm(new Date(),'date')
},
//
initTableData(res){
let _list = []
res.forEach(item1 => {
item1.reportErpLocationSerialDtos.forEach((item2,index2) => {
item2.reportLocationSerialDtos.forEach((item3,index3)=>{
//
if(item3.reportTransactionSerialDtos && item3.reportTransactionSerialDtos.length > 0){
item3.reportTransactionSerialDtos.forEach((item4,index4)=>{
let _item = {
level1:item1,
level2:item2,
level3:item3,
level4:item4,
}
_list.push(_item)
//
if(index4 == item3.reportTransactionSerialDtos.length - 1){
_list.push({
level1:item1,
level2:item2,
level3:item3,
level4:item4,
total_erp2:item3
})
}
})
}else{
let _item = {
level1:item1,
level2:item2,
level3:item3,
}
_list.push(_item)
//
// if(index3 == item2.reportLocationSerialDtos.length - 1){
_list.push({
level1:item1,
level2:item2,
level3:item3,
total_erp2:item3
})
// }
}
//
if(index3 == item2.reportLocationSerialDtos.length - 1){
_list.push({
level1:item1,
level2:item2,
// level3:item3,
level3:{locationCode:null},
total_erp:item2,
})
}
})
//
if(index2 == item1.reportErpLocationSerialDtos.length - 1){
_list.push({
level1:item1,
// level2:item2,
// level3:{locationCode:null},
level2:{erpLocatioCode:null},
level3:{locationCode:item2.erpLocatioCode},//locationCode
total_item:item1,
})
}
})
});
return _list
},
// (T23:59:59)
initEndTime(data){
let _time = ""
if(data.indexOf('T') >= 0){
_time = data.slice(0,data.indexOf('T')) + 'T23:59:59'
}else{
_time = data + 'T23:59:59'
}
return _time
},
//
getTableData(){
this.loading = true
let _itemCodes = this.searchForm.itemCode ? this.searchForm.itemCode.split(',') : []
getInventoryTransactionSerials(
_itemCodes,{
startDateTime:this.searchForm.beginDate,
endDateTime:this.initEndTime(this.searchForm.endDate),
erpLocatioCode:this.searchForm.erpLocatioCode,
}).then(res => {
this.tableData = null
this.tableHeader.beginDate = this.searchForm.beginDate
this.tableHeader.endDate = this.searchForm.endDate
this.$nextTick(() => {
this.tableData = this.initTableData(res)
this.getIndexArr()
this.loading = false
})
}).catch(err => {
this.loading = false
})
},
// class
tableRowClass(data){
if(data.row.total_erp2){
return "totalRow"
}
if(data.row.total_erp){
return "totalRow-red"
}
if(data.row.total_item){
return "totalRow-green"
}
},
//
getIndexArr(){
// itemCode
let count_item = 0
for (let rowIndex = 0; rowIndex < this.tableData.length; ) {
this.indexArray_item.push(rowIndex)
count_item = this.getRows(rowIndex, this.tableData[rowIndex].level1.itemCode,'itemCode','level1')
rowIndex += count_item
}
// erpLocatioCode
let count_erp = 0
for (let rowIndex = 0; rowIndex < this.tableData.length; ) {
this.indexArray_erp.push(rowIndex)
count_erp = this.getRows(rowIndex, this.tableData[rowIndex].level2.erpLocatioCode,'erpLocatioCode','level2')
rowIndex += count_erp
}
// locationCode
let count_erp2 = 0
for (let rowIndex = 0; rowIndex < this.tableData.length; ) {
this.indexArray_erp2.push(rowIndex)
count_erp2 = this.getRows(rowIndex, this.tableData[rowIndex].level3.locationCode,'locationCode','level3')
rowIndex += count_erp2
}
},
//
getRows(rowIndex, name,prop,level) {
let count = 0
for (let i = rowIndex; i < this.tableData.length; i++) {
if (this.tableData[i][level][prop] == name) {
count++
} else {
break
}
}
return count
},
//
verticalMergeCell({ row, column, rowIndex, columnIndex }) {
// itemCode
if (columnIndex == 0) {
let rowCount = 0
if (this.indexArray_item.includes(rowIndex)) {
rowCount = this.getRows(rowIndex, row.level1.itemCode, 'itemCode','level1')
return {
rowspan: rowCount,
colspan: 1
}
} else {
return {
rowspan: 0,
colspan: 0
}
}
}
// erpLocatioCode
if (columnIndex == 1) {
let rowCount = 0
if (this.indexArray_erp.includes(rowIndex)) {
rowCount = this.getRows(rowIndex, this.tableData[rowIndex].level2.erpLocatioCode,'erpLocatioCode','level2')
return {
rowspan: rowCount,
colspan: 1
}
} else {
return {
rowspan: 0,
colspan: 0
}
}
}
// locationCode
if (columnIndex == 2) {
let rowCount = 0
if (this.indexArray_erp2.includes(rowIndex)) {
rowCount = this.getRows(rowIndex, this.tableData[rowIndex].level3.locationCode,'locationCode','level3')
return {
rowspan: rowCount,
colspan: 1
}
} else {
return {
rowspan: 0,
colspan: 0
}
}
}
},
//
getInterFaceName(item){
let _str = ""
if (item.enumTransType == 11) {
_str = '【TYRP】-【采购单】'
} else if (item.enumTransType == 12) {
_str = '【TYRP】-【采购退货单】*【EOS】-【退货单】'
} else if (item.enumTransType == 14 && item.enumTransSubType == 4401) {
_str = '【TYRP】-【验收单】*【EOS】-【验收单】'
} else if (item.enumTransType == 14 && item.enumTransSubType == 4401) {
_str = '【TYRP】-【储位、线边仓调拨单 和 客户储位调拨单】'
} else if (item.enumTransType == 15 && item.enumTransSubType == 1505) {
_str = '【TYRP】-【线边仓领料单】*【MES】-【发料单】'
} else if (item.enumTransType == 15 && item.enumTransSubType == 1501) {
_str = '【TYRP】-【线边仓领料单】*【MES】-【发料单】'
} else if (item.enumTransType == 16) {
_str = '【TYRP】-【线边仓退料单】'
} else if (item.enumTransType == 31 && item.enumTransSubType == 3102) {
_str = '【TYRP】-【储位、线边仓调拨单 和 客户储位调拨单】'
} else if (item.enumTransType == 31 && item.enumTransSubType == 3104) {
_str = '【TYRP】-【储位、线边仓调拨单 和 客户储位调拨单】'
} else if (item.enumTransType == 31 && item.enumTransSubType == 3105) {
_str = '【TYRP】-【储位、线边仓调拨单 和 客户储位调拨单】'
} else if (item.enumTransType == 21) {
_str = '【TYRP】-【缴库单】'
} else if (item.enumTransType == 23 && item.enumTransSubType == 2302) {
_str = '【TYRP】-【出货单】'
} else if (item.enumTransType == 23 && item.enumTransSubType == 2303) {
_str = '【TYRP】-【出货单】'
} else if (item.enumTransType == 23) {
_str = '【TYRP】-【非生产领料单】'
} else if (item.enumTransType == 33 && item.enumTransSubType == 0) {
_str = '【TYRP】-【非生产退料】'
} else if (item.enumTransType == 33 && item.enumTransSubType == 3301) {
_str = '【TYRP】-【回收料入库单】'
} else if (item.enumTransType == 22) {
_str = '【TYRP】-【退拆单】'
} else if (item.enumTransType == 37 && item.enumTransSubType == 0) {
_str = '【TYRP】-【盘点调整单】'
} else if (item.enumTransType == 37 && item.enumTransSubType == 3701) {
_str = '【TYRP】-【线边仓调整单】'
} else if (item.enumTransType == 38 && item.enumTransSubType == 3302) {
_str = '【TYRP】-【回收料调整单】'
} else if (item.enumTransType == 36) {
_str = '【TYRP】-【报废单、线边仓报废单】'
} else {
_str = ''
}
return _str
},
}
}
</script>
<style lang="scss">
.InventoryBookDetail_innerPage{
background: #fff;
height: 100%;
.searchHeader{
background: #f1f1f1;
padding: 20px 30px 0;
border-bottom: 1px solid #dbdbdb;
.el-form-item{
margin-right: 25px !important;
}
.el-button{
background: #205f78 !important;
border-color: #ddd;
border-radius: 2px;
}
.el-form-item__label{
font-weight: normal;
}
.el-input__inner{
border-radius: 0px !important;
background: #ddd !important;
}
.el-input__inner:focus,
.el-input__inner:hover{
border-color: #ddd;
}
}
.tableHeader{
list-style: none;
text-align: center;
height: 80px;
overflow: hidden;
margin: 10px 0;
.tableName{
letter-spacing: 10px;
border-bottom: #333 solid 1px;
padding: 0 15px;
font-size: 18px;
}
.timeLi{
display: flex;
justify-content: center;
.item{
margin: 0 10px;
}
}
}
.tableEl{
width: 100%;
margin: 0px auto;
// background: transparent !important;
.el-table__cell{
vertical-align: initial !important;
padding: 5px 0 !important;
background: transparent !important;
}
tr{
background: transparent !important;
border: none !important;
}
th.el-table__cell{
padding: 0 !important;
color: #000 !important;
border: none !important;
border-bottom: #333 solid 1px !important;
.cell{
vertical-align: bottom !important;
}
}
td{
border: none !important;
color: #000 !important;
}
.totalRow{
td{
border-top: blue dashed 1px !important;
}
}
.totalRow-red{
td{
border-top: #ff6000 solid 1px !important;
}
}
.totalRow-green{
td{
border-top: #24b924 solid 1px !important;
}
}
}
}
</style>

96
fe/PC/src/views/rawMaterialManage/quality/InspectRequest.vue

@ -49,6 +49,7 @@
:MaxResultCount="MaxResultCountDetails" :MaxResultCount="MaxResultCountDetails"
@alterResultCountDetails="alterResultCountDetails" @alterResultCountDetails="alterResultCountDetails"
@alertoldSkipCountDetails="alertoldSkipCountDetails" @alertoldSkipCountDetails="alertoldSkipCountDetails"
@buttonClick="currenDrawerButtonClick"
> >
<template v-if="currentTagName == 'hz' "> <template v-if="currentTagName == 'hz' ">
<!-- @buttonClick="buttonClick" --> <!-- @buttonClick="buttonClick" -->
@ -63,6 +64,7 @@
type="primary" type="primary"
v-if="scope.row.summaryInspectStatus != 2" v-if="scope.row.summaryInspectStatus != 2"
@click="buttonClick(scope.row)" @click="buttonClick(scope.row)"
size="small"
>检验详情</el-button> >检验详情</el-button>
<span v-else style="color:#31bb99">质检已完成</span> <span v-else style="color:#31bb99">质检已完成</span>
</template> </template>
@ -157,7 +159,7 @@
<el-dialog <el-dialog
title="质检详情" title="质检详情"
v-loading="loading" v-loading="loading"
:visible.sync="inspectNoticeDetailsShow" :visible="inspectNoticeDetailsShow"
top="5vh" top="5vh"
width="80%" width="80%"
:fullscreen="true" :fullscreen="true"
@ -196,32 +198,39 @@
class="formTable-box" class="formTable-box"
prop="details" prop="details"
> >
<currenTable <umyTable
:setUTableHeight="470"
:tableData="inspectNoticeDetailsFormData.details" :tableData="inspectNoticeDetailsFormData.details"
:tableColumns="inspectNoticeDetailsTableColumns" :tableColumns="inspectNoticeDetailsTableColumns"
:tableLoading = "inspectNoticeDetailsTableLoading" :tableLoading = "inspectNoticeDetailsTableLoading"
:isShowIndex="true" :isShowIndex="true"
:selectionTable="false" :selectionTable="false"
:cellStyle = "cellStyle" :cellClassName="cellClassName"
:tableBorder="true"
:tableAlign="'center'"
:tableHeaderAlign="'center'"
@buttonClick="inspectDetailsButtonClick" @buttonClick="inspectDetailsButtonClick"
> >
</currenTable> </umyTable>
</el-form-item> </el-form-item>
</template> </template>
</curren-Form> </curren-Form>
</el-dialog> </el-dialog>
<pdf <pdf
:urlPDF="urlPDF" :urlPDF="urlPDF"
:base64PDF="base64PDF"
:title="titlePDF" :title="titlePDF"
v-if="isShowPDF"
:isShowPDF="isShowPDF" :isShowPDF="isShowPDF"
:loadingPDF="loadingPDF" :loadingPDF="loadingPDF"
@closePDF="closePDF" @closePDF="closePDF"
:showDownLoad="true"
></pdf> ></pdf>
</div> </div>
</template> </template>
<script> <script>
import { getPageList, fileStorage, getListByItemcode, getDetailed } from "@/api/wms-api" import { getPageList, fileStorage, getListByItemcode, getDetailed,getFilestore } from "@/api/wms-api"
import { completeSummaryDetailStatus, setDetailDefaultOkStatus, setDetailOkStatus, setDetailNookStatus } from "@/api/wms-job" import { completeSummaryDetailStatus, setDetailDefaultOkStatus, setDetailOkStatus, setDetailNookStatus } from "@/api/wms-job"
import { tableMixins } from "@/mixins/TableMixins" import { tableMixins } from "@/mixins/TableMixins"
import { LoadingMixins } from "@/mixins/LoadingMixins" import { LoadingMixins } from "@/mixins/LoadingMixins"
@ -265,6 +274,8 @@ export default {
rowId: '', rowId: '',
// pdf // pdf
urlPDF: '', urlPDF: '',
// base64data:application/pdf;base64,
base64PDF:'',
// titlePDF // titlePDF
titlePDF: '', titlePDF: '',
// //
@ -482,8 +493,8 @@ export default {
// { label: "", prop: "receiveUom", width:'100%' }, // { label: "", prop: "receiveUom", width:'100%' },
{ label: "收货数量", prop: "receiveQty", width:'100%' }, { label: "收货数量", prop: "receiveQty", width:'100%' },
{ label: "状态", prop: "detailInspectStatus", type: "filter", filters: "detailInspectStatus", width:'100%' }, { label: "状态", prop: "detailInspectStatus", type: "filter", filters: "detailInspectStatus", width:'100%' },
{ type: "button", label: "检验", prop: "buttonHide", width:'100%' }, { type: "button", label: "检验", prop: "buttonHide",alwaysShow:true, width:'100%' },
{ type: "button", label: "清除检验", width:'100%' }, { type: "button", label: "清除检验", alwaysShow:true,width:'100%' },
], ],
//- //-
QueryDetailsFormData: { QueryDetailsFormData: {
@ -519,6 +530,24 @@ export default {
this.paging(); this.paging();
}, },
methods: { methods: {
//
currenDrawerButtonClick(val,index, label,item){
if(item.prop == "inspectReport"){
//
let _file_id = JSON.parse(val.inspectReport)[0].FileKey
this.isShowPDF = true
if(this.loadingPDF)return
this.loadingPDF = true
getFilestore({blobName:_file_id}).then(res=>{
this.urlPDF = 'data:application/pdf;base64,'+res.bytes
this.base64PDF=res.bytes
this.titlePDF = res.fileName
this.loadingPDF = false
}).catch(res=>{
this.loadingPDF = false
})
}
},
query() { query() {
let findRs = '' let findRs = ''
if (this.inputPackingCode == '') { if (this.inputPackingCode == '') {
@ -582,6 +611,9 @@ export default {
this.$message.error('已完成质检') this.$message.error('已完成质检')
return return
} }
//
this.Loading.appMainLoading = true
setTimeout(()=>{
this.inspectNoticeDetailsFormData.formFile = [] this.inspectNoticeDetailsFormData.formFile = []
this.inspectNoticeDetailsFormData = { this.inspectNoticeDetailsFormData = {
warehouseCode: localStorage.getItem('warehouseCode'), warehouseCode: localStorage.getItem('warehouseCode'),
@ -670,13 +702,21 @@ export default {
// }).catch(() => { // }).catch(() => {
// }) // })
} }
this.loading = false
this.Loading.appMainLoading = false
}).catch(err=>{
this.loading = false
this.Loading.appMainLoading = false
}) })
} }
} }
} }
}).catch(err=>{
this.loading = false
this.Loading.appMainLoading = false
}) })
//
this.inspectNoticeDetailsShow = true this.inspectNoticeDetailsShow = true
},300)
}, },
// - // -
inspectButtonClick(row, index, label) { inspectButtonClick(row, index, label) {
@ -798,13 +838,19 @@ export default {
rd.readAsDataURL(this.inspectNoticeDetailsFormData.formFile[0]) rd.readAsDataURL(this.inspectNoticeDetailsFormData.formFile[0])
rd.onloadend = function(){ rd.onloadend = function(){
var arrayBuffer = rd.result var arrayBuffer = rd.result
that.inspectNoticeDetailsFormData.filesList = []
that.inspectNoticeDetailsFormData.filesList.push( that.inspectNoticeDetailsFormData.filesList.push(
{ {
fileName: fileName, fileName: fileName,
bytes: arrayBuffer.substring(arrayBuffer.lastIndexOf(',')+1,arrayBuffer.length) bytes: arrayBuffer.substring(arrayBuffer.lastIndexOf(',')+1,arrayBuffer.length)
} }
) )
completeSummaryDetailStatus({id: that.masterID, summaryDetailId: that.inspectNoticeDetailsFormData.id }, that.inspectNoticeDetailsFormData).then(res => { console.log(830,{id: that.masterID, summaryDetailId: that.inspectNoticeDetailsFormData.id }, that.inspectNoticeDetailsFormData)
completeSummaryDetailStatus(
{id: that.masterID, summaryDetailId: that.inspectNoticeDetailsFormData.id },
that.inspectNoticeDetailsFormData,
// 'http://dev.ccwin-in.com:60085/api/'
).then(res => {
// ============================================================ // ============================================================
that.inspectNoticeDetailsShow = false that.inspectNoticeDetailsShow = false
this.loading = false this.loading = false
@ -814,7 +860,8 @@ export default {
that.paging() that.paging()
that.$message.success('成功完成检验!') that.$message.success('成功完成检验!')
}).catch(err => { }).catch(err => {
this.loading = false that.loading = false
that.$message.error('检验失败,请重试!')
console.log(err) console.log(err)
}) })
} }
@ -829,7 +876,8 @@ export default {
that.paging() that.paging()
that.$message.success('成功完成检验!') that.$message.success('成功完成检验!')
}).catch(err => { }).catch(err => {
this.loading = false that.loading = false
that.$message.error('检验失败,请重试!')
console.log(err) console.log(err)
}) })
} }
@ -988,17 +1036,21 @@ export default {
}, },
closePDF(){ closePDF(){
this.isShowPDF = false this.isShowPDF = false
this.urlPDF = ''
this.titlePDF = ''
this.loadingPDF = false
}, },
// //
cellStyle({row, column, rowIndex, columnIndex}){ cellClassName({row, column, rowIndex, columnIndex}){
if (row.detailInspectStatus == 1 && columnIndex === 5) { if (row.detailInspectStatus == 1 && columnIndex === 5) {
return 'background:#42a9b9;color:#fff' // return 'cell-class-mrhg' //
} else if (row.detailInspectStatus == 2 && columnIndex === 5) { } else if (row.detailInspectStatus == 2 && columnIndex === 5) {
return 'background:#42b983;color:#fff'// return 'cell-class-hg'//
} else if (row.detailInspectStatus == 3 && columnIndex === 5) { } else if (row.detailInspectStatus == 3 && columnIndex === 5) {
return 'background:#c3503e;color:#fff'// return 'cell-class-nohg'//
} }else{
return '' return ''
}
}, },
currenTabsChange(row){ currenTabsChange(row){
this.currentTagName = row.name this.currentTagName = row.name
@ -1066,6 +1118,18 @@ export default {
} }
} }
} }
::v-deep .cell-class-mrhg{
background:#42a9b9 !important;
color:#fff !important
}
::v-deep .cell-class-hg{
background:#42b983 !important;
color:#fff !important
}
::v-deep .cell-class-nohg{
background:#c3503e !important;
color:#fff
}
</style> </style>
<style lang="scss"> <style lang="scss">
.upload-demo { .upload-demo {

Loading…
Cancel
Save