_WarnProcessed.vue 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. <script setup lang="ts">
  2. import { ref, computed, onMounted } from "vue"
  3. import moment from "moment"
  4. import router from "@/router"
  5. import ProcessDetail from "./__WarnProcessDetail.vue"
  6. import Rs from "@/core/services/RequestService"
  7. const props = withDefaults(
  8. defineProps<{
  9. type?: number
  10. columns?: any
  11. }>(),
  12. { type: 0 }
  13. )
  14. const tableUrl = computed(() => {
  15. return props.type == 0
  16. ? "sys/workOrderOrg/getFinishedWorkOrderByOrgAdmin"
  17. : props.type == 0
  18. ? "sys/workOrderOrg/getFinishedWorkOrderByOrgLaw"
  19. : props.type == 2
  20. ? "sys/workOrderCom/getFinishedWorkOrderByCom"
  21. : ""
  22. })
  23. const cols = ref([
  24. {
  25. name: "公司名称",
  26. field: "company_name",
  27. },
  28. {
  29. name: "区域",
  30. field: "org_name",
  31. },
  32. {
  33. name: "报警类型",
  34. field: "warn_type_name",
  35. },
  36. {
  37. name: "创建时间",
  38. field: "work_order_start_time",
  39. },
  40. {
  41. name: "完结时间",
  42. field: "work_order_end_time",
  43. },
  44. {
  45. name: "流程耗时",
  46. field: "work_order_continue_time",
  47. },
  48. {
  49. name: "操作",
  50. width: 150,
  51. field: "action",
  52. },
  53. ])
  54. const size = ref<any>("default")
  55. const dySearchSelectStyle = { width: "180px" }
  56. const dateRange = ref<[Date, Date]>([moment(new Date()).add(-7, "d").toDate(), new Date()])
  57. const companyName = ref("")
  58. const warnType = ref("")
  59. //const orgId = ref("0")
  60. //const monitoringType = ref("")
  61. //const abnormalState = ref("")
  62. const queryParams = ref<any>(
  63. props.type == 0
  64. ? {
  65. query_start_time: moment(dateRange.value[0]).format("YYYYMMDD"),
  66. query_end_time: moment(dateRange.value[1]).format("YYYYMMDD"),
  67. }
  68. : {}
  69. )
  70. const table = ref()
  71. // const getStayTimes = (item: any) => {
  72. // if (!!item.warn_endtime && !!item.work_order_start_time) {
  73. // const stayTime = moment(item.work_order_end_time, "YYYYMMDDHHmmss").diff(
  74. // moment(item.warn_starttime, "YYYYMMDDHHmmss"),
  75. // "milliseconds"
  76. // )
  77. // if (stayTime !== 0) {
  78. // const hours = Math.floor((stayTime % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60))
  79. // const minutes = Math.floor((stayTime % (1000 * 60 * 60)) / (1000 * 60))
  80. // const seconds = Math.floor((stayTime % (1000 * 60)) / 1000)
  81. // return `${hours < 10 ? "0" + hours : hours}:${minutes < 10 ? "0" + minutes : minutes}:${
  82. // seconds < 10 ? "0" + seconds : seconds
  83. // }`
  84. // }
  85. // }
  86. // return ""
  87. // }
  88. const jump = function (v: any) {
  89. console.log("jump", v)
  90. router.push({
  91. path: "/goLineData/oilFumeConcentration",
  92. query: {
  93. back: 1,
  94. comName: v.company_name,
  95. company_id: v.company_id,
  96. },
  97. })
  98. }
  99. function query() {
  100. const params: any = {
  101. //monitoring_type: monitoringType.value,
  102. //org_id: orgId.value,
  103. //abnormal_state: abnormalState.value,
  104. company_name: companyName.value,
  105. warn_type: warnType.value,
  106. }
  107. if (props.type == 0) {
  108. params.query_start_time = moment(dateRange.value[0]).format("YYYYMMDD")
  109. params.query_end_time = moment(dateRange.value[1]).format("YYYYMMDD")
  110. }
  111. const keys = Object.keys(params)
  112. keys.forEach((key) => {
  113. if (params[key] == "" && params[key] !== 0) {
  114. delete params[key]
  115. }
  116. })
  117. queryParams.value = params
  118. }
  119. function reset() {
  120. //orgId.value = "0"
  121. //monitoringType.value = ""
  122. //abnormalState.value = ""
  123. companyName.value = ""
  124. warnType.value = ""
  125. dateRange.value = [moment(new Date()).add(-7, "d").toDate(), new Date()]
  126. query()
  127. }
  128. const modal = ref()
  129. const warnDetails = ref<any>({})
  130. function detail(row: any) {
  131. const url =
  132. props.type == 0
  133. ? "sys/workOrderOrg/getWorkOrderDetailByOrg"
  134. : props.type == 1
  135. ? "sys/workOrderOrg/getWorkOrderDetailByOrgLaw"
  136. : props.type == 2
  137. ? "sys/workOrderCom/getWorkOrderDetailByCom"
  138. : ""
  139. Rs.post(url, {
  140. data: {
  141. work_order_id: row.work_order_id,
  142. },
  143. }).then((res) => {
  144. console.log("WARN", res.data)
  145. res.data.processInfoList.forEach((item: any) => {
  146. if (item.picture_url != null) {
  147. const picList = item.picture_url.split(",")
  148. const picReall: Array<any> = [] //去除空的
  149. picList.forEach((pic: string, index: number) => {
  150. if (pic != "") {
  151. pic = pic.substring(pic.indexOf("/api/file/"))
  152. picReall.push({
  153. uid: index,
  154. name: "image.png",
  155. status: "done",
  156. url: pic,
  157. })
  158. }
  159. })
  160. item.fileList = picReall
  161. } else {
  162. item.fileList = []
  163. }
  164. })
  165. warnDetails.value = res.data
  166. modal.value.show()
  167. })
  168. }
  169. function init() {
  170. if (props.type != 0 && props.type != 1) {
  171. cols.value = props.columns
  172. }
  173. }
  174. onMounted(init)
  175. </script>
  176. <template>
  177. <VbDataTable
  178. ref="table"
  179. :header="cols"
  180. :url="tableUrl"
  181. method="post"
  182. :query-params="queryParams"
  183. :has-checkbox="false"
  184. >
  185. <template v-slot:table-tool>
  186. <el-form class="align-items-center" :inline="true">
  187. <el-form-item class="mb-0 me-5 align-items-center" label="商户名称" v-if="props.type == 0 || props.type == 1">
  188. <el-input
  189. class=""
  190. :style="dySearchSelectStyle"
  191. v-model="companyName"
  192. placeholder="请输入商户名称"
  193. :size="size"
  194. />
  195. </el-form-item>
  196. <el-form-item v-if="props.type == 0" class="mb-0 me-5 align-items-center" label="日期">
  197. <el-date-picker
  198. v-model="dateRange"
  199. type="daterange"
  200. range-separator="~"
  201. start-placeholder="开始时间"
  202. end-placeholder="结束时间"
  203. :size="size"
  204. />
  205. </el-form-item>
  206. <el-form-item class="mb-0 me-5 align-items-center" label="告警类型">
  207. <DySelect
  208. v-model="warnType"
  209. :formatRemoteData="(v:any)=>{return v?.list}"
  210. :url="'sys/dict/getExceedWarnType?type=1'"
  211. :style="dySearchSelectStyle"
  212. placeholder="请选择告警类型"
  213. ></DySelect>
  214. </el-form-item>
  215. <el-form-item class="mb-0 me-0 align-items-center">
  216. <el-button class="ms-3 mt-0 btn btn-sm btn-primary" @click="query">查询</el-button>
  217. <el-button class="ms-3 mt-0 btn btn-sm btn-light-primary btn-outline" @click="reset">重置</el-button>
  218. </el-form-item>
  219. </el-form>
  220. </template>
  221. <template #company_name="{ row }">
  222. <span class="text-primary" @click="jump(row)" style="cursor: pointer">{{ row["company_name"] }}</span>
  223. </template>
  224. <template #action="{ row }">
  225. <span class="table-action" @click="detail(row)">查看详情</span>
  226. </template>
  227. <template #work_order_start_time="{ row }">
  228. {{ moment(row.work_order_start_time, "YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") }}
  229. </template>
  230. <template #work_order_end_time="{ row }">
  231. {{ moment(row.work_order_end_time, "YYYYMMDDHHmmss").format("YYYY-MM-DD HH:mm:ss") }}
  232. </template>
  233. <!-- <template #work_order_continue_time="{ row }">
  234. {{ getStayTimes(row) }}
  235. </template> -->
  236. </VbDataTable>
  237. <VbModal v-model:modal="modal" title="详情">
  238. <template #body>
  239. <ProcessDetail :data="warnDetails"></ProcessDetail>
  240. </template>
  241. </VbModal>
  242. </template>