subRegional.vue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <template>
  2. <div class="statistics-order-sub-regional-container layout-pd">
  3. <!-- 搜索 -->
  4. <el-card shadow="never">
  5. <el-form :model="state.queryParams" ref="ruleFormRef" @submit.native.prevent inline>
  6. <el-form-item prop="dateType" label="时间单位">
  7. <el-select v-model="state.queryParams.dateType" placeholder="部门名称" @change="handleQuery">
  8. <el-option label="年" value="year" />
  9. <el-option label="月" value="month" />
  10. <el-option label="日" value="date" />
  11. <el-option label="自定义" value="daterange" />
  12. </el-select>
  13. </el-form-item>
  14. <el-form-item prop="crTime" v-if="state.queryParams.dateType === 'daterange'" label="时间段">
  15. <el-date-picker
  16. v-model="state.queryParams.crTime"
  17. type="daterange"
  18. unlink-panels
  19. range-separator="至"
  20. start-placeholder="开始时间"
  21. end-placeholder="结束时间"
  22. :shortcuts="shortcuts"
  23. @change="handleQuery"
  24. value-format="YYYY-MM-DD"
  25. :clearable="false"
  26. />
  27. </el-form-item>
  28. <el-form-item prop="time" v-else label="时间">
  29. <el-date-picker
  30. v-model="state.queryParams.time"
  31. :type="state.queryParams.dateType"
  32. placeholder="选择时间"
  33. @change="handleQuery"
  34. :value-format="valueFormat"
  35. :clearable="false"
  36. />
  37. </el-form-item>
  38. <el-form-item label="来电人身份" prop="TypeId">
  39. <el-select v-model="state.queryParams.TypeId" placeholder="请选择来电人身份" @change="handleQuery">
  40. <el-option value="" label="全部" />
  41. <el-option value="1" label="市民" />
  42. <el-option value="2" label="全部" />
  43. </el-select>
  44. </el-form-item>
  45. <el-form-item label="热线号码" prop="Line">
  46. <el-select v-model="state.queryParams.Line" placeholder="请选择热线号码" clearable @change="handleQuery">
  47. <el-option v-for="item in state.callForwardingSource" :value="item.dicDataValue" :key="item.dicDataValue" :label="item.dicDataName" />
  48. </el-select>
  49. </el-form-item>
  50. <el-form-item>
  51. <el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
  52. <el-button @click="resetQuery(ruleFormRef)" class="default-button" :loading="state.loading">
  53. <SvgIcon name="ele-Refresh" class="mr5" />重置
  54. </el-button>
  55. </el-form-item>
  56. </el-form>
  57. </el-card>
  58. <el-card shadow="never">
  59. <ProTable
  60. ref="proTableRef"
  61. :columns="columns"
  62. :data="state.tableData"
  63. :loading="state.loading"
  64. row-key="areaCode"
  65. lazy
  66. :load="load"
  67. :tree-props="{ children: 'children', hasChildren: 'hasChild' }"
  68. show-summary
  69. border
  70. :pagination="false"
  71. >
  72. </ProTable>
  73. </el-card>
  74. </div>
  75. </template>
  76. <script setup lang="tsx" name="statisticsOrderSubRegional">
  77. import { computed, onMounted, reactive, ref } from 'vue';
  78. import { FormInstance } from 'element-plus';
  79. import { statisticsOrderArea } from '@/api/statistics/order';
  80. import { defaultDate, shortcuts } from '@/utils/constants';
  81. import dayjs from 'dayjs';
  82. import { callPeriodBase } from '@/api/statistics/call';
  83. const columns = ref<any>([
  84. { prop: 'areaName', label: '区域名称' },
  85. { prop: 'sumCount', label: '分类统计' },
  86. ]); // 表头
  87. // 定义变量内容
  88. const ruleFormRef = ref<RefType>(); // 表单ref
  89. const state = reactive({
  90. queryParams: {
  91. // 查询条件
  92. dateType: 'date', // 关键词
  93. time: dayjs(new Date()).format('YYYY-MM-DD'), // 时间默认今天
  94. crTime: defaultDate, // 时间默认今天开始到今天结束
  95. hbTime: defaultDate, // 时间默认今天开始到今天结束
  96. TypeId: '',
  97. StartTime: null,
  98. EndTime: null,
  99. Line: null,
  100. },
  101. tableData: [], //表单
  102. loading: false, // 加载
  103. total: 0, // 总数
  104. callForwardingSource: [],
  105. });
  106. const valueFormat = computed(() => {
  107. return state.queryParams.dateType === 'date' ? 'YYYY-MM-DD' : state.queryParams.dateType === 'month' ? 'YYYY-MM' : 'YYYY';
  108. });
  109. /** 搜索按钮操作 */
  110. const handleQuery = () => {
  111. // state.queryParams.PageIndex = 1;
  112. state.tableData = [];
  113. queryList();
  114. };
  115. /** 获取列表 */
  116. const queryList = () => {
  117. state.loading = true;
  118. let StartTime = null;
  119. let EndTime = null;
  120. switch (state.queryParams.dateType) {
  121. case 'date':
  122. StartTime = dayjs(state.queryParams.time).startOf('date').format('YYYY-MM-DD');
  123. EndTime = dayjs(state.queryParams.time).endOf('date').format('YYYY-MM-DD');
  124. break;
  125. case 'month':
  126. StartTime = dayjs(state.queryParams.time).startOf('month').format('YYYY-MM-DD');
  127. EndTime = dayjs(state.queryParams.time).endOf('month').format('YYYY-MM-DD');
  128. break;
  129. case 'year':
  130. StartTime = dayjs(state.queryParams.time).startOf('year').format('YYYY-MM-DD');
  131. EndTime = dayjs(state.queryParams.time).endOf('year').format('YYYY-MM-DD');
  132. break;
  133. case 'daterange':
  134. StartTime = state.queryParams?.crTime[0];
  135. EndTime = state.queryParams?.crTime[1];
  136. break;
  137. }
  138. const request = {
  139. TypeId: state.queryParams.TypeId,
  140. StartTime,
  141. EndTime,
  142. Line: state.queryParams.Line,
  143. };
  144. statisticsOrderArea(request)
  145. .then((res: any) => {
  146. state.tableData = res.result ?? [];
  147. state.loading = false;
  148. })
  149. .catch(() => {
  150. state.loading = false;
  151. });
  152. };
  153. /** 重置按钮操作 */
  154. const resetQuery = (formEl: FormInstance | undefined) => {
  155. if (!formEl) return;
  156. formEl.resetFields();
  157. queryList();
  158. };
  159. // 懒加载
  160. const load = (row: any, treeNode: unknown, resolve: (date: any[]) => void) => {
  161. let StartTime = null;
  162. let EndTime = null;
  163. switch (state.queryParams.dateType) {
  164. case 'date':
  165. StartTime = dayjs(state.queryParams.time).startOf('date').format('YYYY-MM-DD');
  166. EndTime = dayjs(state.queryParams.time).endOf('date').format('YYYY-MM-DD');
  167. break;
  168. case 'month':
  169. StartTime = dayjs(state.queryParams.time).startOf('month').format('YYYY-MM-DD');
  170. EndTime = dayjs(state.queryParams.time).endOf('month').format('YYYY-MM-DD');
  171. break;
  172. case 'year':
  173. StartTime = dayjs(state.queryParams.time).startOf('year').format('YYYY-MM-DD');
  174. EndTime = dayjs(state.queryParams.time).endOf('year').format('YYYY-MM-DD');
  175. break;
  176. case 'daterange':
  177. StartTime = state.queryParams?.crTime[0];
  178. EndTime = state.queryParams?.crTime[1];
  179. break;
  180. }
  181. const request = {
  182. StartTime,
  183. EndTime,
  184. AreaCode: row.areaCode,
  185. TypeId: state.queryParams.TypeId,
  186. Line: state.queryParams.Line,
  187. };
  188. statisticsOrderArea(request)
  189. .then((res: any) => {
  190. resolve(res.result ?? []);
  191. })
  192. .catch(() => {});
  193. };
  194. // 获取基础信息
  195. const getBaseInfo = async () => {
  196. try {
  197. const { result } = await callPeriodBase();
  198. state.callForwardingSource = result.callForwardingSource ?? [];
  199. } catch (e) {
  200. console.log(e);
  201. }
  202. };
  203. onMounted(() => {
  204. getBaseInfo();
  205. queryList();
  206. });
  207. </script>