detailAreaTime.vue 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <template>
  2. <div class="statistics-order-detail-area-time-container layout-pd">
  3. <el-card shadow="never">
  4. <el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
  5. <el-form-item label="来电人身份" prop="IdentityType">
  6. <el-select v-model="state.queryParams.IdentityType" placeholder="请选择来电人身份" @change="handleQuery" :empty-values="[undefined, null]">
  7. <el-option value="" label="全部" />
  8. <el-option :value="1" label="市民" />
  9. <el-option :value="2" label="企业" />
  10. </el-select>
  11. </el-form-item>
  12. <el-form-item label="时间段" prop="crTime">
  13. <el-date-picker
  14. v-model="state.queryParams.crTime"
  15. type="daterange"
  16. unlink-panels
  17. range-separator="至"
  18. start-placeholder="开始时间"
  19. end-placeholder="结束时间"
  20. :shortcuts="shortcuts"
  21. @change="handleQuery"
  22. value-format="YYYY-MM-DD"
  23. :clearable="false"
  24. />
  25. </el-form-item>
  26. <el-form-item>
  27. <el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
  28. <el-button @click="resetQuery(ruleFormRef)" class="default-button" :loading="state.loading">
  29. <SvgIcon name="ele-Refresh" class="mr5" />重置
  30. </el-button>
  31. <el-button type="primary" @click="onDetail" :loading="state.loading"> <SvgIcon name="ele-PieChart" class="mr5" />图表 </el-button>
  32. </el-form-item>
  33. </el-form>
  34. </el-card>
  35. <el-card shadow="never">
  36. <ProTable
  37. ref="proTableRef"
  38. :columns="columns"
  39. :data="state.tableData"
  40. @updateTable="queryList"
  41. :loading="state.loading"
  42. border
  43. :pagination="false"
  44. :toolButton="['refresh', 'setting', 'exportAll']"
  45. :key="Math.random()"
  46. :exportMethod="orderAreaTimeExport"
  47. :exportParams="requestParams"
  48. show-summary
  49. isSpecialExport
  50. >
  51. </ProTable>
  52. </el-card>
  53. </div>
  54. </template>
  55. <script setup lang="tsx" name="statisticsOrderDetailAreaTime">
  56. import { onMounted, reactive, ref } from 'vue';
  57. import { FormInstance } from 'element-plus';
  58. import { orderAreaTime, orderAreaTimeExport } from '@/api/statistics/order';
  59. import { defaultDate, shortcuts } from '@/utils/constants';
  60. import { useRouter } from 'vue-router';
  61. import Other from '@/utils/other';
  62. // 表格配置项
  63. const columns = ref<any[]>([]);
  64. // 定义变量内容
  65. const ruleFormRef = ref<RefType>(); // 表单ref
  66. const state = reactive<any>({
  67. queryParams: {
  68. IdentityType: '',
  69. // 查询条件
  70. crTime: defaultDate,
  71. },
  72. tableData: [], //表单
  73. loading: false, // 加载
  74. total: 0, // 总数
  75. });
  76. /** 搜索按钮操作 */
  77. const handleQuery = () => {
  78. // state.queryParams.PageIndex = 1;
  79. queryList();
  80. };
  81. /** 获取列表 */
  82. const requestParams = ref({});
  83. const queryList = async () => {
  84. state.loading = true;
  85. try {
  86. requestParams.value = Other.deepClone(state.queryParams);
  87. requestParams.value.StartTime = state.queryParams.crTime === null ? null : state.queryParams.crTime[0];
  88. requestParams.value.EndTime = state.queryParams.crTime === null ? null : state.queryParams.crTime[1];
  89. Reflect.deleteProperty(requestParams.value, 'crTime');
  90. const {result} = await orderAreaTime(requestParams.value);
  91. columns.value = result.titleData?.map((item: any) => {
  92. return {
  93. prop: item.key,
  94. label: item.value,
  95. align: 'center',
  96. minWidth: 90,
  97. };
  98. });
  99. // 计算横轴小计
  100. state.tableData = result?.item.map((item: any) => {
  101. let subtotal = 0;
  102. for (let i of
  103. result.titleData) {
  104. subtotal += item[i.key];
  105. }
  106. return {
  107. ...item,
  108. subtotal,
  109. };
  110. });
  111. columns.value.unshift({
  112. prop: 'Hour',
  113. label: '时间段',
  114. align: 'center',
  115. minWidth: 120,
  116. fixed: 'left',
  117. });
  118. columns.value.push({
  119. prop: 'subtotal',
  120. label: '小计',
  121. align: 'center',
  122. });
  123. state.loading = false;
  124. } catch (e) {
  125. state.loading = false;
  126. console.log(e);
  127. }
  128. };
  129. /** 重置按钮操作 */
  130. const resetQuery = (formEl: FormInstance | undefined) => {
  131. if (!formEl) return;
  132. formEl.resetFields();
  133. queryList();
  134. };
  135. // 查看图表
  136. const router = useRouter();
  137. const onDetail = () => {
  138. router.push({
  139. name: 'statisticsOrderTimeArea',
  140. });
  141. };
  142. onMounted(() => {
  143. queryList();
  144. });
  145. </script>