hotspotCount.vue 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. <template>
  2. <div class="statistics-order-hotspot-count-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="hbTime" v-if="state.queryParams.dateType === 'daterange'" label="环比时间段">
  29. <el-date-picker
  30. v-model="state.queryParams.hbTime"
  31. type="daterange"
  32. unlink-panels
  33. range-separator="至"
  34. start-placeholder="开始时间"
  35. end-placeholder="结束时间"
  36. :shortcuts="shortcuts"
  37. @change="handleQuery"
  38. value-format="YYYY-MM-DD"
  39. :clearable="false"
  40. />
  41. </el-form-item>
  42. <el-form-item prop="time" v-else label="时间">
  43. <el-date-picker
  44. v-model="state.queryParams.time"
  45. :type="state.queryParams.dateType"
  46. placeholder="选择时间"
  47. @change="handleQuery"
  48. :value-format="valueFormat"
  49. :clearable="false"
  50. />
  51. </el-form-item>
  52. <el-form-item>
  53. <el-button type="primary" @click="handleQuery" :loading="state.loading"> <SvgIcon name="ele-Search" class="mr5" />查询 </el-button>
  54. <el-button @click="resetQuery(ruleFormRef)" class="default-button" :loading="state.loading">
  55. <SvgIcon name="ele-Refresh" class="mr5" />重置
  56. </el-button>
  57. </el-form-item>
  58. </el-form>
  59. </el-card>
  60. <el-card shadow="never">
  61. <ProTable
  62. ref="proTableRef"
  63. :columns="columns"
  64. :data="state.tableData"
  65. :loading="state.loading"
  66. row-key="id"
  67. lazy
  68. :load="load"
  69. :tree-props="{ children: 'children', hasChildren: 'sublevel' }"
  70. show-summary
  71. border
  72. :pagination="false"
  73. >
  74. </ProTable>
  75. </el-card>
  76. </div>
  77. </template>
  78. <script setup lang="tsx" name="statisticsOrderHotspotCount">
  79. import { computed, onMounted, reactive, ref } from 'vue';
  80. import { FormInstance } from 'element-plus';
  81. import { departmentHot } from '@/api/statistics/order';
  82. import { defaultDate, shortcuts } from "@/utils/constants";
  83. import dayjs from 'dayjs';
  84. const columns = ref<any>([
  85. { prop: 'name', label: '热点名称' },
  86. { prop: 'num', label: '工单数' },
  87. { prop: 'chainNum', label: '环比工单数' },
  88. { prop: 'chainRate', label: '日环比' },
  89. ]); // 表头
  90. // 定义变量内容
  91. const ruleFormRef = ref<RefType>(); // 表单ref
  92. const state = reactive({
  93. queryParams: {
  94. // 查询条件
  95. dateType: 'date', // 关键词
  96. time: dayjs(new Date()).format('YYYY-MM-DD'), // 时间默认今天
  97. crTime: defaultDate, // 时间默认今天开始到今天结束
  98. hbTime:defaultDate, // 时间默认今天开始到今天结束
  99. },
  100. tableData: [], //表单
  101. loading: false, // 加载
  102. total: 0, // 总数
  103. totalCount: {},
  104. });
  105. const valueFormat = computed(() => {
  106. return state.queryParams.dateType === 'date' ? 'YYYY-MM-DD' : state.queryParams.dateType === 'month' ? 'YYYY-MM' : 'YYYY';
  107. });
  108. // 设置当前时间的映射值
  109. const getType = computed(() => {
  110. const statusMap: any = {
  111. date: '1',
  112. year: '3',
  113. month: '2',
  114. daterange: '0',
  115. };
  116. return statusMap[state.queryParams.dateType] || '';
  117. });
  118. /** 搜索按钮操作 */
  119. const handleQuery = () => {
  120. // state.queryParams.PageIndex = 1;
  121. queryList();
  122. };
  123. /** 获取列表 */
  124. const queryList = () => {
  125. state.loading = true;
  126. let StartTime = null;
  127. let EndTime = null;
  128. let ChainStartTime = null;
  129. let ChainEndTime = null;
  130. switch (state.queryParams.dateType) {
  131. case 'date':
  132. StartTime = dayjs(state.queryParams.time).startOf('date').format('YYYY-MM-DD');
  133. EndTime = dayjs(state.queryParams.time).endOf('date').format('YYYY-MM-DD');
  134. break;
  135. case 'month':
  136. StartTime = dayjs(state.queryParams.time).startOf('month').format('YYYY-MM-DD');
  137. EndTime = dayjs(state.queryParams.time).endOf('month').format('YYYY-MM-DD');
  138. break;
  139. case 'year':
  140. StartTime = dayjs(state.queryParams.time).startOf('year').format('YYYY-MM-DD');
  141. EndTime = dayjs(state.queryParams.time).endOf('year').format('YYYY-MM-DD');
  142. break;
  143. case 'daterange':
  144. StartTime = state.queryParams?.crTime[0];
  145. EndTime = state.queryParams?.crTime[1];
  146. ChainStartTime = state.queryParams?.hbTime[0];
  147. ChainEndTime = state.queryParams?.hbTime[1];
  148. break;
  149. }
  150. const request = {
  151. Type: getType.value,
  152. StartTime,
  153. EndTime,
  154. ChainStartTime,
  155. ChainEndTime,
  156. };
  157. state.tableData = [];
  158. departmentHot(request)
  159. .then((res: any) => {
  160. state.tableData = res.result.list ?? [];
  161. state.totalCount = res.result.total;
  162. state.loading = false;
  163. })
  164. .catch(() => {
  165. state.loading = false;
  166. });
  167. }
  168. /** 重置按钮操作 */
  169. const resetQuery = (formEl: FormInstance | undefined) => {
  170. if (!formEl) return;
  171. formEl.resetFields();
  172. queryList();
  173. }
  174. // 懒加载
  175. const load = (row: any, treeNode: unknown, resolve: (date: any[]) => void) => {
  176. let StartTime = null;
  177. let EndTime = null;
  178. let ChainStartTime = null;
  179. let ChainEndTime = null;
  180. switch (state.queryParams.dateType) {
  181. case 'date':
  182. StartTime = dayjs(state.queryParams.time).startOf('date').format('YYYY-MM-DD');
  183. EndTime = dayjs(state.queryParams.time).endOf('date').format('YYYY-MM-DD');
  184. break;
  185. case 'month':
  186. StartTime = dayjs(state.queryParams.time).startOf('month').format('YYYY-MM-DD');
  187. EndTime = dayjs(state.queryParams.time).endOf('month').format('YYYY-MM-DD');
  188. break;
  189. case 'year':
  190. StartTime = dayjs(state.queryParams.time).startOf('year').format('YYYY-MM-DD');
  191. EndTime = dayjs(state.queryParams.time).endOf('year').format('YYYY-MM-DD');
  192. break;
  193. case 'daterange':
  194. StartTime = state.queryParams?.crTime[0];
  195. EndTime = state.queryParams?.crTime[1];
  196. ChainStartTime = state.queryParams?.hbTime[0];
  197. ChainEndTime = state.queryParams?.hbTime[1];
  198. break;
  199. }
  200. const request = {
  201. Type: getType.value,
  202. StartTime,
  203. EndTime,
  204. ChainStartTime,
  205. ChainEndTime,
  206. Id: row.id,
  207. };
  208. departmentHot(request)
  209. .then((res: any) => {
  210. state.totalCount = res.result.total;
  211. resolve(res.result.list ?? []);
  212. })
  213. .catch(() => {});
  214. };
  215. onMounted(() => {
  216. queryList();
  217. });
  218. </script>