passengerFlow.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627
  1. <template>
  2. <div class="p-2">
  3. <el-tabs v-model="activeName" type="card" class="demo-tabs" @tab-click="handleClick">
  4. <el-tab-pane label="车辆客流数据" name="first">
  5. <div>
  6. <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
  7. <div class="search" v-show="showSearch" style="display: flex;flex-direction: row;">
  8. <div style="width: 80%;">
  9. <el-form :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
  10. <!-- <el-form-item label="路线">
  11. <el-select v-model="line" placeholder="请选择路线" style="width: 120px">
  12. <el-option v-for="item in carPathList" :key="item.id" :label="item.name"
  13. :value="item.id" />
  14. </el-select>
  15. </el-form-item> -->
  16. <el-form-item label="车辆">
  17. <el-select v-model="queryParams.carNum" placeholder="请选择车辆" style="width: 120px">
  18. <el-option v-for="item in carInfoList" :key="item.carNum" :label="item.carNum" :value="item.carNum" />
  19. </el-select>
  20. </el-form-item>
  21. <el-form-item label="单位">
  22. <el-tree-select
  23. v-model="deptId"
  24. :data="deptOptions"
  25. :props="{ value: 'id', label: 'label', children: 'children' }"
  26. value-key="id"
  27. placeholder="请选择归属部门"
  28. check-strictly
  29. />
  30. </el-form-item>
  31. <el-form-item label="时间" prop="carNum">
  32. <el-date-picker
  33. v-model="dataValue"
  34. type="datetimerange"
  35. :shortcuts="shortcuts"
  36. range-separator="至"
  37. start-placeholder="开始时间"
  38. end-placeholder="结束时间"
  39. />
  40. </el-form-item>
  41. </el-form>
  42. </div>
  43. <div style="width: 20%;">
  44. <el-form-item>
  45. <!-- <el-button type="primary" plain @click="goadd">今天</el-button>
  46. <el-button type="primary" plain @click="resetQuery">昨天</el-button>
  47. <el-button type="primary" plain @click="resetQuery">近三天</el-button> -->
  48. <el-button type="primary" @click="searchCar">查询</el-button>
  49. <!-- <el-button @click="resetQuery">重置</el-button> -->
  50. </el-form-item>
  51. </div>
  52. </div>
  53. </transition>
  54. <el-card shadow="never">
  55. <tableElm @childToParent="childrenClick" :columns="columns1" ref="table1"></tableElm>
  56. <pagination
  57. v-show="total > 0"
  58. :total="total"
  59. v-model:page="queryParams.pageNum"
  60. v-model:limit="queryParams.pageSize"
  61. @pagination="searchCar"
  62. />
  63. </el-card>
  64. </div>
  65. </el-tab-pane>
  66. <el-tab-pane label="站点客流数据" name="second">
  67. <div>
  68. <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave">
  69. <div class="search" v-show="showSearch" style="display: flex;flex-direction: row;">
  70. <div style="width: 80%;">
  71. <el-form :model="queryParams" ref="queryFormRef" :inline="true" label-width="68px">
  72. <el-form-item label="路线">
  73. <el-select v-model="queryParams2.line" placeholder="请选择路线" style="width: 120px">
  74. <el-option v-for="item in carPathList" :key="item.id" :label="item.name" :value="item.id" />
  75. </el-select>
  76. </el-form-item>
  77. <el-form-item label="站点" prop="carNum">
  78. <el-select v-model="queryParams2.site" placeholder="请选择站点" style="width: 300px">
  79. <el-option v-for="item in sites" :key="item.dictLabel" :label="item.dictLabel" :value="item.dictLabel" />
  80. </el-select>
  81. </el-form-item>
  82. <el-form-item label="时间" prop="carNum">
  83. <el-date-picker
  84. v-model="dataValue2"
  85. type="datetimerange"
  86. :shortcuts="shortcuts"
  87. range-separator="至"
  88. start-placeholder="开始时间"
  89. end-placeholder="结束时间"
  90. />
  91. </el-form-item>
  92. </el-form>
  93. </div>
  94. <div style="width: 20%;">
  95. <el-form-item>
  96. <!-- <el-button type="primary" plain @click="goadd">今天</el-button>
  97. <el-button type="primary" plain @click="resetQuery">昨天</el-button>
  98. <el-button type="primary" plain @click="resetQuery">近三天</el-button> -->
  99. <el-button type="primary" @click="searchSite">查询</el-button>
  100. <!-- <el-button @click="resetQuery">重置</el-button> -->
  101. </el-form-item>
  102. </div>
  103. </div>
  104. </transition>
  105. <el-card shadow="never">
  106. <tableElm @childToParent="childrenClick" :columns="columns2" ref="table2"></tableElm>
  107. <pagination
  108. v-show="total2 > 0"
  109. :total="total2"
  110. v-model:page="queryParams2.pageNum"
  111. v-model:limit="queryParams2.pageSize"
  112. @pagination="searchSite"
  113. />
  114. </el-card>
  115. </div>
  116. </el-tab-pane>
  117. </el-tabs>
  118. </div>
  119. </template>
  120. <script setup name="CarInfo" lang="ts">
  121. import { listCarInfo, getCarInfo, delCarInfo, addCarInfo, updateCarInfo } from '@/api/carInfo';
  122. import { listCarSchedule, getCarSchedule, delCarSchedule, addCarSchedule, updateCarSchedule } from '@/api/carSchedule';
  123. import { CarInfoVO, CarInfoQuery, CarInfoForm } from '@/api/carInfo/types';
  124. import { updateData, listData } from "@/api/system/dict/data";
  125. import { listCarPath, getCarPath, delCarPath, addCarPath, updateCarPath } from '@/api/carPath';
  126. import api from "@/api/system/user"
  127. import { liststaticFlow, listsitesFlow } from '@/api/gpsData';
  128. import tableElm from "@/components/Public/table.vue";
  129. import { useRoute, useRouter } from "vue-router";
  130. import moment from 'moment';
  131. const route = useRoute();
  132. const router = useRouter();
  133. const { proxy } = getCurrentInstance() as ComponentInternalInstance;
  134. const carInfoList = ref < CarInfoVO[] > ([]);
  135. const buttonLoading = ref(false);
  136. const loading = ref(true);
  137. const showSearch = ref(true);
  138. const ids = ref < Array < string | number >> ([]);
  139. const single = ref(true);
  140. const multiple = ref(true);
  141. const total = ref(0);
  142. const total2 = ref(0);
  143. const value2 = ref('')
  144. const carPathList = ref([])
  145. const queryFormRef = ref < ElFormInstance > ();
  146. const carInfoFormRef = ref < ElFormInstance > ();
  147. const siteFlowList = ref([])
  148. const dataValue = ref < [Date, Date] > ([
  149. new Date(new Date().getTime() - 3600 * 24 * 1000),
  150. new Date(),
  151. ])
  152. const dataValue2 = ref < [Date, Date] > ([
  153. new Date(new Date().getTime() - 3600 * 24 * 1000),
  154. new Date(),
  155. ])
  156. const dialog = reactive < DialogOption > ({
  157. visible: false,
  158. title: ''
  159. });
  160. const sites = ref([]);
  161. const table = ref(tableElm)
  162. const table1 = ref(tableElm)
  163. const table2 = ref(tableElm)
  164. const activeName = ref("first")
  165. const carFlowList = ref([])
  166. const lineFlowList = ref([])
  167. const columns = ref([
  168. // {label: '上层位置', prop: 'v', visible: true},
  169. { label: '来源', prop: 'carNum', visible: true, isTemplate: false },
  170. { label: '时间', prop: 'workTime', visible: true, isTemplate: false, },
  171. { label: '内容', prop: 'workName', pprop: "ext1", visible: true, isTemplate: false },
  172. ])
  173. const columns1 = ref([
  174. // {label: '上层位置', prop: 'v', visible: true},
  175. { label: '车牌号', prop: 'carNum', visible: true, isTemplate: false },
  176. { label: '开始时间', prop: 'startTime', visible: true, isTemplate: false, },
  177. { label: '结束时间', prop: 'endTime', pprop: "ext1", visible: true, isTemplate: false },
  178. { label: '上车总数', prop: 'others.incount', visible: true, isTemplate: false, },
  179. { label: '下车总数', prop: 'others.outcount', pprop: "ext1", visible: true, isTemplate: false },
  180. ])
  181. const columns2 = ref([
  182. // {label: '上层位置', prop: 'v', visible: true},
  183. { label: '站点名', prop: 'dictLabel', visible: true, isTemplate: false },
  184. { label: '开始时间', prop: 'startTime', visible: true, isTemplate: false, },
  185. { label: '结束时间', prop: 'endTime', pprop: "ext1", visible: true, isTemplate: false },
  186. { label: '上车总数', prop: 'others.incount', visible: true, isTemplate: false, },
  187. { label: '下车总数', prop: 'others.outcount', pprop: "ext1", visible: true, isTemplate: false },
  188. ])
  189. const deptId = ref(null)
  190. const deptOptions = ref([]);
  191. const initFormData: CarInfoForm = {
  192. id: undefined,
  193. carNum: undefined,
  194. carType: undefined,
  195. deviceInfos: undefined,
  196. repairInfo: undefined,
  197. maintenanceInfo: undefined,
  198. insuranceInfo: undefined,
  199. inspectionInfo: undefined,
  200. trafficAccidentInfo: undefined,
  201. violationInfo: undefined,
  202. changeInfo: undefined,
  203. ext1: undefined,
  204. ext2: undefined
  205. }
  206. const data = reactive < PageData < CarInfoForm, CarInfoQuery>> ({
  207. form: { ...initFormData },
  208. queryParams: {
  209. pageNum: 1,
  210. pageSize: 10,
  211. carNum: undefined,
  212. carType: undefined,
  213. deviceInfos: undefined,
  214. repairInfo: undefined,
  215. maintenanceInfo: undefined,
  216. insuranceInfo: undefined,
  217. inspectionInfo: undefined,
  218. trafficAccidentInfo: undefined,
  219. violationInfo: undefined,
  220. changeInfo: undefined,
  221. ext1: undefined,
  222. ext2: undefined,
  223. params: {
  224. }
  225. },
  226. queryParams2: {
  227. pageNum: 1,
  228. pageSize: 10,
  229. site: '',
  230. line: [],
  231. },
  232. rules: {
  233. id: [
  234. { required: true, message: "编号不能为空", trigger: "blur" }
  235. ],
  236. carNum: [
  237. { required: true, message: "车牌号不能为空", trigger: "blur" }
  238. ],
  239. carType: [
  240. { required: true, message: "车类型不能为空", trigger: "change" }
  241. ],
  242. deviceInfos: [
  243. { required: true, message: "所有车载设备信息不能为空", trigger: "blur" }
  244. ],
  245. repairInfo: [
  246. { required: true, message: "维修信息不能为空", trigger: "blur" }
  247. ],
  248. maintenanceInfo: [
  249. { required: true, message: "保养信息不能为空", trigger: "blur" }
  250. ],
  251. insuranceInfo: [
  252. { required: true, message: "保险信息不能为空", trigger: "blur" }
  253. ],
  254. inspectionInfo: [
  255. { required: true, message: "年检信息不能为空", trigger: "blur" }
  256. ],
  257. trafficAccidentInfo: [
  258. { required: true, message: "交通事故信息不能为空", trigger: "blur" }
  259. ],
  260. violationInfo: [
  261. { required: true, message: "违章信息不能为空", trigger: "blur" }
  262. ],
  263. changeInfo: [
  264. { required: true, message: "车辆变更信息不能为空", trigger: "blur" }
  265. ],
  266. ext1: [
  267. { required: true, message: "扩展1不能为空", trigger: "blur" }
  268. ],
  269. ext2: [
  270. { required: true, message: "扩展2不能为空", trigger: "blur" }
  271. ]
  272. }
  273. });
  274. const paramData = ref({
  275. starttime: '',
  276. endtime: ''
  277. })
  278. const { queryParams, queryParams2, form, rules } = toRefs(data);
  279. const goadd = () => {
  280. router.push("/car/work/addWork")
  281. }
  282. const getSites = () => {
  283. listData({ dictType: "tbl_sites" }).then(res2 => {
  284. sites.value = res2.rows;
  285. });
  286. }
  287. const getTreeSelect = async () => {
  288. const res = await api.deptTreeSelect();
  289. console.log(res)
  290. deptOptions.value = res.data;
  291. };
  292. const searchData = () => {
  293. console.log(dataValue.value)
  294. }
  295. /** 查询车辆信息列表 */
  296. const getList = async () => {
  297. // loading.value = true;
  298. // const res = await listCarInfo(queryParams.value);
  299. var res = {
  300. rows: [
  301. {
  302. carNum: '苏A862123',
  303. startTime: "2024-01-23 09:12:23",
  304. endTime: "2024-01-23 09:13:23",
  305. upCount: "10",
  306. downCount: "9",
  307. },
  308. {
  309. carNum: '苏A862123',
  310. startTime: "2024-01-23 10:12:23",
  311. endTime: "2024-01-23 10:13:23",
  312. upCount: "10",
  313. downCount: "9",
  314. }
  315. ],
  316. total: 1
  317. }
  318. var res1 = {
  319. rows: [
  320. {
  321. siteName: '松罗客运站',
  322. startTime: "2024-01-23 09:12:23",
  323. endTime: "2024-01-23 09:13:23",
  324. upCount: "10",
  325. downCount: "9",
  326. },
  327. {
  328. siteName: '福清客运站',
  329. startTime: "2024-01-23 10:12:23",
  330. endTime: "2024-01-23 10:13:23",
  331. upCount: "10",
  332. downCount: "9",
  333. }
  334. ],
  335. total: 1
  336. }
  337. var buttons = [
  338. { type: 'danger', text: '删除', func: "goAdd" },
  339. ]
  340. table1.value.setDataList(res.rows);
  341. table1.value.setButton(buttons);
  342. table2.value.setDataList(res1.rows);
  343. table2.value.setButton(buttons);
  344. total.value = res.total;
  345. loading.value = false;
  346. }
  347. /** 取消按钮 */
  348. const cancel = () => {
  349. reset();
  350. dialog.visible = false;
  351. }
  352. /** 表单重置 */
  353. const reset = () => {
  354. form.value = { ...initFormData };
  355. carInfoFormRef.value?.resetFields();
  356. }
  357. /** 搜索按钮操作 */
  358. const handleQuery = () => {
  359. queryParams.value.pageNum = 1;
  360. getList();
  361. }
  362. /** 重置按钮操作 */
  363. const resetQuery = () => {
  364. queryFormRef.value?.resetFields();
  365. handleQuery();
  366. }
  367. /** 多选框选中数据 */
  368. const handleSelectionChange = (selection: CarInfoVO[]) => {
  369. ids.value = selection.map(item => item.id);
  370. single.value = selection.length != 1;
  371. multiple.value = !selection.length;
  372. }
  373. /** 新增按钮操作 */
  374. const handleAdd = () => {
  375. reset();
  376. dialog.visible = true;
  377. dialog.title = "添加车辆信息";
  378. }
  379. /** 修改按钮操作 */
  380. const handleUpdate = async (row?: CarInfoVO) => {
  381. reset();
  382. const _id = row?.id || ids.value[0]
  383. const res = await getCarInfo(_id);
  384. Object.assign(form.value, res.data);
  385. dialog.visible = true;
  386. dialog.title = "修改车辆信息";
  387. }
  388. const childrenClick = (data) => {
  389. eval(data.func + "(data.data)")
  390. }
  391. const openDialog = () => {
  392. dialog.visible = true
  393. }
  394. /** 提交按钮 */
  395. const submitForm = () => {
  396. carInfoFormRef.value?.validate(async (valid: boolean) => {
  397. if (valid) {
  398. buttonLoading.value = true;
  399. if (form.value.id) {
  400. await updateCarInfo(form.value).finally(() => buttonLoading.value = false);
  401. } else {
  402. await addCarInfo(form.value).finally(() => buttonLoading.value = false);
  403. }
  404. proxy?.$modal.msgSuccess("修改成功");
  405. dialog.visible = false;
  406. await getList();
  407. }
  408. });
  409. }
  410. /** 删除按钮操作 */
  411. const handleDelete = async (row?: CarInfoVO) => {
  412. const _ids = row?.id || ids.value;
  413. await proxy?.$modal.confirm('是否确认删除车辆信息编号为"' + _ids + '"的数据项?').finally(() => loading.value = false);
  414. await delCarInfo(_ids);
  415. proxy?.$modal.msgSuccess("删除成功");
  416. await getList();
  417. }
  418. /** 导出按钮操作 */
  419. const handleExport = () => {
  420. proxy?.download('system/carInfo/export', {
  421. ...queryParams.value
  422. }, `carInfo_${new Date().getTime()}.xlsx`)
  423. }
  424. const initData = async () => {
  425. const res = await listCarPath({ pageSize: 1000 });
  426. carPathList.value = res.rows
  427. const res2 = await listCarInfo({ pageSize: 1000 });
  428. carInfoList.value = res2.rows
  429. var params = {
  430. starttime: moment(dataValue2.value[0]).format("YYYY-MM-DD HH:mm:ss"),
  431. endtime: moment(dataValue2.value[1]).format("YYYY-MM-DD HH:mm:ss")
  432. }
  433. const res3 = await listCarSchedule({ pageSize: 1000, params: params })
  434. getSites();
  435. carFlowList.value = [];
  436. siteFlowList.value = [];
  437. searchCar();
  438. searchSite();
  439. // for (var index in carInfoList.value) {
  440. // if (carInfoList.value[index].deviceInfos != null) {
  441. // var deviceCode = JSON.parse(carInfoList.value[index].deviceInfos)[0].code
  442. // console.log(deviceCode)
  443. // await getFlowData(deviceCode, carInfoList.value[index].carNum)
  444. // }
  445. // //getFlowData();
  446. // }
  447. // for (var index in res3.data) {
  448. // if (res3.data[index].ext1 != null) {
  449. // var siteList = JSON.parse(res3.data[index].ext1)
  450. // var gpsCode = ''
  451. // for (var j in carInfoList.value) {
  452. // if (carInfoList.value[j].carNum == res3.data[index]) {
  453. // gpsCode = JSON.parse(carInfoList.value[index].deviceInfos)[0].code
  454. // }
  455. // }
  456. // for (var key in siteList) {
  457. // var obj = siteList[key]
  458. // await getSiteData(key, gpsCode, obj.intime, obj.outtime);
  459. // }
  460. // }
  461. // }
  462. // table2.value.setButton([]);
  463. // console.log(carFlowList.value)
  464. // table2.value.setDataList(siteFlowList.value);
  465. }
  466. const searchCar = () => {
  467. var obj = {
  468. pageSize: queryParams.value.pageSize,
  469. pageNum: queryParams.value.pageNum,
  470. carNum: queryParams.value.carNum,
  471. deviceInfos:"people_count",
  472. params: {
  473. starttime: moment(dataValue.value[0]).format("YYYY-MM-DD HH:mm:ss"),
  474. endtime: moment(dataValue.value[1]).format("YYYY-MM-DD HH:mm:ss")
  475. }
  476. }
  477. if (deptId.value != null) {
  478. obj.params["ext1$deptId"] = deptId.value
  479. }
  480. liststaticFlow(obj).then(res => {
  481. total.value = res.total
  482. table1.value.setButton([]);
  483. for (var index in res.rows) {
  484. res.rows[index].startTime = moment(dataValue.value[0]).format("YYYY-MM-DD HH:mm:ss")
  485. res.rows[index].endTime = moment(dataValue.value[1]).format("YYYY-MM-DD HH:mm:ss")
  486. }
  487. table1.value.setDataList(res.rows);
  488. })
  489. }
  490. const searchSite = () => {
  491. var sites = []
  492. for (var index in carPathList.value) {
  493. if (queryParams2.value.line == carPathList.value[index].id) {
  494. for (var j in JSON.parse(carPathList.value[index].stationList)) {
  495. var station = JSON.parse(carPathList.value[index].stationList)[j].data
  496. sites.push(station.dictLabel)
  497. }
  498. }
  499. }
  500. var params = {
  501. starttime: moment(dataValue2.value[0]).format("YYYY-MM-DD HH:mm:ss"),
  502. endtime: moment(dataValue2.value[1]).format("YYYY-MM-DD HH:mm:ss")
  503. }
  504. if (sites.length > 0) {
  505. params.sites = sites.join(',')
  506. }
  507. var obj = {
  508. dictLabel: queryParams2.value.site,
  509. pageSize: queryParams2.value.pageSize,
  510. pageNum: queryParams2.value.pageNum,
  511. params: params
  512. }
  513. listsitesFlow(obj).then(res => {
  514. total2.value = res.total
  515. for (var index in res.rows) {
  516. res.rows[index].startTime = moment(dataValue.value[0]).format("YYYY-MM-DD HH:mm:ss")
  517. res.rows[index].endTime = moment(dataValue.value[1]).format("YYYY-MM-DD HH:mm:ss")
  518. if (res.rows[index].others == null || res.rows[index].others == '') {
  519. var countData = {
  520. incount: 0,
  521. outcount: 0
  522. }
  523. res.rows[index].others = countData
  524. }
  525. }
  526. console.log(res.rows)
  527. table2.value.setButton([]);
  528. table2.value.setDataList(res.rows);
  529. })
  530. }
  531. const getFlowData = (carCode, carNum) => {
  532. var obj = {
  533. starttime: moment(dataValue.value[0]).format('YYYY-MM-DD'),
  534. endtime: moment(dataValue.value[1]).format('YYYY-MM-DD')
  535. }
  536. getCountData({ devicecode: carCode, params: obj }).then(res => {
  537. var data = {
  538. carNum: carNum,
  539. startTime: moment(dataValue.value[0]).format('YYYY-MM-DD'),
  540. endTime: moment(dataValue.value[1]).format('YYYY-MM-DD'),
  541. upCount: res.data.totalin,
  542. downCount: res.data.totalout
  543. }
  544. carFlowList.value.push(data);
  545. })
  546. }
  547. const getSiteData = (carCode, siteName, startTime, endTime) => {
  548. var obj = {
  549. starttime: startTime,
  550. endtime: endTime
  551. }
  552. getCountData({ devicecode: carCode, params: obj }).then(res => {
  553. var data = {
  554. siteName: siteName,
  555. startTime: moment(dataValue.value[0]).format('YYYY-MM-DD'),
  556. endTime: moment(dataValue.value[1]).format('YYYY-MM-DD'),
  557. upCount: res.data.totalin,
  558. downCount: res.data.totalout
  559. }
  560. siteFlowList.value.push(data);
  561. })
  562. }
  563. const getStationData = (carCode, siteName) => {
  564. var obj = {
  565. starttime: moment(dataValue.value[0]).format('YYYY-MM-DD'),
  566. endtime: moment(dataValue.value[1]).format('YYYY-MM-DD')
  567. }
  568. getCountData({ devicecode: carCode, params: obj }).then(res => {
  569. var data = {
  570. siteName: siteName,
  571. startTime: moment(dataValue.value[0]).format('YYYY-MM-DD'),
  572. endTime: moment(dataValue.value[1]).format('YYYY-MM-DD'),
  573. upCount: res.data.totalin,
  574. downCount: res.data.totalout
  575. }
  576. carFlowList.value.push(data);
  577. })
  578. }
  579. onMounted(() => {
  580. initData();
  581. getTreeSelect();
  582. });
  583. </script>
  584. <style></style>