|
|
@@ -4,7 +4,7 @@
|
|
|
<div class="page_search">
|
|
|
<div class="search_content">
|
|
|
<div class="content_left">
|
|
|
- <SearchBlock :searchList="blockSearchList"></SearchBlock>
|
|
|
+ <SearchBlock :searchList="blockSearchList" @searchChange="HandleSearchChange"></SearchBlock>
|
|
|
</div>
|
|
|
<div class="content_right">
|
|
|
<el-button class="button_refresh" @click="OpenBatchImportDialog">批量导入</el-button>
|
|
|
@@ -12,8 +12,9 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <FormSearchGroup :searchList="formSearchList"></FormSearchGroup>
|
|
|
- <Table :tableColumns="publicSeasTableColumns" :tableData="tableData">
|
|
|
+ <FormSearchGroup :searchList="formSearchList" @searchChange="HandleSearchChange"></FormSearchGroup>
|
|
|
+ <Table :tableColumns="publicSeasTableColumns" :tableData="tableData"
|
|
|
+ :currentPage="currentPage" :pageSize="pageSize" :totalNum="totalNum">
|
|
|
<template #operation="{row}">
|
|
|
<div class="table_row_option">
|
|
|
<span class="button_editor">认领</span>
|
|
|
@@ -28,7 +29,10 @@
|
|
|
<SchoolFormDialog
|
|
|
:schoolTitle="schoolTitle"
|
|
|
v-model:visible="schoolVisible"
|
|
|
- :defaultFormData="schoolDefaultFormData">
|
|
|
+ v-model:editFormDialogSubmitLoading="editFormDialogSubmitLoading"
|
|
|
+ :defaultFormData="schoolDefaultFormData"
|
|
|
+ :dynamicFormItmOpt="dynamicFormItmOpt"
|
|
|
+ @confirm="HandleSchoolDialogConfirm">
|
|
|
</SchoolFormDialog>
|
|
|
|
|
|
|
|
|
@@ -39,7 +43,7 @@
|
|
|
@close="CloseBatchImportDialog"
|
|
|
@confirm="HandleBatchImportComfirm">
|
|
|
<template #templateFile>
|
|
|
- <el-button class="button_refresh">下载模板</el-button>
|
|
|
+ <el-button class="button_refresh" @click="HandleDownloadTemplate">下载模板</el-button>
|
|
|
</template>
|
|
|
<template #tableTemplate>
|
|
|
<Table :hidePagination="true" :tableColumns="templateTableColumns" :tableData="[{},{}]" />
|
|
|
@@ -53,14 +57,13 @@
|
|
|
|
|
|
|
|
|
<script setup lang="ts">
|
|
|
-import { ref } from 'vue';
|
|
|
+import { computed, onMounted, ref } from 'vue';
|
|
|
import { useRouter } from 'vue-router';
|
|
|
|
|
|
|
|
|
import FormSearchGroup from '@/baseComponents/FormSearchGroup.vue';
|
|
|
import {formSearchList} from './formSearchGroup';
|
|
|
import SearchBlock from '@/baseComponents/SearchBlock.vue';
|
|
|
-import { blockSearchList } from './searchBlock';
|
|
|
import Table from '@/baseComponents/Table.vue';
|
|
|
import {publicSeasTableColumns,templateTableColumns} from './table'
|
|
|
|
|
|
@@ -69,8 +72,148 @@ import FormDialog from '@/baseComponents/FormDialog.vue';
|
|
|
|
|
|
import {batchImportFormItemList} from './formDialog'
|
|
|
|
|
|
+import {HandleExportExcel} from '@/utils/exportExcelData'
|
|
|
+
|
|
|
+import { getHeaderSearchParamsApi,
|
|
|
+ getHighSeasCustomerListApi,
|
|
|
+ addHighSeasCustomerApi,
|
|
|
+ updateHighSeasCustomerApi,
|
|
|
+ deleteHighSeasCustomerApi,
|
|
|
+ claimHighSeasCustomerApi,
|
|
|
+ importHighSeasCustomerApi,
|
|
|
+
|
|
|
+ } from '@/api/highSeasCustomer'
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
const router = useRouter()
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+// 批量导入弹窗有关数据
|
|
|
+const batchImportVisible = ref(false)
|
|
|
+const batchImportSubmitLoading = ref(false)
|
|
|
+const OpenBatchImportDialog = ()=>{
|
|
|
+ batchImportVisible.value = true
|
|
|
+}
|
|
|
+const CloseBatchImportDialog = ()=>{
|
|
|
+ batchImportVisible.value = false
|
|
|
+}
|
|
|
+const HandleBatchImportComfirm = ()=>{
|
|
|
+ CloseBatchImportDialog()
|
|
|
+}
|
|
|
+
|
|
|
+const HandleDownloadTemplate = async ()=>{
|
|
|
+ await HandleExportExcel(templateTableColumns.value,[],'新增学校_批量导入模板')
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+/** 跳转详情 */
|
|
|
+const GoToDetail = (row)=>{
|
|
|
+ router.push(`highSeasCustomerDetail?id=${row.id}`)
|
|
|
+}
|
|
|
+
|
|
|
+/** 1. 头部筛选 有关操作 */
|
|
|
+const searchParams = ref({
|
|
|
+ stage:'all',
|
|
|
+ province:'all',
|
|
|
+ area:'all',
|
|
|
+ queryStr:'',
|
|
|
+})
|
|
|
+// 获取头部筛选数据
|
|
|
+const stageOptions = ref([])
|
|
|
+const regionOptions = ref([])
|
|
|
+const blockSearchList = computed(()=>{
|
|
|
+ let areaOptions = []
|
|
|
+ if(searchParams.value.province !== 'all'){
|
|
|
+ areaOptions = regionOptions.value.find(item=>item.value === searchParams.value.province)?.subData || []
|
|
|
+ }else{
|
|
|
+ areaOptions = regionOptions.value.map(item=>{
|
|
|
+ return item.subData || []
|
|
|
+ }).flat()
|
|
|
+ }
|
|
|
+ return [
|
|
|
+ {
|
|
|
+ label: '学段',
|
|
|
+ key: 'stage',
|
|
|
+ type: 'single',
|
|
|
+ defaultValue: searchParams.value.stage,
|
|
|
+ options: [
|
|
|
+ { label: '全部', value: 'all' },
|
|
|
+ ...(stageOptions.value),
|
|
|
+ ],
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '省份',
|
|
|
+ key: 'province',
|
|
|
+ type: 'single',
|
|
|
+ options: [
|
|
|
+ { label: '全部', value: 'all' },
|
|
|
+ ...(regionOptions.value),
|
|
|
+ ],
|
|
|
+ defaultValue: searchParams.value.province,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ label: '地区',
|
|
|
+ key: 'area',
|
|
|
+ type: 'single',
|
|
|
+ options: [
|
|
|
+ { label: '全部', value: 'all' },
|
|
|
+ ...(areaOptions),
|
|
|
+ ],
|
|
|
+ defaultValue: searchParams.value.area,
|
|
|
+ }
|
|
|
+ ]
|
|
|
+});
|
|
|
+// 获取头部筛选数据
|
|
|
+const GetHeaderSearchParams = async ()=>{
|
|
|
+ let res = await getHeaderSearchParamsApi()
|
|
|
+ const {regionData,stageData} = res.data || {}
|
|
|
+ // 学段筛选选项
|
|
|
+ stageOptions.value = stageData?.map(item=>{
|
|
|
+ return{
|
|
|
+ label:item.name,
|
|
|
+ value:item.id || 'all',
|
|
|
+ }
|
|
|
+ })?.slice(1) || []
|
|
|
+
|
|
|
+ // 省份筛选项
|
|
|
+ regionOptions.value = regionData?.map(item=>{
|
|
|
+ return{
|
|
|
+ label:item.name,
|
|
|
+ value:item.id || 'all',
|
|
|
+ subData:item.subData?.map(sub=>{
|
|
|
+ return {
|
|
|
+ label:sub.name,
|
|
|
+ value:sub.id || 'all',
|
|
|
+ }
|
|
|
+ }).slice(1) || [],
|
|
|
+ }
|
|
|
+ })?.slice(1) || []
|
|
|
+}
|
|
|
+/** 头部筛选 变更 */
|
|
|
+const HandleSearchChange = async (params:any,key:string)=>{
|
|
|
+ searchParams.value = {
|
|
|
+ ...searchParams.value,
|
|
|
+ ...params
|
|
|
+ }
|
|
|
+ if(key === 'province'){
|
|
|
+ searchParams.value.area = 'all'
|
|
|
+ }
|
|
|
+ await GetTableData()
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+ /** 2. 表格数据 有关操作 */
|
|
|
+const pageSize = ref(20)
|
|
|
+const currentPage = ref(1)
|
|
|
+const totalNum = ref(0)
|
|
|
// 表格数据
|
|
|
const tableData = ref([
|
|
|
{
|
|
|
@@ -84,37 +227,50 @@ const tableData = ref([
|
|
|
idleDays: '3天',
|
|
|
detailAddress:'通州北苑'
|
|
|
},
|
|
|
- {
|
|
|
- index: '2',
|
|
|
- schoolName: '北京师达',
|
|
|
- schoolStage: 'middle',
|
|
|
- schoolStageName: '初中',
|
|
|
- province: '北京市',
|
|
|
- district: '西城区',
|
|
|
- poolTime: '2026-03-11',
|
|
|
- idleDays: '3天',
|
|
|
- detailAddress:'通州北苑'
|
|
|
-
|
|
|
- },
|
|
|
- {
|
|
|
- index: '3',
|
|
|
- schoolName: '北京五十七中学',
|
|
|
- schoolStage: 'senior',
|
|
|
- schoolStageName: '高中',
|
|
|
- province: '北京市',
|
|
|
- district: '西城区',
|
|
|
- poolTime: '2025-11-01',
|
|
|
- idleDays: '10天',
|
|
|
- detailAddress:'通州北苑'
|
|
|
-
|
|
|
- }
|
|
|
+
|
|
|
])
|
|
|
|
|
|
+const GetTableData = async ()=>{
|
|
|
+ let params = {
|
|
|
+ queryStr: searchParams.value.queryStr,
|
|
|
+ stageId: searchParams.value.stage === 'all' ? '' : searchParams.value.stage,
|
|
|
+ provinceId: searchParams.value.province === 'all' ? '' : searchParams.value.province,
|
|
|
+ cityId: searchParams.value.area === 'all' ? '' : searchParams.value.area,
|
|
|
+ pageNum: currentPage.value,
|
|
|
+ pageSize: pageSize.value
|
|
|
+ }
|
|
|
+ let res = await getHighSeasCustomerListApi(params)
|
|
|
+ tableData.value = res?.data?.records || []
|
|
|
+ totalNum.value = res.data.total || 0
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
-// 学校弹窗有关数据
|
|
|
+/**
|
|
|
+ * 学校弹窗有关数据
|
|
|
+ */
|
|
|
const schoolVisible = ref(false)
|
|
|
const schoolTitle = ref('')
|
|
|
const schoolDefaultFormData = ref({})
|
|
|
+const editFormDialogSubmitLoading = ref(false)
|
|
|
+
|
|
|
+// 动态变更的表单下拉项
|
|
|
+const dynamicFormItmOpt = computed(()=>{
|
|
|
+ return [
|
|
|
+ {
|
|
|
+ key: 'schoolStage',
|
|
|
+ selectList:stageOptions.value,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ key: 'provinceArea',
|
|
|
+ unionSelectList: [
|
|
|
+ {
|
|
|
+ key: 'province',
|
|
|
+ selectList:regionOptions.value,
|
|
|
+ },
|
|
|
+ ]
|
|
|
+ },
|
|
|
+ ]
|
|
|
+})
|
|
|
const OpenSchoolFormDialog = (row?:any)=>{
|
|
|
if(row){
|
|
|
schoolTitle.value = '编辑学校'
|
|
|
@@ -131,25 +287,43 @@ const OpenSchoolFormDialog = (row?:any)=>{
|
|
|
schoolVisible.value = true
|
|
|
}
|
|
|
|
|
|
-// 批量导入弹窗有关数据
|
|
|
-const batchImportVisible = ref(false)
|
|
|
-const batchImportSubmitLoading = ref(false)
|
|
|
-const OpenBatchImportDialog = ()=>{
|
|
|
- batchImportVisible.value = true
|
|
|
-}
|
|
|
-const CloseBatchImportDialog = ()=>{
|
|
|
- batchImportVisible.value = false
|
|
|
-}
|
|
|
-const HandleBatchImportComfirm = ()=>{
|
|
|
- CloseBatchImportDialog()
|
|
|
+const CloseSchoolFormDialog = ()=>{
|
|
|
+ editFormDialogSubmitLoading.value = false
|
|
|
+ schoolVisible.value = false
|
|
|
}
|
|
|
|
|
|
+const HandleSchoolDialogConfirm = async (params:any)=>{
|
|
|
+ editFormDialogSubmitLoading.value = true
|
|
|
+ const {formData,formRef} = params
|
|
|
+ console.log('表单的提交信息',formData)
|
|
|
|
|
|
-/** 跳转详情 */
|
|
|
-const GoToDetail = (row)=>{
|
|
|
- router.push(`highSeasCustomerDetail?id=${row.id}`)
|
|
|
+ let transferParams = {
|
|
|
+ id: formData.id,
|
|
|
+ name: formData.schoolName,
|
|
|
+ stageId: formData.schoolStage,
|
|
|
+ "stageName": "",
|
|
|
+ provinceId: formData.provinceArea.province,
|
|
|
+ "provinceName": '',
|
|
|
+ cityId: formData.provinceArea.district,
|
|
|
+ "cityName": "",
|
|
|
+ address: formData.detailAddress,
|
|
|
+ "str": ""
|
|
|
+ }
|
|
|
+
|
|
|
+ let res = undefined
|
|
|
+ try{ res = await addHighSeasCustomerApi(transferParams) }catch{}
|
|
|
+ if(res?.code == 200){
|
|
|
+ CloseSchoolFormDialog()
|
|
|
+ }else{
|
|
|
+ editFormDialogSubmitLoading.value = false
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+onMounted( async()=>{
|
|
|
+ await GetHeaderSearchParams()
|
|
|
+ await GetTableData()
|
|
|
+})
|
|
|
+
|
|
|
</script>
|
|
|
|
|
|
|