|
|
@@ -7,90 +7,167 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
- <!-- 工具栏 -->
|
|
|
+ <!-- 工具栏 + 高级筛选 -->
|
|
|
<div class="toolbar">
|
|
|
- <!-- 日期范围筛选 -->
|
|
|
- <div class="date-filter">
|
|
|
- <el-date-picker
|
|
|
- v-model="dateRange"
|
|
|
- type="daterange"
|
|
|
- range-separator="至"
|
|
|
- start-placeholder="开始日期"
|
|
|
- end-placeholder="结束日期"
|
|
|
- format="YYYY-MM-DD"
|
|
|
- value-format="YYYY-MM-DD"
|
|
|
- @change="handleDateRangeChange"
|
|
|
- style="width: 280px"
|
|
|
- />
|
|
|
- </div>
|
|
|
- <!-- 搜索栏 -->
|
|
|
- <div class="search-bar">
|
|
|
- <el-input
|
|
|
- v-model="searchKeyword"
|
|
|
- placeholder="搜索往来单位 / 计划号"
|
|
|
- clearable
|
|
|
- @clear="handleSearch"
|
|
|
- @keyup.enter="handleSearch"
|
|
|
- >
|
|
|
- <template #prefix>
|
|
|
- <el-icon><Search /></el-icon>
|
|
|
- </template>
|
|
|
- <template #append>
|
|
|
- <el-button @click="handleSearch">搜索</el-button>
|
|
|
- </template>
|
|
|
- </el-input>
|
|
|
- </div>
|
|
|
- <el-button type="primary" @click="handleAdd">
|
|
|
- <el-icon><Plus /></el-icon>
|
|
|
- 新增计划
|
|
|
- </el-button>
|
|
|
- <!-- <el-upload
|
|
|
- :show-file-list="false"
|
|
|
- accept=".xlsx,.xls,.csv"
|
|
|
- :before-upload="handleImport"
|
|
|
- >
|
|
|
- <el-button>
|
|
|
- <el-icon><Upload /></el-icon>
|
|
|
- 导入 Excel
|
|
|
- </el-button>
|
|
|
- </el-upload> -->
|
|
|
- <el-button @click="handleExport">
|
|
|
- <el-icon><Document /></el-icon>
|
|
|
- 导出 Excel
|
|
|
- </el-button>
|
|
|
- <el-button-group>
|
|
|
- <el-button
|
|
|
- :type="dateFilterType === 'all' ? 'primary' : 'default'"
|
|
|
- @click="setDateFilter('all')"
|
|
|
- >
|
|
|
- 全部
|
|
|
- </el-button>
|
|
|
- <el-button
|
|
|
- :type="dateFilterType === 'today' ? 'primary' : 'default'"
|
|
|
- @click="setDateFilter('today')"
|
|
|
- >
|
|
|
- 今日
|
|
|
- </el-button>
|
|
|
- <el-button
|
|
|
- :type="dateFilterType === 'tomorrow' ? 'primary' : 'default'"
|
|
|
- @click="setDateFilter('tomorrow')"
|
|
|
- >
|
|
|
- 明日
|
|
|
+ <div class="toolbar-row date-row">
|
|
|
+ <!-- 日期范围筛选 -->
|
|
|
+ <div class="date-filter">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="dateRange"
|
|
|
+ type="daterange"
|
|
|
+ range-separator="至"
|
|
|
+ start-placeholder="开始日期"
|
|
|
+ end-placeholder="结束日期"
|
|
|
+ format="YYYY-MM-DD"
|
|
|
+ value-format="YYYY-MM-DD"
|
|
|
+ @change="handleDateRangeChange"
|
|
|
+ style="width: 280px"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
+ <!-- 搜索栏 -->
|
|
|
+ <div class="search-bar">
|
|
|
+ <el-input
|
|
|
+ v-model="searchKeyword"
|
|
|
+ placeholder="搜索往来单位 / 计划号 / 产品"
|
|
|
+ clearable
|
|
|
+ @clear="handleSearch"
|
|
|
+ @keyup.enter="handleSearch"
|
|
|
+ >
|
|
|
+ <template #prefix>
|
|
|
+ <el-icon><Search /></el-icon>
|
|
|
+ </template>
|
|
|
+ <template #append>
|
|
|
+ <el-button @click="handleSearch">搜索</el-button>
|
|
|
+ </template>
|
|
|
+ </el-input>
|
|
|
+ </div>
|
|
|
+ <el-button type="primary" @click="handleAdd">
|
|
|
+ <el-icon><Plus /></el-icon>
|
|
|
+ 新增计划
|
|
|
</el-button>
|
|
|
- <el-button
|
|
|
- :type="dateFilterType === 'yesterday' ? 'primary' : 'default'"
|
|
|
- @click="setDateFilter('yesterday')"
|
|
|
- >
|
|
|
- 昨日
|
|
|
+ <el-button @click="handleExport">
|
|
|
+ <el-icon><Document /></el-icon>
|
|
|
+ 导出 Excel
|
|
|
</el-button>
|
|
|
- <el-button
|
|
|
- :type="dateFilterType === 'week' ? 'primary' : 'default'"
|
|
|
- @click="setDateFilter('week')"
|
|
|
- >
|
|
|
- 本周
|
|
|
+ <el-button-group class="date-quick-group">
|
|
|
+ <el-button
|
|
|
+ :type="dateFilterType === 'all' ? 'primary' : 'default'"
|
|
|
+ @click="setDateFilter('all')"
|
|
|
+ >
|
|
|
+ 全部
|
|
|
+ </el-button>
|
|
|
+ <el-button
|
|
|
+ :type="dateFilterType === 'today' ? 'primary' : 'default'"
|
|
|
+ @click="setDateFilter('today')"
|
|
|
+ >
|
|
|
+ 今日
|
|
|
+ </el-button>
|
|
|
+ <el-button
|
|
|
+ :type="dateFilterType === 'tomorrow' ? 'primary' : 'default'"
|
|
|
+ @click="setDateFilter('tomorrow')"
|
|
|
+ >
|
|
|
+ 明日
|
|
|
+ </el-button>
|
|
|
+ <el-button
|
|
|
+ :type="dateFilterType === 'yesterday' ? 'primary' : 'default'"
|
|
|
+ @click="setDateFilter('yesterday')"
|
|
|
+ >
|
|
|
+ 昨日
|
|
|
+ </el-button>
|
|
|
+ <el-button
|
|
|
+ :type="dateFilterType === 'week' ? 'primary' : 'default'"
|
|
|
+ @click="setDateFilter('week')"
|
|
|
+ >
|
|
|
+ 本周
|
|
|
+ </el-button>
|
|
|
+ </el-button-group>
|
|
|
+ <div class="toolbar-spacer" />
|
|
|
+ <el-button text type="primary" @click="showAdvancedFilters = !showAdvancedFilters">
|
|
|
+ {{ showAdvancedFilters ? '收起高级筛选' : '展开高级筛选' }}
|
|
|
</el-button>
|
|
|
- </el-button-group>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
+ <!-- 高级筛选区域 -->
|
|
|
+ <transition enter-active-class="animate__animated animate__fadeIn" leave-active-class="animate__animated animate__fadeOut">
|
|
|
+ <div v-show="showAdvancedFilters" class="advanced-search-wrapper">
|
|
|
+ <el-card shadow="hover">
|
|
|
+ <el-form :model="filters" class="filter-form" label-position="right" label-width="100px" @submit.prevent>
|
|
|
+ <el-row :gutter="20">
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="计划号">
|
|
|
+ <el-input
|
|
|
+ v-model="filters.planNo"
|
|
|
+ placeholder="计划号"
|
|
|
+ clearable
|
|
|
+ @keyup.enter="handleSearch"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="往来单位">
|
|
|
+ <el-input
|
|
|
+ v-model="filters.customerName"
|
|
|
+ placeholder="往来单位"
|
|
|
+ clearable
|
|
|
+ @keyup.enter="handleSearch"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="产品">
|
|
|
+ <el-input
|
|
|
+ v-model="filters.product"
|
|
|
+ placeholder="产品"
|
|
|
+ clearable
|
|
|
+ @keyup.enter="handleSearch"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="业务类型">
|
|
|
+ <el-select
|
|
|
+ v-model="filters.businessType"
|
|
|
+ placeholder="业务类型"
|
|
|
+ clearable
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in businessTypeOptions"
|
|
|
+ :key="item"
|
|
|
+ :label="item"
|
|
|
+ :value="item"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item label="执行状态">
|
|
|
+ <el-select
|
|
|
+ v-model="filters.executionStatus"
|
|
|
+ placeholder="执行状态"
|
|
|
+ clearable
|
|
|
+ style="width: 100%"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="item in executionStatusOptions"
|
|
|
+ :key="item"
|
|
|
+ :label="item"
|
|
|
+ :value="item"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="6">
|
|
|
+ <el-form-item>
|
|
|
+ <el-button type="primary" @click="handleSearch">筛选</el-button>
|
|
|
+ <el-button @click="handleResetFilters">重置</el-button>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form>
|
|
|
+ </el-card>
|
|
|
+ </div>
|
|
|
+ </transition>
|
|
|
|
|
|
<!-- 表格 -->
|
|
|
<art-table
|
|
|
@@ -101,6 +178,8 @@
|
|
|
:index="true"
|
|
|
:border="true"
|
|
|
table-layout="fixed"
|
|
|
+ show-summary
|
|
|
+ :summary-method="getSummary"
|
|
|
v-model:current-page="currentPage"
|
|
|
v-model:page-size="pageSize"
|
|
|
@current-change="handlePageChange"
|
|
|
@@ -139,6 +218,21 @@
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column prop="remarks" label="备注" min-width="150" show-overflow-tooltip />
|
|
|
+ <el-table-column label="自动生成" min-width="120">
|
|
|
+ <template #default="{ row }">
|
|
|
+ <el-switch
|
|
|
+ v-model="row.autoGenerateEnabled"
|
|
|
+ :active-value="1"
|
|
|
+ :inactive-value="0"
|
|
|
+ active-text="开"
|
|
|
+ inactive-text="关"
|
|
|
+ @change="val => handleToggleAutoGenerate(row, val)"
|
|
|
+ />
|
|
|
+ <div v-if="row.autoGenerateEndMonth" style="font-size: 12px; color: #909399; margin-top: 4px;">
|
|
|
+ 结束:{{ row.autoGenerateEndMonth }}
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
<el-table-column label="操作" width="360" fixed="right">
|
|
|
<template #default="{ row }">
|
|
|
<el-button link type="primary" @click="handleView(row)">
|
|
|
@@ -191,6 +285,32 @@
|
|
|
</el-form-item>
|
|
|
</el-col>
|
|
|
</el-row>
|
|
|
+ <el-row :gutter="16">
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="自动按月生成">
|
|
|
+ <el-switch
|
|
|
+ v-model="formData.autoGenerateEnabled"
|
|
|
+ :active-value="1"
|
|
|
+ :inactive-value="0"
|
|
|
+ active-text="开启"
|
|
|
+ inactive-text="关闭"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="结束月份">
|
|
|
+ <el-date-picker
|
|
|
+ v-model="formData.autoGenerateEndMonth"
|
|
|
+ type="month"
|
|
|
+ placeholder="不选表示一直生成"
|
|
|
+ style="width: 100%"
|
|
|
+ format="YYYY-MM"
|
|
|
+ value-format="YYYY-MM"
|
|
|
+ :disabled="!formData.autoGenerateEnabled"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
<el-row :gutter="16">
|
|
|
<el-col :span="12">
|
|
|
<el-form-item label="往来单位" prop="customerName">
|
|
|
@@ -380,7 +500,20 @@
|
|
|
const currentPage = ref(1)
|
|
|
const pageSize = ref(10)
|
|
|
const searchKeyword = ref('')
|
|
|
- const dateFilterType = ref<'all' | 'today' | 'tomorrow' | 'yesterday' | 'week'>('all')
|
|
|
+ const dateFilterType = ref<'all' | 'today' | 'tomorrow' | 'yesterday' | 'week' | ''>('')
|
|
|
+
|
|
|
+ const filters = reactive({
|
|
|
+ planNo: '',
|
|
|
+ customerName: '',
|
|
|
+ product: '',
|
|
|
+ businessType: '' as '' | '入库' | '出库',
|
|
|
+ executionStatus: ''
|
|
|
+ })
|
|
|
+
|
|
|
+ const showAdvancedFilters = ref(false)
|
|
|
+
|
|
|
+ const businessTypeOptions: Array<'入库' | '出库'> = ['入库', '出库']
|
|
|
+ const executionStatusOptions = ['待入库', '入库中', '已入库', '待出库', '出库中', '已出库']
|
|
|
|
|
|
// 日期范围筛选
|
|
|
const dateRange = ref<[string, string] | []>([
|
|
|
@@ -405,7 +538,9 @@
|
|
|
plannedQuantity: 0,
|
|
|
vehicleNo: '',
|
|
|
customerName: '',
|
|
|
- remarks: ''
|
|
|
+ remarks: '',
|
|
|
+ autoGenerateEnabled: 0,
|
|
|
+ autoGenerateEndMonth: ''
|
|
|
})
|
|
|
|
|
|
const formRules = {
|
|
|
@@ -414,6 +549,30 @@
|
|
|
plannedQuantity: [{ required: true, message: '请输入计划量', trigger: 'blur' }]
|
|
|
}
|
|
|
|
|
|
+ const filterRecords = (records: Plan[]) => {
|
|
|
+ const planNo = filters.planNo.trim()
|
|
|
+ const customerName = filters.customerName.trim()
|
|
|
+ const product = filters.product.trim()
|
|
|
+
|
|
|
+ return records.filter((r) => {
|
|
|
+ if (planNo && !(r.planNo || '').includes(planNo)) return false
|
|
|
+ if (customerName && !(r.customerName || '').includes(customerName)) return false
|
|
|
+ if (product && !(r.product || '').includes(product)) return false
|
|
|
+ if (filters.businessType && r.businessType !== filters.businessType) return false
|
|
|
+ if (filters.executionStatus && getCorrectExecutionStatus(r) !== filters.executionStatus) return false
|
|
|
+ return true
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ const applyKeywordFilter = (records: Plan[]) => {
|
|
|
+ const keyword = searchKeyword.value.trim().toLowerCase()
|
|
|
+ if (!keyword) return records
|
|
|
+ return records.filter((r) => {
|
|
|
+ const fields = [r.planNo || '', r.customerName || '', r.product || '']
|
|
|
+ return fields.some((f) => f.toLowerCase().includes(keyword))
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
// 根据业务类型获取正确的执行状态
|
|
|
const getCorrectExecutionStatus = (row: Plan): string => {
|
|
|
// 如果执行状态为空或不符合业务类型,根据业务类型返回正确的状态
|
|
|
@@ -458,12 +617,48 @@
|
|
|
return 'info' // 默认灰色
|
|
|
}
|
|
|
|
|
|
+ // 表格合计行
|
|
|
+ const getSummary = (param: { columns: string[]; data: any[] }) => {
|
|
|
+ const { columns } = param
|
|
|
+ const sums: string[] = []
|
|
|
+
|
|
|
+ columns.forEach((column, index) => {
|
|
|
+ if (index === 0) {
|
|
|
+ sums[index] = '合计'
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 计划量在第8列(索引7),已执行量在第9列(索引8)
|
|
|
+ if (index === 7) {
|
|
|
+ // 计划量合计
|
|
|
+ const totalPlanned = tableData.value.reduce((sum, row) => {
|
|
|
+ return sum + (Number(row.plannedQuantity) || 0)
|
|
|
+ }, 0)
|
|
|
+ sums[index] = totalPlanned.toString()
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (index === 8) {
|
|
|
+ // 已执行量合计(需要除以1000并保留2位小数)
|
|
|
+ const totalExecuted = tableData.value.reduce((sum, row) => {
|
|
|
+ return sum + ((row.executedQuantity || 0) / 1000)
|
|
|
+ }, 0)
|
|
|
+ sums[index] = totalExecuted.toFixed(2)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ sums[index] = ''
|
|
|
+ })
|
|
|
+
|
|
|
+ return sums
|
|
|
+ }
|
|
|
+
|
|
|
// 加载数据
|
|
|
const loadData = async () => {
|
|
|
loading.value = true
|
|
|
try {
|
|
|
- const params: any = {
|
|
|
- q: searchKeyword.value || undefined
|
|
|
+ const params: any = {}
|
|
|
+
|
|
|
+ // 快速搜索模式(未展开高级筛选):日期 + 搜索框关键字
|
|
|
+ if (!showAdvancedFilters.value && searchKeyword.value) {
|
|
|
+ params.q = searchKeyword.value
|
|
|
}
|
|
|
|
|
|
// 日期范围筛选(按计划起始日期)
|
|
|
@@ -472,12 +667,25 @@
|
|
|
params.startDateTo = dateRange.value[1]
|
|
|
}
|
|
|
|
|
|
+ if (showAdvancedFilters.value) {
|
|
|
+ if (filters.businessType) {
|
|
|
+ params.businessType = filters.businessType
|
|
|
+ }
|
|
|
+ if (filters.executionStatus) {
|
|
|
+ params.executionStatus = filters.executionStatus
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
const plans = await planApi.list(params)
|
|
|
- total.value = plans.length
|
|
|
+ let records = plans
|
|
|
+ if (showAdvancedFilters.value) {
|
|
|
+ records = filterRecords(records)
|
|
|
+ }
|
|
|
+ total.value = records.length
|
|
|
// 根据当前页和每页大小进行数据切片
|
|
|
const start = (currentPage.value - 1) * pageSize.value
|
|
|
const end = start + pageSize.value
|
|
|
- tableData.value = plans.slice(start, end)
|
|
|
+ tableData.value = records.slice(start, end)
|
|
|
} catch (error) {
|
|
|
ElMessage.error('加载数据失败')
|
|
|
} finally {
|
|
|
@@ -509,6 +717,17 @@
|
|
|
loadData()
|
|
|
}
|
|
|
|
|
|
+ const handleResetFilters = () => {
|
|
|
+ filters.planNo = ''
|
|
|
+ filters.customerName = ''
|
|
|
+ filters.product = ''
|
|
|
+ filters.businessType = ''
|
|
|
+ filters.executionStatus = ''
|
|
|
+ searchKeyword.value = ''
|
|
|
+ currentPage.value = 1
|
|
|
+ loadData()
|
|
|
+ }
|
|
|
+
|
|
|
const setDateFilter = (type: 'all' | 'today' | 'tomorrow' | 'yesterday' | 'week') => {
|
|
|
dateFilterType.value = type
|
|
|
|
|
|
@@ -533,13 +752,13 @@
|
|
|
dateRange.value = [monday, sunday]
|
|
|
}
|
|
|
|
|
|
- currentPage.value = 1
|
|
|
- loadData()
|
|
|
+ // 设置日期后自动触发搜索
|
|
|
+ handleSearch()
|
|
|
}
|
|
|
|
|
|
// 日期范围变化处理(手动调整日期时,取消快捷筛选高亮)
|
|
|
const handleDateRangeChange = () => {
|
|
|
- dateFilterType.value = 'all'
|
|
|
+ dateFilterType.value = ''
|
|
|
currentPage.value = 1
|
|
|
loadData()
|
|
|
}
|
|
|
@@ -570,7 +789,9 @@
|
|
|
plannedQuantity: 0,
|
|
|
vehicleNo: '',
|
|
|
customerName: '',
|
|
|
- remarks: ''
|
|
|
+ remarks: '',
|
|
|
+ autoGenerateEnabled: 0,
|
|
|
+ autoGenerateEndMonth: ''
|
|
|
})
|
|
|
modalOpen.value = true
|
|
|
}
|
|
|
@@ -589,7 +810,9 @@
|
|
|
plannedQuantity: record.plannedQuantity,
|
|
|
vehicleNo: record.vehicleNo || '',
|
|
|
customerName: record.customerName || '',
|
|
|
- remarks: record.remarks || ''
|
|
|
+ remarks: record.remarks || '',
|
|
|
+ autoGenerateEnabled: record.autoGenerateEnabled ?? 0,
|
|
|
+ autoGenerateEndMonth: record.autoGenerateEndMonth || ''
|
|
|
})
|
|
|
modalOpen.value = true
|
|
|
}
|
|
|
@@ -724,6 +947,22 @@
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // 列表开关:切换自动生成
|
|
|
+ const handleToggleAutoGenerate = async (record: Plan, value: number) => {
|
|
|
+ try {
|
|
|
+ await planApi.update(record.id, {
|
|
|
+ autoGenerateEnabled: value,
|
|
|
+ autoGenerateEndMonth: record.autoGenerateEndMonth
|
|
|
+ })
|
|
|
+ ElMessage.success(value === 1 ? '已开启自动生成' : '已关闭自动生成')
|
|
|
+ loadData()
|
|
|
+ } catch (e: any) {
|
|
|
+ ElMessage.error(e?.response?.data?.detail || e?.message || '更新失败')
|
|
|
+ // 回滚开关显示
|
|
|
+ record.autoGenerateEnabled = value === 1 ? 0 : 1
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
// 提交表单
|
|
|
const handleSubmit = async () => {
|
|
|
if (!formRef.value) return
|
|
|
@@ -761,10 +1000,6 @@
|
|
|
const handleExport = async () => {
|
|
|
try {
|
|
|
const params: any = {}
|
|
|
- // 和列表保持一致:支持关键字和日期筛选
|
|
|
- if (searchKeyword.value) {
|
|
|
- params.q = searchKeyword.value
|
|
|
- }
|
|
|
|
|
|
// 日期范围筛选(按计划起始日期)
|
|
|
if (dateRange.value && dateRange.value[0] && dateRange.value[1]) {
|
|
|
@@ -773,7 +1008,11 @@
|
|
|
}
|
|
|
|
|
|
const planList = await planApi.list(params)
|
|
|
- if (planList.length === 0) {
|
|
|
+ let records = planList
|
|
|
+ if (showAdvancedFilters.value) {
|
|
|
+ records = filterRecords(planList)
|
|
|
+ }
|
|
|
+ if (records.length === 0) {
|
|
|
ElMessage.warning('没有数据可导出')
|
|
|
return
|
|
|
}
|
|
|
@@ -793,7 +1032,7 @@
|
|
|
]
|
|
|
const csvContent = [
|
|
|
headers.join(','),
|
|
|
- ...planList.map((r) =>
|
|
|
+ ...records.map((r) =>
|
|
|
[
|
|
|
r.planNo,
|
|
|
r.customerName,
|
|
|
@@ -842,9 +1081,48 @@
|
|
|
<style lang="scss" scoped>
|
|
|
.toolbar {
|
|
|
margin-bottom: 16px;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+ gap: 8px;
|
|
|
+ align-items: stretch;
|
|
|
+ }
|
|
|
+
|
|
|
+ .toolbar-row {
|
|
|
display: flex;
|
|
|
gap: 8px;
|
|
|
align-items: center;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ }
|
|
|
+
|
|
|
+ .toolbar-spacer {
|
|
|
+ flex: 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ .filter-row {
|
|
|
+ align-items: flex-start;
|
|
|
+ }
|
|
|
+
|
|
|
+ .filter-form {
|
|
|
+ flex: 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ .advanced-search-wrapper {
|
|
|
+ margin-bottom: 16px;
|
|
|
+ }
|
|
|
+
|
|
|
+ :deep(.advanced-search-wrapper .el-form-item) {
|
|
|
+ display: flex;
|
|
|
+ margin-bottom: 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ :deep(.advanced-search-wrapper .el-form-item__label) {
|
|
|
+ justify-content: flex-end;
|
|
|
+ flex-shrink: 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ :deep(.advanced-search-wrapper .el-input),
|
|
|
+ :deep(.advanced-search-wrapper .el-select) {
|
|
|
+ width: 100%;
|
|
|
}
|
|
|
|
|
|
.date-filter {
|
|
|
@@ -852,7 +1130,7 @@
|
|
|
}
|
|
|
|
|
|
.search-bar {
|
|
|
- width: 400px;
|
|
|
+ width: 480px;
|
|
|
}
|
|
|
|
|
|
.card-header {
|