overMerchants.vue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. <script setup lang="ts">
  2. import { ref, onMounted } from "vue"
  3. import moment from "moment"
  4. import type { Header } from "@/components/Table/table-partials/models"
  5. import { useRouter } from "vue-router"
  6. import Rs from "@/core/services/RequestService"
  7. const router = useRouter()
  8. const cols = ref<Array<Header>>([
  9. {
  10. name: "区域",
  11. field: "org_name",
  12. width: 120,
  13. },
  14. {
  15. name: "商户",
  16. field: "company_name",
  17. },
  18. {
  19. name: "菜系",
  20. field: "catering_style_name",
  21. },
  22. {
  23. name: "规模",
  24. field: "catering_scale_name",
  25. },
  26. {
  27. name: "类型",
  28. field: "type_name",
  29. },
  30. {
  31. name: "排口数",
  32. field: "outlet_nums",
  33. },
  34. {
  35. name: "超标设备数",
  36. field: "exceed_device",
  37. },
  38. {
  39. name: "超标次数",
  40. field: "exceed_total",
  41. },
  42. {
  43. name: "操作",
  44. field: "action",
  45. width: 150,
  46. },
  47. ])
  48. const headData = ref({
  49. exceedCompanyNum: 0,
  50. exceedDeviceNum: 0,
  51. outletNum: 0,
  52. })
  53. const startDate = ref(new Date())
  54. const endDate = ref(new Date())
  55. const dateStr = ref(``)
  56. const dateValue = ref<[Date, Date]>([startDate.value, endDate.value])
  57. const timeType = ref(0)
  58. const queryParams = ref({
  59. time_type: timeType.value,
  60. query_start_time: [moment(), moment()][0].format("YYYYMMDD"),
  61. query_end_time: [moment(), moment()][1].format("YYYYMMDD"),
  62. })
  63. const table = ref()
  64. function changeDate(v: Date[]) {
  65. startDate.value = v[0]
  66. endDate.value = v[1]
  67. }
  68. const jump = function (v: any) {
  69. console.log("jump", v)
  70. router.push({
  71. path: "/goLineData/oilFumeConcentration",
  72. query: {
  73. comName: v.company_name,
  74. company_id: v.company_id,
  75. back: 1,
  76. },
  77. })
  78. }
  79. const getTitle = () => {
  80. Rs.post("/sys/overMerchants/selectOverTitle", {
  81. successAlert: false,
  82. data: {
  83. pageIndex: 1,
  84. pageSize: 10,
  85. params: queryParams.value,
  86. },
  87. }).then((res) => {
  88. headData.value.exceedCompanyNum = res.data.exceed_company
  89. headData.value.exceedDeviceNum = res.data.exceed_device_num
  90. headData.value.outletNum = res.data.outlet_num
  91. })
  92. }
  93. function query() {
  94. queryParams.value = {
  95. time_type: timeType.value,
  96. query_start_time: moment(startDate.value).format("YYYYMMDD"),
  97. query_end_time: moment(endDate.value).format("YYYYMMDD"),
  98. }
  99. }
  100. function reset() {
  101. timeType.value = 0
  102. startDate.value = new Date()
  103. endDate.value = new Date()
  104. dateValue.value = [startDate.value, endDate.value]
  105. dateStr.value = `${moment(startDate.value).format("YYYY-MM-DD")}至${moment(endDate.value).format("YYYY-MM-DD")}`
  106. query()
  107. }
  108. function exported() {
  109. const params = {
  110. time_type: timeType.value,
  111. query_start_time: moment(startDate.value).format("YYYYMMDD"),
  112. query_end_time: moment(endDate.value).format("YYYYMMDD"),
  113. }
  114. const keys = Object.keys(params)
  115. keys.forEach((key) => {
  116. if (params[key] == "" && params[key] !== 0) {
  117. delete params[key]
  118. }
  119. })
  120. let str = ""
  121. for (const key in params) {
  122. str += `${key}=${params[key]}&`
  123. }
  124. window.open("/api/sys/overMerchants/exportOverMerchants?" + str)
  125. }
  126. const detail = function (row: any) {
  127. router.push({
  128. path: "/overAnalysis/overTime/over_company",
  129. query: {
  130. back: 1,
  131. type: 0,
  132. time_type: timeType.value,
  133. company_id: row.company_id || "",
  134. query_start_time: moment(startDate.value).format("YYYYMMDD"),
  135. query_end_time: moment(endDate.value).format("YYYYMMDD"),
  136. parentBreadcrumb: "over_company",
  137. },
  138. })
  139. }
  140. onMounted(() => {
  141. getTitle()
  142. })
  143. </script>
  144. <template>
  145. <div class="d-flex">
  146. <div
  147. class="card card-flush bgi-no-repeat bgi-size-contain bgi-position-x-center border-0 h-md-50 me-5"
  148. style="min-width: 250px"
  149. :style="`background: #4c88cf`"
  150. >
  151. <div class="card-header py-5">
  152. <div class="card-title d-flex">
  153. <span class="text-white pt-1 fw-semibold fs-2">
  154. <i class="fas fa-home me-8 fs-1 text-white"></i>
  155. 超标商户数
  156. </span>
  157. <span class="fs-2hx fw-bold text-white ms-5 lh-1 ls-n2">
  158. {{ headData.exceedCompanyNum }}
  159. <span class="fs-6 opacity-75 ms-3">家</span>
  160. </span>
  161. </div>
  162. </div>
  163. </div>
  164. <div
  165. class="card card-flush bgi-no-repeat bgi-size-contain bgi-position-x-center border-0 h-md-50 me-5"
  166. style="min-width: 250px"
  167. :style="`background: #5facd0`"
  168. >
  169. <div class="card-header py-5">
  170. <div class="card-title d-flex">
  171. <span class="text-white pt-1 fw-semibold fs-2">
  172. <i class="fas fa-desktop me-8 fs-1 text-white"></i>
  173. 超标设备数
  174. </span>
  175. <span class="fs-2hx fw-bold text-white ms-5 lh-1 ls-n2">
  176. {{ headData.exceedDeviceNum }}
  177. <span class="fs-6 opacity-75 ms-3">台</span>
  178. </span>
  179. </div>
  180. </div>
  181. </div>
  182. <div
  183. class="card card-flush bgi-no-repeat bgi-size-contain bgi-position-x-center border-0 h-md-50 me-5"
  184. style="min-width: 250px"
  185. :style="`background:#76bfa3`"
  186. >
  187. <div class="card-header py-5">
  188. <div class="card-title d-flex">
  189. <span class="text-white pt-1 fw-semibold fs-2">
  190. <i class="fas fa-smog me-8 fs-1 text-white"></i>
  191. 超标涉及排口数
  192. </span>
  193. <span class="fs-2hx fw-bold text-white ms-5 lh-1 ls-n2">
  194. {{ headData.outletNum }}
  195. <span class="fs-6 opacity-75 ms-3">台</span>
  196. </span>
  197. </div>
  198. </div>
  199. </div>
  200. </div>
  201. <VbDataTable
  202. ref="table"
  203. :header="cols"
  204. url="sys/overMerchants/selectOverMerchants"
  205. method="post"
  206. :query-params="queryParams"
  207. :has-checkbox="false"
  208. >
  209. <template v-slot:table-tool="">
  210. <el-form class="align-items-center" :inline="true">
  211. <DateRangeSelect
  212. v-model:date-value="dateValue"
  213. v-model:select-value="timeType"
  214. :select-class="'mb-0 align-items-center'"
  215. :date-class="'mb-0 align-items-center'"
  216. @change="changeDate"
  217. />
  218. <el-form-item class="mb-0 me-0 align-items-center">
  219. <el-button class="ms-3 mt-0 btn btn-sm btn-primary" @click="query">查询</el-button>
  220. <el-button class="ms-3 mt-0 btn btn-sm btn-light-primary btn-outline" @click="reset">重置</el-button>
  221. <el-button class="ms-3 mt-0 btn btn-sm btn-light-info btn-outline" @click="exported">导出</el-button>
  222. </el-form-item>
  223. </el-form>
  224. </template>
  225. <template #company_name="{ row }">
  226. <span class="text-primary" @click="jump(row)" style="cursor: pointer">{{ row["company_name"] }}</span>
  227. </template>
  228. <template #action="{ row }">
  229. <span class="table-action" @click="detail(row)">查看详情</span>
  230. </template>
  231. </VbDataTable>
  232. </template>