From 8bcd0cc77b0c7aa2c00ffd926ee87f1f09a3a3b5 Mon Sep 17 00:00:00 2001
From: chenlu <1320612696@qq.com>
Date: 星期一, 11 八月 2025 10:07:48 +0800
Subject: [PATCH] Merge branch 'master' of http://10.153.19.25:10105/r/ERP_override
---
north-glass-erp/northglass-erp/src/components/BasicTable.vue | 128 +++++++++++++++++++++++++++++++++++-------
1 files changed, 107 insertions(+), 21 deletions(-)
diff --git a/north-glass-erp/northglass-erp/src/components/BasicTable.vue b/north-glass-erp/northglass-erp/src/components/BasicTable.vue
index ad30121..b1ce3de 100644
--- a/north-glass-erp/northglass-erp/src/components/BasicTable.vue
+++ b/north-glass-erp/northglass-erp/src/components/BasicTable.vue
@@ -2,11 +2,19 @@
import {Search} from "@element-plus/icons-vue"
import {defineEmits, onMounted, reactive, ref, watch} from "vue"
import {changeFilterEvent} from "@/hook"
-import request from "@/utils/request";
+import request from "@/utils/request"
+import exportExcel from "@/hook/exportExcel"
+import {addListener,exportData} from "@/hook/mouseMove"
import deepClone from "@/utils/deepClone";
import {ElMessage} from "element-plus";
+import * as XLSX from "xlsx";
+import {useI18n} from "vue-i18n";
+import useOrderInfoStore from "@/stores/sd/order/orderInfo";
+
+const { t } = useI18n()
const xGrid = ref()
let filterData = ref({})
+const orderInfo = useOrderInfoStore()
const gridOptions = reactive({
loading:true,
border: "full",//琛ㄦ牸鍔犺竟妗�
@@ -19,7 +27,8 @@
printConfig: {},
importConfig: {},
exportConfig: {},
- scrollY:{ enabled: true },//寮�鍚櫄鎷熸粴鍔�
+ scrollY:{ enabled: true,gt:0 },//寮�鍚櫄鎷熸粴鍔�
+ scrollX:{ enabled: true,gt:5 },//寮�鍚櫄鎷熸粴鍔�
showOverflow:true,
columnConfig: {
resizable: true,
@@ -36,12 +45,25 @@
mode: 'row',
showStatus: true
},//琛ㄥご鍙傛暟
- columns:[
+ menuConfig: {
+ body: {
+ options: [
+ [
+ { code: 'exportExcelChecked', name: t('components.exportSelected'), prefixIcon: 'vxe-icon-download', visible: true }
+ ]
+ ]
+ }
+ },
+ columns:[
],//琛ㄥご鎸夐挳
toolbarConfig: {
buttons: [],
+ slots: {
+ tools: 'toolbar_buttons',
+ buttons:'buttons'
+ },
// import: false,
// export: true,
// print: true,
@@ -54,7 +76,7 @@
return[
columns.map((column, columnIndex) => {
if (columnIndex === 0) {
- return '鍚堣:'
+ return t('basicData.total')
}
if (props.childrenData.footList.includes(column.field)) {
return sumNum(data, column.field)
@@ -65,6 +87,26 @@
}
})
+const gridEvents = {
+ menuClick ({ menu, row, column }) {
+ const $grid = xGrid.value
+ if ($grid) {
+ switch (menu.code) {
+ case 'exportExcelChecked': {
+ let result = exportData()
+ if(result){
+ // 灏嗘暟鎹浆鎹负 worksheet 瀵硅薄
+ const worksheet = XLSX.utils.aoa_to_sheet(result);
+ const workbook = XLSX.utils.book_new();
+ XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
+ XLSX.writeFile(workbook, `${props.childrenData.exportName}.xlsx`);
+ }
+ break
+ }
+ }
+ }
+ }
+}
const props = defineProps({
@@ -74,7 +116,7 @@
}
})
const basicProp = ref({
- pageSize : 100,//椤甸潰鏄剧ず鏁伴噺
+ pageSize : 10000,//椤甸潰鏄剧ず鏁伴噺
pageNum:1,//褰撳墠椤�
selectDate:['',''],//鏌ヨ鐨勬棩鏈�
pageTotal : 0,//鎬婚〉鏁�
@@ -97,8 +139,7 @@
onMounted(() => {
gridOptions.columns = props.childrenData.columns
getReportData()
-
-
+ addListener(xGrid.value,gridOptions)
})
function filterChanged(column){
//gridOptions.loading=true
@@ -132,26 +173,40 @@
}
const getReportData = () => {
- request.post(`${props.childrenData.url}/${basicProp.value.pageNum}/${basicProp.value.pageSize}/${basicProp.value.selectDate}`,filterData.value).then(res => {
+ if(props.childrenData.model!=null){
+ request.post(`${props.childrenData.url}/${basicProp.value.pageNum}/${basicProp.value.pageSize}/${orderInfo.reportFormDate}/${props.childrenData.model}/${props.childrenData.scope}`,filterData.value).then(res => {
+ if(res.code === '200'){
+ props.childrenData.data = res.data.data
+ basicProp.value.pageTotal = res.data.total.pageTotal
+ basicProp.value.dataTotal = res.data.total.total
+ orderInfo.reportFormDate = res.data.selectDate
+ }
+ })
+ return
+ }
+ request.post(`${props.childrenData.url}/${basicProp.value.pageNum}/${basicProp.value.pageSize}/${orderInfo.reportFormDate}`,filterData.value).then(res => {
if(res.code === '200'){
props.childrenData.data = res.data.data
basicProp.value.pageTotal = res.data.total.pageTotal
basicProp.value.dataTotal = res.data.total.total
- basicProp.value.selectDate = res.data.selectDate
+ orderInfo.reportFormDate = res.data.selectDate
}
})
}
+
+
</script>
<template>
- <div class="main-div">
+ <div style="width: 100%;height: 100%">
+ <div class="head">
<el-date-picker
- v-model="basicProp.selectDate"
+ v-model="orderInfo.reportFormDate"
type="daterange"
- start-placeholder="寮�濮嬫椂闂�"
- end-placeholder="缁撴潫鏃堕棿"
+ :start-placeholder="$t('basicData.startDate')"
+ :end-placeholder="$t('basicData.endDate')"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
/>
@@ -160,14 +215,16 @@
id="searchButton"
type="primary"
style="margin-top: -5px"
- :icon="Search">鏌ヨ</el-button>
- <div class="order-detail">
+ :icon="Search">{{$t('basicData.search')}}</el-button>
+ </div>
+ <div class="main-table">
<vxe-grid
@filter-change="filterChanged"
- height="110%"
+ height="100%"
class="mytable-scrollbar"
ref="xGrid"
v-bind="gridOptions"
+ v-on="gridEvents"
>
<!-- 涓嬫媺鏄剧ず鎵�鏈変俊鎭彃妲�-->
<template #content="{ row }">
@@ -182,10 +239,26 @@
<template #num1_filter="{ column, $panel }">
<div>
<div v-for="(option, index) in column.filters" :key="index">
- <input type="type" v-model="option.data" @input="changeFilterEvent($event, option, $panel)"/>
+ <input type="text"
+ v-model="option.data"
+ @keyup.enter.native="$panel.confirmFilter()"
+ @input="changeFilterEvent($event, option, $panel)"/>
</div>
</div>
</template>
+
+ <template #toolbar_buttons>
+ <vxe-button style="margin-right: 0.5rem"
+ @click="exportExcel(props.childrenData.exportUrl,
+ props.childrenData.exportName,
+ orderInfo.reportFormDate)">
+ {{$t('basicData.export')}}</vxe-button>
+ </template>
+ <template #buttons>
+ <slot name="buttons"></slot>
+ </template>
+
+
<template #pager>
<!--浣跨敤 pager 鎻掓Ы-->
<!-- 'PrevJump','NextJump', -->
@@ -219,12 +292,25 @@
border: none !important;
background-color: transparent;
}
-.order-primary{
+.head{
width: 100%;
+ height: 35px;
}
-.order-detail{
- width: 100%;
- height: calc(100% - 30px);
+.main-table{
+ width: 100%;
+ height: calc(100% - 35px);
+}
+
+.vxe-grid {
+ /* 绂佺敤娴忚鍣ㄩ粯璁ら�変腑 */
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+:deep(#product .el-dialog__body){
+ height: 90%;
+ width: 100%;
}
</style>
\ No newline at end of file
--
Gitblit v1.8.0