xiuli.gao 9 miesięcy temu
rodzic
commit
08eddda88c
47 zmienionych plików z 359 dodań i 47 usunięć
  1. 1 1
      dist/assets/index.076039f9.js
  2. 0 1
      dist/assets/index.862bc4d6.css
  3. 1 0
      dist/assets/index.b608ef50.css
  4. 1 1
      dist/index.html
  5. 1 1
      dist/js/Home/index.e416988b.js
  6. 1 1
      dist/js/_dialog/_dialog.ba1d6a7b.js
  7. 1 1
      dist/js/_input/_input.c3e37f86.js
  8. 1 1
      dist/js/_select/_select.9330d8ab.js
  9. 3 0
      dist/js/acStatement.vue/index.5af9b2ae.js
  10. 0 3
      dist/js/acStatement.vue/index.bac60246.js
  11. 1 1
      dist/js/adTask/index.8d08653a.js
  12. 1 1
      dist/js/adqManage/index.714ec85f.js
  13. 1 1
      dist/js/api/api.9351d9b6.js
  14. 1 1
      dist/js/basisMoudle/error.706b8096.js
  15. 1 0
      dist/js/basisMoudle/login.683793cb.js
  16. 0 1
      dist/js/basisMoudle/login.e2d58142.js
  17. 1 1
      dist/js/collectClip/index.6fca9f32.js
  18. 1 1
      dist/js/configArea/index.e38574cd.js
  19. 1 1
      dist/js/define/define.1127012e.js
  20. 1 1
      dist/js/gdtList/index.1d715bb7.js
  21. 1 1
      dist/js/index/index.6f58b9c5.js
  22. 1 1
      dist/js/index/index.248ccc09.js
  23. 1 1
      dist/js/index/index.0ef21867.js
  24. 1 1
      dist/js/layout/index.926caa8c.js
  25. 1 1
      dist/js/layout/index_head.cddfa863.js
  26. 1 1
      dist/js/limitManage/index.d0ff02ae.js
  27. 1 1
      dist/js/materialBlock/materialBlock.1231309d.js
  28. 1 1
      dist/js/materialLibrary/index.75678ba4.js
  29. 1 1
      dist/js/materialTs/materialTs.c54a4312.js
  30. 1 1
      dist/js/memberManage/index.437753e1.js
  31. 1 1
      dist/js/menu/index.360ae5ed.js
  32. 1 1
      dist/js/miniprogram/index.82907821.js
  33. 1 1
      dist/js/projectManage/index.429198df.js
  34. 1 1
      dist/js/radioGroup/radioGroup.9ea50326.js
  35. 1 1
      dist/js/tableInfo/tableInfo.18765c1b.js
  36. 1 1
      dist/js/taskList/index.479f2ee9.js
  37. 1 1
      dist/js/teamManage/index.008f5501.js
  38. 1 1
      dist/js/timeScreen/timeScreen.f871f17c.js
  39. 1 1
      dist/js/warning/warning.89e7a9d1.js
  40. 1 1
      dist/js/wechatPage/index.c70ac72a.js
  41. 1 1
      dist/js/weekTime/weekTime.1a5fec88.js
  42. 1 0
      src/api/api.ts
  43. 2 2
      src/components/businessMoudle/dataManagement/acStatement.vue/dataList.vue
  44. 3 0
      src/components/businessMoudle/dataManagement/acStatement.vue/hooks/index.ts
  45. 9 0
      src/components/businessMoudle/dataManagement/acStatement.vue/hooks/trend.ts
  46. 14 5
      src/components/businessMoudle/dataManagement/acStatement.vue/index.vue
  47. 290 0
      src/components/businessMoudle/dataManagement/acStatement.vue/projectDataList.vue

Plik diff jest za duży
+ 1 - 1
dist/assets/index.076039f9.js


Plik diff jest za duży
+ 0 - 1
dist/assets/index.862bc4d6.css


Plik diff jest za duży
+ 1 - 0
dist/assets/index.b608ef50.css


+ 1 - 1
dist/index.html

@@ -12,7 +12,7 @@
12 12
 			document.write('<script src="' + src + '"><\/script>');
13 13
 			})();
14 14
     </script>
15
-    <script type="module" crossorigin src="./assets/index.076039f9.js"></script>
15
+    <script type="module" crossorigin src="./assets/index.52bbac4d.js"></script>
16 16
     <link rel="modulepreload" href="./js/@vue/@vue.5bfcce30.js">
17 17
     <link rel="modulepreload" href="./js/vue-router/vue-router.ccba075e.js">
18 18
     <link rel="modulepreload" href="./js/vue-demi/vue-demi.4f3c4c97.js">

Plik diff jest za duży
+ 1 - 1
dist/js/Home/index.e416988b.js


Plik diff jest za duży
+ 1 - 1
dist/js/_dialog/_dialog.ba1d6a7b.js


Plik diff jest za duży
+ 1 - 1
dist/js/_input/_input.c3e37f86.js


Plik diff jest za duży
+ 1 - 1
dist/js/_select/_select.9330d8ab.js


Plik diff jest za duży
+ 3 - 0
dist/js/acStatement.vue/index.5af9b2ae.js


Plik diff jest za duży
+ 0 - 3
dist/js/acStatement.vue/index.bac60246.js


Plik diff jest za duży
+ 1 - 1
dist/js/adTask/index.8d08653a.js


Plik diff jest za duży
+ 1 - 1
dist/js/adqManage/index.714ec85f.js


Plik diff jest za duży
+ 1 - 1
dist/js/api/api.9351d9b6.js


Plik diff jest za duży
+ 1 - 1
dist/js/basisMoudle/error.706b8096.js


Plik diff jest za duży
+ 1 - 0
dist/js/basisMoudle/login.683793cb.js


Plik diff jest za duży
+ 0 - 1
dist/js/basisMoudle/login.e2d58142.js


Plik diff jest za duży
+ 1 - 1
dist/js/collectClip/index.6fca9f32.js


Plik diff jest za duży
+ 1 - 1
dist/js/configArea/index.e38574cd.js


Plik diff jest za duży
+ 1 - 1
dist/js/define/define.1127012e.js


Plik diff jest za duży
+ 1 - 1
dist/js/gdtList/index.1d715bb7.js


Plik diff jest za duży
+ 1 - 1
dist/js/index/index.6f58b9c5.js


Plik diff jest za duży
+ 1 - 1
dist/js/index/index.248ccc09.js


Plik diff jest za duży
+ 1 - 1
dist/js/index/index.0ef21867.js


Plik diff jest za duży
+ 1 - 1
dist/js/layout/index.926caa8c.js


Plik diff jest za duży
+ 1 - 1
dist/js/layout/index_head.cddfa863.js


Plik diff jest za duży
+ 1 - 1
dist/js/limitManage/index.d0ff02ae.js


Plik diff jest za duży
+ 1 - 1
dist/js/materialBlock/materialBlock.1231309d.js


Plik diff jest za duży
+ 1 - 1
dist/js/materialLibrary/index.75678ba4.js


Plik diff jest za duży
+ 1 - 1
dist/js/materialTs/materialTs.c54a4312.js


Plik diff jest za duży
+ 1 - 1
dist/js/memberManage/index.437753e1.js


Plik diff jest za duży
+ 1 - 1
dist/js/menu/index.360ae5ed.js


Plik diff jest za duży
+ 1 - 1
dist/js/miniprogram/index.82907821.js


Plik diff jest za duży
+ 1 - 1
dist/js/projectManage/index.429198df.js


Plik diff jest za duży
+ 1 - 1
dist/js/radioGroup/radioGroup.9ea50326.js


Plik diff jest za duży
+ 1 - 1
dist/js/tableInfo/tableInfo.18765c1b.js


Plik diff jest za duży
+ 1 - 1
dist/js/taskList/index.479f2ee9.js


Plik diff jest za duży
+ 1 - 1
dist/js/teamManage/index.008f5501.js


Plik diff jest za duży
+ 1 - 1
dist/js/timeScreen/timeScreen.f871f17c.js


Plik diff jest za duży
+ 1 - 1
dist/js/warning/warning.89e7a9d1.js


Plik diff jest za duży
+ 1 - 1
dist/js/wechatPage/index.c70ac72a.js


Plik diff jest za duży
+ 1 - 1
dist/js/weekTime/weekTime.1a5fec88.js


+ 1 - 0
src/api/api.ts

@@ -151,6 +151,7 @@ export enum Api{
151 151
     report_trend = '/api/report/trend',
152 152
     report_ratio = '/api/report/ratio',
153 153
     report_accountReportList = '/api/report/accountReportList',
154
+    report_projectReportList = '/api/report/projectReportList',
154 155
 
155 156
 
156 157
 

+ 2 - 2
src/components/businessMoudle/dataManagement/acStatement.vue/dataList.vue

@@ -38,7 +38,7 @@
38 38
                   effect="dark" :content="scope.row[item.key_value] + ''">
39 39
                   <div class="clampTwo line21" style="flex: 1">
40 40
                     {{ scope.row[item.key_value] || scope.row[item.key_value] == 0 ?
41
-                      hasDot(scope.row[item.key_value], 2, false) : '-' }}<span
41
+                      hasDot(scope.row[item.key_value], 2, true) : '-' }}<span
42 42
                       v-if="item.label.indexOf('率') != -1 && (scope.row[item.key_value] || scope.row[item.key_value] == 0)">%</span>
43 43
                   </div>
44 44
                 </el-tooltip>
@@ -213,7 +213,7 @@ const getSummaries = (param) => {
213 213
       if (info.length > 0 && info[0].label?.indexOf('率') != -1) {
214 214
         sums[index] = hasDot(tableInfo.summary[column.property], 2, false) + '%'
215 215
       } else {
216
-        sums[index] = hasDot(tableInfo.summary[column.property], 2, false)
216
+        sums[index] = hasDot(tableInfo.summary[column.property], 2, true)
217 217
       }
218 218
     } else {
219 219
       sums[index] = ''

+ 3 - 0
src/components/businessMoudle/dataManagement/acStatement.vue/hooks/index.ts

@@ -6,6 +6,7 @@ import { reactive, ref } from "vue"
6 6
 import { getDay } from "@/common/common"
7 7
 
8 8
 export const ExpIndex = () => {
9
+  const projectDataListRef = ref()
9 10
   const dataListRef = ref()
10 11
   const acTrendRef = ref<{change: ()=>void}>()
11 12
   const teamRef = ref()
@@ -16,6 +17,7 @@ export const ExpIndex = () => {
16 17
       { name: '账户', val: 'account' },
17 18
       { name: '优化师', val: 'user' },
18 19
       { name: '团队', val: 'team' },
20
+      { name: '项目', val: 'project' }
19 21
     ],
20 22
     data_group: 'account',
21 23
     time_type: 'day',
@@ -57,6 +59,7 @@ export const ExpIndex = () => {
57 59
 
58 60
   return {
59 61
     dataListRef,
62
+    projectDataListRef,
60 63
     acTrendRef,
61 64
     userRef,
62 65
     teamRef,

+ 9 - 0
src/components/businessMoudle/dataManagement/acStatement.vue/hooks/trend.ts

@@ -178,6 +178,9 @@ export const ExpTrend = () => {
178 178
         if (dimension == 'team') {
179 179
           name = item.name
180 180
         }
181
+        if (dimension == 'project') {
182
+          name = item.name
183
+        }
181 184
         let trendData: any[] = []
182 185
         item.data?.forEach((s_item) => {
183 186
           trendData.push(s_item[overviewRef.value!.value])
@@ -233,6 +236,12 @@ export const ExpTrend = () => {
233 236
           name: item.name,
234 237
         })
235 238
       }
239
+      if (dimension == 'project') {
240
+        data.push({
241
+          value: item[`${overviewRef.value!.value}_pro`],
242
+          name: item.name,
243
+        })
244
+      }
236 245
     });
237 246
     totalValue = overviewData.ratioDataList.total[overviewRef.value!.value];
238 247
     let option = {

+ 14 - 5
src/components/businessMoudle/dataManagement/acStatement.vue/index.vue

@@ -24,7 +24,7 @@
24 24
     <div class="flex tMar15">
25 25
       <div class="label">筛选维度:</div>
26 26
       <div class="flex flex_1">
27
-        <el-input v-model="pageInfo.keyword" style="width: 200px" placeholder="请输入关键词" clearable @clear="init" @keyup.enter.native="init">
27
+        <el-input v-model="pageInfo.keyword" v-if="pageInfo.data_group != 'project'" style="width: 200px" placeholder="请输入关键词" clearable @clear="init" @keyup.enter.native="init">
28 28
           <template #append>
29 29
             <el-button :icon="Search" @click="init"/>
30 30
           </template>
@@ -60,7 +60,9 @@
60 60
   </div>
61 61
 
62 62
   <acTrend ref="acTrendRef" :mainPageInfo="pageInfo" @changeTab="(val)=>{val == 'trend' ? showDateGroup = true : showDateGroup = false}"></acTrend>
63
-  <dataList ref="dataListRef" :mainPageInfo="pageInfo"></dataList>
63
+
64
+  <projectDataList v-if="pageInfo.data_group == 'project'" ref="projectDataListRef" :mainPageInfo="pageInfo"></projectDataList>
65
+  <dataList v-else ref="dataListRef" :mainPageInfo="pageInfo"></dataList>
64 66
 </template>
65 67
 <script setup lang="ts">
66 68
 import { nextTick, onBeforeMount, reactive, ref } from 'vue';
@@ -70,10 +72,12 @@ import { getCookie } from '@/common/common';
70 72
 import Select from '@/components/capsulationMoudle/_select.vue'
71 73
 import acTrend from './trend.vue'
72 74
 import dataList from './dataList.vue'
75
+import projectDataList from './projectDataList.vue'
73 76
 
74 77
 const userInfo = ref()
75 78
 const showDateGroup = ref(true)
76 79
 const {
80
+  projectDataListRef,
77 81
   dataListRef,
78 82
   acTrendRef,
79 83
   userRef,
@@ -112,15 +116,20 @@ const init = () => {
112 116
     if(acTrendRef.value) {
113 117
       acTrendRef.value.change()
114 118
     }
115
-    if(dataListRef.value) {
116
-      dataListRef.value.init(1)
119
+    if(pageInfo.data_group == 'project') {
120
+      if(projectDataListRef.value) {
121
+        projectDataListRef.value.init(1)
122
+      }
123
+    }else {
124
+      if(dataListRef.value) {
125
+        dataListRef.value.init(1)
126
+      }
117 127
     }
118 128
   })
119 129
 }
120 130
 
121 131
 onBeforeMount(()=>{
122 132
   userInfo.value = JSON.parse(getCookie('userInfo') as string)
123
-  console.log(userInfo.value.userAuth)
124 133
   init_acList()
125 134
   getUserList()
126 135
   if(userInfo.value?.userAuth <= 10){//管理员

+ 290 - 0
src/components/businessMoudle/dataManagement/acStatement.vue/projectDataList.vue

@@ -0,0 +1,290 @@
1
+<template>
2
+  <div v-loading="loading" class="table_container">
3
+    <div class="tableTop">
4
+      <div class="title">项目报表</div>
5
+      <div class="flex">
6
+        <Select ref="dimensionRef"
7
+              selectWidth="180px"
8
+              @changeEvent="init(1)" @clearEvent="init(1)"
9
+              :isMultiple="true"
10
+              :filterFlag="true"
11
+              :optObj="{k:'key',la:'name',val:'key'}"
12
+              :options="tableInfo.dimensionList"/>
13
+        <el-button class="lMar10" type="primary" size="default" plain @click="exportEvent">导出数据</el-button>
14
+      </div>
15
+    </div>
16
+    <div>
17
+      <el-table ref="tableAccountRef" :data="tableInfo.tableList" :header-cell-style="tableHeaderStyle"
18
+        style="width: 100%;" :key="tableInfo.updateKey" border empty-text="暂无数据" :summary-method="getSummaries" show-summary
19
+        max-height="calc(100vh - 280px)">
20
+        <template v-for="item in tableInfo.descol">
21
+          <el-table-column :fixed="item.disabled == 1" :prop="item.key_value"
22
+            :min-width="item.key_value != 'advertiser_status' && item.key_value != 'advertiser_nick' && item.label.length <= 4 ? '120px' : item.label.length <= 8 ? '150px' : '200px'">
23
+            <template #header>
24
+              <div class="flex" :class="[tableInfo.sortKey == item.key_value ? 'active_css' : '']">
25
+                <span :style="{ color: tableInfo.sortKey == item.key_value ? '#3173FF' : '' }">{{ item.label }}</span>
26
+                <el-tooltip v-if="item.tooltip && item.tooltip != item.label" placement="top" effect="dark"
27
+                  :content="item.tooltip"><i-ep-QuestionFilled class="lMar5 c-999 f14 pointer" /></el-tooltip>
28
+                <div v-if="item.if_sort == 1" class="sortBox lMar5 pointer">
29
+                  <div class="sortItem" @click="sortEvent(item.key_value, 'asc')">
30
+                    <el-icon
31
+                      :color="(tableInfo.sortType == 'asc' && tableInfo.sortKey == item.key_value) ? '#3173FF' : ''"><i-ep-CaretTop /></el-icon>
32
+                  </div>
33
+                  <div class="sortItem" @click="sortEvent(item.key_value, 'desc')">
34
+                    <el-icon
35
+                      :color="(tableInfo.sortType == 'desc' && tableInfo.sortKey == item.key_value) ? '#3173FF' : ''"><i-ep-CaretBottom /></el-icon>
36
+                  </div>
37
+                </div>
38
+              </div>
39
+            </template>
40
+            <template #default="scope">
41
+              <!-- 其他 -->
42
+              <div class="cellDiv" :class="tableInfo.sortKey == item.key_value ? 'active_css' : ''">
43
+                <el-tooltip :disabled="!(scope.row[item.key_value] && scope.row[item.key_value].length > 30)"
44
+                  effect="dark" :content="scope.row[item.key_value] + ''">
45
+                  <div class="clampTwo line21" style="flex: 1">
46
+                    {{ scope.row[item.key_value] || scope.row[item.key_value] == 0 ?
47
+                      hasDot(scope.row[item.key_value], 2, true) : '-' }}<span
48
+                      v-if="item.label.indexOf('率') != -1 && (scope.row[item.key_value] || scope.row[item.key_value] == 0)">%</span>
49
+                  </div>
50
+                </el-tooltip>
51
+              </div>
52
+            </template>
53
+          </el-table-column>
54
+        </template>
55
+      </el-table>
56
+      <div class="paginationBox flex" style="justify-content: center" v-if="Number(tableInfo.total) > 0">
57
+        <el-pagination v-model:currentPage="tableInfo.currentPage" v-model:page-size="tableInfo.pageSize" background
58
+          :total="tableInfo.total" @current-change="handleCurrentChange" />
59
+      </div>
60
+    </div>
61
+  </div>
62
+</template>
63
+<script setup lang="ts">
64
+import { nextTick, onMounted, reactive, ref } from "vue";
65
+import { listTs } from "@/components/businessMoudle/gdtList/ts/list";
66
+import { Api } from "@/api/api";
67
+import { ElMessage } from "element-plus";
68
+import { getDay, hasDot } from "@/common/common";
69
+import http from "@/http/http";
70
+import { exportOrder } from "@/common/export/index.js";
71
+import Select from '@/components/capsulationMoudle/_select.vue'
72
+
73
+const props = defineProps({
74
+  mainPageInfo: {
75
+    type: Object,
76
+    default: () => { }
77
+  }
78
+})
79
+
80
+const dimensionRef = ref()
81
+const tableAccountRef = ref()
82
+const loading = ref<boolean>(false)
83
+const tableInfo = reactive<any>({
84
+  tableList: [],
85
+  descol: [],
86
+  summary: [],
87
+  sortKey: '',
88
+  currentPage: 1,
89
+  pageSize: 20,
90
+  total: 0,
91
+  totalPages: 0,//共多少页
92
+  sortType: 'desc',
93
+  updateKey: 1,
94
+  dimensionList:[
95
+    { name: '账户', key: 'account' },
96
+    { name: '人员', key: 'user' },
97
+    { name: '部门', key: 'department' },
98
+  ]
99
+})
100
+
101
+
102
+//排序
103
+const sortEvent = (row: any, order: string) => {
104
+  tableInfo.sortType = order;
105
+  tableInfo.sortKey = row
106
+  init(1)
107
+}
108
+
109
+//分页
110
+const handleCurrentChange = (val) => {
111
+  tableInfo.currentPage = val
112
+  init(val)
113
+}
114
+
115
+//导出
116
+const exportEvent = async () => {
117
+  loading.value = true;
118
+  let params = {
119
+    page: 1,
120
+    pageSize: 1000,
121
+    start: props.mainPageInfo.time[0],
122
+    end: props.mainPageInfo.time[1],
123
+    date_group: props.mainPageInfo.time_type,
124
+    dimension: dimensionRef.value?.value,
125
+    sys_user_ids: props.mainPageInfo.user_ids,
126
+    account_ids: props.mainPageInfo.account_ids,
127
+    team_ids: props.mainPageInfo.team_ids,
128
+  }
129
+  if (tableInfo.sortKey) {
130
+    params['field'] = tableInfo.sortKey
131
+    params['order'] = tableInfo.sortType
132
+  }
133
+  let res: any = await http.get(Api.report_projectReportList, params)
134
+  loading.value = false;
135
+  if (res && res.errNo == '0') {
136
+    let list = res.rst.data.list;
137
+    let descol = [{
138
+        disabled: 1,
139
+        if_sort: 1,
140
+        key_value: "time",
141
+        label: "时间",
142
+        tooltip: ""
143
+      }].concat(res.rst.data?.explain)
144
+
145
+    let tHeader = descol.map((v) => {
146
+      return v.label;
147
+    })
148
+    let filterVal = descol.map((v) => {
149
+      return v.key_value
150
+    })
151
+    let excelDatas = [
152
+      {
153
+        tHeader: tHeader, // sheet表一头部
154
+        filterVal: filterVal, // 表一的数据字段
155
+        tableDatas: list, // 表一的整体json数据
156
+        sheetName: ''// 表一的sheet名字
157
+      }
158
+    ]
159
+    exportOrder({ excelDatas, name: `项目报表(导出时间:${getDay(0)})` })
160
+  } else {
161
+    ElMessage.error(res.errMsg)
162
+  }
163
+}
164
+
165
+//列表
166
+const init = async (page?: any, pageSize?: any) => {
167
+  loading.value = true;
168
+  let params = {
169
+    page: page ? page : tableInfo.currentPage,
170
+    pageSize: pageSize ? pageSize : tableInfo.pageSize,
171
+    start: props.mainPageInfo.time[0],
172
+    end: props.mainPageInfo.time[1],
173
+    date_group: props.mainPageInfo.time_type,
174
+    dimension: dimensionRef.value?.value,
175
+    sys_user_ids: props.mainPageInfo.user_ids,
176
+    account_ids: props.mainPageInfo.account_ids,
177
+    team_ids: props.mainPageInfo.team_ids,
178
+  }
179
+  if (tableInfo.sortKey) {
180
+    params['field'] = tableInfo.sortKey
181
+    params['order'] = tableInfo.sortType
182
+  }
183
+  let res: any = await http.get(Api.report_projectReportList, params)
184
+  loading.value = false;
185
+  if (res && res.errNo == '0') {
186
+    tableInfo.summary = res.rst?.data?.summary;
187
+    tableInfo.descol = [{
188
+        disabled: 1,
189
+        if_sort: 1,
190
+        key_value: "time",
191
+        label: "时间",
192
+        tooltip: ""
193
+      }].concat(res.rst?.data?.explain);
194
+    tableInfo.tableList = res.rst?.data?.list;
195
+    tableInfo.total = res.rst?.pageInfo.total
196
+    tableInfo.totalPages = res.rst?.pageInfo.total
197
+    tableInfo.updateKey ++;
198
+  } else {
199
+    ElMessage.error(res.errMsg)
200
+  }
201
+}
202
+
203
+/**合计计算 */
204
+const getSummaries = (param) => {
205
+  const { columns, data } = param
206
+  const sums: string[] = []
207
+  columns.forEach((column, index) => {
208
+    if (index === 0) {
209
+      sums[index] = '合计'
210
+      return
211
+    }
212
+    if (tableInfo.summary[column.property] && tableInfo.summary[column.property] != 0) {
213
+      let info = tableInfo.descol.filter((v) => {
214
+        return v.key_value == column.property
215
+      })
216
+      if (info.length > 0 && info[0].label?.indexOf('率') != -1) {
217
+        sums[index] = hasDot(tableInfo.summary[column.property], 2, false) + '%'
218
+      } else {
219
+        sums[index] = hasDot(tableInfo.summary[column.property], 2, true)
220
+      }
221
+    } else {
222
+      sums[index] = ''
223
+    }
224
+  })
225
+  return sums
226
+}
227
+
228
+const {
229
+  tableHeaderStyle,
230
+} = listTs()
231
+
232
+// 暴露自己的属性供父组件使用
233
+defineExpose({
234
+  init,
235
+});
236
+</script>
237
+<style lang="scss" scoped>
238
+:deep(.el-table__body-wrapper) {
239
+  order: 1;
240
+}
241
+
242
+:deep(.el-table__footer-wrapper) {
243
+  border-bottom: var(--el-table-border);
244
+  border-top: none;
245
+}
246
+
247
+:deep(.el-table__footer-wrapper tbody td.el-table__cell) {
248
+  background-color: #fafafa;
249
+}
250
+
251
+.el-table th div.cell {
252
+  white-space: nowrap;
253
+  text-overflow: ellipsis;
254
+  overflow: hidden;
255
+  max-width: 600px;
256
+  /* 设置最大宽度,根据需要调整 */
257
+}
258
+
259
+.table_container {
260
+  background-color: #fff;
261
+  margin-top: 10px;
262
+  padding: 20px;
263
+}
264
+
265
+.sortBox {
266
+  height: 16px;
267
+  margin-left: 2px;
268
+  margin-top: -4px;
269
+
270
+  .sortItem {
271
+    width: 8px;
272
+    height: 8px;
273
+    line-height: 8px;
274
+    cursor: pointer;
275
+    color: #999;
276
+  }
277
+}
278
+
279
+.tableTop {
280
+  display: flex;
281
+  align-items: center;
282
+  justify-content: space-between;
283
+  padding-bottom: 20px;
284
+
285
+  .title {
286
+    font-size: 14px;
287
+    color: #333;
288
+    font-weight: bold;
289
+  }
290
+}</style>