This commit is contained in:
username 2024-09-21 11:58:05 +08:00
commit 6565b8f7d2
11 changed files with 2258 additions and 115 deletions

View File

@ -91,6 +91,7 @@
"connect": "3.6.6",
"eslint": "7.15.0",
"eslint-plugin-vue": "7.2.0",
"html-webpack-plugin": "^5.6.0",
"lint-staged": "10.5.3",
"runjs": "4.4.2",
"sass": "1.32.13",

View File

@ -792,5 +792,6 @@ export default {
// /deep/ .ace_editor {
// height: 90vh !important;
// }
}
</style>

View File

@ -2,38 +2,38 @@
<div class="wrap">
<div class="tree" v-if="$route.query.viewType === '1'" style="flex:0.18">
<BaseMenuTree
:menuData="treeData"
:filterShow="false"
:Allshow="false"
:treeButton="false"
:filterButtonShow="false"
style="height: 100%"
:treeProps="treeProps"
@handleNodeClick="homeHandleNodeClick"
ref="menuTree"
:menuData="treeData"
:filterShow="false"
:Allshow="false"
:treeButton="false"
:filterButtonShow="false"
style="height: 100%"
:treeProps="treeProps"
@handleNodeClick="homeHandleNodeClick"
ref="menuTree"
></BaseMenuTree>
</div>
<div class="main" :style="{flex:$route.query.viewType === '1'?0.82:1}" v-loading="mainLoading">
<div class="top">
<div class="search">
<BaseNewForm
v-loading="searchLoading"
refName="searchForm"
:formRow="searchFormRow"
:formRule="false"
:ruleForm="searchForm"
:newFlag="true"
:treeSelectInfo="treeSelectInfo"
:isFunBtn="false"
v-loading="searchLoading"
refName="searchForm"
:formRow="searchFormRow"
:formRule="false"
:ruleForm="searchForm"
:newFlag="true"
:treeSelectInfo="treeSelectInfo"
:isFunBtn="false"
></BaseNewForm>
</div>
<div class="btnList">
<div class="btnItem" v-for="item in searchButton" :key="item.buttonType">
<el-button
type="primary"
size="mini"
@click="buttonHandle(item)"
v-btnPermission="{ btnID: item.buttonType, routeId: $route.meta.id }"
type="primary"
size="mini"
@click="buttonHandle(item)"
v-btnPermission="{ btnID: item.buttonType, routeId: $route.meta.id }"
>{{ item.buttonName }}
</el-button>
</div>
@ -41,18 +41,18 @@
</div>
<div class="table">
<BaseTable
ref="mainTable"
:treeSelectInfo="treeSelectInfo"
:tableData="tableData"
:tableColumn="tableColumn"
:funData="mainFunData"
:funWidth="funWidth"
:showIndex="true"
:tabLoading="mainTabLoading"
@onFunc="tableButtonHandle"
@selectValueGeT="selectValueGeTHandle"
:tableHeight="'67vh'"
:border="false"
ref="mainTable"
:treeSelectInfo="treeSelectInfo"
:tableData="tableData"
:tableColumn="tableColumn"
:funData="mainFunData"
:funWidth="funWidth"
:showIndex="true"
:tabLoading="mainTabLoading"
@onFunc="tableButtonHandle"
@selectValueGeT="selectValueGeTHandle"
:tableHeight="'67vh'"
:border="false"
>
<template #data_status="{row}">
{{ data_status_dist[row.data_status] }}
@ -60,8 +60,8 @@
</BaseTable>
<div class="nextPage">
<BasePage
:pageModel="pageModel"
@update:pageModel="currentChangeHandle"
:pageModel="pageModel"
@update:pageModel="currentChangeHandle"
></BasePage>
</div>
</div>
@ -72,15 +72,15 @@
</h1>
<div class="dialogForm" v-if="dialogShow" style="padding: 0 20px">
<BaseNewForm
:treeSelectInfo="treeSelectInfo"
:loading="dialogCommitLoading"
:formRow="formRow"
:ruleForm="ruleForm"
:lookFlag="lookFlag"
:newFlag="newFlag"
@onSubmit="onSubmitHandele"
:isFunBtn="false"
ref="dialogForm"
:treeSelectInfo="treeSelectInfo"
:loading="dialogCommitLoading"
:formRow="formRow"
:ruleForm="ruleForm"
:lookFlag="lookFlag"
:newFlag="newFlag"
@onSubmit="onSubmitHandele"
:isFunBtn="false"
ref="dialogForm"
></BaseNewForm>
</div>
<template v-for="(item, index) in dialogTabaleInfo">
@ -89,17 +89,17 @@
{{ item.title }}
</h1>
<BaseTableForm
:lookflag="lookFlag"
:showIndex="true"
:treeSelectInfo="treeSelectInfo"
:indexOperate="true"
:tableInfo="item"
@newRow="dialogTableAddHandle"
@onFunc="dialogTableDeleHandle"
:funData="dialogfunData"
:border="false"
:formIndex="index"
table-height="30vh"
:lookflag="lookFlag"
:showIndex="true"
:treeSelectInfo="treeSelectInfo"
:indexOperate="true"
:tableInfo="item"
@newRow="dialogTableAddHandle"
@onFunc="dialogTableDeleHandle"
:funData="dialogfunData"
:border="false"
:formIndex="index"
table-height="30vh"
></BaseTableForm>
</div>
@ -112,14 +112,14 @@
<div class="title">分发</div>
<div class="value" style="margin-left: 20px">
<el-select
v-model="sendCheckboxList"
placeholder="请选择"
v-model="sendCheckboxList"
placeholder="请选择"
>
<el-option
v-for="item in sendTableData"
:key="item.id"
:label="item.name"
:value="item.id"
v-for="item in sendTableData"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
@ -129,14 +129,14 @@
<div class="title">类型</div>
<div class="value" style="margin-left: 20px">
<el-select
v-model="sendCheckboxType"
placeholder="请选择"
v-model="sendCheckboxType"
placeholder="请选择"
>
<el-option
v-for="item in sendTableTypeOptions"
:key="item.id"
:label="item.name"
:value="item.id"
v-for="item in sendTableTypeOptions"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
@ -146,25 +146,21 @@
<el-button type="primary" @click="sendRowHandle()">下发
</el-button>
</div>
</div>
<!-- <baseTable-->
<!-- :tableData="sendTableData"-->
<!-- :tableColumn="sendTableColumn"-->
<!-- >-->
<!-- <template v-slot:status="{row}">-->
<!-- {{ sendDist[row.status] }}-->
<!-- </template>-->
<!-- <template v-slot:fun="{row}">-->
<!-- <el-button v-if="row.status === '1'||row.status === '2'" type="danger" @click="sendRowHandle(row)">删除-->
<!-- </el-button>-->
<!-- <el-button v-if="row.status === '3'||row.status === '4'" type="primary" @click="sendRowHandle(row)">下发-->
<!-- </el-button>-->
<!-- </template>-->
<!-- </baseTable>-->
</div>`
</baseDialog>
<baseDialog width="30%" v-model="dataDistDialog" :footerShow="false" title="查看数据格式">
<vue-json-editor
class="editor"
v-model="authInfo"
:showBtns="false"
:mode="'code'"
/>
</baseDialog>
</div>
</template>
<script>
import vueJsonEditor from "vue-json-editor";
import { deepClone } from '@/utils/index.js'
import { getUserModuleApi } from '@/api/integrationOption/integrationOption.js'
import BaseNewForm from './compoments/baseNewForm'
@ -300,7 +296,9 @@ export default {
name: '删除'
}
],
rowId: ''
rowId: '',
dataDistDialog:false,
authInfo:{},
}
},
methods: {
@ -478,16 +476,32 @@ export default {
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
this.deleRowHanlde(row.id)
.then(() => {
this.deleRowHanlde(row.id)
})
.catch((error) => {
})
})
.catch((error) => {
})
} else if (item.type === 'send') {
this.sendHandle(row.id)
} else if (item.type === 'viewData') {
this.getDataDist(row.id)
}
},
//
async getDataDist(id) {
const res = await getUserModuleApi({
tl: 'mdmService',
as: '',
dj: 'queryMdmShowDetailsDictionary'
}, {
mdmCode: this.$route.meta.mdmCode,
id: id
})
console.log(res, 'res')
this.dataDistDialog = true
this.authInfo = res.attribute
},
//
currentChangeHandle(pageModel) {
this.pageModel = pageModel
@ -552,15 +566,15 @@ export default {
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
this.dialogTabaleInfo[index].tableData.splice(row.index, 1)
this.$message({
type: 'success',
message: '删除成功!'
})
})
.catch((error) => {
.then(() => {
this.dialogTabaleInfo[index].tableData.splice(row.index, 1)
this.$message({
type: 'success',
message: '删除成功!'
})
})
.catch((error) => {
})
}
},
//dialog
@ -694,20 +708,20 @@ export default {
showType: '4'
})
res.attribute.mainMdmModuleDb.sublistMdmModuleDbFileds.forEach(item => {
item.mdmModuleDbFiledsRules.forEach(ele => {
if (ele.ruleCode === 'required' || ele.ruleCode === 'disabled') {
if (!ele.ruleValue) {
item[ele.ruleCode] = false
} else {
item[ele.ruleCode] = JSON.parse(ele.ruleValue)
}
item.mdmModuleDbFiledsRules.forEach(ele => {
if (ele.ruleCode === 'required' || ele.ruleCode === 'disabled') {
if (!ele.ruleValue) {
item[ele.ruleCode] = false
} else {
item[ele.ruleCode] = ele.ruleValue
item[ele.ruleCode] = JSON.parse(ele.ruleValue)
}
} else {
item[ele.ruleCode] = ele.ruleValue
}
item['id'] = item.enName
})
}
item['id'] = item.enName
})
}
)
this.dialogFormName = res.attribute.mainMdmModuleDb.dbName
this.formRow = []
@ -744,7 +758,7 @@ export default {
if (data.status === '200') {
this.ruleForm = data.attribute[this.mainTableName]
console.log(this.ruleForm,
'123'
'123'
)
console.log(this.ruleForm, this.mainTableName, data.attribute, '123')
this.dialogTabaleInfo.forEach(table => {
@ -939,12 +953,13 @@ export default {
BasePage,
BaseTable,
BaseNewForm,
baseDialog
baseDialog,
vueJsonEditor
}
,
computed: {
funWidth() {
return this.mainFunData.length * 70
return this.mainFunData.length * 90
}
}
@ -1008,4 +1023,17 @@ export default {
border-radius: 8px;
}
</style>
<style lang="less" scoped>
//.code-json-editor {
/* jsoneditor右上角默认有一个链接,加css去掉 */
/deep/ .jsoneditor-poweredBy {
display: none !important;
}
/deep/ .ace-jsoneditor {
height: 350px !important;
}
//}
</style>

View File

@ -119,7 +119,7 @@ export default {
tableData: [], //
pageModel: {
pageNum: 1,
pageSize: 10
pageSize: 100
},
queryModel: {
plugin_id: '',

View File

@ -266,10 +266,16 @@ export default {
buttonName: '查看',
buttonValue: 'view',
buttonType: '6'
}, {
},
{
buttonName: '下发',
buttonValue: 'send',
buttonType: '7'
},
{
buttonName: '查看数据格式',
buttonValue: 'viewData',
buttonType: '8'
}
],//
dist: {

View File

@ -93,6 +93,11 @@ export default {
buttonName: '下发',
buttonValue: 'send',
buttonType: '7'
},
{
buttonName: '查看数据格式',
buttonValue: 'viewData',
buttonType: '8'
}
],//
//key''viewType

View File

@ -0,0 +1,708 @@
<!--
* @name: 自定义 el-table
* @author: Zhangpengcheng
* @date: 2022-08-30
* tabLoading 加载 headerStyle表头格式 tableData数据 border纵向边框 @current-change单选触发 summary-method合计 @cell-click某个单元格点击触发事件 @sort-change触发后台排序
* @row-click 当某一行被点击时会触发该事件 highlight-current-row是否高亮 show-summary是否合计 SummariesIndex合计需要的index @selection-change多选 tableHeight高度
* :style="'height:'+ tableHeight + '!important'"
-->
<template>
<!-- :row-class-name="tableRowClassName" -->
<span style="position: relative">
<el-table
v-loading="tabLoading"
ref="elTable"
:header-cell-style="headerStyle"
:data="tableData"
:border="border"
:min-width="minWidth"
:summary-method="getSummaries"
:row-class-name="tableRowClassName"
:size="size"
:row-key="getRowKey"
:max-height="tableMaxHeight"
:height="tableHeight"
@cell-click="getCellClick"
@row-click="getRowClick"
@current-change="handleCurrentChange"
:highlight-current-row="highlightCurrent"
:show-summary="showsummary"
:SummariesIndex="SummariesIndex"
@row-dblclick="rowDblclick"
@selection-change="handleSelectionChange"
@select="select"
@select-all="selectAll"
style="width: 100%"
:cell-class-name="tableCellName"
:style="'min-height:' + minHeight + ';max-height:' + maxHeight"
@sort-change="sortChange"
:key="itemKey"
@cell-dblclick="doubleClick"
fit
:span-method="objectSpanMethod"
>
<el-table-column
align="center"
:reserve-selection="true"
v-if="showSelect"
type="selection"
width="55"
>
</el-table-column>
<el-table-column
label="序号"
align="center"
type="index"
v-if="showIndex"
width="50"
>
<template slot-scope="scope">
<div v-if="indexOperate" style="text-align: center">
<p v-if="scope.$index + 1 != tableData.length">
{{ scope.$index + 1 }}
</p>
<el-button
type="primary"
plain
icon="el-icon-plus"
circle
v-else
size="mini"
@click="newRow"
>
</el-button>
</div>
<p v-else>{{ scope.$index + 1 }}</p>
</template>
</el-table-column>
<el-table-column label="单选" align="center" v-if="slotrow" width="50">
<template slot-scope="scope">
<!-- 定义插槽父组件可以使用 v-slot:prop="{row}" 搭配template标签自定义每一列单元格的样式与操作 -->
<el-radio v-model="radioIndex" :label="scope.$index"
><span></span
></el-radio>
</template>
</el-table-column>
<el-table-column
v-for="(item, ind) in tableColumn"
:key="ind"
:width="item.width ? item.width : 'auto'"
:label="item.label"
:prop="item.prop"
:show-overflow-tooltip="item.tooltip"
:sortable="item.sortable"
:align="item.align ? item.align : 'center'"
:min-width="item.minWidth ? item.minWidth : '100px'"
header-align="center"
:fixed="item.fixed"
>
<!-- :isClick="item.other && item.other.isClick ? item.other.isClick : false" -->
<template slot-scope="scope">
<!-- 定义插槽父组件可以使用 v-slot:prop="{row}" 搭配template标签自定义每一列单元格的样式与操作 -->
<slot :name="item.prop" :row="slotrow ? scope : scope.row">
<!-- 插槽后备内容如父组件不使用插槽则使用后备内容 -->
<span
:style="{
color: item.color ? item.color : '#333',
cursor: item.isClick ? 'pointer' : 'default',
}"
>
{{
!item.stateOption
? scope.row[item.prop]
: item.stateOption[scope.row[item.prop]] | timeFiter
}}
</span>
</slot>
</template>
</el-table-column>
<el-table-column
label="操作"
:width="funWidth"
v-if="funData.length != 0"
align="center"
header-align="center"
:fixed="fixedTable"
style="border-radius: 0 10px 10px 0"
>
<template slot-scope="scope">
<div flex="cross:center main:center">
<div
v-for="(item, index) in funData"
:key="index"
:class="{ 'mr-12': index + 1 != funData.length }"
@click.stop="funcEmit(index, scope.row, item)"
class="btnText"
>
<span
:style="'color:' + item.color"
v-if="!item.ifField && !item.hiddenField"
>{{ item.text }}</span
>
<span
:style="{
color:
scope.row[item.ifField] == item.fieldVal
? item.fieldColor
: item.color,
}"
v-if="item.ifField"
>
{{
scope.row[item.ifField] == item.fieldVal
? item.fieldTxt
: item.text
}}
</span>
</div>
</div>
</template>
</el-table-column>
<!-- 操作 自定义插槽 -->
<slot v-else></slot>
</el-table>
<div class="buttom">
<el-button
type="primary"
plain
icon="el-icon-plus"
circle
size="mini"
@click="newRow"
class="bottom"
v-if="tableData.length == 0 && bottomPlus == true"
></el-button>
</div>
</span>
</template>
<script>
import Sortable from "sortablejs";
import { v4 as uuidv4 } from "uuid";
export default {
props: {
//
tableMaxHeight: {
type: [String, Number],
},
// loading
tabLoading: {
type: Boolean,
default: false,
},
// icon
indexOperate: {
type: Boolean,
default: false,
},
//
fixedTable: {
type: [Boolean, String],
default: "right",
},
//
slotrow: {
type: Boolean,
default: false,
},
showsummary: {
type: Boolean,
default: false,
},
//
tableHeight: {
type: [Number, String],
default: "auto",
},
minHeight: {
type: [Number, String],
default: "auto",
},
maxHeight: {
type: [Number, String],
default: "auto",
},
//
// windowHight: {
// type: [ String],
// default: 'auto'
// },
//
size: {
type: String,
default: "small",
},
//
tableData: {
type: Array,
default: () => {
return [];
},
},
//
tableColumn: {
type: Array,
default: () => {
return [];
},
},
// index
SummariesIndex: {
type: Array,
default: () => {
return [];
},
},
//
showSelect: {
type: Boolean,
default: false,
},
//
showIndex: {
type: Boolean,
default: false,
},
//
funData: {
type: Array,
default: () => {
return [];
},
},
//
funWidth: {
type: Number,
default: 80,
},
//
border: {
type: Boolean,
default: true,
},
minWidth: {
type: String,
default: "100px",
},
//
highlightCurrent: {
type: Boolean,
default: false,
},
//
sortableSwitch: {
type: Boolean,
default: false,
},
//
bottomPlus: {
type: Boolean,
default: false,
},
// headerStyle:{
// type: String,
// default:{
// 'background-color': '#F5F5F5',
// 'color': '#333333',
// },
// }
tableDataMergeList: {
type: Array,
default: () => {
return [];
},
},
},
data() {
return {
headerStyle: {
"background-color": "#F5F5F5",
color: "#333333",
},
itemKey: true,
radioIndex: false,
};
},
created() {},
mounted() {
this.rowDrop();
//
// var tableBody = this.$refs.elTable.$refs.footerWrapper
// tableBody.addEventListener('scroll', () => {
// //
// const scrollLeft = tableBody.scrollLeft
// this.$refs.elTable.$refs.bodyWrapper.scrollLeft = scrollLeft
// })
},
filters: {
timeFiter(val) {
if (!val && val != 0) {
return;
} else {
let returnData = val;
if (typeof val != "number" && typeof val != "boolean") {
// console.log(val,"asdasdad")
returnData = val.split("T").join(" ");
}
return returnData;
// return val
}
},
},
computed: {},
watch: {
tableData: {
deep: true,
handler(newV, oldV) {
newV.forEach((el, index) => {
el.sort = index;
});
// this.setTableKey()
},
},
},
methods: {
objectSpanMethod({ row, column }) {
if (this.tableDataMergeList.includes(column.property)) {
if (row[`${column.property}Length`]) {
return {
rowspan: row[`${column.property}Length`],
colspan: 1,
};
} else {
return {
rowspan: 0,
colspan: 0,
};
}
}
},
uuidKey() {
return uuidv4();
},
setCurrent(row) {
this.$refs.elTable.setCurrentRow(row);
},
select(selection, row) {
this.$emit("select", selection, row);
},
selectAll(selection) {
this.$emit("selectAll", selection);
},
setTableKey() {
this.itemKey = !this.itemKey;
},
//
doubleClick(row, column, cell, event) {
this.$emit("doubleClick", row, column, cell, event);
},
//
clearSelect() {
this.$refs.elTable.clearSelection();
},
/**
* @description 单元格点击事件
* @author duanyipeng
* @createDate 2020/7/6 21:36
* @param { Object } row 每一行数据
* @param { Object } column 选中单元格表头数据
* @use {
* other:{
* isClick:true
* }
* }
*/
getCellClick(row, column) {
let label = column.label;
// let itemColumn = this.tableColumn.filter(item => {
// return item.label === label
// })
// if (itemColumn[0] && itemColumn[0].other && itemColumn[0].other.isClick) {
// this.$emit('onCellClick', row, label)
// }
this.$emit("onCellClick", row, label);
},
//
getRowClick(row, column, event) {
this.handleCurrentChange(row);
this.$emit("onRowClick", row, event);
},
//
rowDblclick(row, column, event) {
this.$emit("rowDblclick", row);
},
// id,row-keykey
getRowKey(row) {
return uuidv4();
},
//
handleSelectionChange(selectTable) {
this.$emit("onSelectionChange", selectTable);
},
/**
* 触发操作事件
* 参数1当前按钮索引
* 参数2当前按钮所在行数据
*/
funcEmit(index, row, item) {
this.$emit("onFunc", index, row, item);
},
// :descending;ascending
sortChange(column) {
this.$emit("sortChange", column.prop, column.order);
},
//
handleCurrentChange(val) {
this.radioIndex = val.index;
this.$emit("radioChange", val);
},
clearRadioIndex() {
this.radioIndex = false;
},
setRadioIndex(index) {
this.radioIndex = index;
},
// index
tableCellName({ row, column, rowIndex, columnINdex }) {
row.index = rowIndex;
column.index = columnINdex;
},
// tableRowClassName({ row,rowIndex}) {
// if (rowIndex === 1) {
// return 'warning-row';
// } else if (rowIndex === 3) {
// return 'success-row';
// }
// return '';
// },
tableRowClassName: function ({ row, rowIndex }) {
let data = "";
this.$emit(
"row-class-name",
{
row: row,
rowIndex: rowIndex,
},
(val) => {
data = val;
}
);
return data; //string
},
newRow() {
let arr = this.getAddRowData();
this.$emit("newRow", arr);
this.$nextTick(() => {
this.$refs.elTable.bodyWrapper.scrollTop =
this.$refs.elTable.bodyWrapper.scrollHeight;
this.$refs.elTable.doLayout();
});
},
getAddRowData() {
let arr = {};
this.tableColumn.forEach((el) => {
arr[el.prop] = "";
});
return arr;
},
//,
rowDrop() {
if (!this.sortableSwitch) {
return;
}
const el = this.$refs.elTable.$el.querySelectorAll(
".el-table__body-wrapper > table > tbody"
)[0];
this.sortable = Sortable.create(el, {
ghostClass: "sortable-ghost",
setData: function (dataTransfer) {
dataTransfer.setData("Text", "");
},
onEnd: (evt) => {
const targetRow = this.tableData.splice(evt.oldIndex, 1)[0];
this.tableData.splice(evt.newIndex, 0, targetRow);
},
});
},
//
toggleSelection(rowData, selected) {
if (rowData) {
rowData.forEach((row) => {
this.$refs.elTable.toggleRowSelection(row, selected);
});
} else {
this.$refs.elTable.clearSelection();
}
},
handlerSpanMethod(row, column, rowIndex, columnIndex) {
this.$emit("spanMethod", row, column, rowIndex, columnIndex);
},
//
getSummaries(params) {
const { columns, data } = params;
const sums = [];
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = "合计";
return;
}
this.SummariesIndex.forEach((el) => {
if (index == el) {
const values = data.map((item) => Number(item[column.property]));
if (!values.every((value) => isNaN(value))) {
sums[index] = values.reduce((prev, curr) => {
const value = Number(curr);
if (!isNaN(value)) {
return prev + curr;
} else {
return prev;
}
}, 0);
sums[index] = sums[index].toFixed(2);
} else {
sums[index] = "";
}
}
});
});
this.$emit("sums", sums);
return sums;
},
},
};
</script>
<style>
.el-table .warning-row {
background: #ffe562;
}
.el-table .success-row {
background: #acf389;
}
.el-table .denger-row {
background: #e13501;
}
.fiexTableBottm {
position: sticky;
bottom: 0;
}
</style>
<style scoped lang="scss">
.btnText {
cursor: pointer;
}
.mr-12 {
margin-right: 12px;
}
::v-deep .cell {
font-weight: 400;
}
.buttom {
::v-deep .el-button--mini.is-circle {
position: absolute;
top: 50px;
left: 10px;
}
}
::v-deep .el-table__cell:last-child {
border-radius: 0 10px 10px 0;
}
// ::v-deep .el-table .sort-caret.ascending {
// top: 1px
// }
// ::v-deep .el-table .sort-caret.descending {
// bottom: 2px
// }
// ::v-deep .el-table .caret-wrapper {
// height: 23px;
// }
//
// div ::v-deep .el-table--scrollable-x .el-table__body-wrapper{overflow-x: hidden!important;z-index: 2!important;}
// div ::v-deep .el-table__footer-wrapper {overflow-x: auto;border-top: 1px solid #f4f4f4;}
// ::v-deep .el-table {
// overflow-x: auto;
// }
// ::v-deep .el-table__header-wrapper,
// ::v-deep .el-table__body-wrapper,
// ::v-deep .el-table__footer-wrapper {
// overflow: visible;
// }
// ::v-deep .el-table::after {
// position: relative;
// }
// ::v-deep .el-table--scrollable-x ::v-deep .el-table__body-wrapper {
// overflow: visible;
// }
// ::v-deep .el-table { .el-table__body-wrapper { z-index: 2; } }
::v-deep.el-table {
width: 100%;
margin-bottom: 0vh !important;
&::before {
display: none;
}
.el-table__body {
-webkit-border-vertical-spacing: 0px !important; //
}
//
thead th {
font-size: 14px;
color: #575757 !important;
&:nth-last-child(2) {
border-right: 1px solid rgba(0, 0, 0, 0.1) !important;
border-radius: 0 5px 5px 0;
right: 1px;
}
}
thead th,
.el-table__row td {
font-size: 18px;
font-family: PingFangSC-Semibold, PingFang SC;
font-weight: 600;
border-top: 1px solid rgba(0, 0, 0, 0.1) !important;
border-bottom: 1px solid rgba(0, 0, 0, 0.1) !important;
&:first-child {
border-left: 0px solid rgba(0, 0, 0, 0.1) !important;
border-radius: 0px 0 0 0px !important;
}
}
.el-table__row > td {
font-size: 12px;
color: #333333;
&:last-child {
border-left: 0px solid rgba(0, 0, 0, 0.1) !important;
border-radius: 0px 0 0 0px !important;
}
}
.el-table__body tr:hover > td.el-table__cell {
background-color: #eef5fe !important;
}
.el-table__fixed::before {
display: none;
}
}
</style>

View File

@ -0,0 +1,198 @@
<template>
<div class="wrapTable">
<div class="RightBtnList">
<el-tooltip
class="item"
effect="dark"
:content="item.title"
placement="top"
v-for="(item, index) in fixedButtonList"
:key="index"
trigger="hover"
>
<span>
<el-button
size="mini"
:icon="item.icon"
@click.stop="
fixedClick(
item,
'#mainTable',
'机台排产表',
mainTableData,
mainTableColumn
)
"
style="margin: 0"
></el-button>
</span>
</el-tooltip>
</div>
<div class="table">
<base-table
v-loading="tableLoading"
:showIndex="false"
:tableData="tableData"
:tableColumn="tableColumn"
:tableDataMergeList="tableDataMergeList"
tableHeight="70vh"
id="mainTable"
>
<template #new_state="{row}">
<div>
{{ row.new_state === 'Y' ? "成功" : row.new_state === 'N' ? "失败" : "" }}
</div>
</template>
</base-table>
</div>
<div class="page">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pageModel.pageNum"
:page-sizes="[10, 20, 40, 100,5000,9999]"
:page-size="pageModel.pageSize"
layout="total, prev, pager, next,sizes, jumper"
:total="pageModel.pageTotal"
>
</el-pagination>
</div>
</div>
</template>
<script>
import baseTable from "./baseTable/index.vue";
//excel使
import XLSX from "xlsx";
import FileSaver from "file-saver";
//
import {basePrintJS} from "@/utils/util";
export default {
name: "baseNewTable",
props: {
tableData: {
type: Array,
default: () => {
return [];
},
},
tableColumn: {
type: Array,
default: () => {
return [];
},
},
tableLoading: {type: Boolean, default: false},
exportEventName: {type: String, default: "导出文件名"},
tableDataMergeList: {
type: Array,
default: () => {
return [];
},
},
pageModel: {
type: Object,
default: () => {
return {
page: 1,
limit: 10,
pageTotal: 99,
};
},
},
},
data() {
return {
fixedButtonList: [
{
icon: "el-icon-printer",
title: "打印",
},
{
icon: "el-icon-folder",
title: "导出",
},
],
};
},
methods: {
/*
* 导出打印功能
* item:当前按钮信息
* boxId:打印表单id(仅导出
* name:导出后文件名仅导出
* tableData:传打印表格当前tableData仅打印
* tableColumn:传打印表格当前tableColumn仅打印
* */
fixedClick(item, boxId, name) {
if (item.title == "导出") {
this.exportEvent(name, boxId);
} else if (item.title == "打印") {
this.duplicate();
}
},
//
exportEvent(excelName, 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",
}),
this.exportEventName + ".xlsx"
);
} catch (e) {
if (typeof console !== "undefined") console.log(e, workbook);
}
return workbook;
},
//
duplicate() {
basePrintJS(this.tableData, this.tableColumn);
},
//size
handleSizeChange(val) {
console.log(val);
this.$emit("pageSizeChange", val);
},
//
handleCurrentChange(val) {
this.$emit("pageChange", val);
},
},
components: {
baseTable,
},
};
</script>
<style scoped lang="scss">
.wrapTable {
> .RightBtnList {
display: flex;
justify-content: flex-end;
}
> .table {
margin-top: 10px;
}
> .page {
margin-top: 10px;
display: flex;
justify-content: flex-end;
}
}
</style>

View File

@ -0,0 +1,600 @@
<template>
<div class="MachineSchedulingTable">
<!-- 搜索框-->
<div class="search">
<div class="datepickBox" style="">
<el-date-picker
v-model="queryCriteria.business_date_start"
type="date"
placeholder="选择开始日期"
value-format="yyyy-MM-dd"
>
</el-date-picker>
</div>
<div class="datepickBox" style="">
<el-date-picker
v-model="queryCriteria.business_date_end"
type="date"
placeholder="选择结束时间"
value-format="yyyy-MM-dd"
>
</el-date-picker>
</div>
<div class="radio">
<el-select v-model="queryCriteria.new_state" placeholder="请选择">
<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.spec_no" placeholder="商家编码"></el-input>
</div>
<div class="chunk">
<el-input v-model="queryCriteria.warehouse_no" placeholder="仓库编码"></el-input>
</div>
<div class="chunk">
<el-input v-model="queryCriteria.warehouse_name" placeholder="仓库名称"></el-input>
</div>
<div class="chunk">
<el-input v-model="queryCriteria.new_system_number" placeholder="U8C单号"></el-input>
</div>
<div class="chunk">
<el-input v-model="queryCriteria.shop_name" placeholder="店铺名称"></el-input>
</div>
<div class="chunk">
<el-input v-model="queryCriteria.shop_no" placeholder="店铺编码"></el-input>
</div>
<div class="chunk">
<el-input v-model="queryCriteria.order_no" placeholder="旺店通出库单编码"></el-input>
</div>
<el-button
type="primary"
@click="query"
:loading="loading"
size="small"
style="width: 5%; margin: 10px 20px"
>查询
</el-button>
<el-button
type="primary"
@click="downLoad"
:loading="loading"
size="small"
style="width: 5%; margin: 10px 20px"
>excel导出
</el-button>
<el-button
type="warning"
@click="reset"
:loading="loading"
size="small"
style="width: 5%; margin: 10px 20px"
>重置
</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: ""},
{label: "成功", value: "Y"},
{label: "失败", value: "N"},
],
//
queryCriteria: {
"reportDate": "",
"business_date_start": "",
"business_date_end": "",
"new_state": "",
"spec_no": "",
"warehouse_no": "",
"warehouse_name": "",
"new_system_number": "",
"shop_name": "",
"shop_no": "",
"order_no": ""
},
pageModel: {
"pageSize": 100,
"pageNum": 1,
pageTotal: 0,
},
//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: "new_state",
tooltip: true,
width: 150,
},
{
label: "成功/失败原因",
prop: "new_transmit_info",
tooltip: true,
width: 150,
},
{
label: "U8C销售单号",
prop: "new_system_number",
tooltip: true,
width: 150,
},
{
label: "U8C销售主键",
prop: "new_system_primary",
tooltip: true,
width: 150,
},
{
label: "旺店通品牌名称",
prop: "brand_name",
tooltip: true,
width: 150,
},
{
label: "旺店通品牌编码",
prop: "barcode",
tooltip: true,
width: 150,
},
{
label: "商家编码sku",
prop: "spec_no",
tooltip: true,
width: 150,
},
{
label: "旺店通货品数量",
prop: "goods_count",
tooltip: true,
width: 150,
},
{
label: "出库明细主键",
prop: "rec_id",
tooltip: true,
width: 150,
},
{
label: "总货款",
prop: "share_amount",
tooltip: true,
width: 150,
},
{
label: "仓库编码",
prop: "warehouse_no",
tooltip: true,
width: 150,
},
{
label: "仓库名称",
prop: "warehouse_name",
tooltip: true,
width: 150,
},
{
label: "出库单编码",
prop: "order_no",
tooltip: true,
width: 150,
},
{
label: "旺店通店铺名称",
prop: "shop_name",
tooltip: true,
width: 150,
},
{
label: "旺店通店铺编码",
prop: "shop_no",
tooltip: true,
width: 150,
},
{
label: "发货日期(业务日期)",
prop: "consign_time",
tooltip: true,
width: 200,
},
],
//
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 = {
"reportDate": "",
"business_date_start": "",
"business_date_end": "",
"new_state": "",
"spec_no": "",
"warehouse_no": "",
"warehouse_name": "",
"new_system_number": "",
"shop_name": "",
"shop_no": "",
"order_no": ""
};
},
//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("busidataTocsalesServiceImpl", "busidataTocsalesServiceImpl", "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:keyvaluetempObjkey
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;
}
}
> .main {
> .tableBox {
}
}
}
</style>

View File

@ -0,0 +1,596 @@
<template>
<div class="MachineSchedulingTable">
<!-- 搜索框-->
<div class="search">
<div class="datepickBox" style="">
<el-date-picker
v-model="queryCriteria.business_date_start"
type="date"
placeholder="选择开始日期"
value-format="yyyy-MM-dd"
>
</el-date-picker>
</div>
<div class="datepickBox" style="">
<el-date-picker
v-model="queryCriteria.business_date_end"
type="date"
placeholder="选择结束时间"
value-format="yyyy-MM-dd"
>
</el-date-picker>
</div>
<div class="radio">
<el-select v-model="queryCriteria.new_state" placeholder="请选择">
<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.spec_no" placeholder="商家编码"></el-input>
</div>
<div class="chunk">
<el-input v-model="queryCriteria.warehouse_no" placeholder="仓库编码"></el-input>
</div>
<div class="chunk">
<el-input v-model="queryCriteria.warehouse_name" placeholder="仓库名称"></el-input>
</div>
<div class="chunk">
<el-input v-model="queryCriteria.new_system_number" placeholder="U8C单号"></el-input>
</div>
<div class="chunk">
<el-input v-model="queryCriteria.shop_name" placeholder="店铺名称"></el-input>
</div>
<div class="chunk">
<el-input v-model="queryCriteria.shop_no" placeholder="店铺编码"></el-input>
</div>
<div class="chunk">
<el-input v-model="queryCriteria.order_no" placeholder="旺店通出库单编码"></el-input>
</div>
<el-button
type="primary"
@click="query"
:loading="loading"
size="small"
style="width: 5%; margin: 10px 20px"
>查询
</el-button>
<el-button
type="primary"
@click="downLoad"
:loading="loading"
size="small"
style="width: 5%; margin: 10px 20px"
>excel导出
</el-button>
<el-button
type="warning"
@click="reset"
:loading="loading"
size="small"
style="width: 5%; margin: 10px 20px"
>重置
</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";
export default {
name: "MachineSchedulingTable",
data() {
return {
stateOptions: [
{label: "全部", value: ""},
{label: "成功", value: "Y"},
{label: "失败", value: "N"},
],
//
queryCriteria: {
"reportDate": "",
"business_date_start": "",
"business_date_end": "",
"new_state": "",
"spec_no": "",
"warehouse_no": "",
"warehouse_name": "",
"new_system_number": "",
"shop_name": "",
"shop_no": "",
"order_no": ""
},
pageModel: {
"pageSize": 100,
"pageNum": 1,
pageTotal: 0,
},
//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: "new_state",
tooltip: true,
width: 150,
},
{
label: "成功/失败原因",
prop: "new_transmit_info",
tooltip: true,
width: 150,
},
{
label: "U8C销售单号",
prop: "new_system_number",
tooltip: true,
width: 150,
},
{
label: "U8C销售主键",
prop: "new_system_primary",
tooltip: true,
width: 150,
},
{
label: "旺店通品牌名称",
prop: "brand_name",
tooltip: true,
width: 150,
},
{
label: "旺店通品牌编码",
prop: "brand_no",
tooltip: true,
width: 150,
},
{
label: "商家编码sku",
prop: "spec_no",
tooltip: true,
width: 150,
},
{
label: "旺店通货品数量",
prop: "num",
tooltip: true,
width: 150,
},
{
label: "价格",
prop: "price",
tooltip: true,
width: 150,
},
{
label: "旺店通入库明细主键",
prop: "rec_id",
tooltip: true,
width: 150,
},
{
label: "旺店通仓库编码",
prop: "warehouse_no",
tooltip: true,
width: 150,
},
{
label: "旺店通仓库名称",
prop: "warehouse_name",
tooltip: true,
width: 150,
},
{
label: "旺店通入库单编码",
prop: "order_no",
tooltip: true,
width: 150,
},
{
label: "旺店通店铺名称",
prop: "shop_name",
tooltip: true,
width: 150,
},
{
label: "旺店通店铺编码",
prop: "shop_no",
tooltip: true,
width: 150,
},
{
label: "旺店通入库审核日期(业务日期)",
prop: "business_date",
tooltip: true,
width: 200,
},
],
//
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", "queryToCReturnReportExcel", "", 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 = {
"reportDate": "",
"business_date_start": "",
"business_date_end": "",
"new_state": "",
"spec_no": "",
"warehouse_no": "",
"warehouse_name": "",
"new_system_number": "",
"shop_name": "",
"shop_no": "",
"order_no": ""
};
},
//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("busidataTocsalesServiceImpl", "busidataTocsalesServiceImpl", "queryToCReturnReport", "", 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:keyvaluetempObjkey
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;
}
}
> .main {
> .tableBox {
}
}
}
</style>

View File

@ -40,15 +40,15 @@ 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:9999`,
// target: `http://192.168.2.78:10086`,
// target: `http://192.168.2.185:9999`,
// target: `http://192.168.2.83:9999`,
target:'http://127.0.0.1:9999/',
// target:'http://127.0.0.1:9999/',
changeOrigin: true,
pathRewrite: {
["^" + process.env.VUE_APP_BASE_API]: "",