ttad.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793
  1. <script setup lang="ts">
  2. import { EleBtnType } from '@/types/Button/buttonType'
  3. import type {
  4. OperationItem,
  5. Operations,
  6. } from '@/types/Tables/Operations/operations'
  7. import type {
  8. TableData,
  9. FilterInfo,
  10. TableInfoItem,
  11. BaseFieldItem,
  12. TableFields,
  13. } from '@/types/Tables/table'
  14. import type { TablePaginationProps } from '@/types/Tables/pagination'
  15. import type { BaseMenu } from '@/types/Promotion/Menu'
  16. import type {
  17. AdmgeTTAccData,
  18. AdmgeTTProjData,
  19. AdmgeTTAdData,
  20. } from '@/types/Tables/tableData/ttAd'
  21. import type {
  22. AdmgeTTAccFileds,
  23. AdmgeTTProjFileds,
  24. AdmgeTTAdFileds,
  25. } from '@/types/Tables/tableData/ttAd'
  26. import type {
  27. BaseTableInfo,
  28. BaseAllFieldsInfo,
  29. BaseAllFilterInfo,
  30. BaseAllFixedFiledsInfo,
  31. } from '@/types/Tables/tablePageData'
  32. import { TableFilterType } from '@/types/Tables/table'
  33. import { useRequest } from '@/hooks/useRequest'
  34. import { useDate } from '@/hooks/useDate'
  35. import { computed, onMounted, reactive, ref, watch } from 'vue'
  36. import { useTable } from '@/hooks/useTable'
  37. import Menu from '@/components/navigation/Menu.vue'
  38. import Table from '@/components/table/Table.vue'
  39. // 表格信息
  40. interface TableInfo extends BaseTableInfo {
  41. account: TableInfoItem<AdmgeTTAccData, BaseFieldItem<AdmgeTTAccFileds>> // 账户信息
  42. project: TableInfoItem<AdmgeTTProjData, BaseFieldItem<AdmgeTTProjFileds>> // 项目信息
  43. advertise: TableInfoItem<AdmgeTTAdData, BaseFieldItem<AdmgeTTAdFileds>> // 广告信息
  44. }
  45. // 所有字段信息
  46. interface AllFieldsInfo extends BaseAllFieldsInfo {
  47. account: AdmgeTTAccFileds[]
  48. project: AdmgeTTProjFileds[]
  49. advertise: AdmgeTTAdFileds[]
  50. }
  51. // 上方查询表单字段
  52. interface AllFilterInfo extends BaseAllFilterInfo {
  53. account: FilterInfo
  54. project: FilterInfo
  55. advertise: FilterInfo
  56. }
  57. // 固定字段
  58. interface AllFixedFiledsInfo extends BaseAllFixedFiledsInfo {
  59. account: Array<string>
  60. project: Array<string>
  61. advertise: Array<string>
  62. }
  63. // 操作信息
  64. interface Operation extends Operations {
  65. account: OperationItem[]
  66. project: OperationItem[]
  67. advertise: OperationItem[]
  68. }
  69. const { AllApi } = useRequest()
  70. const { disableDate, shortcuts } = useDate()
  71. const { getData, saveTableInfo, getTableInfo, updateTableFields } = useTable()
  72. // 当前菜单选中
  73. const activeMenu = ref('account')
  74. // 修改或新增的弹窗控制
  75. const tableItemDialog = ref(false)
  76. // 所有子字段信息
  77. const AllFields: AllFieldsInfo = {
  78. account: [
  79. { label: '账户余额', name: 'accountBalance', state: true, fixed: false },
  80. { label: '账户流动', name: 'accountFlow', state: true, fixed: false },
  81. { label: '账户名', name: 'accountName', state: true, fixed: true },
  82. { label: '账户状态', name: 'accountStatus', state: true, fixed: false },
  83. { label: '操作', name: 'action', state: true, fixed: true },
  84. {
  85. label: '广告账户数量',
  86. name: 'adAccountCount',
  87. state: true,
  88. fixed: false,
  89. },
  90. { label: '每日预算', name: 'dailyBudget', state: true, fixed: false },
  91. { label: '登录邮箱', name: 'loginEmail', state: true, fixed: false },
  92. { label: '媒体ID', name: 'mediaId', state: true, fixed: false },
  93. ],
  94. project: [
  95. { label: '项目', name: 'project', state: true, fixed: false },
  96. { label: '项目预算(元)', name: 'projectBudget', state: true, fixed: false },
  97. { label: '创建时间', name: 'creationTime', state: true, fixed: false },
  98. { label: '项目出价(元)', name: 'projectBid', state: true, fixed: false },
  99. {
  100. label: '深度转化出价(元)',
  101. name: 'deepConversionBid',
  102. state: true,
  103. fixed: false,
  104. },
  105. { label: '消耗', name: 'consumption', state: true, fixed: false },
  106. { label: '展示数', name: 'impressions', state: true, fixed: false },
  107. {
  108. label: '平均千次展示费用',
  109. name: 'averageCpm',
  110. state: true,
  111. fixed: false,
  112. },
  113. { label: '点击数', name: 'clicks', state: true, fixed: false },
  114. { label: '点击率', name: 'clickThroughRate', state: true, fixed: false },
  115. { label: '转化数', name: 'conversions', state: true, fixed: false },
  116. { label: '转化成本', name: 'conversionCost', state: true, fixed: false },
  117. { label: '转化率', name: 'conversionRate', state: true, fixed: false },
  118. { label: '深度转化数', name: 'deepConversions', state: true, fixed: false },
  119. {
  120. label: '深度转化成本',
  121. name: 'deepConversionCost',
  122. state: true,
  123. fixed: false,
  124. },
  125. {
  126. label: '深度转化率',
  127. name: 'deepConversionRate',
  128. state: true,
  129. fixed: false,
  130. },
  131. ],
  132. advertise: [
  133. { label: '广告', name: 'ad', state: true, fixed: false },
  134. { label: '广告预算(元)', name: 'adBudget', state: true, fixed: false },
  135. { label: '拒绝建议', name: 'rejectSuggestions', state: true, fixed: false },
  136. { label: '广告出价(元)', name: 'adBid', state: true, fixed: false },
  137. {
  138. label: '深度转化出价(元)',
  139. name: 'deepConversionBid',
  140. state: true,
  141. fixed: false,
  142. },
  143. { label: '消耗', name: 'consumption', state: true, fixed: false },
  144. { label: '展示数', name: 'impressions', state: true, fixed: false },
  145. {
  146. label: '平均千次展现费用',
  147. name: 'averageCpm',
  148. state: true,
  149. fixed: false,
  150. },
  151. { label: '点击数', name: 'clicks', state: true, fixed: false },
  152. { label: '点击率', name: 'clickThroughRate', state: true, fixed: false },
  153. { label: '转化数', name: 'conversions', state: true, fixed: false },
  154. { label: '转化成本', name: 'conversionCost', state: true, fixed: false },
  155. { label: '转化率', name: 'conversionRate', state: true, fixed: false },
  156. { label: '深度转化数', name: 'deepConversions', state: true, fixed: false },
  157. {
  158. label: '深度转化成本',
  159. name: 'deepConversionCost',
  160. state: true,
  161. fixed: false,
  162. },
  163. {
  164. label: '深度转化率',
  165. name: 'deepConversionRate',
  166. state: true,
  167. fixed: false,
  168. },
  169. ],
  170. }
  171. // 账户查询表单信息
  172. const accFilterInfo: FilterInfo = {
  173. accMain: {
  174. label: '账号主体',
  175. name: 'accMain',
  176. type: TableFilterType.Select,
  177. value: 'all',
  178. options: [
  179. { label: '全部', value: 'all' },
  180. { label: '主体1', value: '1' },
  181. { label: '主体2', value: '2' },
  182. ],
  183. },
  184. ttProject: {
  185. label: '创量项目',
  186. name: 'ttProject',
  187. type: TableFilterType.Select,
  188. value: 'A',
  189. options: [
  190. { label: '项目A', value: 'A' },
  191. { label: '项目B', value: 'B' },
  192. ],
  193. },
  194. optimizer: {
  195. label: '优化师',
  196. name: 'optimizer',
  197. type: TableFilterType.Select,
  198. value: 'jack',
  199. options: [
  200. { label: '优化师1', value: 'jack' },
  201. { label: '优化师2', value: 'rose' },
  202. ],
  203. },
  204. search: {
  205. label: '搜索',
  206. name: 'search',
  207. type: TableFilterType.Search,
  208. value: 'name',
  209. options: [
  210. { label: '名称', value: 'name' },
  211. { label: '备注', value: 'backup' },
  212. ],
  213. },
  214. product: {
  215. label: '产品',
  216. name: 'product',
  217. type: TableFilterType.Select,
  218. value: '1',
  219. options: [
  220. { label: '产品1', value: '1' },
  221. { label: '产品2', value: '2' },
  222. ],
  223. },
  224. }
  225. // 项目查询表单信息
  226. const projectFilter: FilterInfo = {
  227. search: {
  228. label: '搜索',
  229. name: 'search',
  230. type: TableFilterType.Search,
  231. value: 'name',
  232. options: [{ label: '名称', value: 'name' }],
  233. },
  234. ttProject: {
  235. label: '创量项目',
  236. name: 'ttProject',
  237. type: TableFilterType.Select,
  238. value: 'all',
  239. options: [
  240. { label: '全部', value: 'all' },
  241. { label: '产品A', value: 'A' },
  242. { label: '产品B', value: 'B' },
  243. ], // Search 类型一般不需要 options
  244. },
  245. product: {
  246. label: '创量产品',
  247. name: 'product',
  248. type: TableFilterType.Select,
  249. value: 'all',
  250. options: [
  251. { label: '全部', value: 'all' },
  252. { label: '产品A', value: 'A' },
  253. { label: '产品B', value: 'B' },
  254. ],
  255. },
  256. optimizationGoal: {
  257. label: '优化目标',
  258. name: 'optimizationGoal',
  259. type: TableFilterType.Select,
  260. value: 'clicks',
  261. options: [
  262. { label: '点击量', value: 'clicks' },
  263. { label: '转化量', value: 'conversions' },
  264. { label: '展示量', value: 'impressions' },
  265. ],
  266. },
  267. deepOptimizationGoal: {
  268. label: '深度优化目标',
  269. name: 'deepOptimizationGoal',
  270. type: TableFilterType.Select,
  271. value: 'ROI',
  272. options: [
  273. { label: '投资回报率 (ROI)', value: 'ROI' },
  274. { label: '订单数', value: 'orders' },
  275. { label: '注册量', value: 'registrations' },
  276. ],
  277. },
  278. mediaAccount: {
  279. label: '媒体账户',
  280. name: 'mediaAccount',
  281. type: TableFilterType.Select,
  282. value: 'all',
  283. options: [
  284. { label: '全部', value: 'all' },
  285. { label: '账户1', value: '1' },
  286. { label: '账户2', value: '2' },
  287. ],
  288. },
  289. promotionObjective: {
  290. label: '推广目的',
  291. name: 'promotionObjective',
  292. type: TableFilterType.Select,
  293. value: 'sales',
  294. options: [
  295. { label: '销售转化', value: 'sales' },
  296. { label: '品牌推广', value: 'branding' },
  297. { label: '应用安装', value: 'app_install' },
  298. ],
  299. },
  300. deliveryMode: {
  301. label: '投放模式',
  302. name: 'deliveryMode',
  303. type: TableFilterType.Select,
  304. value: 'automated',
  305. options: [
  306. { label: '自动投放', value: 'automated' },
  307. { label: '手动投放', value: 'manual' },
  308. ],
  309. },
  310. status: {
  311. label: '状态',
  312. name: 'status',
  313. type: TableFilterType.Select,
  314. value: 'active',
  315. options: [
  316. { label: '全部', value: 'all' },
  317. { label: '启用', value: 'active' },
  318. { label: '暂停', value: 'paused' },
  319. { label: '已结束', value: 'ended' },
  320. ],
  321. },
  322. creationTime: {
  323. label: '创建时间',
  324. name: 'creationTime',
  325. type: TableFilterType.Date,
  326. startDate: shortcuts[0].value[0],
  327. endDate: shortcuts[0].value[1],
  328. value: '',
  329. },
  330. adType: {
  331. label: '广告类型',
  332. name: 'adType',
  333. type: TableFilterType.Select,
  334. value: 'display',
  335. options: [
  336. { label: '展示广告', value: 'display' },
  337. { label: '视频广告', value: 'video' },
  338. { label: '搜索广告', value: 'search' },
  339. ],
  340. },
  341. }
  342. // 广告查询表单信息
  343. const adFilterInfo: FilterInfo = {
  344. ttProject: {
  345. label: '创量项目',
  346. name: 'ttProject',
  347. type: TableFilterType.Select,
  348. value: 'name',
  349. options: [{ label: '名称', value: 'name' }],
  350. },
  351. product: {
  352. label: '创量产品',
  353. name: 'product',
  354. type: TableFilterType.Select,
  355. value: 'all',
  356. options: [
  357. { label: '全部', value: 'all' },
  358. { label: '产品A', value: 'A' },
  359. { label: '产品B', value: 'B' },
  360. ],
  361. },
  362. optimizer: {
  363. label: '优化师',
  364. name: 'optimizer',
  365. type: TableFilterType.Select,
  366. value: 'all',
  367. options: [
  368. { label: '全部', value: 'all' },
  369. { label: '优化师A', value: 'A' },
  370. { label: '优化师B', value: 'B' },
  371. ],
  372. },
  373. diagnosticSuggestion: {
  374. label: '诊断建议',
  375. name: 'diagnosticSuggestion',
  376. type: TableFilterType.Select,
  377. value: 'all',
  378. options: [
  379. { label: '全部', value: 'all' },
  380. { label: '建议A', value: 'A' },
  381. { label: '建议B', value: 'B' },
  382. ],
  383. },
  384. strategyGroup: {
  385. label: '策略组',
  386. name: 'strategyGroup',
  387. type: TableFilterType.Select,
  388. value: 'all',
  389. options: [
  390. { label: '全部', value: 'all' },
  391. { label: '组A', value: 'A' },
  392. { label: '组B', value: 'B' },
  393. ],
  394. },
  395. learningStatus: {
  396. label: '学习期状态',
  397. name: 'learningStatus',
  398. type: TableFilterType.Select,
  399. value: 'all',
  400. options: [
  401. { label: '全部', value: 'all' },
  402. { label: '进行中', value: 'ongoing' },
  403. { label: '已完成', value: 'completed' },
  404. ],
  405. },
  406. mediaAssets: {
  407. label: '信息素材',
  408. name: 'mediaAssets',
  409. type: TableFilterType.Select,
  410. value: 'all',
  411. options: [
  412. { label: '全部', value: 'all' },
  413. { label: '素材A', value: 'A' },
  414. { label: '素材B', value: 'B' },
  415. ],
  416. },
  417. mediaAccount: {
  418. label: '媒体账户',
  419. name: 'mediaAccount',
  420. type: TableFilterType.Select,
  421. value: 'all',
  422. options: [
  423. { label: '全部', value: 'all' },
  424. { label: '账户1', value: '1' },
  425. { label: '账户2', value: '2' },
  426. ],
  427. },
  428. promotionObjective: {
  429. label: '推广目的',
  430. name: 'promotionObjective',
  431. type: TableFilterType.Select,
  432. value: 'all',
  433. options: [
  434. { label: '全部', value: 'all' },
  435. { label: '销售', value: 'sales' },
  436. { label: '品牌推广', value: 'branding' },
  437. ],
  438. },
  439. deliveryMode: {
  440. label: '投放模式',
  441. name: 'deliveryMode',
  442. type: TableFilterType.Select,
  443. value: 'all',
  444. options: [
  445. { label: '全部', value: 'all' },
  446. { label: '自动投放', value: 'automated' },
  447. { label: '手动投放', value: 'manual' },
  448. ],
  449. },
  450. status: {
  451. label: '状态',
  452. name: 'status',
  453. type: TableFilterType.Select,
  454. value: 'all',
  455. options: [
  456. { label: '全部', value: 'all' },
  457. { label: '启用', value: 'active' },
  458. { label: '暂停', value: 'paused' },
  459. ],
  460. },
  461. creationTime: {
  462. label: '创建时间',
  463. name: 'creationTime',
  464. type: TableFilterType.Date,
  465. startDate: new Date(),
  466. endDate: new Date(),
  467. value: '',
  468. },
  469. adType: {
  470. label: '广告类型',
  471. name: 'adType',
  472. type: TableFilterType.Select,
  473. value: 'all',
  474. options: [
  475. { label: '全部', value: 'all' },
  476. { label: '展示广告', value: 'display' },
  477. { label: '视频广告', value: 'video' },
  478. ],
  479. },
  480. }
  481. // 所有的查询表单信息
  482. const allFilters: AllFilterInfo = {
  483. account: accFilterInfo,
  484. project: projectFilter,
  485. advertise: adFilterInfo,
  486. }
  487. // 所有需要固定的字段
  488. const allFixedFileds: AllFixedFiledsInfo = {
  489. account: ['accountName', 'action'],
  490. project: [],
  491. advertise: [],
  492. }
  493. // 所有的表格请求
  494. const tableReqInfo: { [key: string]: any } = {
  495. account: AllApi.mockAdTTAcc,
  496. project: AllApi.mockAdTTProj,
  497. advertise: AllApi.mockAdTTAd,
  498. }
  499. // 表格信息
  500. const tableInfo = reactive<TableInfo>({
  501. account: {
  502. data: [],
  503. fields: [
  504. {
  505. label: '基础',
  506. name: 'base1',
  507. value: [],
  508. children: AllFields['account'],
  509. },
  510. ],
  511. tableSortedFields: [],
  512. filters: allFilters['account'],
  513. fixedFields: allFixedFileds['account'],
  514. },
  515. project: {
  516. data: [],
  517. fields: [
  518. {
  519. label: '基础',
  520. name: 'base2',
  521. value: [],
  522. children: AllFields['project'],
  523. },
  524. ],
  525. tableSortedFields: [],
  526. filters: allFilters['project'],
  527. fixedFields: allFixedFileds['project'],
  528. },
  529. advertise: {
  530. data: [],
  531. fields: [
  532. {
  533. label: '基础',
  534. name: 'base3',
  535. value: [],
  536. children: AllFields['advertise'],
  537. },
  538. ],
  539. tableSortedFields: [],
  540. filters: allFilters['advertise'],
  541. fixedFields: allFixedFileds['advertise'],
  542. },
  543. })
  544. const tablePaginationConfig = reactive<TablePaginationProps>({
  545. total: 0,
  546. pageSizeList: [10, 20, 40],
  547. })
  548. // 自定义的操作字段
  549. const operations: Operation = {
  550. account: [
  551. {
  552. label: '修改',
  553. type: EleBtnType.Primary,
  554. func: () => {
  555. tableItemDialog.value = true
  556. },
  557. },
  558. {
  559. label: '删除',
  560. type: EleBtnType.Danger,
  561. func: () => {
  562. tableItemDialog.value = true
  563. },
  564. },
  565. ],
  566. advertise: [],
  567. project: [],
  568. }
  569. // 导航
  570. const ttAdMenu: BaseMenu[] = [
  571. {
  572. name: 'account',
  573. title: '账户',
  574. },
  575. {
  576. name: 'project',
  577. title: '项目',
  578. },
  579. {
  580. name: 'advertise',
  581. title: '广告',
  582. },
  583. ]
  584. // 选择的日期
  585. const selectDate = ref(shortcuts[0].value)
  586. /**
  587. * @description: 保存的文件名
  588. * @return {*}
  589. */
  590. const fileName = computed(() => {
  591. return `ttad-${activeMenu.value}-tableInfo`
  592. })
  593. /**
  594. * @description: 日期改变
  595. * @param {*} val
  596. * @return {*}
  597. */
  598. const dateChange = (val: Array<Date>) => {
  599. // emits('changeDate', val)
  600. }
  601. /**
  602. * @description: 切换菜单
  603. * @param {*} val 新菜单名
  604. * @return {*}
  605. */
  606. const menuActiveChange = (val: string) => {
  607. activeMenu.value = val
  608. updateTableData()
  609. }
  610. /**
  611. * @description: 更新表格的字段信息
  612. * @return {*}
  613. */
  614. const updateTableInfo = () => {
  615. let info = getTableInfo(fileName.value)
  616. if (info) {
  617. tableInfo[activeMenu.value].fields = info.fields
  618. tableInfo[activeMenu.value].tableSortedFields = info.tableSortedFields
  619. }
  620. }
  621. /**
  622. * @description: 更新表格数据
  623. * @return {*}
  624. */
  625. const updateTableData = async () => {
  626. try {
  627. updateTableInfo()
  628. getData(tableReqInfo[activeMenu.value]).then((res: Array<TableData>) => {
  629. tableInfo[activeMenu.value].data.splice(
  630. 0,
  631. tableInfo[activeMenu.value].data.length,
  632. ...res,
  633. )
  634. tablePaginationConfig.total = res.length
  635. })
  636. } catch (err) {
  637. ElMessage.error('获取数据失败')
  638. console.log(err)
  639. }
  640. }
  641. /**
  642. * @description: 更新自定义指标和表格字段
  643. * @param {*} newIndicator 新的指标信息
  644. * @param {*} newSortedTablefileds 新的表格字段信息
  645. * @return {*}
  646. */
  647. const updateCustomIndicator = (
  648. newIndicator: Array<BaseFieldItem<TableFields>>,
  649. newSortedTablefileds: Array<TableFields>,
  650. ) => {
  651. updateTableFields(
  652. tableInfo,
  653. activeMenu.value,
  654. newIndicator,
  655. newSortedTablefileds,
  656. )
  657. .then(() => {
  658. saveTableInfo(fileName.value, tableInfo[activeMenu.value])
  659. })
  660. .catch(() => {
  661. ElMessage.error('更新失败')
  662. })
  663. // saveTableInfo()
  664. }
  665. updateTableData()
  666. onMounted(() => {
  667. // let info = getTableInfo(fileName.value)
  668. // if (Object.keys(info).length !== 0) {
  669. // Object.assign(tableInfo, info)
  670. // }
  671. })
  672. </script>
  673. <template>
  674. <div class="ttAdContainer">
  675. <div class="ttAdHeader">
  676. <Menu
  677. :default-active="'account'"
  678. :menu-list="ttAdMenu"
  679. :menu-item-style="'margin-right:30px;'"
  680. mode="horizontal"
  681. @active-change="menuActiveChange"
  682. ></Menu>
  683. <div class="datePickerBox">
  684. <el-date-picker
  685. class="datePicker"
  686. v-model="selectDate"
  687. :disabled-date="disableDate"
  688. :unlink-panels="false"
  689. @change="dateChange"
  690. type="daterange"
  691. range-separator="至"
  692. start-placeholder="Start date"
  693. end-placeholder="End date"
  694. :shortcuts="shortcuts"
  695. :size="'small'"
  696. >
  697. </el-date-picker>
  698. </div>
  699. </div>
  700. <div class="ttAdContent">
  701. <Table
  702. :pagination-config="tablePaginationConfig"
  703. :table-fields="tableInfo[activeMenu].fields"
  704. :sorted-table-fields="tableInfo[activeMenu].tableSortedFields"
  705. :table-data="tableInfo[activeMenu].data"
  706. :fixed-fields="tableInfo[activeMenu].fixedFields"
  707. :filters-info="tableInfo[activeMenu].filters"
  708. @update-custom-indicator="updateCustomIndicator"
  709. >
  710. <template #operations>
  711. <div>
  712. <el-button
  713. text
  714. :type="item.type"
  715. v-for="item in operations[activeMenu]"
  716. @click="item.func"
  717. >
  718. {{ item.label }}
  719. </el-button>
  720. </div>
  721. </template>
  722. </Table>
  723. </div>
  724. <el-dialog v-model="tableItemDialog" title="Tips" width="500">
  725. <span>This is a message</span>
  726. </el-dialog>
  727. </div>
  728. </template>
  729. <style scoped>
  730. .ttAdContainer {
  731. width: 100%;
  732. height: 100%;
  733. overflow: hidden;
  734. }
  735. .ttAdHeader {
  736. width: 100%;
  737. border-bottom: 1px solid #e0e0e0;
  738. background-color: white;
  739. display: flex;
  740. justify-content: space-between;
  741. align-items: center;
  742. }
  743. .ttAdContent {
  744. width: 100%;
  745. height: 100%;
  746. background-color: white;
  747. margin: 0 auto;
  748. overflow: hidden;
  749. }
  750. .datePickerBox {
  751. /* width: 100px !important; */
  752. margin-left: auto;
  753. margin-right: 5%;
  754. }
  755. </style>