常熟吴彦祖 3 weeks ago
parent
commit
6841880018
  1. 34
      src/api/haianWarehouse/warehousePallet.js
  2. 906
      src/views/modules/haianWarehouse/warehousePallet/warehousePallet54.vue

34
src/api/haianWarehouse/warehousePallet.js

@ -0,0 +1,34 @@
import { createAPI } from '@/utils/httpRequest.js'
// 海安托盘列表查询,返回主表与新增聚合字段 - rqrq
export const haiAnGetPalletList = data => createAPI('/autoWareHourceHaian/haiAnPallet/list', 'post', data)
// 海安托盘详情查询(按site+palletId) - rqrq
export const haiAnGetPalletInfo = data => createAPI('/autoWareHourceHaian/haiAnPallet/info', 'post', data)
// 海安托盘保存 - rqrq
export const haiAnSavePallet = data => createAPI('/autoWareHourceHaian/haiAnPallet/save', 'post', data)
// 海安托盘更新 - rqrq
export const haiAnUpdatePallet = data => createAPI('/autoWareHourceHaian/haiAnPallet/update', 'post', data)
// 海安托盘删除(软删除) - rqrq
export const haiAnDeletePallet = data => createAPI('/autoWareHourceHaian/haiAnPallet/delete', 'post', data)
// 海安托盘状态字典 - rqrq
export const haiAnGetPalletStatusOptions = data => createAPI('/autoWareHourceHaian/haiAnPallet/statusOptions', 'post', data)
// 获取当前用户授权工厂列表 - rqrq
export const haiAnGetUserAuthorizedSites = data => createAPI('/autoWareHourceHaian/haiAnPallet/getUserAuthorizedSites', 'post', data)
// 获取海安托盘大分类列表 - rqrq
export const haiAnGetPalletFamilyList = data => createAPI('/autoWareHourceHaian/haiAnPallet/getPalletFamilyList', 'post', data)
// 获取海安托盘类型列表 - rqrq
export const haiAnGetPalletTypeList = data => createAPI('/autoWareHourceHaian/haiAnPallet/getPalletTypeList', 'post', data)
// 获取海安托盘最大编号信息(批量新增弹窗) - rqrq
export const haiAnGetMaxPalletNoByFamily = data => createAPI('/autoWareHourceHaian/haiAnPallet/getMaxPalletNoByFamily', 'post', data)
// 海安托盘批量生成 - rqrq
export const haiAnBatchGeneratePallet = data => createAPI('/autoWareHourceHaian/haiAnPallet/batchGeneratePallet', 'post', data)

906
src/views/modules/haianWarehouse/warehousePallet/warehousePallet54.vue

@ -0,0 +1,906 @@
<template>
<div class="mod-config">
<el-form :inline="true" label-position="top">
<el-form-item label="工厂">
<el-select v-model="queryData.site" placeholder="请选择工厂" style="width: 130px;" clearable @change="onQuerySiteChange">
<el-option
v-for="item in siteOptions"
:key="item.site"
:label="item.siteName || item.site"
:value="item.site"
/>
</el-select>
</el-form-item>
<el-form-item label="托盘ID">
<el-input v-model="queryData.palletId" placeholder="请输入托盘ID" style="width: 150px;" clearable @keyup.enter.native="getDataList" />
</el-form-item>
<el-form-item label="托盘大分类">
<el-select v-model="queryData.palletFamily" placeholder="请选择" style="width: 140px;" clearable @change="onQueryFamilyChange">
<el-option
v-for="item in palletFamilyOptions"
:key="item.palletFamily"
:label="item.palletFamilyDesc || item.palletFamily"
:value="item.palletFamily"
/>
</el-select>
</el-form-item>
<el-form-item label="托盘类型">
<el-select v-model="queryData.palletType" placeholder="请选择" style="width: 150px;" clearable>
<el-option
v-for="item in palletTypeOptions"
:key="item.palletType"
:label="item.typeDesc || item.palletType"
:value="item.palletType"
/>
</el-select>
</el-form-item>
<el-form-item label="托盘状态">
<el-select v-model="queryData.status" placeholder="请选择" style="width: 120px;" clearable>
<el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
<el-form-item label="站点">
<el-input v-model="queryData.locationCode" placeholder="请输入站点编码" style="width: 140px;" clearable @keyup.enter.native="getDataList" />
</el-form-item>
<el-form-item label="区域">
<el-input v-model="queryData.area" placeholder="请输入区域编码" style="width: 130px;" clearable @keyup.enter.native="getDataList" />
</el-form-item>
<el-form-item style="margin-top: 20px;">
<el-button type="primary" :loading="queryLoading" @click="getDataList">查询</el-button>
<el-button @click="resetQuery">重置</el-button>
<!-- 导出字段与页面字段保持同口径避免口径不一致 - rqrq -->
<download-excel
:fields="fields()"
:data="exportData"
type="xls"
:name="exportName"
:header="exportHeader"
:footer="exportFooter"
:fetch="createExportData"
:before-generate="startDownload"
:before-finish="finishDownload"
worksheet="托盘"
class="el-button el-button--primary el-button--medium"
>
导出
</download-excel>
</el-form-item>
<el-form-item style="margin-top: 20px;">
<el-button type="primary" @click="openCreateDialog">新增托盘</el-button>
<el-button type="success" @click="openBatchGenerateDialog">批量新增托盘</el-button>
</el-form-item>
</el-form>
<el-table
:height="height"
:data="dataList"
border
stripe
v-loading="tableLoading"
@selection-change="selectionChangeHandle"
style="width: 100%;"
>
<el-table-column type="selection" width="55" align="center" header-align="center" />
<el-table-column
v-for="(item, index) in columnList"
:key="index"
:prop="item.columnProp"
:label="item.columnLabel"
:min-width="item.columnWidth"
:align="item.align"
:header-align="item.headerAlign"
:show-overflow-tooltip="item.showOverflowTooltip !== false"
>
<template slot-scope="scope">
<span>{{ formatColumnValue(scope.row, item) }}</span>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" width="140" align="center" header-align="center">
<template slot-scope="scope">
<a style="margin-right: 10px;" @click="openEditDialog(scope.row)">编辑</a>
<a style="color: #f56c6c;" @click="deleteOne(scope.row)">删除</a>
</template>
</el-table-column>
</el-table>
<el-pagination
@size-change="sizeChangeHandle"
@current-change="currentChangeHandle"
:current-page="pageIndex"
:page-sizes="[10, 20, 50, 100]"
:page-size="pageSize"
:total="totalPage"
layout="total, sizes, prev, pager, next, jumper"
/>
<!-- 托盘编辑弹窗统一维护主表字段并防重复提交 - rqrq -->
<el-dialog
:title="editDialog.title"
:close-on-click-modal="false"
:close-on-press-escape="false"
:visible.sync="editDialog.visible"
width="980px"
>
<el-form ref="editForm" :model="editFormData" :rules="formRules" label-position="top">
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="工厂" prop="site">
<el-select v-model="editFormData.site" :disabled="editDialog.readonlySite" style="width: 100%;" @change="onEditSiteChange">
<el-option
v-for="item in siteOptions"
:key="item.site"
:label="item.siteName || item.site"
:value="item.site"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="托盘ID" prop="palletId">
<el-input v-model="editFormData.palletId" :readonly="!!editFormData.id" placeholder="为空时后端自动生成" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="托盘大分类" prop="palletFamily">
<el-select v-model="editFormData.palletFamily" style="width: 100%;" @change="onEditFamilyChange">
<el-option
v-for="item in editDialog.palletFamilyOptions"
:key="item.palletFamily"
:label="item.palletFamilyDesc || item.palletFamily"
:value="item.palletFamily"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="托盘类型" prop="palletType">
<el-select v-model="editFormData.palletType" style="width: 100%;">
<el-option
v-for="item in editDialog.palletTypeOptions"
:key="item.palletType"
:label="item.typeDesc || item.palletType"
:value="item.palletType"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="托盘状态" prop="status">
<el-select v-model="editFormData.status" style="width: 100%;">
<el-option v-for="item in statusOptions" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="区域编码">
<el-input v-model="editFormData.area" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="站点编码">
<el-input v-model="editFormData.locationCode" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="WCS站点">
<el-input v-model="editFormData.wcsLocation" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="托盘尺寸">
<el-input v-model="editFormData.palletSize" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="最大承重(kg)">
<el-input v-model="editFormData.maxLoad" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="自动分拣">
<el-select v-model="editFormData.autoSort" style="width: 100%;">
<el-option label="是" value="Y" />
<el-option label="否" value="N" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="分拣方式">
<el-select v-model="editFormData.soreType" style="width: 100%;">
<el-option label="人工/混装" :value="0" />
<el-option label="气胀轴自动分拣" :value="1" />
<el-option label="抱箱自动分拣" :value="2" />
<el-option label="直接出库" :value="3" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="6">
<el-form-item label="空托盘标记">
<el-select v-model="editFormData.emptyFlag" style="width: 100%;">
<el-option label="是" value="Y" />
<el-option label="否" value="N" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="调用标记">
<el-select v-model="editFormData.callingFlag" style="width: 100%;">
<el-option label="是" value="Y" />
<el-option label="否" value="N" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="备注">
<el-input v-model="editFormData.remark" type="textarea" :rows="3" />
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer" style="margin-top: 52px">
<el-button type="primary" :loading="editDialog.saveLoading" :disabled="editDialog.saveLoading" @click="saveEditForm">
{{ editDialog.saveLoading ? '保存中...' : '保存' }}
</el-button>
<el-button :disabled="editDialog.saveLoading" @click="editDialog.visible = false">取消</el-button>
</div>
</el-dialog>
<!-- 批量新增弹窗按大分类前缀生成连续托盘号单类单次<=1000 - rqrq -->
<el-dialog
:close-on-click-modal="false"
:close-on-press-escape="false"
:title="'批量新增托盘 - 工厂: ' + batchGenerateDialog.site"
:visible.sync="batchGenerateDialog.visible"
width="520px"
>
<div v-loading="batchGenerateDialog.loading">
<div class="batch-header">
<span class="batch-col-name">托盘大分类</span>
<span class="batch-col-count">当前数量</span>
<span class="batch-col-input">新增数量</span>
</div>
<div v-for="(item, index) in batchGenerateDialog.palletNoList" :key="index" class="batch-row">
<span class="batch-col-name">{{ item.palletFamilyDesc }} ({{ item.prefix }})</span>
<span class="batch-col-count">{{ item.totalCount || 0 }}</span>
<span class="batch-col-input">
<el-input
v-model.number="item.generateCount"
placeholder="0"
size="small"
style="width: 100px;"
@input="validateCount(item)"
/>
</span>
</div>
<div class="batch-tip">
<i class="el-icon-info" /> 每种托盘单次最多新增1000个
</div>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" :disabled="batchGenerateDialog.saving" :loading="batchGenerateDialog.saving" @click="doBatchGenerate">
{{ batchGenerateDialog.saving ? '生成中...' : '确认生成' }}
</el-button>
<el-button :disabled="batchGenerateDialog.saving" @click="batchGenerateDialog.visible = false">取消</el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {
haiAnBatchGeneratePallet,
haiAnDeletePallet,
haiAnGetMaxPalletNoByFamily,
haiAnGetPalletFamilyList,
haiAnGetPalletList,
haiAnGetPalletStatusOptions,
haiAnGetPalletTypeList,
haiAnGetUserAuthorizedSites,
haiAnSavePallet,
haiAnUpdatePallet
} from '@/api/haianWarehouse/warehousePallet.js'
export default {
name: 'WarehousePallet54',
data() {
return {
queryLoading: false,
tableLoading: false,
height: 450,
queryData: {
site: this.$store.state.user.site || '',
palletId: '',
palletType: '',
palletFamily: '',
status: '',
locationCode: '',
area: '',
partNo: '',
batchNo: '',
page: 1,
limit: 20
},
statusOptions: [],
siteOptions: [],
palletFamilyOptions: [],
palletTypeOptions: [],
dataList: [],
pageIndex: 1,
pageSize: 20,
totalPage: 0,
selectedRows: [],
exportData: [],
exportName: '托盘信息' + this.dayjs().format('YYYYMMDDHHmmss'),
exportHeader: ['托盘信息'],
exportFooter: [],
columnList: [
{ columnProp: 'site', columnLabel: '工厂', columnWidth: 90, align: 'center', headerAlign: 'center' },
{ columnProp: 'palletId', columnLabel: '托盘ID', columnWidth: 120, align: 'center', headerAlign: 'center' },
{ columnProp: 'palletFamilyDesc', columnLabel: '托盘大分类', columnWidth: 120, align: 'center', headerAlign: 'center' },
{ columnProp: 'typeDesc', columnLabel: '托盘类型', columnWidth: 160, align: 'center', headerAlign: 'center' },
{ columnProp: 'status', columnLabel: '托盘状态', columnWidth: 100, align: 'center', headerAlign: 'center', formatter: 'status' },
{ columnProp: 'area', columnLabel: '区域', columnWidth: 90, align: 'center', headerAlign: 'center' },
{ columnProp: 'locationCode', columnLabel: '站点', columnWidth: 120, align: 'center', headerAlign: 'center' },
{ columnProp: 'wcsLocation', columnLabel: 'WCS站点', columnWidth: 120, align: 'center', headerAlign: 'center' },
{ columnProp: 'emptyFlag', columnLabel: '空托盘', columnWidth: 90, align: 'center', headerAlign: 'center', formatter: 'yn' },
{ columnProp: 'callingFlag', columnLabel: '调用标记', columnWidth: 90, align: 'center', headerAlign: 'center', formatter: 'yn' },
{ columnProp: 'remark', columnLabel: '备注', columnWidth: 220, align: 'left', headerAlign: 'center' },
{ columnProp: 'createdBy', columnLabel: '创建人', columnWidth: 100, align: 'center', headerAlign: 'center' },
{ columnProp: 'createdTime', columnLabel: '创建时间', columnWidth: 160, align: 'center', headerAlign: 'center' },
{ columnProp: 'updatedBy', columnLabel: '修改人', columnWidth: 100, align: 'center', headerAlign: 'center' },
{ columnProp: 'updatedTime', columnLabel: '修改时间', columnWidth: 160, align: 'center', headerAlign: 'center' }
],
editDialog: {
visible: false,
title: '新增托盘',
saveLoading: false,
readonlySite: false,
palletFamilyOptions: [],
palletTypeOptions: []
},
editFormData: this.createEmptyForm(),
formRules: {
site: [{ required: true, message: '工厂不能为空', trigger: 'change' }],
palletFamily: [{ required: true, message: '托盘大分类不能为空', trigger: 'change' }],
palletType: [{ required: true, message: '托盘类型不能为空', trigger: 'change' }],
status: [{ required: true, message: '托盘状态不能为空', trigger: 'change' }]
},
batchGenerateDialog: {
visible: false,
loading: false,
saving: false,
site: '',
palletNoList: []
}
}
},
mounted() {
this.$nextTick(() => {
this.height = window.innerHeight - 240
})
},
activated() {
this.initializePage()
},
created() {
this.initializePage()
},
methods: {
// - rqrq
initializePage() {
this.getStatusOptions()
this.getSiteOptions()
this.getPalletFamilyOptions(this.queryData.site)
this.getPalletTypeOptions(this.queryData.site, this.queryData.palletFamily)
this.getDataList()
},
// - rqrq
createEmptyForm() {
return {
id: null,
site: this.$store.state.user.site || '',
palletId: '',
palletType: '',
palletFamily: '',
palletSize: '',
maxLoad: '',
status: 'AVAILABLE',
locationCode: '',
wcsLocation: '',
area: '',
callingFlag: 'N',
autoSort: 'N',
soreType: 0,
emptyFlag: 'N',
remark: '',
createdBy: this.$store.state.user.name,
updatedBy: this.$store.state.user.name
}
},
// - rqrq
getStatusOptions() {
haiAnGetPalletStatusOptions({}).then(({ data }) => {
if (data && data.code === 0) {
this.statusOptions = data.options || []
} else {
this.statusOptions = []
}
}).catch(() => {
this.statusOptions = []
})
},
// - rqrq
getSiteOptions() {
const inData = { userName: this.$store.state.user.name }
haiAnGetUserAuthorizedSites(inData).then(({ data }) => {
if (data && data.code === 0) {
this.siteOptions = data.rows || []
} else {
this.siteOptions = []
}
}).catch(() => {
this.siteOptions = []
})
},
// site - rqrq
getPalletFamilyOptions(site) {
if (!site) {
this.palletFamilyOptions = []
return
}
haiAnGetPalletFamilyList({ site }).then(({ data }) => {
if (data && data.code === 0) {
this.palletFamilyOptions = data.rows || []
} else {
this.palletFamilyOptions = []
}
}).catch(() => {
this.palletFamilyOptions = []
})
},
// site+family - rqrq
getPalletTypeOptions(site, palletFamily) {
if (!site) {
this.palletTypeOptions = []
return
}
const inData = { site, palletFamily: palletFamily || '' }
haiAnGetPalletTypeList(inData).then(({ data }) => {
if (data && data.code === 0) {
this.palletTypeOptions = data.rows || []
} else {
this.palletTypeOptions = []
}
}).catch(() => {
this.palletTypeOptions = []
})
},
// /site - rqrq
onQuerySiteChange(val) {
this.queryData.palletFamily = ''
this.queryData.palletType = ''
this.getPalletFamilyOptions(val)
this.getPalletTypeOptions(val, '')
},
// - rqrq
onQueryFamilyChange(val) {
this.queryData.palletType = ''
this.getPalletTypeOptions(this.queryData.site, val)
},
// sitepage - rqrq
getDataList() {
if (!this.queryData.site) {
this.$message.warning('请先选择工厂')
return
}
this.queryLoading = true
this.tableLoading = true
this.queryData.page = this.pageIndex
this.queryData.limit = this.pageSize
haiAnGetPalletList(this.queryData).then(({ data }) => {
if (data && data.code === 0) {
this.dataList = (data.page && data.page.list) || []
this.totalPage = (data.page && data.page.totalCount) || 0
} else {
this.dataList = []
this.totalPage = 0
this.$alert((data && data.msg) || '查询失败', '提示', { confirmButtonText: '确定' })
}
}).catch(() => {
this.dataList = []
this.totalPage = 0
this.$message.error('查询失败')
}).finally(() => {
this.queryLoading = false
this.tableLoading = false
})
},
// site - rqrq
resetQuery() {
this.pageIndex = 1
this.queryData = {
site: this.$store.state.user.site || '',
palletId: '',
palletType: '',
palletFamily: '',
status: '',
locationCode: '',
area: '',
partNo: '',
batchNo: '',
page: 1,
limit: this.pageSize
}
this.getPalletFamilyOptions(this.queryData.site)
this.getPalletTypeOptions(this.queryData.site, '')
this.getDataList()
},
// - rqrq
selectionChangeHandle(val) {
this.selectedRows = val || []
},
// - rqrq
sizeChangeHandle(val) {
this.pageSize = val
this.pageIndex = 1
this.getDataList()
},
// - rqrq
currentChangeHandle(val) {
this.pageIndex = val
this.getDataList()
},
// site - rqrq
openCreateDialog() {
this.editDialog.title = '新增托盘'
this.editDialog.visible = true
this.editDialog.readonlySite = false
this.editDialog.saveLoading = false
this.editDialog.palletFamilyOptions = [...this.palletFamilyOptions]
this.editDialog.palletTypeOptions = [...this.palletTypeOptions]
this.editFormData = this.createEmptyForm()
this.$nextTick(() => {
if (this.$refs.editForm) {
this.$refs.editForm.clearValidate()
}
})
},
// - rqrq
openEditDialog(row) {
this.editDialog.title = '编辑托盘'
this.editDialog.visible = true
this.editDialog.readonlySite = true
this.editDialog.saveLoading = false
this.editDialog.palletFamilyOptions = [...this.palletFamilyOptions]
this.editDialog.palletTypeOptions = []
this.editFormData = {
id: row.id,
site: row.site,
palletId: row.palletId,
palletType: row.palletType,
palletFamily: row.palletFamily,
palletSize: row.palletSize,
maxLoad: row.maxLoad,
status: row.status,
locationCode: row.locationCode,
wcsLocation: row.wcsLocation,
area: row.area,
callingFlag: row.callingFlag || 'N',
autoSort: row.autoSort || 'N',
soreType: row.soreType == null ? 0 : row.soreType,
emptyFlag: row.emptyFlag || 'N',
remark: row.remark,
updatedBy: this.$store.state.user.name
}
this.getEditPalletTypeOptions(row.site, row.palletFamily)
this.$nextTick(() => {
if (this.$refs.editForm) {
this.$refs.editForm.clearValidate()
}
})
},
// sitesite - rqrq
onEditSiteChange(val) {
this.editFormData.palletFamily = ''
this.editFormData.palletType = ''
this.getEditFamilyOptions(val)
this.getEditPalletTypeOptions(val, '')
},
// - rqrq
onEditFamilyChange(val) {
this.editFormData.palletType = ''
this.getEditPalletTypeOptions(this.editFormData.site, val)
},
// - rqrq
getEditFamilyOptions(site) {
if (!site) {
this.editDialog.palletFamilyOptions = []
return
}
haiAnGetPalletFamilyList({ site }).then(({ data }) => {
if (data && data.code === 0) {
this.editDialog.palletFamilyOptions = data.rows || []
} else {
this.editDialog.palletFamilyOptions = []
}
}).catch(() => {
this.editDialog.palletFamilyOptions = []
})
},
// - rqrq
getEditPalletTypeOptions(site, palletFamily) {
if (!site) {
this.editDialog.palletTypeOptions = []
return
}
haiAnGetPalletTypeList({ site, palletFamily: palletFamily || '' }).then(({ data }) => {
if (data && data.code === 0) {
this.editDialog.palletTypeOptions = data.rows || []
} else {
this.editDialog.palletTypeOptions = []
}
}).catch(() => {
this.editDialog.palletTypeOptions = []
})
},
// 使loading+disabled/ - rqrq
saveEditForm() {
this.$refs.editForm.validate(valid => {
if (!valid) {
return
}
this.editDialog.saveLoading = true
const submitData = { ...this.editFormData }
const request = submitData.id ? haiAnUpdatePallet(submitData) : haiAnSavePallet(submitData)
request.then(({ data }) => {
if (data && data.code === 0) {
this.$message.success(data.msg || '保存成功')
this.editDialog.visible = false
this.getDataList()
} else {
this.$alert((data && data.msg) || '保存失败', '提示', { confirmButtonText: '确定' })
}
}).catch(() => {
this.$message.error('系统异常,请稍后重试')
}).finally(() => {
this.editDialog.saveLoading = false
})
})
},
// - rqrq
deleteOne(row) {
this.$confirm(`确定删除托盘 [${row.palletId}] 吗?`, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const payload = {
ids: [row.id],
operator: this.$store.state.user.name
}
haiAnDeletePallet(payload).then(({ data }) => {
if (data && data.code === 0) {
this.$message.success(data.msg || '删除成功')
this.getDataList()
} else {
this.$alert((data && data.msg) || '删除失败', '提示', { confirmButtonText: '确定' })
}
}).catch(() => {
this.$message.error('系统异常,请稍后重试')
})
}).catch(() => {})
},
// site - rqrq
openBatchGenerateDialog() {
this.batchGenerateDialog.site = this.$store.state.user.site || this.queryData.site
if (!this.batchGenerateDialog.site) {
this.$message.warning('请先选择工厂')
return
}
this.batchGenerateDialog.visible = true
this.batchGenerateDialog.saving = false
this.batchGenerateDialog.palletNoList = []
this.loadPalletMaxNos()
},
// - rqrq
loadPalletMaxNos() {
this.batchGenerateDialog.loading = true
haiAnGetMaxPalletNoByFamily({ site: this.batchGenerateDialog.site }).then(({ data }) => {
if (data && data.code === 0) {
this.batchGenerateDialog.palletNoList = (data.rows || []).map(item => ({
...item,
generateCount: null
}))
} else {
this.batchGenerateDialog.palletNoList = []
this.$alert((data && data.msg) || '查询号段失败', '提示', { confirmButtonText: '确定' })
}
}).catch(() => {
this.batchGenerateDialog.palletNoList = []
this.$message.error('系统异常,请稍后重试')
}).finally(() => {
this.batchGenerateDialog.loading = false
})
},
// 0~1000 - rqrq
validateCount(item) {
if (item.generateCount === '' || item.generateCount == null) {
item.generateCount = null
return
}
const intVal = parseInt(item.generateCount, 10)
if (Number.isNaN(intVal) || intVal < 0) {
item.generateCount = null
return
}
if (intVal > 1000) {
item.generateCount = 1000
this.$message.warning('单次最多新增1000个')
return
}
item.generateCount = intVal
},
// - rqrq
doBatchGenerate() {
const items = this.batchGenerateDialog.palletNoList.filter(item => item.generateCount && item.generateCount > 0)
if (items.length === 0) {
this.$message.warning('请至少输入一种托盘的新增数量')
return
}
let confirmMsg = '确定生成以下托盘吗?\n\n'
items.forEach(item => {
confirmMsg += `${item.palletFamilyDesc} (${item.prefix}):${item.generateCount}\n`
})
this.$confirm(confirmMsg, '批量生成确认', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.executeBatchGenerate(items)
}).catch(() => {})
},
// 便 - rqrq
async executeBatchGenerate(items) {
this.batchGenerateDialog.saving = true
let successCount = 0
let failedCount = 0
let resultMsg = ''
for (const item of items) {
try {
const { data } = await haiAnBatchGeneratePallet({
site: this.batchGenerateDialog.site,
palletFamily: item.palletFamily,
count: item.generateCount,
username: this.$store.state.user.name
})
if (data && data.code === 0) {
successCount += 1
resultMsg += `${item.palletFamilyDesc}: 生成${data.count}个 (${data.startPalletId} ~ ${data.endPalletId})\n`
} else {
failedCount += 1
resultMsg += `${item.palletFamilyDesc}: ${(data && data.msg) || '生成失败'}\n`
}
} catch (e) {
failedCount += 1
resultMsg += `${item.palletFamilyDesc}: 请求异常\n`
}
}
this.batchGenerateDialog.saving = false
const title = failedCount === 0 ? '生成成功' : `生成结果(成功${successCount},失败${failedCount}`
this.$alert(resultMsg, title, {
confirmButtonText: '确定',
type: failedCount === 0 ? 'success' : (failedCount === items.length ? 'error' : 'warning'),
callback: () => {
if (failedCount === 0) {
this.batchGenerateDialog.visible = false
} else {
this.loadPalletMaxNos()
}
this.getDataList()
}
})
},
// limit - rqrq
async createExportData() {
const exportQuery = {
...this.queryData,
page: 1,
limit: 999999
}
const { data } = await haiAnGetPalletList(exportQuery)
if (data && data.code === 0 && data.page && data.page.list) {
return data.page.list
}
return []
},
// - rqrq
startDownload() {},
// - rqrq
finishDownload() {},
// columnList - rqrq
fields() {
const result = {}
this.columnList.forEach(item => {
result[item.columnLabel] = item.columnProp
})
return result
},
// / - rqrq
formatColumnValue(row, column) {
const value = row[column.columnProp]
if (column.formatter === 'yn') {
if (value === 'Y') return '是'
if (value === 'N') return '否'
return value || ''
}
if (column.formatter === 'status') {
const map = {
AVAILABLE: '可用',
OCCUPIED: '使用中',
DAMAGED: '损坏',
DISABLED: '禁用'
}
return map[value] || value || ''
}
return value == null ? '' : value
}
}
}
</script>
<style scoped>
.batch-header {
display: flex;
align-items: center;
padding: 10px 0;
margin-bottom: 6px;
border-bottom: 1px solid #ebeef5;
color: #606266;
font-weight: bold;
}
.batch-row {
display: flex;
align-items: center;
padding: 12px 0;
border-bottom: 1px dashed #ebeef5;
}
.batch-col-name {
flex: 1;
}
.batch-col-count {
width: 100px;
text-align: center;
color: #409eff;
font-weight: bold;
}
.batch-col-input {
width: 140px;
text-align: center;
}
.batch-tip {
margin-top: 12px;
color: #909399;
font-size: 12px;
}
</style>
Loading…
Cancel
Save