From 9e04345fe1adc8a2bf1cd0df1b0b519d0b87e23e Mon Sep 17 00:00:00 2001 From: hyt <958868763@qq.com> Date: Sat, 21 Sep 2024 17:05:29 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E6=8A=A5=E8=A1=A8=E9=9C=80?= =?UTF-8?q?=E6=B1=82=E6=B7=BB=E5=8A=A0=EF=BC=88=E4=B8=BD=E7=9F=A5=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/router/index.js | 266 +++---- .../u8positiveReports/TOBoutputWarehouse.vue | 748 ++++++++++++++++++ .../u8positiveReports/TOCoutputWarehouse.vue | 732 +++++++++++++++++ .../u8positiveReports/baseNewTable2/index.vue | 2 +- vue.config.js | 124 +-- 5 files changed, 1676 insertions(+), 196 deletions(-) create mode 100644 src/views/systemReports/u8positiveReports/TOBoutputWarehouse.vue create mode 100644 src/views/systemReports/u8positiveReports/TOCoutputWarehouse.vue diff --git a/src/router/index.js b/src/router/index.js index f7c3ef6..d346eac 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -40,152 +40,152 @@ export const constantRoutes = [{ component: () => import('@/views/redirect') }] }, -{ - path: '/apiLogs', - component: () => import('@/views/apiLogs/index.vue'), - hidden: true -}, + { + path: '/apiLogs', + component: () => import('@/views/apiLogs/index.vue'), + hidden: true + }, { path: '/apiLogsError', component: () => import('@/views/apiLogsError/index.vue'), hidden: true }, -{ - path: '/login', - component: () => import('@/views/login'), - hidden: true -}, -{ - path: '/test', - component: () => import('@/views/test'), - hidden: true -}, -{ - path: '/register', - component: () => import('@/views/register/index'), - hidden: true -}, -{ - path: '/systemInit', - // name: "databaseIndex", - component: () => import('@/views/systemInit/index'), - hidden: true -}, -{ - path: '/404', - component: () => import('@/views/error/404'), - hidden: true -}, -{ - path: '/401', - component: () => import('@/views/error/401'), - hidden: true -}, + { + path: '/login', + component: () => import('@/views/login'), + hidden: true + }, + { + path: '/test', + component: () => import('@/views/test'), + hidden: true + }, + { + path: '/register', + component: () => import('@/views/register/index'), + hidden: true + }, + { + path: '/systemInit', + // name: "databaseIndex", + component: () => import('@/views/systemInit/index'), + hidden: true + }, + { + path: '/404', + component: () => import('@/views/error/404'), + hidden: true + }, + { + path: '/401', + component: () => import('@/views/error/401'), + hidden: true + }, // { // path: "/contractAssistant", // component: () => import("@/views/contractAssistant"), // hidden: true, // }, -{ - path: '', - component: Layout, - redirect: 'index', - children: [{ - path: 'index', - component: () => import('@/views/index_v2'), - name: 'Index', - meta: { - title: '首页', - icon: 'dashboard', - affix: true - } + { + path: '', + component: Layout, + redirect: 'index', + children: [{ + path: 'index', + component: () => import('@/views/index_v2'), + name: 'Index', + meta: { + title: '首页', + icon: 'dashboard', + affix: true + } + }, + { + path: 'notFound', + component: () => import('@/views/notFound'), + name: 'notFound', + meta: { + title: '404', + icon: 'dashboard' + // affix: true, + } + }, + { + path: 'message', + component: () => import('@/views/newVersionView/message/index'), + name: 'message', + meta: { + title: '消息', + icon: 'dashboard' + } + }, + { + path: 'Workbench', + component: () => import('@/views/newVersionView/Workbench/index'), + name: 'Workbench', + meta: { + title: '工作台', + icon: 'dashboard' + } + }, + { + path: 'MasterDataCenter', + component: () => import('@/views/newVersionView/MasterDataCenter/index'), + name: 'MasterDataCenter', + meta: { + title: '主数据中心', + icon: 'dashboard' + } + }, + { + path: 'ApplicationCenter', + component: () => import('@/views/newVersionView/ApplicationCenter/index'), + name: 'ApplicationCenter', + meta: { + title: '应用管理', + icon: 'dashboard' + } + }, + { + path: 'IntegrationTaskCenter', + component: () => import('@/views/newVersionView/IntegrationTaskCenter/index'), + name: 'IntegrationTaskCenter', + meta: { + title: '集成任务', + icon: 'dashboard' + } + }, + { + path: 'businessCenter', + component: () => import('@/views/newVersionView/businessCenter/index'), + name: 'businessCenter', + meta: { + title: '业务中心', + icon: 'dashboard' + } + } + ] }, { - path: 'notFound', - component: () => import('@/views/notFound'), - name: 'notFound', - meta: { - title: '404', - icon: 'dashboard' - // affix: true, - } - }, - { - path: "message", - component: () => import("@/views/newVersionView/message/index"), - name: "message", - meta: { - title: "消息", - icon: "dashboard", - }, - }, - { - path: "Workbench", - component: () => import("@/views/newVersionView/Workbench/index"), - name: "Workbench", - meta: { - title: "工作台", - icon: "dashboard", - }, - }, - { - path: "MasterDataCenter", - component: () => import("@/views/newVersionView/MasterDataCenter/index"), - name: "MasterDataCenter", - meta: { - title: "主数据中心", - icon: "dashboard", - }, - }, - { - path: "ApplicationCenter", - component: () => import("@/views/newVersionView/ApplicationCenter/index"), - name: "ApplicationCenter", - meta: { - title: "应用管理", - icon: "dashboard", - }, - }, - { - path: "IntegrationTaskCenter", - component: () => import("@/views/newVersionView/IntegrationTaskCenter/index"), - name: "IntegrationTaskCenter", - meta: { - title: "集成任务", - icon: "dashboard", - }, - }, - { - path: "businessCenter", - component: () => import("@/views/newVersionView/businessCenter/index"), - name: "businessCenter", - meta: { - title: "业务中心", - icon: "dashboard", - }, - }, - ] -}, -{ - path: '/user', - component: Layout, - hidden: true, - redirect: 'Profile', - children: [{ - path: 'Profile', - // component: () => import('@/views/system/user/personalCenter/index'), - component: () => - import( - '@/views/systemSettings/userSettings/PersonnelSettings/personalCenter/index' - ), - name: 'Profile', - meta: { - title: '个人中心', - icon: 'user' + path: '/user', + component: Layout, + hidden: true, + redirect: 'Profile', + children: [{ + path: 'Profile', + // component: () => import('@/views/system/user/personalCenter/index'), + component: () => + import( + '@/views/systemSettings/userSettings/PersonnelSettings/personalCenter/index' + ), + name: 'Profile', + meta: { + title: '个人中心', + icon: 'user' - } - }] -}, + } + }] + } // { // path: "/integrationOption", // component: Layout, diff --git a/src/views/systemReports/u8positiveReports/TOBoutputWarehouse.vue b/src/views/systemReports/u8positiveReports/TOBoutputWarehouse.vue new file mode 100644 index 0000000..e565ee6 --- /dev/null +++ b/src/views/systemReports/u8positiveReports/TOBoutputWarehouse.vue @@ -0,0 +1,748 @@ +<template> + <div class="MachineSchedulingTable"> + <!-- 搜索框--> + + <div class="search"> + <div class="datepickBox" style=""> + <el-date-picker + v-model="queryCriteria.businessDate_start" + type="date" + placeholder="出库日期-开始" + value-format="yyyy-MM-dd" + > + </el-date-picker> + </div> + <div class="datepickBox" style=""> + <el-date-picker + v-model="queryCriteria.businessDate_end" + type="date" + placeholder="交易采购-结束" + value-format="yyyy-MM-dd" + > + </el-date-picker> + </div> + <div class="datepickBox" style=""> + <el-date-picker + v-model="queryCriteria.successfulTradeDate_start" + type="date" + placeholder="交易成功开始时间" + value-format="yyyy-MM-dd" + > + </el-date-picker> + </div> + <div class="datepickBox" style=""> + <el-date-picker + v-model="queryCriteria.successfulTradeDate_end" + type="date" + placeholder="交易成功结束时间" + value-format="yyyy-MM-dd" + > + </el-date-picker> + </div> + <!-- TOB销售-库存 --> + <div class="chunk"> + <el-date-picker + v-model="queryCriteria.newPushDate" + type="date" + placeholder="TOB库存推送时间" + value-format="yyyy-MM-dd" + > + </el-date-picker> + </div> + <div class="chunk"> + <el-input v-model="queryCriteria.newTransmitInfo" placeholder="TOB库存报错详情"></el-input> + </div> + <div class="radio"> + <el-select v-model="queryCriteria.newstate" placeholder="TOB出库同步成功"> + <el-option + v-for="item in stateOptions" + :key="item.value" + :label="item.label" + :value="item.value" + > + </el-option> + </el-select> + </div> + <div class="chunk"> + <el-input v-model="queryCriteria.newsystemnumber" placeholder="TOB库存下游单号"></el-input> + </div> + <div class="chunk"> + <el-input v-model="queryCriteria.newsystemprimary" placeholder="TOB库存下游主键"></el-input> + </div> + <!-- TOB销售-确认收入 --> + <div class="chunk"> + <el-date-picker + v-model="queryCriteria.def5" + type="date" + placeholder="TOB确认收入推送时间" + value-format="yyyy-MM-dd" + > + </el-date-picker> + </div> + <div class="chunk"> + <el-input v-model="queryCriteria.def6" placeholder="TOB确认收入报错详情"></el-input> + </div> + <div class="radio"> + <el-select v-model="queryCriteria.newState4" placeholder="TOB确认收入交易成功-红"> + <el-option + v-for="item in stateOptions" + :key="item.value" + :label="item.label" + :value="item.value" + > + </el-option> + </el-select> + </div> + <div class="chunk"> + <el-input v-model="queryCriteria.newSystemNumber4" placeholder="TOB确认收入下游单号"></el-input> + </div> + <div class="chunk"> + <el-input v-model="queryCriteria.newSystemPrimary4" placeholder="TOB确认收入下游主键"></el-input> + </div> + <!-- toc销售-库存 --> + <div class="chunk"> + <el-date-picker + v-model="queryCriteria.newpushdate" + type="date" + placeholder="TOC库存推送时间" + value-format="yyyy-MM-dd" + > + </el-date-picker> + </div> + <div class="chunk"> + <el-input v-model="queryCriteria.newtransmitinfo" placeholder="TOC库存推送详情"></el-input> + </div> + <div class="radio"> + <el-select v-model="queryCriteria.newstate" placeholder="TOC出库同步成功"> + <el-option + v-for="item in stateOptions" + :key="item.value" + :label="item.label" + :value="item.value" + > + </el-option> + </el-select> + </div> + <div class="chunk"> + <el-input v-model="queryCriteria.newsystemnumber" placeholder="TOC库存下游单号"></el-input> + </div> + <div class="chunk"> + <el-input v-model="queryCriteria.newsystemprimary" placeholder="TOC库存下游主键"></el-input> + </div> + + + </div> + <div> + <el-button + type="primary" + @click="query" + :loading="loading" + size="small" + style=" margin: 5px 5px" + >查询 + </el-button> + <!-- <el-button--> + <!-- type="primary"--> + <!-- @click="downLoad"--> + <!-- :loading="loading"--> + <!-- size="small"--> + <!-- style=" margin: 5px 5px"--> + <!-- >excel导出--> + <!-- </el-button>--> + <el-button + type="warning" + @click="reset" + :loading="loading" + size="small" + style="margin: 5px 5px" + >重置 + </el-button> + </div> + <!-- 主体内容--> + <div class="main"> + <baseNewTable + :tableData="mainTableData" + :tableColumn="mainTableColumn" + :tableLoading="tableLoading" + :tableDataMergeList="tableDataMergeList" + :pageModel="pageModel" + @pageSizeChange="(val) => pageSizeChange(val, pageModel)" + @pageChange="(val) => pageChange(val, pageModel)" + exportEventName="ToB库存报表" + > + </baseNewTable> + </div> + </div> +</template> + +<script> +import baseNewTable from './baseNewTable2/index.vue' +import { authApi, downFilesBasedFileNameFileTypeAPI } from '@/api/apis/auth' +import { + basePrintJS +} from '@/utils/util.js' + +export default { + name: 'MachineSchedulingTable', + data() { + return { + stateOptions: [ + { label: '全部', value: 'all' }, + { label: '成功', value: 'Y' }, + { label: '失败', value: 'N' } + ], + //搜索框内容 + queryCriteria: { + newPushDate: '', + newTransmitInfo: '', + newstate: '', + newsystemnumber: '', + newsystemprimary: '', + def5: '', + def6: '', + newState4: '', + newSystemNumber4: '', + newSystemPrimary4: '', + newpushdate: '', + newtransmitinfo: '', + def1: '', + def2: '', + newstate2: '', + newsystemnumber2: '', + newsystemprimary2: '', + def3: '', + def4: '', + newstate3: '', + newsystemnumber3: '', + newsystemprimary3: '', + businessType: 'TOB_ORDER', + businessDate_start: '', + businessDate_end: '', + successfulTradeDate_start: '', + successfulTradeDate_end: '' + + }, + pageModel: { + 'pageSize': 100, + 'pageNum': 1, + pageTotal: 0 + }, + options: [ + { + label: 'TOB销售', + value: 'TOB_ORDER' + }, + { + label: 'TOC销售', + value: 'TOC_ORDER' + } + + ], + //搜索按钮loading + loading: false, + //表单loading + tableLoading: false, + workshop: [], + //客户下拉 + queryCriteriaOption: [], + //色号下拉 + colorNumOption: [], + //批号下拉 + contractCodeOption: [], + //机台下拉 + workBenchIDOption: [], + //生产名称下拉 + cInvNameOption: [], + // 产品类型下拉 + cInvCNameOption: [], + //生产班组 + stateNameOption: [ + { + label: '甲', + value: '甲' + }, + { + label: '乙', + value: '乙' + }, + { + label: '丙', + value: '丙' + } + ], + // 右侧按钮 + fixedButtonList: [ + { + icon: 'el-icon-printer', + title: '打印' + }, + { + icon: 'el-icon-folder', + title: '导出' + } + ], + //正常表单 + mainTableData: [], + //缺少字段产品大类、本次生产重量 + mainTableColumn: [ + { + label: '出库明细主键', + prop: 'id', + tooltip: true, + width: 150 + }, + { + label: 'TOB库存-推送时间', + prop: 'newpushdate', + tooltip: true, + width: 200 + }, + { + label: 'TOB库存-报错详情', + prop: 'newtransmitinfo', + tooltip: true, + width: 200 + }, + { + label: 'TOB库存-推送状态', + prop: 'newstate', + tooltip: true, + width: 200 + }, + { + label: 'TOB确认收入-推送状态', + prop: 'newstate4', + tooltip: true, + width: 200 + }, + { + label: 'TOB库存-下游单号', + prop: 'newsystemnumber', + tooltip: true, + width: 200 + }, + { + label: 'TOB库存-下游主键', + prop: 'newsystemprimary', + tooltip: true, + width: 150 + }, + { + label: 'TOB确认收入-推送状态', + prop: 'newstate4', + tooltip: true, + width: 150 + }, + { + label: 'TOB库存-下游单号', + prop: 'newsystemnumber', + tooltip: true, + width: 150 + }, + { + label: 'TOB库存-下游主键', + prop: 'newsystemprimary', + tooltip: true, + width: 150 + }, + { + label: 'TOB确认收入-下游单号', + prop: 'newsystemnumber4', + tooltip: true, + width: 150 + }, + { + label: 'TOB确认收入-下游主键', + prop: 'newsystemprimary4', + tooltip: true, + width: 150 + }, + { + label: '业务类型', + prop: 'businesstype', + tooltip: true, + width: 150 + }, + { + label: 'TOB确认收入-推送时间', + prop: 'def5', + tooltip: true, + width: 150 + }, + { + label: 'TOB确认收入-报错详情', + prop: 'def6', + tooltip: true, + width: 150 + }, + { + label: '货主编码', + prop: 'headCompanyCode', + tooltip: true, + width: 150 + }, + { + label: '仓库编码', + prop: 'headFacilityCode', + tooltip: true, + width: 150 + }, + { + label: '平台编码', + prop: 'headSourcePlatformCode', + tooltip: true, + width: 150 + }, + { + label: '店铺编码', + prop: 'headStoreCode', + tooltip: true, + width: 150 + } + + ], + //正常合并 + tableDataMergeList: [] + } + }, + methods: { + async downLoad() { + if (this.queryCriteria.business_date_start && this.queryCriteria.business_date_end) { + let startDate = new Date(this.queryCriteria.business_date_start) + let endDate = new Date(this.queryCriteria.business_date_end) + let differenceInMillis = endDate - startDate + let differenceInDays = differenceInMillis / (1000 * 60 * 60 * 24) + // 判断差值是否在15天以内 + if (!isNaN(differenceInDays) && differenceInDays < 31) { + } else { + this.$vmNews('开始时间和结束时间范围请选择在30天内') + return + } + } else { + this.$vmNews('请选择开始时间和结束时间') + return + } + let params = { + ...this.queryCriteria, + ...this.pageModel, + pageSize: 9999, + pageNum: 1 + } + this.openLoading('detail') + const res = await authApi('busidataTocsalesServiceImpl', 'busidataTocsalesServiceImpl', 'queryToCSalesReportExcel', '', params) + + if (res.status == 200) { + const response = await downFilesBasedFileNameFileTypeAPI(res.attribute) + // console.log(res) + const url = window.URL.createObjectURL(new Blob([response]), { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }) + const link = document.createElement('a') + link.href = url + link.setAttribute('download', 'toc正向流程报表.xlsx') // 设置下载的文件名 + document.body.appendChild(link) + link.click() + } + return + + }, + reset() { + this.pageModel.pageNum = 1 + this.queryCriteria = { + newPushDate: '', + newTransmitInfo: '', + newstate: '', + newsystemnumber: '', + newsystemprimary: '', + def5: '', + def6: '', + newState4: '', + newSystemNumber4: '', + newSystemPrimary4: '', + newpushdate: '', + newtransmitinfo: '', + def1: '', + def2: '', + newstate2: '', + newsystemnumber2: '', + newsystemprimary2: '', + def3: '', + def4: '', + newstate3: '', + newsystemnumber3: '', + newsystemprimary3: '', + businessType: 'TOB_ORDER', + businessDate_start: '', + businessDate_end: '', + successfulTradeDate_start: '', + successfulTradeDate_end: '' + } + }, + //limit改变 + pageSizeChange(val, obj) { + obj.pageSize = val + this.init() + }, + //页码变更 + pageChange(val, obj) { + obj.page = val + this.init() + }, + //搜索联想 + async remoteMethod(val, row, options) { + // 客户 + if (row == 'cusCode') { + const res = await GetCustomerListAPI(val) + this[options] = [] + if (res.code == 1) { + res.data[1].forEach((item) => { + this[options].push({ label: item.cCusName, value: item.cCusCode }) + }) + } + } else if (row === 'workBenchID') { + //这个不需要动态搜索 + if (this[options].length) return + const res = await WorkbenchGetBillListAPI({ + page: 1, + limit: 999, + Sequence: '', + SequenceName: '', + CodeOrName: '', + areaID: '', + workShopID: '' + }) + this[options] = [] + if (res.code == 1) { + res.data[1].forEach((item) => { + this[options].push({ + label: item.workName, + value: item.workID + }) + }) + } + } else if (row === 'cInvCode') { + const res = await U8BaseGetInvenListAPI({ + page: 1, + limit: 200, + codeOrName: val + }) + this[options] = [] + if (res.code == 1) { + res.data[1].forEach((item) => { + this[options].push({ label: item.cInvName, value: item.cInvCode }) + }) + } + } else if (row === 'cInvCCode') { + const res = await U8BaseGetInvClassListAPI({ + page: 1, + limit: 200, + codeOrName: val + }) + this[options] = [] + if (res.code == 1) { + res.data[1].forEach((item) => { + this[options].push({ + label: item.cInvCName, + value: item.cInvCCode + }) + }) + } + } + }, + // 点击查询 + query() { + this.pageModel.pageNum = 1 + // if (this.queryCriteria.business_date_start && this.queryCriteria.business_date_end) { + // let startDate = new Date(this.queryCriteria.business_date_start) + // let endDate = new Date(this.queryCriteria.business_date_end) + // let differenceInMillis = endDate - startDate + // let differenceInDays = differenceInMillis / (1000 * 60 * 60 * 24) + // // 判断差值是否在15天以内 + // if (!isNaN(differenceInDays) && differenceInDays < 11) { + // } else { + // this.$vmNews('开始时间和结束时间范围请选择在10天内') + // return + // } + // } else { + // this.$vmNews('请选择开始时间和结束时间') + // return + // } + this.init() + }, + /* + * 导出、打印功能 + * item:当前按钮信息 + * boxId:打印表单id(仅导出) + * name:导出后文件名(仅导出) + * tableData:传打印表格当前tableData(仅打印) + * tableColumn:传打印表格当前tableColumn(仅打印) + * */ + fixedClick(item, boxId, name, tableData, tableColumn) { + if (item.title == '导出') { + this.exportEvent(name, boxId) + } else if (item.title == '打印') { + this.duplicate(tableData, tableColumn) + } + }, + //导出功能 + exportEvent(excelName, boxId) { + console.log(document.querySelector(boxId), '123', boxId) + let gatherData = { + raw: true + } + let grid = XLSX.utils.table_to_book( + document.querySelector(boxId), + gatherData + ) + let workbook = XLSX.write(grid, { + bookType: 'xlsx', + bookSST: true, + type: 'array' + }) + try { + FileSaver.saveAs( + new Blob([workbook], { + type: 'application/octet-stream' + }), + excelName + '.xlsx' + ) + } catch (e) { + if (typeof console !== 'undefined') console.log(e, workbook) + } + return workbook + }, + //打印 + duplicate(tableData, tableColumn) { + basePrintJS(tableData, tableColumn) + }, + //初始化表单 + async init() { + this.tableLoading = true + let params = { + ...this.queryCriteria, + ...this.pageModel + } + //初始化表单 + const res = await authApi('tocofsSaleoutServiceImplReport', 'tocofsSaleoutServiceImplReport', 'queryToCSalesReport', '', params) + console.log(res, '初始化res') + this.pageModel.pageTotal = res.attribute.total + this.mainTableData = this.dataDispose( + res.attribute.list, + this.tableDataMergeList + ) + this.tableLoading = false + }, + //data处理 + dataDispose(data, arr) { + if (!arr.length) return data + //分类存放分组 + let tempObj = {} + //结果 + let result = [] + //将层级转变为 [[1],[1,2],[1,2,3]] + const transformedArray = arr.reduce((acc, currentValue) => { + acc.push([...(acc.length ? acc[acc.length - 1] : []), currentValue]) + return acc + }, []) + //开始对表单进行排序 + //排序后的arr + let newArr = [] + let sortObj = {} + data.forEach((item) => { + let keyValue = '' + arr.forEach((key2, index) => { + keyValue += item[key2] + }) + if (!sortObj[keyValue]) { + sortObj[keyValue] = data.filter((item01) => { + return arr.every((prop) => item01[prop] === item[prop]) + }) + } + }) + Object.keys(sortObj) + .sort() + .forEach((key) => { + newArr = [...newArr, ...sortObj[key]] + }) + // 开始循环 + newArr.forEach((item) => { + transformedArray.forEach((key) => { + //keyValue:当前key下的value加一起,用于tempObj的key + let keyValue = '' + key.forEach((keyItem, index) => { + keyValue += item[keyItem] + if (index < key.length - 1) { + keyValue += '|' + } + }) + if (!tempObj[keyValue]) { + //拿到所有当前key下相同数据 + tempObj[keyValue] = newArr.filter((item01) => { + return key.every((prop) => item01[prop] === item[prop]) + }) + // 计算总数 + tempObj[keyValue][0][`${key[key.length - 1]}Length`] = + tempObj[keyValue].length + + if (key.length === 1) { + result = [...tempObj[keyValue], ...result] + } + } + }) + }) + return result + } + }, + mounted() { + this.init() + }, + components: { + baseNewTable + } +} +</script> + +<style scoped lang="scss"> +.MachineSchedulingTable { + padding: 15px; + border-radius: 20px; + background-color: #fff; + overflow: auto; + + .div_title { + color: #696969; + background-color: #f1efef; + line-height: 35px; + height: 35px; + margin: 20px 0 10px; + text-align: center; + + > span { + width: 23%; + display: inline-block; + margin-left: 15px; + } + } + + > .search { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: flex-start; + + > div { + margin-left: 10px !important; + width: 200px !important; + margin-bottom: 10px; + } + + } + + > .main { + > .tableBox { + } + } +} + +::v-deep .el-select { + width: 100% !important; +} +</style> diff --git a/src/views/systemReports/u8positiveReports/TOCoutputWarehouse.vue b/src/views/systemReports/u8positiveReports/TOCoutputWarehouse.vue new file mode 100644 index 0000000..8f1a261 --- /dev/null +++ b/src/views/systemReports/u8positiveReports/TOCoutputWarehouse.vue @@ -0,0 +1,732 @@ +<template> + <div class="MachineSchedulingTable"> + <!-- 搜索框--> + + <div class="search"> + <div class="datepickBox" style=""> + <el-date-picker + v-model="queryCriteria.businessDate_start" + type="date" + placeholder="出库日期-开始" + value-format="yyyy-MM-dd" + > + </el-date-picker> + </div> + <div class="datepickBox" style=""> + <el-date-picker + v-model="queryCriteria.businessDate_end" + type="date" + placeholder="交易采购-结束" + value-format="yyyy-MM-dd" + > + </el-date-picker> + </div> + <div class="datepickBox" style=""> + <el-date-picker + v-model="queryCriteria.successfulTradeDate_start" + type="date" + placeholder="交易成功开始时间" + value-format="yyyy-MM-dd" + > + </el-date-picker> + </div> + <div class="datepickBox" style=""> + <el-date-picker + v-model="queryCriteria.successfulTradeDate_end" + type="date" + placeholder="交易成功结束时间" + value-format="yyyy-MM-dd" + > + </el-date-picker> + </div> + <!-- toc销售-库存 --> + <div class="chunk"> + <el-input v-model="queryCriteria.newpushdate" placeholder="TOC库存推送时间"></el-input> + </div> + <div class="chunk"> + <el-input v-model="queryCriteria.newtransmitinfo" placeholder="TOC库存推送详情"></el-input> + </div> + <div class="radio"> + <el-select v-model="queryCriteria.newstate" placeholder="TOC出库同步成功"> + <el-option + v-for="item in stateOptions" + :key="item.value" + :label="item.label" + :value="item.value" + > + </el-option> + </el-select> + </div> + <div class="chunk"> + <el-input v-model="queryCriteria.newsystemnumber" placeholder="TOC库存下游单号"></el-input> + </div> + <div class="chunk"> + <el-input v-model="queryCriteria.newsystemprimary" placeholder="TOC库存下游主键"></el-input> + </div> + + + <!-- toc销售 - 确认收入-红 --> + <div class="chunk"> + <el-input v-model="queryCriteria.def1" placeholder="TOC确认收入-红-推送时间"></el-input> + </div> + <div class="chunk"> + <el-input v-model="queryCriteria.def2" placeholder="TOC确认收入-红-推送详情"></el-input> + </div> + <div class="radio"> + <el-select v-model="queryCriteria.newstate2" placeholder="TOC确认收入-红-交易成功"> + <el-option + v-for="item in stateOptions" + :key="item.value" + :label="item.label" + :value="item.value" + > + </el-option> + </el-select> + </div> + <div class="chunk"> + <el-input v-model="queryCriteria.newsystemnumber2" placeholder="TOC确认收入-红-下游单号"></el-input> + </div> + <div class="chunk"> + <el-input v-model="queryCriteria.newsystemprimary2" placeholder="TOC确认收入-红-下游主键"></el-input> + </div> + + <!-- toc销售 - 确认收入-蓝 --> + <div class="chunk"> + <el-input v-model="queryCriteria.def3" placeholder="TOC确认收入-蓝-推送时间"></el-input> + </div> + <div class="chunk"> + <el-input v-model="queryCriteria.def4" placeholder="TOC确认收入-蓝-推送详情"></el-input> + </div> + <div class="radio"> + <el-select v-model="queryCriteria.newstate3" placeholder="TOC确认收入-蓝-交易成功"> + <el-option + v-for="item in stateOptions" + :key="item.value" + :label="item.label" + :value="item.value" + > + </el-option> + </el-select> + </div> + <div class="chunk"> + <el-input v-model="queryCriteria.newsystemnumber3" placeholder="TOC确认收入-蓝-下游单号"></el-input> + </div> + <div class="chunk"> + <el-input v-model="queryCriteria.newsystemprimary3" placeholder="TOC确认收入-蓝-下游主键"></el-input> + </div> + + + </div> + <div> + <el-button + type="primary" + @click="query" + :loading="loading" + size="small" + style=" margin: 5px 5px" + >查询 + </el-button> +<!-- <el-button--> +<!-- type="primary"--> +<!-- @click="downLoad"--> +<!-- :loading="loading"--> +<!-- size="small"--> +<!-- style=" margin: 5px 5px"--> +<!-- >excel导出--> +<!-- </el-button>--> + <el-button + type="warning" + @click="reset" + :loading="loading" + size="small" + style="margin: 5px 5px" + >重置 + </el-button> + </div> + <!-- 主体内容--> + <div class="main"> + <baseNewTable + :tableData="mainTableData" + :tableColumn="mainTableColumn" + :tableLoading="tableLoading" + :tableDataMergeList="tableDataMergeList" + :pageModel="pageModel" + @pageSizeChange="(val) => pageSizeChange(val, pageModel)" + @pageChange="(val) => pageChange(val, pageModel)" + exportEventName="ToC确认收入报表" + > + </baseNewTable> + </div> + </div> +</template> + +<script> +import baseNewTable from './baseNewTable2/index.vue' +import { authApi, downFilesBasedFileNameFileTypeAPI } from '@/api/apis/auth' +import { + basePrintJS +} from '@/utils/util.js' + +export default { + name: 'MachineSchedulingTable', + data() { + return { + stateOptions: [ + { label: '全部', value: 'all' }, + { label: '成功', value: 'Y' }, + { label: '失败', value: 'N' } + ], + //搜索框内容 + queryCriteria: { + newPushDate:"", + newTransmitInfo:"", + newstate:"", + newsystemnumber:"", + newsystemprimary:"", + def5:"", + def6:"", + newState4:"", + newSystemNumber4:"", + newSystemPrimary4:"", + newpushdate:"", + newtransmitinfo:"", + def1:"", + def2:"", + newstate2:"", + newsystemnumber2:"", + newsystemprimary2:"", + def3:"", + def4:"", + newstate3:"", + newsystemnumber3:"", + newsystemprimary3:"", + businessType:"TOC_ORDER", + businessDate_start: '', + businessDate_end: '', + successfulTradeDate_start: '', + successfulTradeDate_end: '' + }, + pageModel: { + 'pageSize': 100, + 'pageNum': 1, + pageTotal: 0 + }, + options:[ + { + label:"TOB销售", + value:"TOB_ORDER" + }, + { + label:"TOC销售", + value:"TOC_ORDER" + }, + + ], + //搜索按钮loading + loading: false, + //表单loading + tableLoading: false, + workshop: [], + //客户下拉 + queryCriteriaOption: [], + //色号下拉 + colorNumOption: [], + //批号下拉 + contractCodeOption: [], + //机台下拉 + workBenchIDOption: [], + //生产名称下拉 + cInvNameOption: [], + // 产品类型下拉 + cInvCNameOption: [], + //生产班组 + stateNameOption: [ + { + label: '甲', + value: '甲' + }, + { + label: '乙', + value: '乙' + }, + { + label: '丙', + value: '丙' + } + ], + // 右侧按钮 + fixedButtonList: [ + { + icon: 'el-icon-printer', + title: '打印' + }, + { + icon: 'el-icon-folder', + title: '导出' + } + ], + //正常表单 + mainTableData: [], + //缺少字段产品大类、本次生产重量 + mainTableColumn: [ + { + label: '出库明细主键', + prop: 'id', + tooltip: true, + width: 150 + }, + { + label: 'TOB库存-推送时间', + prop: 'newpushdate', + tooltip: true, + width: 200 + }, + { + label: 'TOB库存-报错详情', + prop: 'newtransmitinfo', + tooltip: true, + width: 200 + }, + { + label: 'TOB库存-推送状态', + prop: 'newstate', + tooltip: true, + width: 200 + }, + { + label: 'TOB确认收入-推送状态', + prop: 'newstate4', + tooltip: true, + width: 200 + }, + { + label: 'TOB库存-下游单号', + prop: 'newsystemnumber', + tooltip: true, + width: 200 + }, + { + label: 'TOB库存-下游主键', + prop: 'newsystemprimary', + tooltip: true, + width: 150 + }, + { + label: 'TOB确认收入-推送状态', + prop: 'newstate4', + tooltip: true, + width: 150 + }, + { + label: 'TOB库存-下游单号', + prop: 'newsystemnumber', + tooltip: true, + width: 150 + }, + { + label: 'TOB库存-下游主键', + prop: 'newsystemprimary', + tooltip: true, + width: 150 + }, + { + label: 'TOB确认收入-下游单号', + prop: 'newsystemnumber4', + tooltip: true, + width: 150 + }, + { + label: 'TOB确认收入-下游主键', + prop: 'newsystemprimary4', + tooltip: true, + width: 150 + }, + { + label: '业务类型', + prop: 'businesstype', + tooltip: true, + width: 150 + }, + { + label: 'TOB确认收入-推送时间', + prop: 'def5', + tooltip: true, + width: 150 + }, + { + label: 'TOB确认收入-报错详情', + prop: 'def6', + tooltip: true, + width: 150 + }, + { + label: '货主编码', + prop: 'headCompanyCode', + tooltip: true, + width: 150 + }, + { + label: '仓库编码', + prop: 'headFacilityCode', + tooltip: true, + width: 150 + }, + { + label: '平台编码', + prop: 'headSourcePlatformCode', + tooltip: true, + width: 150 + }, + { + label: '店铺编码', + prop: 'headStoreCode', + tooltip: true, + width: 150 + } + + ], + //正常合并 + tableDataMergeList: [] + } + }, + methods: { + async downLoad() { + if (this.queryCriteria.business_date_start && this.queryCriteria.business_date_end) { + let startDate = new Date(this.queryCriteria.business_date_start) + let endDate = new Date(this.queryCriteria.business_date_end) + let differenceInMillis = endDate - startDate + let differenceInDays = differenceInMillis / (1000 * 60 * 60 * 24) + // 判断差值是否在15天以内 + if (!isNaN(differenceInDays) && differenceInDays < 31) { + } else { + this.$vmNews('开始时间和结束时间范围请选择在30天内') + return + } + } else { + this.$vmNews('请选择开始时间和结束时间') + return + } + let params = { + ...this.queryCriteria, + ...this.pageModel, + pageSize: 9999, + pageNum: 1 + } + this.openLoading('detail') + const res = await authApi('busidataTocsalesServiceImpl', 'busidataTocsalesServiceImpl', 'queryToCSalesReportExcel', '', params) + + if (res.status == 200) { + const response = await downFilesBasedFileNameFileTypeAPI(res.attribute) + // console.log(res) + const url = window.URL.createObjectURL(new Blob([response]), { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }) + const link = document.createElement('a') + link.href = url + link.setAttribute('download', 'toc正向流程报表.xlsx') // 设置下载的文件名 + document.body.appendChild(link) + link.click() + } + return + + }, + reset() { + this.pageModel.pageNum = 1 + this.queryCriteria = { + newPushDate:"", + newTransmitInfo:"", + newstate:"", + newsystemnumber:"", + newsystemprimary:"", + def5:"", + def6:"", + newState4:"", + newSystemNumber4:"", + newSystemPrimary4:"", + newpushdate:"", + newtransmitinfo:"", + def1:"", + def2:"", + newstate2:"", + newsystemnumber2:"", + newsystemprimary2:"", + def3:"", + def4:"", + newstate3:"", + newsystemnumber3:"", + newsystemprimary3:"", + businessType:"TOC_ORDER", + businessDate_start: '', + businessDate_end: '', + successfulTradeDate_start: '', + successfulTradeDate_end: '' + } + }, + //limit改变 + pageSizeChange(val, obj) { + obj.pageSize = val + this.init() + }, + //页码变更 + pageChange(val, obj) { + obj.page = val + this.init() + }, + //搜索联想 + async remoteMethod(val, row, options) { + // 客户 + if (row == 'cusCode') { + const res = await GetCustomerListAPI(val) + this[options] = [] + if (res.code == 1) { + res.data[1].forEach((item) => { + this[options].push({ label: item.cCusName, value: item.cCusCode }) + }) + } + } else if (row === 'workBenchID') { + //这个不需要动态搜索 + if (this[options].length) return + const res = await WorkbenchGetBillListAPI({ + page: 1, + limit: 999, + Sequence: '', + SequenceName: '', + CodeOrName: '', + areaID: '', + workShopID: '' + }) + this[options] = [] + if (res.code == 1) { + res.data[1].forEach((item) => { + this[options].push({ + label: item.workName, + value: item.workID + }) + }) + } + } else if (row === 'cInvCode') { + const res = await U8BaseGetInvenListAPI({ + page: 1, + limit: 200, + codeOrName: val + }) + this[options] = [] + if (res.code == 1) { + res.data[1].forEach((item) => { + this[options].push({ label: item.cInvName, value: item.cInvCode }) + }) + } + } else if (row === 'cInvCCode') { + const res = await U8BaseGetInvClassListAPI({ + page: 1, + limit: 200, + codeOrName: val + }) + this[options] = [] + if (res.code == 1) { + res.data[1].forEach((item) => { + this[options].push({ + label: item.cInvCName, + value: item.cInvCCode + }) + }) + } + } + }, + // 点击查询 + query() { + this.pageModel.pageNum = 1 + // if (this.queryCriteria.business_date_start && this.queryCriteria.business_date_end) { + // let startDate = new Date(this.queryCriteria.business_date_start) + // let endDate = new Date(this.queryCriteria.business_date_end) + // let differenceInMillis = endDate - startDate + // let differenceInDays = differenceInMillis / (1000 * 60 * 60 * 24) + // // 判断差值是否在15天以内 + // if (!isNaN(differenceInDays) && differenceInDays < 11) { + // } else { + // this.$vmNews('开始时间和结束时间范围请选择在10天内') + // return + // } + // } else { + // this.$vmNews('请选择开始时间和结束时间') + // return + // } + this.init() + }, + /* + * 导出、打印功能 + * item:当前按钮信息 + * boxId:打印表单id(仅导出) + * name:导出后文件名(仅导出) + * tableData:传打印表格当前tableData(仅打印) + * tableColumn:传打印表格当前tableColumn(仅打印) + * */ + fixedClick(item, boxId, name, tableData, tableColumn) { + if (item.title == '导出') { + this.exportEvent(name, boxId) + } else if (item.title == '打印') { + this.duplicate(tableData, tableColumn) + } + }, + //导出功能 + exportEvent(excelName, boxId) { + console.log(document.querySelector(boxId), '123', boxId) + let gatherData = { + raw: true + } + let grid = XLSX.utils.table_to_book( + document.querySelector(boxId), + gatherData + ) + let workbook = XLSX.write(grid, { + bookType: 'xlsx', + bookSST: true, + type: 'array' + }) + try { + FileSaver.saveAs( + new Blob([workbook], { + type: 'application/octet-stream' + }), + excelName + '.xlsx' + ) + } catch (e) { + if (typeof console !== 'undefined') console.log(e, workbook) + } + return workbook + }, + //打印 + duplicate(tableData, tableColumn) { + basePrintJS(tableData, tableColumn) + }, + //初始化表单 + async init() { + this.tableLoading = true + let params = { + ...this.queryCriteria, + ...this.pageModel + } + //初始化表单 + const res = await authApi('tocofsSaleoutServiceImplReport', 'tocofsSaleoutServiceImplReport', 'queryToCSalesReport', '', params) + console.log(res, '初始化res') + this.pageModel.pageTotal = res.attribute.total + this.mainTableData = this.dataDispose( + res.attribute.list, + this.tableDataMergeList + ) + this.tableLoading = false + }, + //data处理 + dataDispose(data, arr) { + if (!arr.length) return data + //分类存放分组 + let tempObj = {} + //结果 + let result = [] + //将层级转变为 [[1],[1,2],[1,2,3]] + const transformedArray = arr.reduce((acc, currentValue) => { + acc.push([...(acc.length ? acc[acc.length - 1] : []), currentValue]) + return acc + }, []) + //开始对表单进行排序 + //排序后的arr + let newArr = [] + let sortObj = {} + data.forEach((item) => { + let keyValue = '' + arr.forEach((key2, index) => { + keyValue += item[key2] + }) + if (!sortObj[keyValue]) { + sortObj[keyValue] = data.filter((item01) => { + return arr.every((prop) => item01[prop] === item[prop]) + }) + } + }) + Object.keys(sortObj) + .sort() + .forEach((key) => { + newArr = [...newArr, ...sortObj[key]] + }) + // 开始循环 + newArr.forEach((item) => { + transformedArray.forEach((key) => { + //keyValue:当前key下的value加一起,用于tempObj的key + let keyValue = '' + key.forEach((keyItem, index) => { + keyValue += item[keyItem] + if (index < key.length - 1) { + keyValue += '|' + } + }) + if (!tempObj[keyValue]) { + //拿到所有当前key下相同数据 + tempObj[keyValue] = newArr.filter((item01) => { + return key.every((prop) => item01[prop] === item[prop]) + }) + // 计算总数 + tempObj[keyValue][0][`${key[key.length - 1]}Length`] = + tempObj[keyValue].length + + if (key.length === 1) { + result = [...tempObj[keyValue], ...result] + } + } + }) + }) + return result + } + }, + mounted() { + this.init(); + }, + components: { + baseNewTable + } +} +</script> + +<style scoped lang="scss"> +.MachineSchedulingTable { + padding: 15px; + border-radius: 20px; + background-color: #fff; + overflow: auto; + + .div_title { + color: #696969; + background-color: #f1efef; + line-height: 35px; + height: 35px; + margin: 20px 0 10px; + text-align: center; + + > span { + width: 23%; + display: inline-block; + margin-left: 15px; + } + } + + > .search { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: flex-start; + + > div { + margin-left: 10px !important; + width: 200px !important; + margin-bottom: 10px; + } + + } + + > .main { + > .tableBox { + } + } +} + +::v-deep .el-select { + width: 100% !important; +} +</style> diff --git a/src/views/systemReports/u8positiveReports/baseNewTable2/index.vue b/src/views/systemReports/u8positiveReports/baseNewTable2/index.vue index efbcdb8..2957a43 100644 --- a/src/views/systemReports/u8positiveReports/baseNewTable2/index.vue +++ b/src/views/systemReports/u8positiveReports/baseNewTable2/index.vue @@ -35,7 +35,7 @@ :tableData="tableData" :tableColumn="tableColumn" :tableDataMergeList="tableDataMergeList" - tableHeight="70vh" + tableHeight="calc(100vh - 440px)" id="mainTable" > <template #new_state="{row}"> diff --git a/vue.config.js b/vue.config.js index 89e8c5e..6c5679e 100644 --- a/vue.config.js +++ b/vue.config.js @@ -1,17 +1,17 @@ -"use strict"; -const path = require("path"); +'use strict' +const path = require('path') function resolve(dir) { - return path.join(__dirname, dir); + return path.join(__dirname, dir) } -const CompressionPlugin = require("compression-webpack-plugin"); +const CompressionPlugin = require('compression-webpack-plugin') -const name = process.env.VUE_APP_TITLE || "用安数智中台"; // 网页标题 +const name = process.env.VUE_APP_TITLE || '用安数智中台' // 网页标题 -const port = process.env.port || process.env.npm_config_port || 80; // 端口 +const port = process.env.port || process.env.npm_config_port || 80 // 端口 -const webpack = require('webpack'); +const webpack = require('webpack') // vue.config.js 配置说明 //官方vue.config.js 参考文档 https://cli.vuejs.org/zh/config/#css-loaderoptions @@ -21,18 +21,18 @@ module.exports = { // 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上 // 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。 // publicPath: process.env.NODE_ENV === "production" ? "/" : "./", - publicPath: "./", + publicPath: './', // 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist) - outputDir: "dist", + outputDir: 'dist', // 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下) - assetsDir: "webPc", + assetsDir: 'webPc', // 是否开启eslint保存检测,有效值:ture | false | 'error' - lintOnSave: process.env.NODE_ENV === "development", + lintOnSave: process.env.NODE_ENV === 'development', // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。 productionSourceMap: false, // webpack-dev-server 相关配置 devServer: { - host: "0.0.0.0", + host: '0.0.0.0', // host:"localhost",z port: port, open: true, @@ -40,109 +40,109 @@ module.exports = { // detail: https://cli.vuejs.org/config/#devserver-proxy [process.env.VUE_APP_BASE_API]: { // target: `http://hzya.ufyct.com:9067/`, - target: `http://ufidahz.com.cn:9067/`, + // target: `http://ufidahz.com.cn:9067/`, // target: `http://127.0.0.1:9081/`, // target: `http://192.168.2.78:9999`, // target: `http://192.168.2.85:9999`, // target: `http://192.168.2.78:8080`, // target: `http://192.168.2.78:10086`, // target: `http://192.168.2.185:9999`, - // target: `http://192.168.2.83:9999`, + target: `http://192.168.2.86:9999`, // target:'http://127.0.0.1:9999/', changeOrigin: true, pathRewrite: { - ["^" + process.env.VUE_APP_BASE_API]: "", - }, - }, + ['^' + process.env.VUE_APP_BASE_API]: '' + } + } }, - disableHostCheck: true, + disableHostCheck: true }, css: { loaderOptions: { sass: { - sassOptions: { outputStyle: "expanded" }, - }, - }, + sassOptions: { outputStyle: 'expanded' } + } + } }, configureWebpack: { name: name, resolve: { alias: { - "@": resolve("src"), - }, + '@': resolve('src') + } }, plugins: [ // http://doc.ruoyi.vip/ruoyi-vue/other/faq.html#使用gzip解压缩静态文件 new CompressionPlugin({ cache: false, // 不启用文件缓存 test: /\.(js|css|html)?$/i, // 压缩文件格式 - filename: "[path].gz[query]", // 压缩后的文件名 - algorithm: "gzip", // 使用gzip压缩 - minRatio: 0.8, // 压缩率小于1才会压缩 + filename: '[path].gz[query]', // 压缩后的文件名 + algorithm: 'gzip', // 使用gzip压缩 + minRatio: 0.8 // 压缩率小于1才会压缩 }), new webpack.ProvidePlugin({ 'window.Quill': 'quill/dist/quill.js', 'Quill': 'quill/dist/quill.js' }) - ], + ] }, chainWebpack(config) { - config.plugins.delete("preload"); // TODO: need test - config.plugins.delete("prefetch"); // TODO: need test + config.plugins.delete('preload') // TODO: need test + config.plugins.delete('prefetch') // TODO: need test // set svg-sprite-loader - config.module.rule("svg").exclude.add(resolve("src/assets/icons")).end(); + config.module.rule('svg').exclude.add(resolve('src/assets/icons')).end() config.module - .rule("icons") + .rule('icons') .test(/\.svg$/) - .include.add(resolve("src/assets/icons")) + .include.add(resolve('src/assets/icons')) .end() - .use("svg-sprite-loader") - .loader("svg-sprite-loader") + .use('svg-sprite-loader') + .loader('svg-sprite-loader') .options({ - symbolId: "icon-[name]", + symbolId: 'icon-[name]' }) - .end(); + .end() - config.when(process.env.NODE_ENV !== "development", (config) => { + config.when(process.env.NODE_ENV !== 'development', (config) => { config - .plugin("ScriptExtHtmlWebpackPlugin") - .after("html") - .use("script-ext-html-webpack-plugin", [ + .plugin('ScriptExtHtmlWebpackPlugin') + .after('html') + .use('script-ext-html-webpack-plugin', [ { // `runtime` must same as runtimeChunk name. default is `runtime` - inline: /runtime\..*\.js$/, - }, + inline: /runtime\..*\.js$/ + } ]) - .end(); + .end() config.optimization.splitChunks({ - chunks: "all", + chunks: 'all', cacheGroups: { libs: { - name: "chunk-libs", + name: 'chunk-libs', test: /[\\/]node_modules[\\/]/, priority: 10, - chunks: "initial", // only package third parties that are initially dependent + chunks: 'initial' // only package third parties that are initially dependent }, elementUI: { - name: "chunk-elementUI", // split elementUI into a single package + name: 'chunk-elementUI', // split elementUI into a single package priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app - test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm + test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm }, commons: { - name: "chunk-commons", - test: resolve("src/components"), // can customize your rules + name: 'chunk-commons', + test: resolve('src/components'), // can customize your rules minChunks: 3, // minimum common number priority: 5, - reuseExistingChunk: true, - }, - }, - }); - config.optimization.runtimeChunk("single"), - { - from: path.resolve(__dirname, "./public/robots.txt"), //防爬虫文件 - to: "./", //到根目录下 - }; - }); - }, -}; + reuseExistingChunk: true + } + } + }) + config.optimization.runtimeChunk('single'), + { + from: path.resolve(__dirname, './public/robots.txt'), //防爬虫文件 + to: './' //到根目录下 + } + }) + } +}