statisticalReport.vue 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834
  1. <template>
  2. <div style="background-color: #fff">
  3. <div class="title">2025年1月-2025年2月通报事项统计</div>
  4. <div>
  5. <el-table
  6. v-loading="isLoading"
  7. :data="tableData"
  8. border
  9. width="100%"
  10. row-key="id"
  11. :span-method="objectSpanMethod"
  12. @expand-change="expandChange"
  13. >
  14. <template v-for="item in columns">
  15. <template v-if="item.id === 'unit'">
  16. <el-table-column :label="item.name" :key="item.id" align="center" fixed>
  17. <el-table-column type="" prop="unitType" :width="110" fixed label="类别" align="center">
  18. <template #default="{ row }">
  19. {{ UnitType[row.unitType] }}
  20. </template>
  21. </el-table-column>
  22. <el-table-column prop="unit" fixed align="center" :width="185" label="名称">
  23. <template #default="scope">
  24. <span
  25. v-if="clickableTitle(scope.row)"
  26. class="unit-name"
  27. @click="viewDetail(scope.row.unit)"
  28. >{{ scope.row.unit }}</span
  29. >
  30. <span v-else>{{ scope.row.unit }}</span>
  31. </template>
  32. </el-table-column>
  33. </el-table-column>
  34. </template>
  35. <template v-else-if="item.children">
  36. <el-table-column
  37. :label="item.name"
  38. :key="item.id"
  39. align="center"
  40. :prop="item.id"
  41. :fixed="item.id === 'unit'"
  42. >
  43. <template v-for="itx in item.children">
  44. <template v-if="itx?.children">
  45. <el-table-column :label="itx?.name" :key="itx?.id" align="center">
  46. <template v-for="it in itx?.children" :key="it?.id">
  47. <el-table-column
  48. :label="it?.name"
  49. align="center"
  50. :sortable="it?.sortable"
  51. :prop="it.id"
  52. />
  53. </template>
  54. </el-table-column>
  55. </template>
  56. <el-table-column
  57. v-else
  58. :label="itx?.name"
  59. :key="itx?.id"
  60. align="center"
  61. :sortable="itx?.sortable"
  62. :prop="itx?.id"
  63. />
  64. </template>
  65. </el-table-column>
  66. </template>
  67. <el-table-column v-else :label="item.name" :key="item.id" align="center" :prop="item.id" />
  68. </template>
  69. </el-table>
  70. </div>
  71. </div>
  72. </template>
  73. <script setup lang="ts">
  74. import { defineProps } from 'vue';
  75. import type { TableColumnCtx } from 'element-plus';
  76. interface Column {
  77. id: string;
  78. name: string;
  79. fixed?: boolean;
  80. sortable?: boolean;
  81. children?: Array<Column>;
  82. }
  83. // 定义Props
  84. const props = defineProps({
  85. // 表头数据(columns格式)
  86. columns: {
  87. type: Array<Column>,
  88. required: true,
  89. default: () => [],
  90. },
  91. // 表格数据
  92. tableData: {
  93. type: Array,
  94. required: true,
  95. default: () => [],
  96. },
  97. // 表格边框
  98. border: {
  99. type: Boolean,
  100. default: true,
  101. },
  102. });
  103. interface SpanMethodProps {
  104. row: ReportList;
  105. column: TableColumnCtx<ReportList>;
  106. rowIndex: number;
  107. columnIndex: number;
  108. }
  109. interface ReportList {
  110. id: number;
  111. unit: string;
  112. unitType: string;
  113. total: string;
  114. proportion: string;
  115. shanghaiMaritimeTotal: string;
  116. shanghaiMaritimeProportion: string;
  117. tinajinMaritimeTotal: string;
  118. tinajinMaritimeProportion: string;
  119. liaoningMaritimeTotal: string;
  120. liaoningMaritimeProportion: string;
  121. hebeiMaritimeTotal: string;
  122. hebeiMaritimeProportion: string;
  123. shandongMaritimeTotal: string;
  124. shandongMaritimeProportion: string;
  125. departTransTotal: string;
  126. departTransProportion: string;
  127. beijingDepartTransTotal: string;
  128. beijingDepartTransProportion: string;
  129. shanghaiDepartTransTotal: string;
  130. shanghaiDepartTransProportion: string;
  131. hebeiDepartTransTotal: string;
  132. hebeiDepartTransProportion: string;
  133. shanxiDepartTransTotal: string;
  134. shanxiDepartTransProportion: string;
  135. neimengDepartTransTotal: string;
  136. neimengDepartTransProportion: string;
  137. chinaClassificationSocietyTotal: string;
  138. chinaClassificationSocietyProportion: string;
  139. yangtzeRiverTotal: string;
  140. yangtzeRiverProportion: string;
  141. PearlRiverTotal: string;
  142. PearlRiverProportion: string;
  143. children?: Array<ReportList>;
  144. }
  145. const groupCounts = ref({
  146. release: 0,
  147. releaseRowIndex: 0,
  148. receive: 0,
  149. receiveRowIndex: 0,
  150. measure: 0,
  151. measureRowIndex: 0,
  152. });
  153. const UnitType = {
  154. release: '发布通报',
  155. receive: '接收通报',
  156. measure: '采取措施',
  157. };
  158. const clickableTitle = (row: ReportList) => !['总数', '占比', '环比', '同比'].includes(row.unit);
  159. const objectSpanMethod = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
  160. if (columnIndex !== 0) return;
  161. if (row.unitType === 'release') {
  162. const firstIndex = tableData.value.findIndex(item => item.unitType === 'release');
  163. if (rowIndex === firstIndex) {
  164. const rowspan = groupCounts.value.release - 1;
  165. return {
  166. rowspan,
  167. colspan: 1,
  168. };
  169. } else {
  170. return {
  171. rowspan: 0,
  172. colspan: 0,
  173. };
  174. }
  175. }
  176. if (row.unitType === 'receive') {
  177. const firstIndex = tableData.value.findIndex(item => item.unitType === 'receive');
  178. if (rowIndex === groupCounts.value.releaseRowIndex) {
  179. return {
  180. rowspan: groupCounts.value.receive - 1,
  181. colspan: 1,
  182. };
  183. } else {
  184. return {
  185. rowspan: 0,
  186. colspan: 0,
  187. };
  188. }
  189. }
  190. if (row.unitType === 'measure') {
  191. const firstIndex = tableData.value.findIndex(item => item.unitType === 'measure');
  192. if (rowIndex === groupCounts.value.releaseRowIndex + groupCounts.value.receiveRowIndex) {
  193. const rowspan = groupCounts.value.measure;
  194. return {
  195. rowspan,
  196. colspan: 1,
  197. };
  198. } else {
  199. return {
  200. rowspan: 0,
  201. colspan: 0,
  202. };
  203. }
  204. }
  205. };
  206. const expandChange = (row: ReportList, expandedRows: any[]) => {
  207. if (expandedRows) {
  208. groupCounts.value[row.unitType] += row?.children?.length;
  209. } else {
  210. const count = row?.children?.length as number;
  211. groupCounts.value[row.unitType] = groupCounts.value[row.unitType] - count;
  212. }
  213. };
  214. const tableData = ref([
  215. {
  216. id: 1,
  217. unit: '总数',
  218. unitType: 'release',
  219. total: '10050',
  220. proportion: '68%',
  221. shanghaiMaritimeTotal: '5672',
  222. shanghaiMaritimeProportion: '18%',
  223. tinajinMaritimeTotal: '5672',
  224. tinajinMaritimeProportion: '18%',
  225. liaoningMaritimeTotal: '5672',
  226. liaoningMaritimeProportion: '18%',
  227. hebeiMaritimeTotal: '5672',
  228. hebeiMaritimeProportion: '18%',
  229. shandongMaritimeTotal: '5672',
  230. shandongMaritimeProportion: '18%',
  231. departTransTotal: '10050',
  232. departTransProportion: '68%',
  233. beijingDepartTransTotal: '5672',
  234. beijingDepartTransProportion: '18%',
  235. shanghaiDepartTransTotal: '5672',
  236. shanghaiDepartTransProportion: '18%',
  237. hebeiDepartTransTotal: '5672',
  238. hebeiDepartTransProportion: '18%',
  239. shanxiDepartTransTotal: '5672',
  240. shanxiDepartTransProportion: '18%',
  241. neimengDepartTransTotal: '5672',
  242. neimengDepartTransProportion: '18%',
  243. chinaClassificationSocietyTotal: '10050',
  244. chinaClassificationSocietyProportion: '68%',
  245. yangtzeRiverTotal: '10050',
  246. yangtzeRiverProportion: '68%',
  247. PearlRiverTotal: '10050',
  248. PearlRiverProportion: '68%',
  249. },
  250. {
  251. id: 2,
  252. unit: '直属海事管理机构',
  253. unitType: 'release',
  254. total: '10050',
  255. proportion: '68%',
  256. shanghaiMaritimeTotal: '5672',
  257. shanghaiMaritimeProportion: '18%',
  258. tinajinMaritimeTotal: '5672',
  259. tinajinMaritimeProportion: '18%',
  260. liaoningMaritimeTotal: '5672',
  261. liaoningMaritimeProportion: '18%',
  262. hebeiMaritimeTotal: '5672',
  263. hebeiMaritimeProportion: '18%',
  264. shandongMaritimeTotal: '5672',
  265. shandongMaritimeProportion: '18%',
  266. departTransTotal: '10050',
  267. departTransProportion: '68%',
  268. beijingDepartTransTotal: '5672',
  269. beijingDepartTransProportion: '18%',
  270. shanghaiDepartTransTotal: '5672',
  271. shanghaiDepartTransProportion: '18%',
  272. hebeiDepartTransTotal: '5672',
  273. hebeiDepartTransProportion: '18%',
  274. shanxiDepartTransTotal: '5672',
  275. shanxiDepartTransProportion: '18%',
  276. neimengDepartTransTotal: '5672',
  277. neimengDepartTransProportion: '18%',
  278. chinaClassificationSocietyTotal: '10050',
  279. chinaClassificationSocietyProportion: '68%',
  280. yangtzeRiverTotal: '10050',
  281. yangtzeRiverProportion: '68%',
  282. PearlRiverTotal: '10050',
  283. PearlRiverProportion: '68%',
  284. children: [
  285. {
  286. id: 21,
  287. unit: '上海海事局',
  288. unitType: 'release',
  289. total: '10050',
  290. proportion: '68%',
  291. shanghaiMaritimeTotal: '5672',
  292. shanghaiMaritimeProportion: '18%',
  293. tinajinMaritimeTotal: '5672',
  294. tinajinMaritimeProportion: '18%',
  295. liaoningMaritimeTotal: '5672',
  296. liaoningMaritimeProportion: '18%',
  297. hebeiMaritimeTotal: '5672',
  298. hebeiMaritimeProportion: '18%',
  299. shandongMaritimeTotal: '5672',
  300. shandongMaritimeProportion: '18%',
  301. departTransTotal: '10050',
  302. departTransProportion: '68%',
  303. beijingDepartTransTotal: '5672',
  304. beijingDepartTransProportion: '18%',
  305. shanghaiDepartTransTotal: '5672',
  306. shanghaiDepartTransProportion: '18%',
  307. hebeiDepartTransTotal: '5672',
  308. hebeiDepartTransProportion: '18%',
  309. shanxiDepartTransTotal: '5672',
  310. shanxiDepartTransProportion: '18%',
  311. neimengDepartTransTotal: '5672',
  312. neimengDepartTransProportion: '18%',
  313. chinaClassificationSocietyTotal: '10050',
  314. chinaClassificationSocietyProportion: '68%',
  315. yangtzeRiverTotal: '10050',
  316. yangtzeRiverProportion: '68%',
  317. PearlRiverTotal: '10050',
  318. PearlRiverProportion: '68%',
  319. },
  320. ],
  321. },
  322. {
  323. id: 3,
  324. unit: '总数',
  325. unitType: 'receive',
  326. total: '10050',
  327. proportion: '68%',
  328. shanghaiMaritimeTotal: '5672',
  329. shanghaiMaritimeProportion: '18%',
  330. tinajinMaritimeTotal: '5672',
  331. tinajinMaritimeProportion: '18%',
  332. liaoningMaritimeTotal: '5672',
  333. liaoningMaritimeProportion: '18%',
  334. hebeiMaritimeTotal: '5672',
  335. hebeiMaritimeProportion: '18%',
  336. shandongMaritimeTotal: '5672',
  337. shandongMaritimeProportion: '18%',
  338. departTransTotal: '10050',
  339. departTransProportion: '68%',
  340. beijingDepartTransTotal: '5672',
  341. beijingDepartTransProportion: '18%',
  342. shanghaiDepartTransTotal: '5672',
  343. shanghaiDepartTransProportion: '18%',
  344. hebeiDepartTransTotal: '5672',
  345. hebeiDepartTransProportion: '18%',
  346. shanxiDepartTransTotal: '5672',
  347. shanxiDepartTransProportion: '18%',
  348. neimengDepartTransTotal: '5672',
  349. neimengDepartTransProportion: '18%',
  350. chinaClassificationSocietyTotal: '10050',
  351. chinaClassificationSocietyProportion: '68%',
  352. yangtzeRiverTotal: '10050',
  353. yangtzeRiverProportion: '68%',
  354. PearlRiverTotal: '10050',
  355. PearlRiverProportion: '68%',
  356. },
  357. {
  358. id: 4,
  359. unit: '直属海事管理机构',
  360. unitType: 'receive',
  361. total: '10050',
  362. proportion: '68%',
  363. shanghaiMaritimeTotal: '5672',
  364. shanghaiMaritimeProportion: '18%',
  365. tinajinMaritimeTotal: '5672',
  366. tinajinMaritimeProportion: '18%',
  367. liaoningMaritimeTotal: '5672',
  368. liaoningMaritimeProportion: '18%',
  369. hebeiMaritimeTotal: '5672',
  370. hebeiMaritimeProportion: '18%',
  371. shandongMaritimeTotal: '5672',
  372. shandongMaritimeProportion: '18%',
  373. departTransTotal: '10050',
  374. departTransProportion: '68%',
  375. beijingDepartTransTotal: '5672',
  376. beijingDepartTransProportion: '18%',
  377. shanghaiDepartTransTotal: '5672',
  378. shanghaiDepartTransProportion: '18%',
  379. hebeiDepartTransTotal: '5672',
  380. hebeiDepartTransProportion: '18%',
  381. shanxiDepartTransTotal: '5672',
  382. shanxiDepartTransProportion: '18%',
  383. neimengDepartTransTotal: '5672',
  384. neimengDepartTransProportion: '18%',
  385. chinaClassificationSocietyTotal: '10050',
  386. chinaClassificationSocietyProportion: '68%',
  387. yangtzeRiverTotal: '10050',
  388. yangtzeRiverProportion: '68%',
  389. PearlRiverTotal: '10050',
  390. PearlRiverProportion: '68%',
  391. children: [
  392. {
  393. id: 41,
  394. unit: '上海海事局',
  395. unitType: 'receive',
  396. total: '10050',
  397. proportion: '68%',
  398. shanghaiMaritimeTotal: '5672',
  399. shanghaiMaritimeProportion: '18%',
  400. tinajinMaritimeTotal: '5672',
  401. tinajinMaritimeProportion: '18%',
  402. liaoningMaritimeTotal: '5672',
  403. liaoningMaritimeProportion: '18%',
  404. hebeiMaritimeTotal: '5672',
  405. hebeiMaritimeProportion: '18%',
  406. shandongMaritimeTotal: '5672',
  407. shandongMaritimeProportion: '18%',
  408. departTransTotal: '10050',
  409. departTransProportion: '68%',
  410. beijingDepartTransTotal: '5672',
  411. beijingDepartTransProportion: '18%',
  412. shanghaiDepartTransTotal: '5672',
  413. shanghaiDepartTransProportion: '18%',
  414. hebeiDepartTransTotal: '5672',
  415. hebeiDepartTransProportion: '18%',
  416. shanxiDepartTransTotal: '5672',
  417. shanxiDepartTransProportion: '18%',
  418. neimengDepartTransTotal: '5672',
  419. neimengDepartTransProportion: '18%',
  420. chinaClassificationSocietyTotal: '10050',
  421. chinaClassificationSocietyProportion: '68%',
  422. yangtzeRiverTotal: '10050',
  423. yangtzeRiverProportion: '68%',
  424. PearlRiverTotal: '10050',
  425. PearlRiverProportion: '68%',
  426. },
  427. ],
  428. },
  429. {
  430. id: 5,
  431. unit: '总数',
  432. unitType: 'measure',
  433. total: '10050',
  434. proportion: '68%',
  435. shanghaiMaritimeTotal: '5672',
  436. shanghaiMaritimeProportion: '18%',
  437. tinajinMaritimeTotal: '5672',
  438. tinajinMaritimeProportion: '18%',
  439. liaoningMaritimeTotal: '5672',
  440. liaoningMaritimeProportion: '18%',
  441. hebeiMaritimeTotal: '5672',
  442. hebeiMaritimeProportion: '18%',
  443. shandongMaritimeTotal: '5672',
  444. shandongMaritimeProportion: '18%',
  445. departTransTotal: '10050',
  446. departTransProportion: '68%',
  447. beijingDepartTransTotal: '5672',
  448. beijingDepartTransProportion: '18%',
  449. shanghaiDepartTransTotal: '5672',
  450. shanghaiDepartTransProportion: '18%',
  451. hebeiDepartTransTotal: '5672',
  452. hebeiDepartTransProportion: '18%',
  453. shanxiDepartTransTotal: '5672',
  454. shanxiDepartTransProportion: '18%',
  455. neimengDepartTransTotal: '5672',
  456. neimengDepartTransProportion: '18%',
  457. chinaClassificationSocietyTotal: '10050',
  458. chinaClassificationSocietyProportion: '68%',
  459. yangtzeRiverTotal: '10050',
  460. yangtzeRiverProportion: '68%',
  461. PearlRiverTotal: '10050',
  462. PearlRiverProportion: '68%',
  463. },
  464. {
  465. id: 6,
  466. unit: '直属海事管理机构',
  467. unitType: 'measure',
  468. total: '10050',
  469. proportion: '68%',
  470. shanghaiMaritimeTotal: '5672',
  471. shanghaiMaritimeProportion: '18%',
  472. tinajinMaritimeTotal: '5672',
  473. tinajinMaritimeProportion: '18%',
  474. liaoningMaritimeTotal: '5672',
  475. liaoningMaritimeProportion: '18%',
  476. hebeiMaritimeTotal: '5672',
  477. hebeiMaritimeProportion: '18%',
  478. shandongMaritimeTotal: '5672',
  479. shandongMaritimeProportion: '18%',
  480. departTransTotal: '10050',
  481. departTransProportion: '68%',
  482. beijingDepartTransTotal: '5672',
  483. beijingDepartTransProportion: '18%',
  484. shanghaiDepartTransTotal: '5672',
  485. shanghaiDepartTransProportion: '18%',
  486. hebeiDepartTransTotal: '5672',
  487. hebeiDepartTransProportion: '18%',
  488. shanxiDepartTransTotal: '5672',
  489. shanxiDepartTransProportion: '18%',
  490. neimengDepartTransTotal: '5672',
  491. neimengDepartTransProportion: '18%',
  492. chinaClassificationSocietyTotal: '10050',
  493. chinaClassificationSocietyProportion: '68%',
  494. yangtzeRiverTotal: '10050',
  495. yangtzeRiverProportion: '68%',
  496. PearlRiverTotal: '10050',
  497. PearlRiverProportion: '68%',
  498. children: [
  499. {
  500. id: 61,
  501. unit: '上海海事局',
  502. unitType: 'measure',
  503. total: '10050',
  504. proportion: '68%',
  505. shanghaiMaritimeTotal: '5672',
  506. shanghaiMaritimeProportion: '18%',
  507. tinajinMaritimeTotal: '5672',
  508. tinajinMaritimeProportion: '18%',
  509. liaoningMaritimeTotal: '5672',
  510. liaoningMaritimeProportion: '18%',
  511. hebeiMaritimeTotal: '5672',
  512. hebeiMaritimeProportion: '18%',
  513. shandongMaritimeTotal: '5672',
  514. shandongMaritimeProportion: '18%',
  515. departTransTotal: '10050',
  516. departTransProportion: '68%',
  517. beijingDepartTransTotal: '5672',
  518. beijingDepartTransProportion: '18%',
  519. shanghaiDepartTransTotal: '5672',
  520. shanghaiDepartTransProportion: '18%',
  521. hebeiDepartTransTotal: '5672',
  522. hebeiDepartTransProportion: '18%',
  523. shanxiDepartTransTotal: '5672',
  524. shanxiDepartTransProportion: '18%',
  525. neimengDepartTransTotal: '5672',
  526. neimengDepartTransProportion: '18%',
  527. chinaClassificationSocietyTotal: '10050',
  528. chinaClassificationSocietyProportion: '68%',
  529. yangtzeRiverTotal: '10050',
  530. yangtzeRiverProportion: '68%',
  531. PearlRiverTotal: '10050',
  532. PearlRiverProportion: '68%',
  533. },
  534. ],
  535. },
  536. ]);
  537. const isLoading = ref(false);
  538. const calculateGroupCounts = () => {
  539. isLoading.value = true;
  540. tableData.value.forEach((item: ReportList) => {
  541. groupCounts.value[`${item.unitType}RowIndex`]++;
  542. groupCounts.value[item.unitType]++;
  543. if (item?.children) {
  544. item.children.forEach((itx: ReportList) => {
  545. groupCounts.value[`${item.unitType}RowIndex`]++;
  546. groupCounts.value[itx.unitType]++;
  547. if (itx?.children) {
  548. itx.children.forEach((it: ReportList) => {
  549. groupCounts.value[`${item.unitType}RowIndex`]++;
  550. groupCounts.value[it.unitType]++;
  551. });
  552. }
  553. });
  554. }
  555. });
  556. isLoading.value = false;
  557. };
  558. calculateGroupCounts();
  559. const columns = ref([
  560. {
  561. id: 'unit',
  562. name: '单位',
  563. },
  564. {
  565. id: 'directlyAdministration',
  566. name: '直属海事局',
  567. children: [
  568. {
  569. id: 'total',
  570. name: '合计',
  571. sortable: true,
  572. },
  573. {
  574. id: 'proportion',
  575. name: '占比',
  576. sortable: true,
  577. },
  578. {
  579. id: 'shanghai',
  580. name: '上海海事局',
  581. children: [
  582. {
  583. id: 'shanghaiMaritimeTotal',
  584. name: '合计',
  585. sortable: true,
  586. },
  587. {
  588. id: 'shanghaiMaritimeProportion',
  589. name: '占比',
  590. sortable: true,
  591. },
  592. ],
  593. },
  594. {
  595. id: 'tianjin',
  596. name: '天津海事局',
  597. children: [
  598. {
  599. id: 'tinajinMaritimeTotal',
  600. name: '合计',
  601. sortable: true,
  602. },
  603. {
  604. id: 'tinajinMaritimeProportion',
  605. name: '占比',
  606. sortable: true,
  607. },
  608. ],
  609. },
  610. {
  611. id: 'liaoning',
  612. name: '辽宁海事局',
  613. children: [
  614. {
  615. id: 'liaoningMaritimeTotal',
  616. name: '合计',
  617. sortable: true,
  618. },
  619. {
  620. id: 'liaoningMaritimeProportion',
  621. name: '占比',
  622. sortable: true,
  623. },
  624. ],
  625. },
  626. {
  627. id: 'hebei',
  628. name: '河北海事局',
  629. children: [
  630. {
  631. id: 'hebeiMaritimeTotal',
  632. name: '合计',
  633. sortable: true,
  634. },
  635. {
  636. id: 'hebeiMaritimeProportion',
  637. name: '占比',
  638. sortable: true,
  639. },
  640. ],
  641. },
  642. {
  643. id: 'shandong',
  644. name: '山东海事局',
  645. children: [
  646. {
  647. id: 'shandongMaritimeTotal',
  648. name: '合计',
  649. sortable: true,
  650. },
  651. {
  652. id: 'shandongMaritimeProportion',
  653. name: '占比',
  654. sortable: true,
  655. },
  656. ],
  657. },
  658. ],
  659. },
  660. {
  661. id: 'departTrans',
  662. name: '交通运输厅海事局',
  663. children: [
  664. {
  665. id: 'departTransTotal',
  666. name: '合计',
  667. sortable: true,
  668. },
  669. {
  670. id: 'departTransProportion',
  671. name: '占比',
  672. sortable: true,
  673. },
  674. {
  675. id: 'beijing',
  676. name: '北京市交通委员会',
  677. children: [
  678. {
  679. id: 'beijingDepartTransTotal',
  680. name: '合计',
  681. sortable: true,
  682. },
  683. {
  684. id: 'beijingDepartTransProportion',
  685. name: '占比',
  686. sortable: true,
  687. },
  688. ],
  689. },
  690. {
  691. id: 'shanghai',
  692. name: '上海市交通委员会',
  693. children: [
  694. {
  695. id: 'shanghaiDepartTransTotal',
  696. name: '合计',
  697. sortable: true,
  698. },
  699. {
  700. id: 'shanghaiDepartTransProportion',
  701. name: '占比',
  702. sortable: true,
  703. },
  704. ],
  705. },
  706. {
  707. id: 'hebei',
  708. name: '河北省交通运输厅',
  709. children: [
  710. {
  711. id: 'hebeiDepartTransTotal',
  712. name: '合计',
  713. sortable: true,
  714. },
  715. {
  716. id: 'hebeiDepartTransProportion',
  717. name: '占比',
  718. sortable: true,
  719. },
  720. ],
  721. },
  722. {
  723. id: 'shanxi',
  724. name: '山西省交通运输厅',
  725. children: [
  726. {
  727. id: 'shanxiDepartTransTotal',
  728. name: '合计',
  729. sortable: true,
  730. },
  731. {
  732. id: 'shanxiDepartTransProportion',
  733. name: '占比',
  734. sortable: true,
  735. },
  736. ],
  737. },
  738. {
  739. id: 'neimeng',
  740. name: '内蒙古自治区交通运输厅',
  741. children: [
  742. {
  743. id: 'neimengDepartTransTotal',
  744. name: '合计',
  745. sortable: true,
  746. },
  747. {
  748. id: 'neimengDepartTransProportion',
  749. name: '占比',
  750. sortable: true,
  751. },
  752. ],
  753. },
  754. ],
  755. },
  756. {
  757. id: 'chinaClassificationSociety',
  758. name: '中国船级社',
  759. children: [
  760. {
  761. id: 'chinaClassificationSocietyTotal',
  762. name: '合计',
  763. sortable: true,
  764. },
  765. {
  766. id: 'chinaClassificationSocietyProportion',
  767. name: '占比',
  768. sortable: true,
  769. },
  770. ],
  771. },
  772. {
  773. id: 'yangtzeRiver',
  774. name: '长江航务管理局',
  775. children: [
  776. {
  777. id: 'yangtzeRiverProportion',
  778. name: '合计',
  779. sortable: true,
  780. },
  781. {
  782. id: 'yangtzeRiverProportion',
  783. name: '占比',
  784. sortable: true,
  785. },
  786. ],
  787. },
  788. {
  789. id: 'pearlRiver',
  790. name: '珠江航务管理局',
  791. children: [
  792. {
  793. id: 'pearlRiverTotal',
  794. name: '合计',
  795. sortable: true,
  796. },
  797. {
  798. id: 'pearlRiverProportion',
  799. name: '占比',
  800. sortable: true,
  801. },
  802. ],
  803. },
  804. ]);
  805. const router = useRouter();
  806. const viewDetail = (unit: string) => {
  807. router.push({
  808. path: '/notificationAnalysis/notificationReleaseReceiptDetail',
  809. query: {
  810. unit,
  811. },
  812. });
  813. };
  814. </script>
  815. <style scoped lang="scss">
  816. .title {
  817. font-weight: 600;
  818. padding: 10px;
  819. }
  820. .unit-name {
  821. cursor: pointer;
  822. color: #409eff;
  823. }
  824. </style>