total.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822
  1. <template>
  2. <a-card :bordered="false" :body-style="{ 'padding-bottom': '20px' }" class="mb-2">
  3. <a-form ref="searchFormRef" name="advanced_search" :model="searchFormState" class="ant-advanced-search-form">
  4. <a-row :gutter="24">
  5. <a-col :span="6">
  6. <a-form-item label="门店" name="orgId">
  7. <a-tree-select
  8. v-model:value="searchFormState.orgId"
  9. show-search
  10. style="width: 100%"
  11. :dropdown-style="{ maxHeight: '400px', overflow: 'auto' }"
  12. placeholder="请选择门店"
  13. allow-clear
  14. multiple
  15. tree-default-expand-all
  16. :tree-data="treeData"
  17. :field-names="{
  18. children: 'children',
  19. label: 'name',
  20. value: 'id'
  21. }"
  22. selectable="false"
  23. />
  24. </a-form-item>
  25. </a-col>
  26. <a-col :span="6">
  27. <a-form-item label="日期段" name="times">
  28. <a-range-picker
  29. style="width: 100%;"
  30. v-model:value="searchFormState.times"
  31. format="YYYY-MM-DD"
  32. :placeholder="['开始时间', '结束时间']"
  33. @change="onRangeChange"
  34. />
  35. </a-form-item>
  36. </a-col>
  37. <a-col :span="6">
  38. <a-button type="primary" html-type="submit" @click="refresh()">查询</a-button>
  39. <a-button style="margin: 0 8px" @click="reset">重置</a-button>
  40. <a-button @click="exportTotal">
  41. <template #icon>
  42. <export-outlined/>
  43. </template>
  44. 导出
  45. </a-button>
  46. </a-col>
  47. </a-row>
  48. </a-form>
  49. </a-card>
  50. <a-row>
  51. <a-col :span="8" style="margin-bottom: 10px;">
  52. <a-card style="height: 180px">
  53. <a-statistic title="消费金额" :value="consumerCount"/>
  54. <a-statistic title="订单数" :value="consumerOrderCount"/>
  55. </a-card>
  56. </a-col>
  57. <a-col :span="8" style="margin-bottom: 10px; margin-left: 20px">
  58. <a-card style="height: 180px">
  59. <a-statistic title="注册会员数" :value="userCount"/>
  60. <!-- <a-statistic title="订单数" :value="rechargeOrderCount"/>-->
  61. </a-card>
  62. </a-col>
  63. <a-col :span="7" style="margin-bottom: 10px; margin-left: 20px;">
  64. <a-card style="height: 180px">
  65. <a-statistic title="账户余额" :value="accountBalance"/>
  66. <a-statistic title="代金券余额" :value="voucherBalance"/>
  67. </a-card>
  68. </a-col>
  69. </a-row>
  70. <a-card :bordered="false">
  71. <div style="display:flex;justify-content:space-between" id="totalDiv">
  72. <span id="totalSpan">
  73. <left-outlined :style="{fontSize:'13px',color:'#C9C9C9',cursor:'pointer'}" @click="prePage" v-show="leftFlag"/>
  74. </span>
  75. <span>
  76. <right-outlined style="width:1.5em;height:1.5em;color:#C9C9C9;cursor:pointer" @click="nextPage" v-show="rightFlag"/>
  77. </span>
  78. </div>
  79. </a-card>
  80. <!-- <a-card :bordered="false" :body-style="{ 'padding-bottom': '20px' }" class="mb-2">
  81. <div id="main" style="height: 340px"></div>
  82. </a-card>-->
  83. <a-card :bordered="false" :body-style="{ 'padding-bottom': '20px' }" class="mb-2">
  84. <div id="main2" style="height: 340px"></div>
  85. </a-card>
  86. <a-card :bordered="false" :body-style="{ 'padding-bottom': '20px' }" class="mb-2">
  87. <a-table
  88. ref="table"
  89. :columns="columns4"
  90. :data-source = "data4"
  91. bordered
  92. :row-key="(record) => record.id"
  93. >
  94. </a-table>
  95. </a-card>
  96. <a-card :bordered="false">
  97. <a-tabs v-model:activeKey="activeKey" @change="clickTab(value)">
  98. <a-tab-pane key="1">
  99. <template #tab>
  100. <span>
  101. <red-envelope-outlined />
  102. 消费列表
  103. </span>
  104. </template>
  105. <div id="printForm1">
  106. <a-table
  107. ref="table"
  108. :columns="columns1"
  109. :data-source = "data1"
  110. bordered
  111. :row-key="(record) => record.id"
  112. >
  113. <template #bodyCell="{ column, record }">
  114. <template v-if="column.dataIndex === 'consumptionOperate'">
  115. <a-tag
  116. :color="
  117. record.consumptionOperate === '1'
  118. ? 'orange'
  119. : record.consumptionOperate === '2'
  120. ? 'green'
  121. : record.consumptionOperate === '3'
  122. ? 'cyan'
  123. : 'purple'
  124. "
  125. >
  126. {{ $TOOL.dictTypeData('consumption_operate', record.consumptionOperate) }}
  127. </a-tag>
  128. </template>
  129. </template>
  130. </a-table>
  131. </div>
  132. </a-tab-pane>
  133. <a-tab-pane key="2">
  134. <template #tab>
  135. <span>
  136. <HddOutlined />
  137. 优惠券列表
  138. </span>
  139. </template>
  140. <div id="printForm2">
  141. <a-table
  142. ref="table"
  143. :columns="columns2"
  144. :data-source = "data2"
  145. bordered
  146. :row-key="(record) => record.id"
  147. >
  148. <template #bodyCell="{ column, record }">
  149. <template v-if="column.dataIndex === 'couponStatus'">
  150. <a-tag
  151. :color="
  152. record.couponStatus === '0'
  153. ? '#87d068'
  154. : record.couponStatus === '1'
  155. ? '#f50'
  156. : '#f50'
  157. "
  158. >
  159. {{ $TOOL.dictTypeData('is_destroy', record.couponStatus) }}
  160. </a-tag>
  161. </template>
  162. </template>
  163. </a-table>
  164. </div>
  165. </a-tab-pane>
  166. <a-tab-pane key="3">
  167. <template #tab>
  168. <span>
  169. <ScheduleOutlined />
  170. 会员列表
  171. </span>
  172. </template>
  173. <div id="printForm3">
  174. <a-table
  175. ref="table"
  176. :columns="columns3"
  177. :data-source = "data3"
  178. bordered
  179. :row-key="(record) => record.id"
  180. >
  181. </a-table>
  182. </div>
  183. </a-tab-pane>
  184. </a-tabs>
  185. </a-card>
  186. </template>
  187. <script setup name="customerinfo">
  188. import bizOrgApi from '@/api/biz/bizOrgApi'
  189. import downloadUtil from '@/utils/downloadUtil'
  190. import consumptionRecordApi from '@/api/biz/consumptionRecordApi'
  191. import bizCouponRecordApi from '@/api/biz/bizCouponRecordApi'
  192. import bizUserApi from '@/api/biz/bizUserApi'
  193. import { onMounted } from 'vue'
  194. import orgApi from '@/api/biz/bizOrgApi'
  195. import * as echarts from 'echarts'
  196. //消费
  197. const consumerCount = ref(0)
  198. const consumerOrderCount = ref(0)
  199. //充值统计数量
  200. const rechargeCount = ref(0)
  201. const rechargeOrderCount = ref(0)
  202. //会员
  203. const userCount = ref(0)
  204. //账户余额&代金券余额
  205. const accountBalance = ref(0)
  206. const voucherBalance = ref(0)
  207. const treeData = ref([])
  208. const activeKey = ref('1');
  209. const searchFormRef = ref()
  210. let searchFormState = reactive({})
  211. const data1 = ref([])
  212. const data2 = ref([])
  213. const data3 = ref([])
  214. const data4 = ref([])
  215. const data5 = ref([])
  216. const dayTime = ref()
  217. const zhibiao = ref()
  218. const fuhe = ref()
  219. const typeTitle = ref()
  220. //三条数据一页
  221. const echartsPage = ref(7)
  222. //当前显示页数
  223. const currentPage = ref(1)
  224. // 共有多少页
  225. const totalPage = ref(0)
  226. const leftFlag = ref(false)
  227. const rightFlag = ref(false)
  228. onMounted(() => {
  229. //金额汇总
  230. loadData1();
  231. loadData3();
  232. clickTab()
  233. // 获取机构树并加入顶级
  234. bizOrgApi.orgTreeSelector().then((res) => {
  235. treeData.value = res
  236. })
  237. //折线图
  238. customer();
  239. //各个门店消费统计
  240. loadData4()
  241. })
  242. const onRangeChange = (value, dateString) => {
  243. console.log('Formatted Selected Time: ', dateString);
  244. searchFormState.startTime = dateString[0]
  245. searchFormState.endTime = dateString[1]
  246. delete searchFormState.times
  247. };
  248. const table = ref()
  249. const formRef = ref()
  250. const toolConfig = { refresh: true, height: true, columnSetting: true, striped: false }
  251. const columns1 = [
  252. {
  253. title: '会员姓名',
  254. dataIndex: 'userName',
  255. align: 'center',
  256. },
  257. {
  258. title: '会员手机号',
  259. dataIndex: 'phone',
  260. align: 'center',
  261. },
  262. {
  263. title: '消费操作',
  264. dataIndex: 'consumptionOperate',
  265. align: 'center'
  266. },
  267. {
  268. title: '消费金额',
  269. dataIndex: 'consumptionMoney',
  270. align: 'center'
  271. },
  272. {
  273. title: '账户余额',
  274. dataIndex: 'newAccountBalance',
  275. align: 'center'
  276. },
  277. {
  278. title: '代金券余额',
  279. dataIndex: 'newVoucherBalance',
  280. align: 'center'
  281. },
  282. {
  283. title: '消费时间',
  284. dataIndex: 'consumptionTime',
  285. align: 'center'
  286. },
  287. {
  288. title: '会员编码',
  289. dataIndex: 'userCode',
  290. align: 'center'
  291. },
  292. {
  293. title: '消费门店',
  294. dataIndex: 'orgName',
  295. align: 'center'
  296. },
  297. ]
  298. const columns2 = [
  299. {
  300. title: '优惠券编码',
  301. dataIndex: 'couponNo',
  302. align: 'center',
  303. },
  304. {
  305. title: '优惠券生成时间',
  306. dataIndex: 'time',
  307. align: 'center',
  308. },
  309. {
  310. title: '是否核销',
  311. dataIndex: 'couponStatus',
  312. align: 'center'
  313. },
  314. {
  315. title: '有效期开始时间',
  316. dataIndex: 'startTime',
  317. align: 'center'
  318. },
  319. {
  320. title: '有效期截止时间',
  321. dataIndex: 'endTime',
  322. align: 'center'
  323. },
  324. {
  325. title: '核销人',
  326. dataIndex: 'destroyUserName',
  327. align: 'center'
  328. },
  329. {
  330. title: '核销时间',
  331. dataIndex: 'destroyTime',
  332. align: 'center'
  333. },
  334. {
  335. title: '核销门店',
  336. dataIndex: 'destroyOrgName',
  337. align: 'center'
  338. },
  339. ]
  340. const columns3 = [
  341. {
  342. title: '会员编码',
  343. dataIndex: 'userReferralCode',
  344. align: 'center',
  345. },
  346. {
  347. title: '手机号',
  348. dataIndex: 'phone',
  349. align: 'center',
  350. },
  351. {
  352. title: '姓名',
  353. dataIndex: 'name',
  354. align: 'center',
  355. },
  356. {
  357. title: '账户余额',
  358. dataIndex: 'accountBalance',
  359. align: 'center',
  360. },
  361. {
  362. title: '代金券余额',
  363. dataIndex: 'voucherBalance',
  364. align: 'center',
  365. },
  366. {
  367. title: '注册时间',
  368. dataIndex: 'createTime',
  369. align: 'center',
  370. },
  371. /*{
  372. title: '门店',
  373. dataIndex: 'orgName',
  374. align: 'center',
  375. },*/
  376. ]
  377. const columns4 = [
  378. {
  379. title: '门店名称',
  380. dataIndex: 'name',
  381. align: 'center'
  382. },
  383. {
  384. title: '门店编码',
  385. dataIndex: 'code',
  386. align: 'center'
  387. },
  388. {
  389. title: '消费',
  390. children: [
  391. {
  392. title: '订单数',
  393. dataIndex: 'orderCount',
  394. align: 'center',
  395. },
  396. {
  397. title: '账户消费金额',
  398. dataIndex: 'accountMoney',
  399. align: 'center',
  400. },
  401. {
  402. title: '代金券消费金额',
  403. dataIndex: 'voucherMoney',
  404. align: 'center',
  405. },
  406. ]
  407. },
  408. /*{
  409. title: '注册会员数',
  410. dataIndex: 'userCount',
  411. align: 'center'
  412. },*/
  413. ]
  414. const selectedRowKeys = ref([])
  415. // 列表选择配置
  416. const options = {
  417. // columns数字类型字段加入 needTotal: true 可以勾选自动算账
  418. alert: {
  419. show: true,
  420. clear: () => {
  421. selectedRowKeys.value = ref([])
  422. }
  423. },
  424. rowSelection: {
  425. onChange: (selectedRowKey, selectedRows) => {
  426. selectedRowKeys.value = selectedRowKey
  427. }
  428. }
  429. }
  430. const totalMoney = ref(0)
  431. //各个门店消费记录
  432. const loadData4 = () => {
  433. const orgId = ref('')
  434. if(searchFormState.orgId == null || searchFormState.orgId== '' || searchFormState.orgId== 'undefined' ){
  435. }else{
  436. for(let i = 0;i<searchFormState.orgId.length;i++){
  437. orgId.value = orgId.value + searchFormState.orgId[i]+","
  438. }
  439. orgId.value = orgId.value.slice(0,orgId.value.length-1)
  440. }
  441. const param = {
  442. "orgId":orgId.value,
  443. "consumptionTimeBegin":searchFormState.startTime,
  444. "consumptionTimeEnd":searchFormState.endTime
  445. }
  446. consumptionRecordApi.queryEachStore(param).then((data)=>{
  447. data4.value = data.dataList
  448. })
  449. }
  450. //导出
  451. const exportTotal = () => {
  452. const orgId = ref('')
  453. if(searchFormState.orgId == null || searchFormState.orgId== '' || searchFormState.orgId== 'undefined' ){
  454. }else{
  455. for(let i = 0;i<searchFormState.orgId.length;i++){
  456. orgId.value = orgId.value + searchFormState.orgId[i]+","
  457. }
  458. orgId.value = orgId.value.slice(0,orgId.value.length-1)
  459. }
  460. const param = {
  461. "orgId":orgId.value,
  462. "consumptionTimeBegin":searchFormState.startTime,
  463. "consumptionTimeEnd":searchFormState.endTime
  464. }
  465. consumptionRecordApi.exportRecord(param).then((res)=>{
  466. downloadUtil.resultDownload(res)
  467. })
  468. }
  469. //会员折线图
  470. const customer = () => {
  471. const orgId = ref('')
  472. if(searchFormState.orgId == null || searchFormState.orgId== '' || searchFormState.orgId== 'undefined' ){
  473. }else{
  474. for(let i = 0;i<searchFormState.orgId.length;i++){
  475. orgId.value = orgId.value + searchFormState.orgId[i]+","
  476. }
  477. orgId.value = orgId.value.slice(0,orgId.value.length-1)
  478. }
  479. const param = {
  480. "orgId":orgId.value,
  481. "customerName":searchFormState.customerName,
  482. "startTime":searchFormState.startTime,
  483. "endTime":searchFormState.endTime
  484. }
  485. consumptionRecordApi.queryConsumptionChart(param).then((res)=>{
  486. const xAxis = res.dateTime
  487. let series = [
  488. {
  489. name: '消费金额',
  490. type: 'line',
  491. //stack: '总量',
  492. showSymbol: false,
  493. itemStyle: {
  494. normal: {
  495. color: '#00FF00', //折线点自定义
  496. lineStyle: {
  497. color: '#00FF00'
  498. }
  499. }
  500. },
  501. data: res.consumptionMoney
  502. },
  503. {
  504. name: '订单数',
  505. type: 'line',
  506. //stack: '总量',
  507. showSymbol: false,
  508. data: res.consumptionCount
  509. },
  510. {
  511. name: '会员',
  512. type: 'line',
  513. //stack: '总量',
  514. showSymbol: false,
  515. itemStyle: {
  516. normal: {
  517. color: '#FAD337', //折线点自定义
  518. lineStyle: {
  519. color: '#FAD337'
  520. }
  521. }
  522. },
  523. data: res.userCount
  524. },
  525. ]
  526. drow("main2",xAxis, series)
  527. })
  528. }
  529. const drow = (id, xAxis, series) => {
  530. let myChart = echarts.init(document.getElementById(id))
  531. let option = {
  532. color: ['#1890FF', '#52C41A'],
  533. title: {
  534. //text: '会话量',
  535. },
  536. tooltip: {
  537. trigger: 'axis',
  538. },
  539. grid: {
  540. left: '40px',
  541. right: '40px',
  542. top: '50px',
  543. bottom: '30px'
  544. },
  545. legend: {
  546. itemWidth: 20, // 图例图形宽度
  547. itemHeight: 4,
  548. icon: 'roundRect',
  549. },
  550. xAxis: {
  551. type: 'category',
  552. boundaryGap: false, //x轴两边不留空白
  553. axisLabel: {
  554. color: 'rgba(0, 0, 0, 0.65)',
  555. },
  556. axisLine: {
  557. lineStyle: {
  558. color: '#D9D9D9',
  559. },
  560. },
  561. axisTick: {
  562. lineStyle: {
  563. color: '#D9D9D9',
  564. },
  565. },
  566. data: xAxis,
  567. },
  568. yAxis: {
  569. axisLine: {
  570. show: false,
  571. lineStyle: {
  572. color: 'rgba(0, 0, 0, 0.65)',
  573. },
  574. },
  575. splitLine: {
  576. lineStyle: {
  577. color: ['#E8E8E8'],
  578. type: 'dashed',
  579. },
  580. },
  581. axisLabel: {
  582. color: 'rgba(0, 0, 0, 0.65)',
  583. },
  584. axisTick: {
  585. show: false,
  586. lineStyle: { color: 'rgb(150,150,150)' }, //y轴坐标刻度颜色(与axisLabel.textStyle是相同的效果)
  587. },
  588. type: 'value',
  589. },
  590. series: series
  591. }
  592. myChart.setOption(option)
  593. }
  594. //消费金额值统计
  595. const loadData1 = () => {
  596. const orgId = ref('')
  597. if(searchFormState.orgId == null || searchFormState.orgId== '' || searchFormState.orgId== 'undefined' ){
  598. }else{
  599. for(let i = 0;i<searchFormState.orgId.length;i++){
  600. orgId.value = orgId.value + searchFormState.orgId[i]+","
  601. }
  602. orgId.value = orgId.value.slice(0,orgId.value.length-1)
  603. }
  604. const param = {
  605. "orgId":orgId.value,
  606. "consumptionTimeBegin":searchFormState.startTime,
  607. "consumptionTimeEnd":searchFormState.endTime
  608. }
  609. consumptionRecordApi.queryRecordTotal(param).then((data) => {
  610. consumerCount.value = '¥ ' + data.orderMoney
  611. consumerOrderCount.value = data.orderCount
  612. })
  613. }
  614. //账户余额值统计
  615. const loadData3 = () => {
  616. const orgId = ref('')
  617. if(searchFormState.orgId == null || searchFormState.orgId== '' || searchFormState.orgId== 'undefined' ){
  618. }else{
  619. for(let i = 0;i<searchFormState.orgId.length;i++){
  620. orgId.value = orgId.value + searchFormState.orgId[i]+","
  621. }
  622. orgId.value = orgId.value.slice(0,orgId.value.length-1)
  623. }
  624. const param = {
  625. "orgId":orgId.value,
  626. "consumptionTimeBegin":searchFormState.startTime,
  627. "consumptionTimeEnd":searchFormState.endTime
  628. }
  629. consumptionRecordApi.queryBalanceTotal(param).then((data)=>{
  630. userCount.value = data.userCount
  631. accountBalance.value = data.accountBalance
  632. voucherBalance.value = data.voucherBalance
  633. })
  634. }
  635. //切换
  636. const clickTab = () => {
  637. consumptionPage()
  638. userPage()
  639. couponPage()
  640. }
  641. const consumptionPage = () =>{
  642. const orgId = ref('')
  643. if(searchFormState.orgId == null || searchFormState.orgId== '' || searchFormState.orgId== 'undefined' ){
  644. }else{
  645. for(let i = 0;i<searchFormState.orgId.length;i++){
  646. orgId.value = orgId.value + searchFormState.orgId[i]+","
  647. }
  648. orgId.value = orgId.value.slice(0,orgId.value.length-1)
  649. }
  650. const param = {
  651. "orgId":orgId.value,
  652. "consumptionTimeBegin":searchFormState.startTime,
  653. "consumptionTimeEnd":searchFormState.endTime,
  654. "consumptionOperate":'3,4'
  655. }
  656. consumptionRecordApi.consumptionRecordPage(param).then((data) => {
  657. data1.value = data.records
  658. })
  659. }
  660. //会员列表
  661. const userPage = () => {
  662. const orgId = ref('')
  663. if(searchFormState.orgId == null || searchFormState.orgId== '' || searchFormState.orgId== 'undefined' ){
  664. }else{
  665. for(let i = 0;i<searchFormState.orgId.length;i++){
  666. orgId.value = orgId.value + searchFormState.orgId[i]+","
  667. }
  668. orgId.value = orgId.value.slice(0,orgId.value.length-1)
  669. }
  670. const param = {
  671. "orgId":orgId.value,
  672. "beginTime":searchFormState.startTime,
  673. "endTime":searchFormState.endTime
  674. }
  675. bizUserApi.memberPage(param).then((res) => {
  676. data3.value = res.records
  677. })
  678. }
  679. //优惠券列表
  680. const couponPage = () => {
  681. const orgId = ref('')
  682. if(searchFormState.orgId == null || searchFormState.orgId== '' || searchFormState.orgId== 'undefined' ){
  683. }else{
  684. for(let i = 0;i<searchFormState.orgId.length;i++){
  685. orgId.value = orgId.value + searchFormState.orgId[i]+","
  686. }
  687. orgId.value = orgId.value.slice(0,orgId.value.length-1)
  688. }
  689. const param = {
  690. "orgId":orgId.value,
  691. "beginTime":searchFormState.startTime,
  692. "endTime":searchFormState.endTime
  693. }
  694. bizCouponRecordApi.bizCouponRecordPage(param).then((data) => {
  695. data2.value = data.records
  696. })
  697. }
  698. //查询
  699. const refresh = () => {
  700. loadData1();
  701. loadData3();
  702. clickTab()
  703. loadData4()
  704. }
  705. //导出
  706. const exportReport = () => {
  707. if(activeKey.value == '1'){
  708. searchFormState.queryFlag = '1'
  709. console.log("searchFormState.queryFlag:"+searchFormState.queryFlag)
  710. reportApi.exportReport(searchFormState).then((res) => {
  711. downloadUtil.resultDownload(res)
  712. })
  713. }
  714. }
  715. // 重置
  716. const reset = () => {
  717. searchFormRef.value.resetFields()
  718. searchFormState.times = []
  719. searchFormState.startTime = null
  720. searchFormState.endTime = null
  721. searchFormState.orgId = []
  722. }
  723. </script>
  724. <style lang="less" scoped>
  725. .ant-table-thead > tr > th {
  726. text-align: center;
  727. }
  728. .dashboard-analysis-iconGroup {
  729. i {
  730. margin-left: 16px;
  731. color: rgba(0, 0, 0, .45);
  732. cursor: pointer;
  733. transition: color .32s;
  734. color: black;
  735. height: 20px;
  736. }
  737. }
  738. #totalDiv #totalSpan{
  739. svg{
  740. width: 1.5em;
  741. height: 1.5em;
  742. }
  743. }
  744. </style>