overTimeDetail_Company.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <script setup lang="ts">
  2. import { ref, onMounted } from "vue"
  3. import type { Header } from "@/components/Table/table-partials/models"
  4. import moment from "moment"
  5. import { useRouter, useRoute } from "vue-router"
  6. const route = useRoute()
  7. const router = useRouter()
  8. const table = ref()
  9. const columns = ref<Array<Header>>([
  10. {
  11. name: "商户名称",
  12. field: "company_name",
  13. },
  14. {
  15. name: "监控仪",
  16. field: "device_name",
  17. },
  18. {
  19. name: "报警类型",
  20. field: "warn_type_name",
  21. },
  22. {
  23. name: "发生时间",
  24. field: "warn_starttime",
  25. },
  26. {
  27. name: "恢复时间",
  28. field: "warn_endtime",
  29. },
  30. {
  31. name: "持续时间",
  32. field: "stay_time",
  33. },
  34. {
  35. name: "操作",
  36. width: 150,
  37. align: "center",
  38. field: "action",
  39. },
  40. ])
  41. const size = ref<any>("default")
  42. const dySearchSelectStyle = { width: "150px" }
  43. const companyId = ref(route.query.company_id as string)
  44. const warnType = ref("")
  45. const timeType = ref(0)
  46. const queryParams = ref<any>({
  47. company_id: companyId.value,
  48. warn_type: warnType.value,
  49. time_type: timeType.value,
  50. query_end_time: moment().format("YYYYMMDD"),
  51. query_start_time: moment().format("YYYYMMDD"),
  52. })
  53. const startDate = ref(new Date())
  54. const endDate = ref(new Date())
  55. const dateValue = ref<[Date, Date]>([startDate.value, endDate.value])
  56. //const selectValue = ref(0)
  57. function changeDate(v: Date[]) {
  58. startDate.value = v[0]
  59. endDate.value = v[1]
  60. }
  61. const jump = function (v: any) {
  62. console.log("jump", v)
  63. router.push({
  64. path: "/goLineData/oilFumeConcentration",
  65. query: {
  66. comName: v.company_name,
  67. company_id: v.company_id,
  68. backNeed: 1,
  69. },
  70. })
  71. }
  72. const getStayTimes = (item: any) => {
  73. if (!!item.warn_endtime && !!item.warn_starttime) {
  74. const stayTime = moment(item.warn_endtime, "YYYYMMDDHHmmss").diff(
  75. moment(item.warn_starttime, "YYYYMMDDHHmmss"),
  76. "milliseconds"
  77. )
  78. if (stayTime !== 0) {
  79. const hours = Math.floor((stayTime % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60))
  80. const minutes = Math.floor((stayTime % (1000 * 60 * 60)) / (1000 * 60))
  81. const seconds = Math.floor((stayTime % (1000 * 60)) / 1000)
  82. return `${hours < 10 ? "0" + hours : hours}:${minutes < 10 ? "0" + minutes : minutes}:${
  83. seconds < 10 ? "0" + seconds : seconds
  84. }`
  85. }
  86. }
  87. return ""
  88. }
  89. function init() {
  90. timeType.value = Number(route.query.time_type) ?? 0
  91. startDate.value = moment(route.query.query_start_time as string, "YYYYMMDD").toDate()
  92. endDate.value = moment(route.query.query_end_time as string, "YYYYMMDD").toDate()
  93. query()
  94. }
  95. function query() {
  96. const params = {
  97. company_id: companyId.value,
  98. warn_type: warnType.value,
  99. time_type: timeType.value,
  100. query_start_time: moment(startDate.value).format("YYYYMMDD"),
  101. query_end_time: moment(endDate.value).format("YYYYMMDD"),
  102. }
  103. const keys = Object.keys(params)
  104. keys.forEach((key) => {
  105. if (params[key] == "" && params[key] !== 0) {
  106. delete params[key]
  107. }
  108. })
  109. queryParams.value = params
  110. }
  111. function reset() {
  112. timeType.value = 0
  113. warnType.value = ""
  114. startDate.value = new Date()
  115. endDate.value = new Date()
  116. dateValue.value = [startDate.value, endDate.value]
  117. init()
  118. }
  119. function exported() {
  120. const params = {
  121. company_id: companyId.value,
  122. warn_type: warnType.value,
  123. time_type: timeType.value,
  124. query_start_time: moment(startDate.value).format("YYYYMMDD"),
  125. query_end_time: moment(endDate.value).format("YYYYMMDD"),
  126. }
  127. const keys = Object.keys(params)
  128. keys.forEach((key) => {
  129. if (params[key] == "" && params[key] !== 0) {
  130. delete params[key]
  131. }
  132. })
  133. let str = ""
  134. for (const key in params) {
  135. str += `${key}=${params[key]}&`
  136. }
  137. window.open("/api/sys/overStandardAnalysis/exportWarnTable?" + str)
  138. }
  139. function detail(row: any) {
  140. const path =
  141. row.warn_type == "000100003" || row.warn_type == "000100005" || row.warn_type == "000100007"
  142. ? "/overAnalysis/overTime/concentrationWarn"
  143. : row.warn_type == "000100006"
  144. ? "/overAnalysis/overTime/offlineWarn"
  145. : "/overAnalysis/overTime/overdueWarn"
  146. router.push({
  147. path: path,
  148. query: {
  149. id: row.id,
  150. type: row.warn_type,
  151. needback: 1,
  152. },
  153. })
  154. }
  155. onMounted(init)
  156. </script>
  157. <template>
  158. <VbDataTable
  159. ref="table"
  160. :header="columns"
  161. url="sys/overStandardAnalysis/warnTable"
  162. method="post"
  163. :query-params="queryParams"
  164. :has-checkbox="false"
  165. >
  166. <template v-slot:table-tool="">
  167. <el-form class="align-items-center" :inline="true">
  168. <el-form-item class="mb-0 me-5 align-items-center" label="类型">
  169. <DySelect
  170. v-model="warnType"
  171. :formatRemoteData="(v:any)=>{return v?.list}"
  172. :url="'sys/dict/getExceedWarnType'"
  173. :style="`width:180px`"
  174. placeholder="请选择报警类型"
  175. ></DySelect>
  176. </el-form-item>
  177. <DateRangeSelect
  178. v-model:date-value="dateValue"
  179. v-model:select-value="timeType"
  180. :select-class="'mb-0 align-items-center'"
  181. :date-class="'mb-0 mt-3 align-items-center'"
  182. :style="dySearchSelectStyle"
  183. :size="size"
  184. @change="changeDate"
  185. />
  186. <el-form-item class="mb-0 me-0 align-items-center" :class="timeType == 4 ? `mt-3` : ''">
  187. <el-button class="ms-3 mt-0 btn btn-sm btn-primary" @click="query">查询</el-button>
  188. <el-button class="ms-3 mt-0 btn btn-sm btn-light-primary btn-outline" @click="reset">重置</el-button>
  189. <el-button class="ms-3 mt-0 btn btn-sm btn-light-info btn-outline" @click="exported">导出</el-button>
  190. </el-form-item>
  191. </el-form>
  192. </template>
  193. <template #company_name="{ row }">
  194. <span class="text-primary" @click="jump(row)" style="cursor: pointer">{{ row["company_name"] }}</span>
  195. </template>
  196. <template #warn_starttime="{ row }">
  197. {{ moment(row.warn_starttime, "YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") }}
  198. </template>
  199. <template #warn_endtime="{ row }">
  200. {{ moment(row.warn_endtime, "YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") }}
  201. </template>
  202. <template #stay_time="{ row }">{{ getStayTimes(row) }}</template>
  203. <template #action="{ row }">
  204. <div class="text-danger text-center">
  205. <span class="table-action" @click="detail(row)">查看详情</span>
  206. </div>
  207. </template>
  208. </VbDataTable>
  209. </template>