|  | @@ -26,6 +26,9 @@ const monthEndDate = ref(null);
 | 
	
		
			
				|  |  |  const order_date = ref('');
 | 
	
		
			
				|  |  |  const sortOrder = ref('');
 | 
	
		
			
				|  |  |  const dateType = ref('');
 | 
	
		
			
				|  |  | +const salesOrder = ref(null);
 | 
	
		
			
				|  |  | +const salesField = ref(null);
 | 
	
		
			
				|  |  | +const sortStatus = ref(true);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  const gridOptions = reactive({
 | 
	
		
			
				|  |  |    border: 'inner',
 | 
	
	
		
			
				|  | @@ -49,7 +52,11 @@ const gridOptions = reactive({
 | 
	
		
			
				|  |  |      pageSizes: [10, 20, 30],
 | 
	
		
			
				|  |  |    },
 | 
	
		
			
				|  |  |    sortConfig: {
 | 
	
		
			
				|  |  | -    remote: true
 | 
	
		
			
				|  |  | +    remote: true,
 | 
	
		
			
				|  |  | +    defaultSort: {
 | 
	
		
			
				|  |  | +      field: salesField,
 | 
	
		
			
				|  |  | +      order: salesOrder,
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |    },
 | 
	
		
			
				|  |  |    customConfig: {
 | 
	
		
			
				|  |  |      storage: {
 | 
	
	
		
			
				|  | @@ -74,12 +81,16 @@ const gridOptions = reactive({
 | 
	
		
			
				|  |  |  const saveSortState = () => {
 | 
	
		
			
				|  |  |    localStorage.setItem('sortField', order_date.value);
 | 
	
		
			
				|  |  |    localStorage.setItem('sortOrder', sortOrder.value);
 | 
	
		
			
				|  |  | +  localStorage.setItem('salesOrder', salesOrder.value);
 | 
	
		
			
				|  |  | +  localStorage.setItem('salesField', salesField.value);
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // 读取排序状态并应用
 | 
	
		
			
				|  |  |  const loadSortState = () => {
 | 
	
		
			
				|  |  |    order_date.value = localStorage.getItem('sortField') || '';
 | 
	
		
			
				|  |  |    sortOrder.value = localStorage.getItem('sortOrder') || '';
 | 
	
		
			
				|  |  | +  gridOptions.sortConfig.defaultSort.order = localStorage.getItem('salesOrder') || '';
 | 
	
		
			
				|  |  | +  gridOptions.sortConfig.defaultSort.field = localStorage.getItem('salesField') || '';
 | 
	
		
			
				|  |  |  };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // 分页
 | 
	
	
		
			
				|  | @@ -117,86 +128,87 @@ async function fetchMainData(taskIds, resetPage = false) {
 | 
	
		
			
				|  |  |      });
 | 
	
		
			
				|  |  |      gridOptions.data = response.data;
 | 
	
		
			
				|  |  |      gridOptions.pagerConfig.total = response.total;
 | 
	
		
			
				|  |  | +    if (sortStatus.value) {
 | 
	
		
			
				|  |  | +      if (response.data && response.data.length > 0) {
 | 
	
		
			
				|  |  | +        const dynamicColumns = [];
 | 
	
		
			
				|  |  | +        const regex1 = /\d{2}-\d{2}/;
 | 
	
		
			
				|  |  | +        const regex2 = /\d{4}-\d{2}-\d{2}/;
 | 
	
		
			
				|  |  | +        const regex3 = /\d{4}-\d{2}/;
 | 
	
		
			
				|  |  | +        const regex4 = /\d{4}-\d{2}-\d{2}~\d{4}-\d{2}-\d{2}/;
 | 
	
		
			
				|  |  | +        const middleKeywords = ['~', '截止', '近90天平台退货率', '余额'];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if (response.data && response.data.length > 0) {
 | 
	
		
			
				|  |  | -      const dynamicColumns = [];
 | 
	
		
			
				|  |  | -      const regex1 = /\d{2}-\d{2}/;
 | 
	
		
			
				|  |  | -      const regex2 = /\d{4}-\d{2}-\d{2}/;
 | 
	
		
			
				|  |  | -      const regex3 = /\d{4}-\d{2}/;
 | 
	
		
			
				|  |  | -      const regex4 = /\d{4}-\d{2}-\d{2}~\d{4}-\d{2}-\d{2}/;
 | 
	
		
			
				|  |  | -      const middleKeywords = ['~', '截止', '近90天平台退货率', '余额'];
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -      const allColumns = new Set();
 | 
	
		
			
				|  |  | -      response.data.forEach(row => {
 | 
	
		
			
				|  |  | -        for (const key in row) {
 | 
	
		
			
				|  |  | -          if (regex1.test(key) || middleKeywords.some(kw => key.includes(kw))) {
 | 
	
		
			
				|  |  | -            allColumns.add(key);
 | 
	
		
			
				|  |  | +        const allColumns = new Set();
 | 
	
		
			
				|  |  | +        response.data.forEach(row => {
 | 
	
		
			
				|  |  | +          for (const key in row) {
 | 
	
		
			
				|  |  | +            if (regex1.test(key) || middleKeywords.some(kw => key.includes(kw))) {
 | 
	
		
			
				|  |  | +              allColumns.add(key);
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  |            }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -      });
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      const firstColumns = [];
 | 
	
		
			
				|  |  | -      const middleColumns = [];
 | 
	
		
			
				|  |  | -      const lastColumns = [];
 | 
	
		
			
				|  |  | +        const firstColumns = [];
 | 
	
		
			
				|  |  | +        const middleColumns = [];
 | 
	
		
			
				|  |  | +        const lastColumns = [];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      allColumns.forEach(key => {
 | 
	
		
			
				|  |  | -        let isSortable = false;
 | 
	
		
			
				|  |  | -        if (key.includes('的销售额') && !key.includes('广告销售额') && !key.includes('增长率')) {
 | 
	
		
			
				|  |  | -          isSortable = true;
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        const column = {
 | 
	
		
			
				|  |  | -          field: key,
 | 
	
		
			
				|  |  | -          title: key, // 使用字段名作为列标题
 | 
	
		
			
				|  |  | -          minWidth: key.includes('~') ? 94 : key.includes('截止') ? 94 : regex2.test(key) ? 95 : 76,
 | 
	
		
			
				|  |  | -          align: 'center',
 | 
	
		
			
				|  |  | -          formatter: formatEmptyCell,
 | 
	
		
			
				|  |  | -          sortable: isSortable,
 | 
	
		
			
				|  |  | -        };
 | 
	
		
			
				|  |  | -        if (middleKeywords.some(kw => key.includes(kw))) {
 | 
	
		
			
				|  |  | -          middleColumns.push(column);
 | 
	
		
			
				|  |  | -        } else if (regex3.test(key) && !regex2.test(key)) {
 | 
	
		
			
				|  |  | -          lastColumns.push(column);
 | 
	
		
			
				|  |  | -        } else if (regex1.test(key)) {
 | 
	
		
			
				|  |  | -          firstColumns.push(column);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -      });
 | 
	
		
			
				|  |  | -      // 对 firstColumns 中包含‘的销售额’字段的日期进行排序
 | 
	
		
			
				|  |  | -      const daySalesColumns = firstColumns.filter(column => column.field.includes('的销售额') && !column.field.includes('增长率'));
 | 
	
		
			
				|  |  | -      daySalesColumns.sort((a, b) => {
 | 
	
		
			
				|  |  | -        const dateA = a.field.match(/\d{4}-\d{2}-\d{2}/);
 | 
	
		
			
				|  |  | -        const dateB = b.field.match(/\d{4}-\d{2}-\d{2}/);
 | 
	
		
			
				|  |  | -        if (dateA && dateB) {
 | 
	
		
			
				|  |  | -          return new Date(dateA[0]) - new Date(dateB[0]);
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        return 0;
 | 
	
		
			
				|  |  | -      });
 | 
	
		
			
				|  |  | +        allColumns.forEach(key => {
 | 
	
		
			
				|  |  | +          let isSortable = false;
 | 
	
		
			
				|  |  | +          if (key.includes('的销售额') && !key.includes('广告销售额') && !key.includes('增长率')) {
 | 
	
		
			
				|  |  | +            isSortable = true;
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          const column = {
 | 
	
		
			
				|  |  | +            field: key,
 | 
	
		
			
				|  |  | +            title: key, // 使用字段名作为列标题
 | 
	
		
			
				|  |  | +            minWidth: key.includes('~') ? 94 : key.includes('截止') ? 94 : regex2.test(key) ? 95 : /\d{4}-\d{2}的销售额/.test(key) ? 127 : 76,
 | 
	
		
			
				|  |  | +            align: 'center',
 | 
	
		
			
				|  |  | +            formatter: formatEmptyCell,
 | 
	
		
			
				|  |  | +            sortable: isSortable,
 | 
	
		
			
				|  |  | +          };
 | 
	
		
			
				|  |  | +          if (middleKeywords.some(kw => key.includes(kw))) {
 | 
	
		
			
				|  |  | +            middleColumns.push(column);
 | 
	
		
			
				|  |  | +          } else if (regex3.test(key) && !regex2.test(key)) {
 | 
	
		
			
				|  |  | +            lastColumns.push(column);
 | 
	
		
			
				|  |  | +          } else if (regex1.test(key)) {
 | 
	
		
			
				|  |  | +            firstColumns.push(column);
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        // 对 firstColumns 中包含‘的销售额’字段的日期进行排序
 | 
	
		
			
				|  |  | +        const daySalesColumns = firstColumns.filter(column => column.field.includes('的销售额') && !column.field.includes('增长率'));
 | 
	
		
			
				|  |  | +        daySalesColumns.sort((a, b) => {
 | 
	
		
			
				|  |  | +          const dateA = a.field.match(/\d{4}-\d{2}-\d{2}/);
 | 
	
		
			
				|  |  | +          const dateB = b.field.match(/\d{4}-\d{2}-\d{2}/);
 | 
	
		
			
				|  |  | +          if (dateA && dateB) {
 | 
	
		
			
				|  |  | +            return new Date(dateA[0]) - new Date(dateB[0]);
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          return 0;
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      const weekSalesColumns = middleColumns.filter(column => column.field.includes('的销售额') && !column.field.includes('增长率'));
 | 
	
		
			
				|  |  | -      weekSalesColumns.sort((a, b) => {
 | 
	
		
			
				|  |  | -        const dateA = a.field.match(regex4)[0].split('~')[0];
 | 
	
		
			
				|  |  | -        const dateB = b.field.match(regex4)[0].split('~')[0];
 | 
	
		
			
				|  |  | -        return new Date(dateA) - new Date(dateB);
 | 
	
		
			
				|  |  | -      });
 | 
	
		
			
				|  |  | +        const weekSalesColumns = middleColumns.filter(column => column.field.includes('的销售额') && !column.field.includes('增长率'));
 | 
	
		
			
				|  |  | +        weekSalesColumns.sort((a, b) => {
 | 
	
		
			
				|  |  | +          const dateA = a.field.match(regex4)[0].split('~')[0];
 | 
	
		
			
				|  |  | +          const dateB = b.field.match(regex4)[0].split('~')[0];
 | 
	
		
			
				|  |  | +          return new Date(dateA) - new Date(dateB);
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      const monthSalesColumns = lastColumns.filter(column => column.field.includes('的销售额'));
 | 
	
		
			
				|  |  | -      monthSalesColumns.sort((a, b) => {
 | 
	
		
			
				|  |  | -        const dateA = `${ a.field.match(regex3)[0] }-01`;
 | 
	
		
			
				|  |  | -        const dateB = `${ b.field.match(regex3)[0] }-01`;
 | 
	
		
			
				|  |  | -        return new Date(dateA) - new Date(dateB);
 | 
	
		
			
				|  |  | -      });
 | 
	
		
			
				|  |  | +        const monthSalesColumns = lastColumns.filter(column => column.field.includes('的销售额'));
 | 
	
		
			
				|  |  | +        monthSalesColumns.sort((a, b) => {
 | 
	
		
			
				|  |  | +          const dateA = `${ a.field.match(regex3)[0] }-01`;
 | 
	
		
			
				|  |  | +          const dateB = `${ b.field.match(regex3)[0] }-01`;
 | 
	
		
			
				|  |  | +          return new Date(dateA) - new Date(dateB);
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      // 将排序后的列和其他列合并
 | 
	
		
			
				|  |  | -      dynamicColumns.push(...daySalesColumns,
 | 
	
		
			
				|  |  | -          ...firstColumns.filter(column => !column.field.includes('的销售额')),
 | 
	
		
			
				|  |  | -          ...weekSalesColumns,
 | 
	
		
			
				|  |  | -          ...middleColumns.filter(column => !regex4.test(column.field)),
 | 
	
		
			
				|  |  | -          ...monthSalesColumns,
 | 
	
		
			
				|  |  | -          ...lastColumns.filter(column => !column.field.includes('的销售额')));
 | 
	
		
			
				|  |  | +        // 将排序后的列和其他列合并
 | 
	
		
			
				|  |  | +        dynamicColumns.push(...daySalesColumns,
 | 
	
		
			
				|  |  | +            ...firstColumns.filter(column => !column.field.includes('的销售额')),
 | 
	
		
			
				|  |  | +            ...weekSalesColumns,
 | 
	
		
			
				|  |  | +            ...middleColumns.filter(column => !regex4.test(column.field)),
 | 
	
		
			
				|  |  | +            ...monthSalesColumns,
 | 
	
		
			
				|  |  | +            ...lastColumns.filter(column => !column.field.includes('的销售额')));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -      tableColumns.value = [
 | 
	
		
			
				|  |  | -        ...universal,
 | 
	
		
			
				|  |  | -        ...dynamicColumns,
 | 
	
		
			
				|  |  | -      ];
 | 
	
		
			
				|  |  | +        tableColumns.value = [
 | 
	
		
			
				|  |  | +          ...universal,
 | 
	
		
			
				|  |  | +          ...dynamicColumns,
 | 
	
		
			
				|  |  | +        ];
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      saveSortState();
 | 
	
		
			
				|  |  |    } catch (error) {
 | 
	
	
		
			
				|  | @@ -207,13 +219,14 @@ async function fetchMainData(taskIds, resetPage = false) {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  //排序
 | 
	
		
			
				|  |  | -function handleSortChange({ column, order }) {
 | 
	
		
			
				|  |  | +function handleSortChange({ field, order }) {
 | 
	
		
			
				|  |  | +  salesOrder.value = order;
 | 
	
		
			
				|  |  | +  salesField.value = field;
 | 
	
		
			
				|  |  |    sortOrder.value = order === 'asc' ? 'smallfirst' : 'bigfirst';
 | 
	
		
			
				|  |  | -  const sortField = column.field;
 | 
	
		
			
				|  |  | -  if (sortField) {
 | 
	
		
			
				|  |  | -    const match = sortField.match(/(\d{4}-\d{2}-\d{2})的销售额/);
 | 
	
		
			
				|  |  | -    const matchRange = sortField.match(/(\d{4}-\d{2}-\d{2})~(\d{4}-\d{2}-\d{2})的销售额/);
 | 
	
		
			
				|  |  | -    const matchMonth = sortField.match(/(\d{4}-\d{2})的销售额/);
 | 
	
		
			
				|  |  | +  if (field) {
 | 
	
		
			
				|  |  | +    const match = field.match(/(\d{4}-\d{2}-\d{2})的销售额/);
 | 
	
		
			
				|  |  | +    const matchRange = field.match(/(\d{4}-\d{2}-\d{2})~(\d{4}-\d{2}-\d{2})的销售额/);
 | 
	
		
			
				|  |  | +    const matchMonth = field.match(/(\d{4}-\d{2})的销售额/);
 | 
	
		
			
				|  |  |      if (matchRange) {
 | 
	
		
			
				|  |  |        order_date.value = matchRange[1];
 | 
	
		
			
				|  |  |        dateType.value = 'week';
 | 
	
	
		
			
				|  | @@ -225,6 +238,9 @@ function handleSortChange({ column, order }) {
 | 
	
		
			
				|  |  |        dateType.value = 'month';
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  | +  gridOptions.sortConfig.defaultSort.order = order;
 | 
	
		
			
				|  |  | +  gridOptions.sortConfig.defaultSort.field = field;
 | 
	
		
			
				|  |  | +  sortStatus.value = false;
 | 
	
		
			
				|  |  |    fetchMainData(props.taskIds, true);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -357,10 +373,10 @@ onMounted(() => {
 | 
	
		
			
				|  |  |        <div class="font-semibold">{{ row.platformNumber }}</div>
 | 
	
		
			
				|  |  |      </template>
 | 
	
		
			
				|  |  |      <template #platformName_default="{ row }">
 | 
	
		
			
				|  |  | -      <div class="font-semibold" style="color: #0097f8">{{ row.platformName }}</div>
 | 
	
		
			
				|  |  | +      <div class="font-semibold" style="color: #164285">{{ row.platformName }}</div>
 | 
	
		
			
				|  |  |      </template>
 | 
	
		
			
				|  |  |      <template #brandName_default="{ row }">
 | 
	
		
			
				|  |  | -      <el-tag effect="plain" round type="success">{{ row.brandName }}</el-tag>
 | 
	
		
			
				|  |  | +      {{ row.brandName }}
 | 
	
		
			
				|  |  |      </template>
 | 
	
		
			
				|  |  |    </vxe-grid>
 | 
	
		
			
				|  |  |  </template>
 |