This commit is contained in:
周炼 2024-11-26 17:40:34 +08:00
commit 37ae1f526e
24 changed files with 1026 additions and 201 deletions

View File

@ -0,0 +1,10 @@
import request from '@/router/axios'
import {nlv_print} from "@/api/prefix";
export function fetchList(query) {
return request({
url: nlv_print('/print-record/page'),
method: 'get',
params: query
})
}

View File

@ -0,0 +1,10 @@
import request from '@/router/axios'
import {nlv_print} from "@/api/prefix";
export function reprint(printRecordHandle) {
return request({
url: nlv_print('/print/reprint?printRecordHandle=' + printRecordHandle),
method: 'post',
data: {}
})
}

View File

@ -1,10 +1,10 @@
import request from '@/router/axios'
import {nlv_wms, tds} from "@/api/prefix";
import {mom_wms} from "@/api/prefix";
// 生产入库单申请-单据号弹窗分页查询
export function getDocumentNoPage(query) {
return request({
url: nlv_wms('/z-storag-request/getDocumentNoPage'),
url: mom_wms('/z-storag-request/getDocumentNoPage'),
method: 'get',
params: query
})
@ -13,7 +13,7 @@ export function getDocumentNoPage(query) {
// 生产入库单申请-目标仓库弹窗分页查询
export function getTargetWarehousePage(query) {
return request({
url: nlv_wms('/z-storag-request/getTargetWarehousePage'),
url: mom_wms('/z-storag-request/getTargetWarehousePage'),
method: 'get',
params: query
})
@ -22,7 +22,7 @@ export function getTargetWarehousePage(query) {
// 生产入库单申请-来源仓库弹窗分页查询
export function getSourceWarehousePage(query) {
return request({
url: nlv_wms('/z-storag-request/getSourceWarehousePage'),
url: mom_wms('/z-storag-request/getSourceWarehousePage'),
method: 'get',
params: query
})
@ -31,7 +31,7 @@ export function getSourceWarehousePage(query) {
// 生产入库单申请-物料弹窗分页查询
export function getItemPage(query) {
return request({
url: nlv_wms('/z-storag-request/getItemPage'),
url: mom_wms('/z-storag-request/getItemPage'),
method: 'get',
params: query
})
@ -40,7 +40,7 @@ export function getItemPage(query) {
// 生产入库单申请-创建人弹窗分页查询
export function getCreateUserPage(query) {
return request({
url: nlv_wms('/z-storag-request/getCreateUserPage'),
url: mom_wms('/z-storag-request/getCreateUserPage'),
method: 'get',
params: query
})
@ -49,7 +49,7 @@ export function getCreateUserPage(query) {
// 生产入库单申请-分页查询
export function getObj(obj,params) {
return request({
url: nlv_wms('/z-storag-request/search'),
url: mom_wms('/z-storag-request/search'),
method: 'post',
data: obj,
params: params
@ -61,7 +61,7 @@ export function getObj(obj,params) {
// 生产入库单申请-托盘号/条码号扫描事件
export function barScanEvent(query) {
return request({
url: nlv_wms('/z-storag-request/barScanEvent'),
url: mom_wms('/z-storag-request/barScanEvent'),
method: 'get',
params: query
})
@ -70,7 +70,7 @@ export function barScanEvent(query) {
// 生产入库单申请-保存事件
export function greatSaveOrUpdate(obj) {
return request({
url: nlv_wms('/z-storag-request/greatSaveOrUpdate'),
url: mom_wms('/z-storag-request/greatSaveOrUpdate'),
method: 'post',
data: obj
})
@ -78,15 +78,23 @@ export function greatSaveOrUpdate(obj) {
// 生产入库单申请-提交事件
export function submit(site,documentNo) {
return request({
url: nlv_wms('/z-storag-request/submit/'+documentNo+'/'+site),
url: mom_wms('/z-storag-request/submit/'+documentNo+'/'+site),
method: 'get'
})
}
// 生产入库单申请-删除事件
export function greatDelete(obj) {
return request({
url: nlv_wms('/z-storag-request/greatDelete'),
url: mom_wms('/z-storag-request/greatDelete'),
method: 'post',
data: obj
})
}
// 生产入库单申请-查询单据号是否存在
export function selectStoragRequest(documentNo) {
return request({
url: mom_wms('/z-storag-request/selectStoragRequest/'+documentNo),
method: 'get'
})
}

View File

@ -1,5 +1,5 @@
import request from '@/router/axios'
import {iep, nlv_wms, wms} from '@/api/prefix'
import {iep, nlv_wms, wms,mom_wms} from '@/api/prefix'
/**
{
@ -106,7 +106,7 @@ export function selectEqpFeedingListPage (query) {
export function selectByMaterialLot(obj) {
return request({
url: iep('/wmsInventory/selectByMaterialLot'),
url: mom_wms('/wms-inventory/selectByMaterialLot'),
method: 'post',
data: obj
})

View File

@ -3,7 +3,7 @@ import i18n from '@/i18n';
export default {
title: 'iMES',
subtitle: 'iMES',
copyright: 'Copyright 2020-2024 NLINV. All Rights Reserved.',
copyright: 'Copyright 2020-2024 SEMI-TECH. All Rights Reserved.',
isFirstPage: true, // 配置首页不可关闭
key: 'mom', // 配置主键,目前用于存储
validateCode: false, //是否开启验证码校验

View File

@ -66,13 +66,18 @@
</el-col>
<el-col :span="6">
<el-form-item prop="functionName" :label="$t('mes.int.methodName')">
<el-input v-model.trim="searchForm.functionName" :placeholder="$t('mes.int.enterMethodName')">
<el-select v-model="searchForm.functionName" style="width: 100%" clearable placeholder="字典 INT_FUNCTION_NAME">
<el-option v-for="item in functionNameList" :key="item.value" :label="item.description"
:value="item.value"></el-option>
</el-select>
<!-- <el-input v-model.trim="searchForm.functionName" :placeholder="$t('mes.int.enterMethodName')">
<i
slot="suffix"
class="el-input__icon el-icon-copy-document"
@click.stop="showSearchDialog('functionName')"
></i>
</el-input>
</el-input>-->
</el-form-item>
</el-col>
<el-col :span="6">
@ -124,6 +129,7 @@ import {
} from '@/api/mes/int/integrated-service-transaction-history-query/master'
import moment from 'moment'
import tooltip from '@/components/tooltip/index.vue'
import { fetchItemList as fetchDictList } from '@/api/admin/dict'
export default {
components: { tooltip },
@ -132,6 +138,7 @@ export default {
searchForm: {},
selectBox,
MethodNameObj,
functionNameList: [],
MethodNameShow: false,
getMethodNameDialog,
fromSystemOptions: [],
@ -143,9 +150,23 @@ export default {
},
created() {
this.searchForm = copyJSON(initSearch)
this.fetchFromAndToSystems()
this.fetchFromAndToSystems();
// avue option 翻譯 用
this.getDataDictionary('INT_FUNCTION_NAME', 'functionNameList')
},
methods: {
// 获取数据字典
getDataDictionary(dictType, list) {
fetchDictList({
current: '1',
size: '1000',
dictType: dictType
}).then(response => {
this[list] = copyJSON(response.data.data.records)
})
},
fetchFromAndToSystems() {
getFromSystemData()
.then((res) => {

View File

@ -20,7 +20,7 @@
tooltip-effect="dark"
border
>
<el-table-column :label="$t('common.seq')" prop="seq" width="80" sortable fixed="left">
<el-table-column :label="$t('common.seq')" prop="seq" width="60" fixed="left">
</el-table-column>
<el-table-column
v-for="item in tableObj"
@ -31,7 +31,7 @@
>
<template v-if="item.prop === 'state'" v-slot:default="scope">
<span class="link-text" @click="showHistory(scope.row)">
{{ scope.row.state === '1' ? $t('mes.int.executionFailed') : $t('mes.executeSuccess') }}
{{ scope.row.state === 'E' ? $t('mes.int.executionFailed') : $t('mes.executeSuccess') }}
</span>
</template>
<template

View File

@ -27,13 +27,13 @@ export const historyFormInit = {
}
export const tableObj = [
{ prop: 'fromSystem', label: 'mes.int.requestSide', width: '120' },
{ prop: 'toSystem', label: 'mes.int.receiverSide', width: '120' },
{ prop: 'fromSystem', label: 'mes.int.requestSide', width: '80' },
{ prop: 'toSystem', label: 'mes.int.receiverSide', width: '80' },
{ prop: 'state', label: 'crud.column.label.status1', width: '80' },
{ prop: 'sid', label: 'mes.int.transactionNumber', width: '250' },
{ prop: 'functionName', label: 'mes.int.methodName', width: '250' },
{ prop: 'message', label: 'mes.int.message', width: '250' },
{ prop: 'keyValue', label: 'mes.int.keyword', width: '150' },
{ prop: 'keyValue', label: 'mes.int.keyword', width: '180' },
{ prop: 'dateCreate', label: 'mes.int.transactionTime', width: '180' },
{ prop: 'retryCount', label: 'mes.int.rethrowCount', width: '140' },
{ prop: 'logCreator', label: 'mes.int.rethrowPersonnel', width: '150' },

View File

@ -79,7 +79,8 @@ import {fetchList as fetchLabelTemplateList} from '@/api/mes/print/print-label-t
import {getByCode as getLabelCategory} from '@/api/mes/print/labelCategory'
import { clearValidate } from '@/util/util'
import { showLoading, hideLoading } from '@/const/loading'
import {changeTemplate} from "@/api/mes/print/sales-order-line-label-value-config";
import {changeTemplate, soLineValueSetExists} from "@/api/mes/print/sales-order-line-label-value-config";
import {reprint} from "@/api/mes/print/print";
export default {
components: {},
@ -144,20 +145,7 @@ export default {
let me = this;
this.$refs['form'].validate((valid) => {
if (valid) {
let param = {
labelTempleCode: me.mainForm.labelTempleCode,
configItem: me.mainForm.configItem,
salesOrderLineBo: me.mainForm.salesOrderLineBo
};
// 处理响应成功后的操作
showLoading()
changeTemplate(param).then(response => {
hideLoading()
this.doConfirm()
}).catch(() => {
hideLoading()
})
this.checkValueSetExists(me.mainForm);
}
})
},
@ -170,6 +158,48 @@ export default {
doConfirm() {
this.$emit('doConfirm', this.mainForm)
this.closeForm()
},
checkValueSetExists(row) {
let me = this;
let param = {
soNumber: row.soNumber,
soLineId: row.soLineId
}
showLoading()
soLineValueSetExists(param).then((response) => {
hideLoading()
if(response.data.data && response.data.data.configItem === row.configItem) {
me.$confirm('当前订单行已配置对应的值集,修改模版后将清除对应的数据,是否确认修改?', '提示', {
confirmButtonText: this.$t('common.confirm'),
cancelButtonText: this.$t('common.cancel'),
type: 'warning',
})
.then(() => {
me.doChangeConfirm(row)
})
} else {
me.doChangeConfirm(row)
}
})
.catch(() => {
hideLoading()
})
},
doChangeConfirm(row) {
let me = this;
let param = {
labelTempleCode: row.labelTempleCode,
configItem: row.configItem,
salesOrderLineBo: row.salesOrderLineBo
};
// 处理响应成功后的操作
showLoading()
changeTemplate(param).then(response => {
hideLoading()
me.doConfirm()
}).catch(() => {
hideLoading()
})
}
},
}

View File

@ -235,6 +235,7 @@ import {remote} from '@/api/admin/dict'
import {showLoading, hideLoading} from "@/const/loading";
import labelTemplateChange from '@/views/mes/print/customer-label/content/label-template-change.vue'
import fieldValueSet from '@/views/mes/print/customer-label/content/field-value-set.vue'
import {reprint} from "@/api/mes/print/print";
export default {
name: 'customer-label',
@ -392,11 +393,12 @@ export default {
updateSoLineTemplate(row) {
for(let i = 0; i < this.tableData.length; i++) {
let data = this.tableData[i]
if(data.salesOrderLineBo === row.salesOrderLineBo) {
if(data.salesOrderLineBo === row.salesOrderLineBo && data.configItem === row.configItem) {
data.labelTempleCode = row.labelTempleCode
data.labelCategoryName = row.labelCategoryName
data.templateName = row.templateName
data.labelCategoryId = row.labelCategoryId
this.getValueSetList(row)
break
}
}
@ -430,6 +432,10 @@ export default {
})
},
getValueSetList(row) {
if(!row) {
this.valueSetData = []
return;
}
let param = {
labelNumber: row.labelTempleCode,
salesOrderLineBo: row.salesOrderLineBo,

View File

@ -10,7 +10,6 @@
:permission="permissionList"
:table-loading="tableLoading"
:option="tableOption"
:upload-before="uploadBefore"
@on-load="getList"
@search-change="searchChange"
@refresh-change="refreshChange"
@ -25,6 +24,11 @@
<template slot-scope="scope" slot="templateCategoryForm">
<el-input placeholder="模板类别" v-model="formObj.templateCategory"><i slot="suffix" class="el-input__icon el-icon-search" @click.stop="showTemplateCategoryDialog()"></i></el-input>
</template>
<template slot-scope="scope" slot="fileForm">
<el-upload ref="upload" :http-request="doUpload" action="/" :on-change="handleSelectFile" :before-upload="beforeUpload">
<el-button size="small" type="primary" :disabled="isBlank(formObj.templateCode)">点击上传</el-button>
</el-upload>
</template>
<!-- <template slot-scope="scope" slot="fileForm">-->
<!-- </template>-->
</avue-crud>
@ -38,12 +42,14 @@
import {fetchList as fetchTemplateCategoryList} from '@/api/mes/print/labelCategory'
import {mapGetters} from 'vuex'
import {isBlank} from "@/util/string";
import {hideLoading, showLoading} from "@/const/loading";
import axios from "axios";
export default {
name: 'print-label-template',
data() {
return {
isBlank,
tableOption: {
"align": "center",
"index": true,
@ -173,6 +179,28 @@
},
},
methods: {
doUpload(params) {
let me = this
let file =params.file
let formData = new FormData();
formData.append("file",file);
formData.append("templateCode",me.formObj.templateCode);
showLoading()
axios.post('/nlv-print/printlabeltemplate/upload', formData).then(function (response) {
hideLoading()
if(response.data.code !== 0) {
return this.$message.warning(response.data.msg)
}
}).catch(function (error) {
hideLoading()
console.log(error);
})
},
handleSelectFile(file, fileList) {
if (fileList.length > 1) {
fileList.shift();
}
},
showTemplateCategoryDialog() {
this.templateCategoryDialogVisible = true
},
@ -180,12 +208,12 @@
let me = this
me.formObj.templateCategory = row.labelCategoryId
},
uploadBefore(file, done, loading,column) {
console.log(file,column)
beforeUpload(file) {
debugger
this.formObj.templateName = file.name
//如果你想修改file文件,由于上传的file是只读文件,必须复制新的file才可以修改名字,完后赋值到done函数里,如果不修改的话直接写done()即可
let newFile = new File([file], this.formObj.templateCode, { type: "lab" });
done(newFile)
return true;
},
beforeOpen(done, type) {
if (['views', 'edit'].includes(type)) {

View File

@ -0,0 +1,361 @@
<template>
<div class="basic-container-custom">
<input-select-dialog
:modal-obj="shopOrderDialogObj"
:modal-fetch-fun="shopOrderDialogFetchFun"
:modal-show.sync="shopOrderDialogVisible"
@inputDialogSelected="shopOrderSelected"
></input-select-dialog>
<input-select-dialog
:modal-obj="operationDialogObj"
:modal-fetch-fun="operationDialogFetchFun"
:modal-show.sync="operationDialogVisible"
@inputDialogSelected="operationSelected"
></input-select-dialog>
<div class="flex-content">
<el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="120px">
<el-form-item
label="工单号"
label-suffix=":"
prop="shopOrder"
>
<el-input v-model="queryParams.shopOrder" size="small" @keyup.enter.native="handleQuery">
<i
slot="suffix"
class="el-input__icon el-icon-copy-document"
@click.stop="showShopOrderDialog"
></i>
</el-input>
</el-form-item>
<el-form-item
label="工序"
label-suffix=":"
prop="operation"
>
<el-input v-model="queryParams.operation" size="small" @keyup.enter.native="handleQuery">
<i
slot="suffix"
class="el-input__icon el-icon-copy-document"
@click.stop="showOperationDialog"
></i>
</el-input>
</el-form-item>
<el-form-item
label="条码号"
label-suffix=":"
prop="barcodeNumber"
>
<el-input v-model="queryParams.barcodeNumber" size="small" @keyup.enter.native="handleQuery">
</el-input>
</el-form-item>
<el-form-item
label="打印场景"
label-suffix=":"
prop="barcodeType"
>
<el-select placeHolder="请选择" v-model="queryParams.barcodeType">
<el-option v-for="item in barcodeTypeList" :key="item.value"
:label="item.label" :value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="handleQuery">{{
$t('mes.search')
}}
</el-button>
<el-button icon="el-icon-delete" @click="resetQuery">{{ $t('mes.reset') }}</el-button>
</el-form-item>
</el-form>
<div class="flex-auto">
<el-table ref="searchTable" v-loading="loading" :data="tableData" height="100%" border>
<el-table-column
label="条码号"
align="center"
prop="barcodeNumber"
width="130"
:render-header="(h, { column, $index }) => renderSpecNameHeader(h, { column, $index }, options)"
/>
<el-table-column
label="打印场景"
align="center"
prop="barcodeType"
width="100"
:render-header="(h, { column, $index }) => renderSpecNameHeader(h, { column, $index }, options)"
>
<template slot-scope="scope">
{{ formatBarcodeType(scope.row.barcodeType) }}
</template>
</el-table-column>
<el-table-column
label="工序"
align="center"
prop="operation"
width="auto"
:render-header="(h, { column, $index }) => renderSpecNameHeader(h, { column, $index }, options)"
:show-overflow-tooltip="true"
/>
<el-table-column
label="工单号"
align="center"
prop="shopOrder"
width="auto"
:render-header="(h, { column, $index }) => renderSpecNameHeader(h, { column, $index }, options)"
:show-overflow-tooltip="true"
/>
<el-table-column
label="打印次数"
align="center"
prop="printTimes"
width="auto"
/>
<el-table-column
label="打印份数"
align="center"
prop="copies"
width="auto"
/>
<el-table-column
label="打印模板"
align="center"
prop="printTmpl"
width="auto"
:render-header="(h, { column, $index }) => renderSpecNameHeader(h, { column, $index }, options)"
:show-overflow-tooltip="true"
/>
<el-table-column
label="打印机名称"
align="center"
prop="printerName"
width="auto"
:render-header="(h, { column, $index }) => renderSpecNameHeader(h, { column, $index }, options)"
:show-overflow-tooltip="true"
/>
<el-table-column
label="打印内容"
align="center"
prop="printContent"
width="auto"
:show-overflow-tooltip="true"
/>
<el-table-column
label="打印时间"
align="center"
prop="lastPrintTime"
:render-header="(h, { column, $index }) => renderSpecNameHeader(h, { column, $index }, options)"
:show-overflow-tooltip="true"
/>
<el-table-column :label="$t('crud.menu')" align="center" width="70" class-name="small-padding">
<template slot-scope="scope">
<!-- 补打 -->
<el-button
type="text"
size="mini"
@click="handleReprint(scope.row)"
>补打
</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.current"
:limit.sync="queryParams.size"
@pagination="getList"
/>
</div>
</div>
</div>
</template>
<script>
import {mapGetters} from 'vuex'
import {isBlank} from '@/util/string'
import {copyJSON} from '@/util/util'
import {initForm, initQueryParam, barcodeTypeList} from '@/views/mes/print/reprint/init'
import {renderSpecNameHeader, clear} from '@/components/table-header-pop/render'
import {fetchList} from '@/api/mes/print/print-record'
import {reprint} from '@/api/mes/print/print'
import {hideLoading, showLoading} from "@/const/loading";
import {releaseFetchList} from "@/api/mes/prd/shop-order";
import {
operationDialogObj
} from '@/views/mes/pod/init'
import {findOperationList as fetchOperationList} from "@/api/mes/prd/operation";
export default {
name: 'unit-basis',
components: {},
data() {
return {
barcodeTypeList,
// 遮罩层
loading: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 已办任务列表数据
tableData: [],
title: '标签补打',
// 弹出层显示标识
visible: false,
// 弹出层标题
showTitle: '',
// 弹出层状态
state: '',
// 是否显示弹出层
open: '',
src: '',
dateRange: [],
// 查询参数
queryParams: copyJSON(initQueryParam),
// 表单参数
form: copyJSON(initForm),
// 表单校验
rules: {},
isBlank,
renderSpecNameHeader,
options: {
refresh: this.refresh,
visible: true,
property: {
lastPrintTime: {
type: 'datetime',
}
},
},
orderJson: JSON.stringify([{column: 'CREATED_DATE_TIME', asc: false}]),
operationDialogVisible: false,
shopOrderDialogFetchFun: releaseFetchList,
shopOrderDialogObj: {
title: '工单',
condition: 'shopOrder',
tableColumn: [
{
prop: 'shopOrder',
label: 'mes.shopOrderNo',
},
{
prop: 'status',
label: 'mes.ord.status',
},
{
prop: 'qty',
label: 'mes.qtyToBuild',
},
],
queryParam: {},
},
shopOrderDialogVisible: false,
operationDialogObj,
operationDialogFetchFun: fetchOperationList,
}
},
created() {
},
computed: {
...mapGetters(['permissions']),
permissionList() {
return {}
},
},
beforeRouteEnter(to, from, next) {
next((vm) => {
vm.getList()
})
},
methods: {
showShopOrderDialog() {
if (!this.shopOrderDisabled) {
this.shopOrderDialogVisible = true
this.shopOrderDialogObj.queryParam.status = 'RELEASABLE'
}
},
//显示操作弹窗框
showOperationDialog() {
this.operationDialogVisible = true
},
shopOrderSelected(row) {
let me = this
me.queryParams.shopOrder = row.shopOrder
},
operationSelected(row) {
let me = this
me.queryParams.operation = row.operation
},
getList() {
this.loading = true
// this.queryParams.orderJson = this.orderJson
let params = this.addDateRange(this.queryParams, this.dateRange);
fetchList(Object.assign(
{
orderJson: isBlank(this.orderJson) ? [] : this.orderJson,
},
params
))
.then((response) => {
this.tableData = response.data.data.records
this.total = parseInt(response.data.data.total)
this.loading = false
})
.catch(() => {
this.loading = false
})
},
formatBarcodeType(barcodeType) {
for (let i = 0; i < this.barcodeTypeList.length; i++) {
if (barcodeType === this.barcodeTypeList[i].value) {
return this.barcodeTypeList[i].label
}
}
return barcodeType
},
handleReprint(row) {
this.$confirm('是否执行补打', '提示', {
confirmButtonText: this.$t('common.confirm'),
cancelButtonText: this.$t('common.cancel'),
type: 'warning',
})
.then(() => {
showLoading()
reprint(row.handle)
.then((response) => {
this.$message.success("补打成功");
this.getList()
hideLoading()
})
.catch(() => {
hideLoading()
})
})
},
refresh(params) {
this.queryParams = Object.assign({}, this.queryParams, params)
this.handleQuery()
},
clearValue(key) {
this.queryParams[key] = ''
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.current = 1
this.getList()
},
/** 重置按钮操作 */
resetQuery() {
this.dateRange = []
this.resetForm('queryForm')
clear.call(this, this.$refs.searchTable)
this.queryParams = copyJSON(initQueryParam)
this.handleQuery()
}
}
}
</script>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,34 @@
export const initQueryParam = {
current: 1,
size: 20,
shopOrder: '',
barcodeNumber: '',
barcodeType: '',
operation: ''
}
export const initForm = {
shopOrder: '',
barcodeNumber: '',
barcodeType: '',
operation: ''
}
export const barcodeTypeList = [
{
'value': 'operation',
'label': '工序打印'
},
{
'value': 'barcode',
'label': '条码补打印'
},
{
'value': 'package',
'label': '包装批次打印'
},
{
'value': 'tool',
'label': '物流载具打印'
}
]

View File

@ -146,87 +146,107 @@
' 若是空字符串,此处填写EMPTY',
region: '{\n' +
' "externalLabelFlag": "Y",\n' +
' "dateTime": "2024-11-25 04:35:31",\n' +
' "dateTime": "2024-11-26 01:06:52",\n' +
' "shopOrder": "20241109002",\n' +
' "fabNo": "FQCJ",\n' +
' "resource": "FQ001",\n' +
' "baseData": null,\n' +
' "shopOrderData": {\n' +
' "actualCompDate": null,\n' +
' "actualStartDate": null,\n' +
' "bomBo": "BOMBO:2031,20241109002,H,1.0",\n' +
' "creator": "liaohechuan",\n' +
' "customFields": null,\n' +
' "customer": "",\n' +
' "customerOrder": "",\n' +
' "dateCreate": "2024-11-09T18:03:43",\n' +
' "dateEffect": null,\n' +
' "dateExpire": null,\n' +
' "dateUpdate": null,\n' +
' "erpOrder": "",\n' +
' "erpProductionVersion": "",\n' +
' "erpPutawayStorloc": "",\n' +
' "erpUnitOfMeasure": "",\n' +
' "handle": "ShopOrderBO:2031,20241109002",\n' +
' "holdId": "",\n' +
' "itemBo": "ItemBO:2031,ITEM01,A",\n' +
' "originalStatusBo": "StatusBO:2031,RELEASABLE,SHOP_ORDER",\n' +
' "plannedBomBo": "BOMBO:2031,20241109002,H,1.0",\n' +
' "plannedCompDate": null,\n' +
' "plannedItemBo": "ItemBO:2031,ITEM01,A",\n' +
' "plannedRouterBo": "RouterBO:2031,LHCCS01,0,A",\n' +
' "plannedStartDate": null,\n' +
' "plannedWorkCenterBo": "WorkCenterBO:2031,20311003",\n' +
' "priority": 999,\n' +
' "qty": 999.000000,\n' +
' "qtyDone": 0.000000,\n' +
' "qtyReleased": 42.000000,\n' +
' "qtyScrapped": 0.000000,\n' +
' "releasedDate": null,\n' +
' "routerBo": "RouterBO:2031,LHCCS01,0,A",\n' +
' "shopOrder": "20241109002",\n' +
' "shopOrderType": "0",\n' +
' "site": "2031",\n' +
' "statusBo": "StatusBO:2031,RELEASABLE,SHOP_ORDER",\n' +
' "statusDescription": "",\n' +
' "updater": "syngna",\n' +
' "version": 1\n' +
' },\n' +
' "shopOrderCustomData": {\n' +
' "zctZbk": "1",\n' +
' "zctFwt": "1",\n' +
' "orderType": "1",\n' +
' "sepcOrder": "1",\n' +
' "zctWl": "1",\n' +
' "zctBz": "1",\n' +
' "zctCd": "1",\n' +
' "zctZxxg": "1",\n' +
' "zctKh": "1",\n' +
' "zctCb": "1",\n' +
' "zctXsbgs": "1",\n' +
' "zctPmys": "1",\n' +
' "zctZxbqys": "1",\n' +
' "zctTpsm": "1",\n' +
' "zctWxbqys": "1",\n' +
' "customerTemplateCode": "C01",\n' +
' "zctGx": "1",\n' +
' "zctXl": "1",\n' +
' "ext5": "1",\n' +
' "ext4": "1",\n' +
' "bigOrder": "1",\n' +
' "ext3": "1",\n' +
' "zctTd": "1",\n' +
' "ext2": "1",\n' +
' "saleOrder": "SO01",\n' +
' "zctHjt": "1",\n' +
' "ext1": "1",\n' +
' "zctGxmys": "1",\n' +
' "zctTp": "1",\n' +
' "zctDbd": "1",\n' +
' "saleOrderLine": "1",\n' +
' "zctHgz": "1",\n' +
' "zctZxsg": "1",\n' +
' "zctFktsl": "1",\n' +
' "zctPp": "1",\n' +
' "orderTypeDesc": "1",\n' +
' "specialRemark": "1",\n' +
' "zctWxys": "1",\n' +
' "zctWbxh": "1",\n' +
' "zctKhxh": "1",\n' +
' "zctFx": "1",\n' +
' "zctFxjd": "1",\n' +
' "zctSf": "1",\n' +
' "zctFkt": "1",\n' +
' "zctDt": "1"\n' +
' "ZCT_ZXBQYS": "1",\n' +
' "ZCT_XL": "1",\n' +
' "ZCT_DBD": "1",\n' +
' "ZCT_WXBQYS": "1",\n' +
' "SALE_ORDER_LINE": "1",\n' +
' "SALE_ORDER": "SO01",\n' +
' "ZCT_ZXXG": "1",\n' +
' "SEPC_ORDER": "1",\n' +
' "ZCT_WXYS": "1",\n' +
' "ZCT_WBXH": "1",\n' +
' "ZCT_GX": "1",\n' +
' "ZCT_TD": "1",\n' +
' "ZCT_HJT": "1",\n' +
' "ZCT_GXMYS": "1",\n' +
' "ZCT_HGZ": "1",\n' +
' "CUSTOMER_TEMPLATE_CODE": "C01",\n' +
' "ZCT_TP": "1",\n' +
' "ZCT_FXJD": "1",\n' +
' "ZCT_PP": "1",\n' +
' "ORDER_TYPE_DESC": "1",\n' +
' "BIG_ORDER": "1",\n' +
' "ZCT_ZXSG": "1",\n' +
' "ZCT_KHXH": "1",\n' +
' "ZCT_WL": "1",\n' +
' "ZCT_BZ": "1",\n' +
' "ZCT_PMYS": "1",\n' +
' "SPECIAL_REMARK": "1",\n' +
' "ORDER_TYPE": "1",\n' +
' "ZCT_FKT": "1",\n' +
' "ZCT_SF": "1",\n' +
' "ZCT_FX": "1",\n' +
' "ZCT_TPSM": "1",\n' +
' "ZCT_DT": "1",\n' +
' "EXT1": "1",\n' +
' "EXT2": "1",\n' +
' "EXT3": "1",\n' +
' "EXT4": "1",\n' +
' "EXT5": "1",\n' +
' "ZCT_FKTSL": "1",\n' +
' "ZCT_CB": "1",\n' +
' "ZCT_KH": "1",\n' +
' "ZCT_XSBGS": "1",\n' +
' "ZCT_ZBK": "1",\n' +
' "ZCT_FWT": "1",\n' +
' "ZCT_CD": "1"\n' +
' },\n' +
' "workCenter": "WC-2031-001",\n' +
' "salesOrder": "0010000352",\n' +
' "lotBasisData": {\n' +
' "actualCompDate": null,\n' +
' "creator": "snow",\n' +
' "dateCreate": "2024-11-13T14:52:24.482",\n' +
' "dateUpdate": "2024-11-13T16:43:28.172",\n' +
' "description": "",\n' +
' "handle": "LotBasisBO:2031,20241109002",\n' +
' "hotLot": "N",\n' +
' "itemBo": "ItemBO:2031,ITEM01,A",\n' +
@ -244,21 +264,83 @@
' },\n' +
' "site": "2031",\n' +
' "lotStateData": {\n' +
' "abnNo": "",\n' +
' "batchId": "",\n' +
' "eventTime": "2024-11-13T16:43:30",\n' +
' "handle": "LotState:LotBasisBO:2031,20241109002",\n' +
' "inspectionLevel": "",\n' +
' "length": null,\n' +
' "lotBasisBo": "LotBasisBO:2031,20241109002",\n' +
' "lotNo": "20241109002",\n' +
' "lotSerial": "2024110900200001",\n' +
' "path": "",\n' +
' "qty": 32.000000,\n' +
' "remark": "",\n' +
' "resourceBo": "ResourceBO:2031,FQ001",\n' +
' "rollType": "",\n' +
' "routerStepBo": "RouterStepBO:RouterBO:2031,LHCCS01,0,A,10",\n' +
' "status": "R",\n' +
' "userNo": "syngna"\n' +
' "userNo": "syngna",\n' +
' "weightQty": null,\n' +
' "weightUnit": "",\n' +
' "width": null,\n' +
' "workCenterBo": ""\n' +
' },\n' +
' "lotNo": "20241109002",\n' +
' "itemData": {\n' +
' "assyDataTypeBo": "",\n' +
' "bomBo": "BOMBO:2031,BOM01,U,#",\n' +
' "componentGroupBo": "",\n' +
' "createTrackableSfc": "",\n' +
' "creator": "dzh",\n' +
' "currentRevision": "Y",\n' +
' "customFields": null,\n' +
' "dateCreate": "2024-10-30T09:51:35",\n' +
' "dateUpdate": "2024-11-25T14:55:23.910",\n' +
' "description": "测试数据",\n' +
' "endDateTimeCondition": null,\n' +
' "erpBackflushing": "",\n' +
' "erpItem": "",\n' +
' "erpPutawayStorloc": "",\n' +
' "handle": "ItemBO:2031,ITEM01,A",\n' +
' "holdId": "",\n' +
' "invAssyDataTypeBo": "",\n' +
' "item": "ITEM01",\n' +
' "itemGroupBo": "",\n' +
' "itemType": "M",\n' +
' "itemTypeBo": "ItemTypeBO:2031,FERT",\n' +
' "lotSize": null,\n' +
' "maskGroupBo": "",\n' +
' "materialType": "",\n' +
' "maxFloorLife": null,\n' +
' "maxFloorLifeUnits": "",\n' +
' "maxShelfLife": null,\n' +
' "maxShelfLifeUnits": "",\n' +
' "maximumUsage": null,\n' +
' "notes": "",\n' +
' "order": "",\n' +
' "orderColumn": "",\n' +
' "orderJson": "",\n' +
' "originalStatusBo": "",\n' +
' "panel": "",\n' +
' "quantityRestriction": "",\n' +
' "removalAssyDataTypeBo": "",\n' +
' "revision": "A",\n' +
' "routerBo": "RouterBO:2031,20241113006,0,#",\n' +
' "site": "2031",\n' +
' "startDateTimeCondition": null,\n' +
' "statusBo": "",\n' +
' "storageLocationBo": "",\n' +
' "timeSensitive": "",\n' +
' "transferItemGroupBo": "",\n' +
' "unitOfMeasure": "KG",\n' +
' "updater": "luochen"\n' +
' },\n' +
' "user": "syngna",\n' +
' "operation": "FQ",\n' +
' "salesOrderLine": "20"\n' +
' "lotSerial": null,\n' +
' "salesOrderLine": "20",\n' +
' "customer": null\n' +
'}',
},
formLabelWidth: '120px'

View File

@ -504,9 +504,13 @@ export default {
//记录不良
openNc() {
let me = this
me.ncCodeForm = copyJSON(me.processForm)
me.ncCodeDialogVisible = true
me.ncCodeList = []
me.inspecNcList = []
let row = {}
row.sid = null
me.showDialog(row)
row.inspecResultSid = null
me.getNcList(row)
},
// 找到父节点
@ -645,7 +649,14 @@ export default {
}).catch(e => {
hideLoading()
})
await selectAllNc({ inspecResultSid: row.sid }).then((re) => {
let paramSelectAllNc = {
operationBo : me.processForm.operationBo,
item: me.processForm.item,
resourceBo: me.processForm.resourceBo,
lotNo: me.processForm.lotNo,
inspecResultSid: row.sid
}
await selectAllNc(paramSelectAllNc).then((re) => {
hideLoading()
let resData = re.data
for (let i = 0; i < resData.length; i++) {
@ -838,10 +849,16 @@ export default {
}
row.result = numberControl(num, data)
if (!isNaN(parseFloat(row.result))) {
if (Number(row.result) > Number(row.maxValue) || Number(row.result) < Number(row.minValue)) {
if (Number(row.result) < Number(row.minValue) && Number(row.result) > Number(row.maxValue)) {
return row.qcItemJudge = false
} else {
return row.qcItemJudge = true
if ( !isBlank(row.maxValue) && Number(row.result) > Number(row.maxValue)) {
return row.qcItemJudge = false
} else if (!isBlank(row.minValue) && Number(row.result) < Number(row.minValue)) {
return row.qcItemJudge = false
} else {
return row.qcItemJudge = true
}
}
} else {
return row.qcItemJudge = false

View File

@ -48,14 +48,14 @@
:modal-obj="itemDialogObj"
:modal-fetch-fun="itemDialogFetchFun"
:modal-show.sync="itemDialogShow"
@inputDialogSelected="dialogSelect"
@inputDialogSelected="dialogSelectTable"
></input-select-dialog-cust>
<!-- 工序-->
<input-select-dialog-cust
:modal-obj="operationDialogObj"
:modal-fetch-fun="fetchOperationList"
:modal-show.sync="operationDialogShow"
@inputDialogSelected="dialogSelect"
@inputDialogSelected="dialogSelectTable"
></input-select-dialog-cust>
<!-- 选项集弹窗 -->
<textGroupNo
@ -381,88 +381,191 @@
<!--检验对象-->
<el-tab-pane label="检验对象" name="qcItem">
<div class="execution">
<el-form
ref="form"
:model="form"
:rules="rules"
label-width="120px"
label-suffix=":"
hide-required-asterisk
>
<el-row >
<el-col :span="10">
<el-form-item prop="item">
<template slot="label">
<tooltip
content="物料编码"
>
</tooltip>
</template>
<el-row style="text-align: left;">
<el-button
@click="tableAddTarget"
icon="el-icon-plus"
type="primary"
:disabled="state == 'view' || state === 'createdJob'"
></el-button>
<el-button
@click="tableLessTarget"
icon="el-icon-minus"
type="danger"
:disabled="state == 'view' || state === 'createdJob'"
></el-button>
</el-row>
<el-row>
<el-table :data="targetTableData"
ref="targetTableData"
tooltip-effect="dark"
height="400"
style="width: 100%"
:header-cell-style="{ 'text-align': 'center' }"
:cell-style="{ 'text-align': 'center' }"
border>
<el-table-column
type="selection"
width="60"
v-if="state !== 'view' && state !== 'createdJob'"
>
</el-table-column>
<el-table-column prop="seq" label="序号"></el-table-column>
<el-table-column
prop="item"
label="物料编码"
>
<template slot-scope="scope">
<div v-if="state === 'view' || state === 'createdJob'">
{{ form.item }}
{{ scope.row.item }}
</div>
<el-input
v-else
v-model="form.item"
v-model="scope.row.item"
:readonly="true"
:require="rules.item && rules.item.some((rule) => rule.required)"
>
<i
slot="suffix"
class="el-input__icon el-icon-copy-document"
@click.stop="showDialog('item')"
@click.stop="showDialogTable('item', scope.$index)"
></i>
</el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="itemDesc">
<template slot="label">
<label>{{ form.itemDesc }}</label>
</template>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="10">
<el-form-item prop="operation">
<template slot="label">
<tooltip
content="工序编码"
>
</tooltip>
</template>
<div v-if="state === 'view' || state === 'createdJob'">
{{ form.operation }}
</el-table-column>
<el-table-column
prop="itemDesc"
label="物料描述"
></el-table-column>
<el-table-column
prop="operation"
label="工序"
>
<template slot-scope="scope">
<div v-if="state === 'view' || state === 'createdJob'">
{{ scope.row.operation }}
</div>
<el-input
v-else
v-model="form.operation"
v-model="scope.row.operation"
:readonly="true"
clearable
>
<i
slot="suffix"
class="el-input__icon el-icon-copy-document"
@click.stop="showDialog('operation')"
></i>
<i
slot="suffix"
class="el-input__icon el-icon-circle-close"
@click.stop="clearOperation()"
@click.stop="showDialogTable('operation', scope.$index)"
></i>
</el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="operationDesc">
<template slot="label">
<label>{{ form.operationDesc }}</label>
</template>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
</el-table-column>
<el-table-column
prop="operationDesc"
label="工序描述">
</el-table-column>
<el-table-column
prop="level"
label="等级">
<template slot-scope="scope">
<el-select
v-model="scope.row.inspectLevel"
property="inspectLevel"
:disabled="state === 'view' || state === 'createdJob' || form.inspecType === '0'"
style="width: 100%"
>
<el-option
v-for="item in insepecLevelList"
:key="item.value"
:label="$t(item.label)"
:value="item.value"
>
</el-option>
</el-select>
</template>
</el-table-column>
</el-table>
</el-row>
<!-- <el-form-->
<!-- ref="form"-->
<!-- :model="form"-->
<!-- :rules="rules"-->
<!-- label-width="120px"-->
<!-- label-suffix=":"-->
<!-- hide-required-asterisk-->
<!-- >-->
<!-- <el-row >-->
<!-- <el-col :span="10">-->
<!-- <el-form-item prop="item">-->
<!-- <template slot="label">-->
<!-- <tooltip-->
<!-- content="物料编码"-->
<!-- >-->
<!-- </tooltip>-->
<!-- </template>-->
<!-- <div v-if="state === 'view' || state === 'createdJob'">-->
<!-- {{ form.item }}-->
<!-- </div>-->
<!-- <el-input-->
<!-- v-else-->
<!-- v-model="form.item"-->
<!-- :readonly="true"-->
<!-- :require="rules.item && rules.item.some((rule) => rule.required)"-->
<!-- >-->
<!-- <i-->
<!-- slot="suffix"-->
<!-- class="el-input__icon el-icon-copy-document"-->
<!-- @click.stop="showDialog('item')"-->
<!-- ></i>-->
<!-- </el-input>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="8">-->
<!-- <el-form-item prop="itemDesc">-->
<!-- <template slot="label">-->
<!-- <label>{{ form.itemDesc }}</label>-->
<!-- </template>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <el-row>-->
<!-- <el-col :span="10">-->
<!-- <el-form-item prop="operation">-->
<!-- <template slot="label">-->
<!-- <tooltip-->
<!-- content="工序编码"-->
<!-- >-->
<!-- </tooltip>-->
<!-- </template>-->
<!-- <div v-if="state === 'view' || state === 'createdJob'">-->
<!-- {{ form.operation }}-->
<!-- </div>-->
<!-- <el-input-->
<!-- v-else-->
<!-- v-model="form.operation"-->
<!-- :readonly="true"-->
<!-- clearable-->
<!-- >-->
<!-- <i-->
<!-- slot="suffix"-->
<!-- class="el-input__icon el-icon-copy-document"-->
<!-- @click.stop="showDialog('operation')"-->
<!-- ></i>-->
<!-- <i-->
<!-- slot="suffix"-->
<!-- class="el-input__icon el-icon-circle-close"-->
<!-- @click.stop="clearOperation()"-->
<!-- ></i>-->
<!-- </el-input>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- <el-col :span="8">-->
<!-- <el-form-item prop="operationDesc">-->
<!-- <template slot="label">-->
<!-- <label>{{ form.operationDesc }}</label>-->
<!-- </template>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- </el-form>-->
</div>
</el-tab-pane>
<el-tab-pane :label="$t('mes.detail')" name="detail">
@ -794,7 +897,7 @@ import { type } from '@/views/mes/qms/qc-item/init'
import { copyJSON } from '@/util/util'
import {
initForm,
inspecFreqObj,
inspecFreqObj, inspectionLevelDialogObj,
itemDialogObj,
operationDialogObj,
qcItemObj,
@ -811,7 +914,11 @@ import { fetchItemList } from '@/api/admin/dict'
import tooltip from '@/components/tooltip/index.vue'
import {fetchList as itemDialogFetchFun} from '@/api/mes/prd/item'
import { fetchList as fetchOperationList } from '@/api/mes/prd/operation-backups'
import {fetchList as fetchLevelList} from '@/api/mes/qms/inspection-level'
import textGroupNo from "@/views/mes/qms/qc-plan/content/textGroupNo";
import {itemObj} from "@/views/mes/qms/inspec/init";
import inspectionLevel from "@/views/mes/qms/inspection-level/index.vue";
import dynamicFunction from "@/const/crud/mes/common/dynamic-data";
export default {
mixins: [customData],
@ -866,6 +973,9 @@ export default {
operationDialogObj,
fetchOperationList,
operationDialogShow:false,
inspectionLevelDialogObj,
inspectionLevelDialogShow:false,
fetchLevelList,
form: copyJSON(initForm),
textGroupNoShow:false,
titleText: '',
@ -949,14 +1059,18 @@ export default {
calibrationMap: {},
itemType: [],
controlMode: [],
targetTableData:[],
insepecLevelList:[]
}
},
watch: {
modalObj: {
handler(newValue) {
let me = this
this.form = copyJSON(newValue)
let f = this.inspecTypeList.find((s) => s.value == newValue.inspecType)
this.form.inspecTypeName = f ? f.label : null
me.targetTableData = copyJSON(newValue.qmsQcPlanTargetList)
this.tableData = newValue.qcPlanDetailList ? copyJSON(newValue.qcPlanDetailList) : []
if (this.tableData.length > 0) {
this.tableData.forEach((t) => {
@ -1001,6 +1115,9 @@ export default {
},
},
computed: {
inspectionLevel() {
return inspectionLevel
},
setQcPlan: {
get: function () {
return this.form.qcPlan
@ -1021,6 +1138,8 @@ export default {
},
},
created() {
this.insepecLevelList = dynamicFunction.getDictListCust('inspect_level')
console.log(this.insepecLevelList)
this.getDict()
this.months = []
for (let i = 1; i <= 12; i++) {
@ -1161,6 +1280,15 @@ export default {
break
case 'textGroupNo':
this.textGroupNoShow = true
break
case 'item':
this.itemDialogShow = true
break
case 'operation':
this.operationDialogShow = true
break
case 'inspecLevel':
this.inspectionLevelDialogShow = true
break
}
},
@ -1203,6 +1331,16 @@ export default {
case 'textGroupNo':
this.$set(this.tableData[this.tableIndex], 'textGroupNo', row.textGroupNo)
break
case 'item':
this.$set(this.targetTableData[this.tableIndex], 'item', row.item)
this.$set(this.targetTableData[this.tableIndex], 'itemBo', row.handle)
this.$set(this.targetTableData[this.tableIndex], 'itemDesc', row.description)
break
case 'operation':
this.$set(this.targetTableData[this.tableIndex], 'operation', row.operation)
this.$set(this.targetTableData[this.tableIndex], 'operationDesc', row.description)
this.$set(this.targetTableData[this.tableIndex], 'operationBo', row.handle)
break
}
},
closeForm() {
@ -1223,8 +1361,29 @@ export default {
// 保存
handleSave() {
let me = this
if (isBlank(me.form.item)) {
return this.$message.error('检验对象物料不能为空')
if (me.targetTableData.length === 0) {
return this.$message.error('检验对象列表不能为空')
}
for (let i = 0; i < me.targetTableData.length; i++) {
let t = me.targetTableData[i]
if (isBlank(t.item)) {
return this.$message.error('检验对象物料不能为空')
}
if (me.form.inspecType === '0') {
let a = me.targetTableData.filter((item) => item.item === t.item && item.operation === t.operation)
if (a.length > 1) {
return this.$message.error('检验对象物料不能重复')
}
} else {
for (let j = 0; j < me.targetTableData.length; j++) {
let d = me.targetTableData[j]
if (t.item === d.item) {
if (t.inspectLevel === d.inspectLevel && t.seq !== d.seq) {
return this.$message.error('同一物料检验等级不能相同')
}
}
}
}
}
if (isBlank(me.form.samplePlan) && me.form.inspecType == '1') {
return this.$message.error('抽样规则不能为空')
@ -1248,6 +1407,7 @@ export default {
}
this.form.customFields = this.buildCustomDataSaveParam()
me.form.qmsQcPlanTargetList = me.targetTableData
this.setReq()
if (this.state == 'add') {
this.doAdd(me.form)
@ -1467,6 +1627,33 @@ export default {
})
}
},
tableAddTarget() {
let me = this
me.targetTableData.push({inspectLevel:'0'})
setSeq(me.targetTableData, 'seq')
},
tableLessTarget() {
if (this.$refs.targetTableData.selection.length === 0) {
return this.$message.warning('请选择需要移除的数据')
} else {
this.$confirm('确认移除?', {
confirmButtonText: this.$t('common.confirm'),
cancelButtonText: this.$t('common.cancel'),
type: 'warning',
}).then(() => {
this.$refs.targetTableData.selection.forEach((s) => {
this.targetTableData.forEach((t, index) => {
if (s.seq === t.seq) {
this.targetTableData.splice(index, 1)
}
})
})
this.$refs.targetTableData.clearSelection()
setSeq(this.targetTableData, 'seq')
})
}
},
handleClick(tab, event) {
this.dialogWidth = '60%'
if (tab.name === 'detail') {
@ -1498,6 +1685,7 @@ export default {
this.form.calibrationFreq = null
this.tableData = []
this.dateData = []
this.targetTableData = []
this.$refs.form.clearValidate('calibrationType')
},

View File

@ -333,6 +333,10 @@ export default {
item.inspectionLevel = response.data.data.operationOutListDTOList[0].inspectionLevel
item.width = response.data.data.operationOutListDTOList[0].width
item.length = response.data.data.operationOutListDTOList[0].length
item.thickness = response.data.data.operationOutListDTOList[0].thickness
item.outMeter = response.data.data.operationOutListDTOList[0].outMeter
item.outWeight = response.data.data.operationOutListDTOList[0].outWeight
item.remark = response.data.data.operationOutListDTOList[0].remark
} else {
this.searchForm.operationOutData.push(response.data.data.operationOutListDTOList[0])
}

View File

@ -406,6 +406,10 @@ export default {
item.inspectionLevel = response.data.data.operationOutListDTOList[0].inspectionLevel
item.width = response.data.data.operationOutListDTOList[0].width
item.length = response.data.data.operationOutListDTOList[0].length
item.thickness = response.data.data.operationOutListDTOList[0].thickness
item.outMeter = response.data.data.operationOutListDTOList[0].outMeter
item.outWeight = response.data.data.operationOutListDTOList[0].outWeight
item.remark = response.data.data.operationOutListDTOList[0].remark
} else {
this.searchForm.operationOutData.push(response.data.data.operationOutListDTOList[0])
}

View File

@ -480,6 +480,10 @@ export default {
item.inspectionLevel = response.data.data.operationOutListDTOList[0].inspectionLevel
item.width = response.data.data.operationOutListDTOList[0].width
item.length = response.data.data.operationOutListDTOList[0].length
item.thickness = response.data.data.operationOutListDTOList[0].thickness
item.outMeter = response.data.data.operationOutListDTOList[0].outMeter
item.outWeight = response.data.data.operationOutListDTOList[0].outWeight
item.remark = response.data.data.operationOutListDTOList[0].remark
} else {
this.searchForm.operationOutData.push(response.data.data.operationOutListDTOList[0])
}

View File

@ -243,26 +243,15 @@ import {
getObj,
greatSaveOrUpdate,
submit,
greatDelete
greatDelete, selectStoragRequest
} from "@/api/mes/wip/product-storag-request";
import {stringFormat, isBlank} from "@/util/string";
import {
doAdd,
replaceData,
doDispatch,
doDeleteAndLogRecord,
} from '@/api/mes/tds/dispatch-equipment'
import { mapGetters } from 'vuex'
import { getStore } from '@/util/store'
import {hideLoading, showLoading} from '@/const/loading'
import {fetchItemList} from "@/api/admin/dict";
import dynamicFunction from "@/const/crud/mes/common/dynamic-data";
import {listByActivityId} from "@/api/admin/activity-option";
import {setSeq} from "@/util/table";
import {dcc, nlv_wms} from "@/api/prefix";
import ExcelJS from "exceljs";
import moment from "moment/moment";
import {mom_wms} from "@/api/prefix";
export default {
name: 'product-storag-request',
@ -568,7 +557,6 @@ export default {
return me.$message.error('请检索单据号操作');
}
debugger
for (let rowObject of me.storagRequestList) {
if (me.isNotBank(documentNo)) {
if (documentNo !== rowObject.documentNo) {
@ -727,13 +715,15 @@ export default {
// 导出excel
doExcel() {
this.downBlobFile(nlv_wms('/z-storag-request/exportData'), this.form, '生产入库单.xlsx')
this.downBlobFile(mom_wms('/z-storag-request/exportData'), this.form, '生产入库单.xlsx')
},
//表格多选
handleSelectionChange(val) {
this.multipleSelection = val;
},
// 查询单据号是否存在
// 单据补打印
doRePrint() {
let me = this;
@ -742,27 +732,39 @@ export default {
if (isBlank(documentNo)) {
return me.$message.error('请检索单据号后操作');
}
if (storagRequestList.length === 0) {
return me.$message.error('该单据号['+documentNo+']不存在');
}
for (let rowObject of storagRequestList) {
if (me.isNotBank(documentNo)) {
if (documentNo !== rowObject.documentNo) {
return me.$message.error('请检索单据号后操作');
}
if (rowObject.documentStatus !== '提交' ) {
return me.$message.error(documentNo+'单据状态不是提交状态不允许打印');
}
}
}
// 判断 单据号是否存在
showLoading();
selectStoragRequest(documentNo).then(response => {
hideLoading();
if (response.data.code != 0) {
return me.$message.error(response.data.msg);
}
// 单据号存在,就执行打印
me.printPdf(documentNo);
}).catch(e => {
console.log(e);
hideLoading();
});
},
printPdf(documentNo) {
let me = this;
// 打印
showLoading();
axios({
method: 'get',
url: nlv_wms('/z-storag-request/rePrint/' + documentNo + '/' + me.site),
url: mom_wms('/z-storag-request/rePrint/' + documentNo + '/' + me.site),
headers: {
'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
},

View File

@ -119,7 +119,7 @@
import {listByActivityId} from "@/api/admin/activity-option";
import {operationDialogObj, resourceDialogObj, shopOrderObj} from "@/views/mes/wip/resource-feeding/init";
import {fetchList as getShopOrderList} from "@/api/mes/prd/shop-order";
import {findOperationList as getOperationList} from '@/api/mes/prd/operation';
import {fetchList as getOperationList} from '@/api/mes/prd/operation';
import {findResourceList as getResourceList} from '@/api/mes/pms/resrce'
import {copyJSON} from "@/util/util";
import {checkItemGroup, downItemObj, selectEqpFeedingListPage, upItemObj,selectAndSaveLotMaterial,selectByMaterialLot} from '@/api/mes/wms/warehouse/eqp-feeding'
@ -291,6 +291,7 @@
}
// 更新form对象
this.formObj = Object.assign({}, this.formObj, obj)
this.tableData = []
},
//扫描条码
scanMaterialLot() {
@ -413,6 +414,9 @@
if (t.materialLot == obj.materialLot) {
return this.$message.error('条码号' + t.materialLot + '重复')
}
if (t.shopOrder === obj.shopOrder && t.item === obj.item) {
return this.$message.error('列表中已经存在物料['+t.item+']')
}
}
obj.type = '6'
obj.checkItemMaterialLot = re.data.data.checkItemMaterialLot
@ -437,6 +441,9 @@
if (t.materialLot == re.data.data.materialLot) {
return this.$message.error('条码号' + t.materialLot + '重复')
}
if (t.shopOrder === obj.shopOrder && t.item === obj.item) {
return this.$message.error('列表中已经存在物料['+t.item+']')
}
}
obj.type = '4'
me.tableData.push(obj)

View File

@ -31,7 +31,7 @@ export const operationDialogObj = {
}
export const resourceDialogObj = {
condition: 'resource',
searchText: 'resrce',
tableColumn: [
{
prop: 'resrce',

View File

@ -587,9 +587,11 @@ export default {
showLoading();
saveDocumentDetailData(newArray).then(res => {
hideLoading();
debugger
this.$message.success("执行成功");
me.dialogRegisterVisible = false;
}).catch(error => {
debugger
hideLoading();
this.$message.error(error);
});

View File

@ -45,13 +45,15 @@
</el-table-column>
<el-table-column label="物料编号" prop="item" align="center"></el-table-column>
<el-table-column label="物料名称" prop="itemDescription" align="center"></el-table-column>
<el-table-column label="客户物料编码" prop="customerItem" align="center"></el-table-column>
<el-table-column label="客户物料名称" prop="customerItemDesc" align="center"></el-table-column>
<el-table-column label="出货数量" prop="applicationsQuantity" align="center"></el-table-column>
<!--<el-table-column label="客户物料编码" prop="customerItem" align="center"></el-table-column>
<el-table-column label="客户物料名称" prop="customerItemDesc" align="center"></el-table-column>
<el-table-column label="出货数量" prop="applicationsQuantity" align="center"></el-table-column>-->
<el-table-column label="单位" prop="unitOfMeasure" align="center"></el-table-column>
<el-table-column label="拣货数量" prop="pickQty" align="center"></el-table-column>
<el-table-column label="出货仓库" prop="sourceWarehouse" align="center"></el-table-column>
<el-table-column label="涂布批次" prop="salesBatch" align="center"></el-table-column>
<el-table-column label="拣货状态" prop="pickStatus" align="center">
<el-table-column label="拣货数量" prop="pickQty" align="center"></el-table-column>
<!--<el-table-column label="拣货状态" prop="pickStatus" align="center">
<template slot-scope="scope">
{{formatterConst[scope.column.property][scope.row[scope.column.property]]}}
</template>
@ -60,22 +62,22 @@
<template slot-scope="scope">
{{formatterConst[scope.column.property][scope.row[scope.column.property]]}}
</template>
</el-table-column>
<el-table-column label="出货状态" prop="state" align="center">
</el-table-column>-->
<el-table-column label="单据行状态" prop="state" align="center">
<template slot-scope="scope">
{{formatterConst[scope.column.property][scope.row[scope.column.property]]}}
</template>
</el-table-column>
<el-table-column label="POD状态" prop="podStatus" align="center">
<!--<el-table-column label="POD状态" prop="podStatus" align="center">
<template slot-scope="scope">
{{formatterConst[scope.column.property][scope.row[scope.column.property]]}}
</template>
</el-table-column>
</el-table-column>-->
</el-table>
</el-tab-pane>
</el-tabs>
<el-dialog :visible.sync="dialog.suggestDialog.visible" center fullscreen>
<!--<el-dialog :visible.sync="dialog.suggestDialog.visible" center fullscreen>
<el-form :model="formObj" label-width="auto">
<el-row>
<el-col :span="8">
@ -113,7 +115,7 @@
<el-button type="primary" @click="exportSaleSuggest">下载</el-button>
<el-button type="primary" @click="openOrCloseDialog(dialog.suggestDialog)">返回</el-button>
</div>
</el-dialog>
</el-dialog>-->
<el-dialog :visible.sync="dialog.addressDialog.visible" center width="20%">
<el-form :model="formObj" label-width="auto">
@ -150,17 +152,18 @@
</el-dialog>
<div style="margin-top: 10px;">
<el-button type="warning" @click="pickingSuggest">拣货推荐</el-button>
<!--<el-button type="warning" @click="pickingSuggest">拣货推荐</el-button>-->
<el-button type="warning" @click="pickingRemove">拣货清除</el-button>
<el-button type="primary" @click="pickingPost">拣货过账</el-button>
<el-button type="warning" @click="pickingPrint(true)">标签试打印</el-button>
<!-- <el-button type="primary" @click="pickingPost">拣货过账</el-button>-->
<!-- <el-button type="warning" @click="pickingPrint(true)">标签试打印</el-button>-->
<el-button type="warning" @click="pickingPrint(false)">标签打印</el-button>
<el-button type="warning" @click="pickingPrintA4">托标签打印A4</el-button>
<!--<el-button type="warning" @click="pickingPrintA4">托标签打印A4</el-button>-->
<el-button type="warning" @click="rePrint">标签补打印</el-button>
<el-button type="primary" @click="openOrCloseDialog(dialog.saleOutPostConfirmDialog, checkSaleOutPost)">出货过账
</el-button>
<el-button type="warning" @click="saleOutPrint">出货清单打印</el-button>
<el-button type="warning" @click="openOrCloseDialog(dialog.addressDialog, checkRetrieve)">送货单打印</el-button>
<el-button type="warning" @click="/*openOrCloseDialog(dialog.addressDialog, checkRetrieve)*/">附件打印</el-button>
<el-button type="danger" @click="chooseCancel">冲销</el-button>
</div>
</basic-container>
@ -226,7 +229,9 @@
state: {
"SAVE": "保存",
"SUBMIT": "提交",
"CLOSE": "过账"
"CLOSE": "过账",
"PICKING": "拣货中",
"TBC": "待确认",
},
oqcResults: {
"BJ": "报检",
@ -237,7 +242,9 @@
pickStatus: {
"SAVE": "保存",
"SUBMIT": "提交",
"POST": "过账"
"POST": "过账",
"PICKING": "拣货中",
"TBC": "待确认"
},
},