index.vue 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. <template>
  2. <div class="app-container">
  3. <div class="main-right-box">
  4. <div class="main-search-box">
  5. <el-form
  6. v-show="showSearch"
  7. ref="queryForm"
  8. :inline="true"
  9. :model="queryParams"
  10. size="small"
  11. >
  12. <el-form-item label="机构名称">
  13. <org-tree
  14. v-model="queryParams.orgId"
  15. @defaultKey="getDefaultKey"
  16. @checkChange="changeCheckBox"
  17. @click="handleNodeClick"
  18. ref="orgTree"
  19. ></org-tree>
  20. </el-form-item>
  21. <!-- <el-form-item label="监控主机" prop="hostName">
  22. <el-input
  23. v-model="queryParams.hostName"
  24. clearable
  25. placeholder="请输入监控主机名称"
  26. />
  27. </el-form-item> -->
  28. <el-form-item label="通道名称" prop="channelName">
  29. <el-input
  30. v-model="queryParams.channelName"
  31. clearable
  32. placeholder="请输入通道名称"
  33. />
  34. </el-form-item>
  35. <el-form-item label="录像丢失状态" prop="integrityState">
  36. <el-select
  37. v-model="queryParams.integrityState"
  38. clearable
  39. placeholder="请选择状态"
  40. >
  41. <el-option
  42. v-for="dict in dict.type.video_integrity_state"
  43. :key="dict.value"
  44. :label="dict.label"
  45. :value="dict.value"
  46. />
  47. </el-select>
  48. </el-form-item>
  49. <el-form-item label="录像存储状态" prop="daysState">
  50. <el-select
  51. v-model="queryParams.daysState"
  52. clearable
  53. placeholder="请选择状态"
  54. >
  55. <el-option
  56. v-for="dict in dict.type.video_days_state"
  57. :key="dict.value"
  58. :label="dict.label"
  59. :value="dict.value"
  60. />
  61. </el-select>
  62. </el-form-item>
  63. <el-form-item label="视频诊断状态" prop="diagnosisState">
  64. <el-select
  65. v-model="queryParams.diagnosisState"
  66. clearable
  67. placeholder="请选择状态"
  68. >
  69. <el-option
  70. v-for="dict in dict.type.video_diagnosis_state"
  71. :key="dict.value"
  72. :label="dict.label"
  73. :value="dict.value"
  74. />
  75. </el-select>
  76. </el-form-item>
  77. </el-form>
  78. <el-row :gutter="10">
  79. <el-col :span="1.5">
  80. <el-button
  81. icon="el-icon-search"
  82. size="mini"
  83. type="primary"
  84. @click="handleQuery"
  85. >搜索</el-button
  86. >
  87. </el-col>
  88. <el-col :span="1.5">
  89. <el-button
  90. icon="el-icon-refresh"
  91. size="mini"
  92. type="primary"
  93. @click="resetQuery"
  94. >重置</el-button
  95. >
  96. </el-col>
  97. <!-- <el-col :span="1.5">
  98. <el-button
  99. type="primary"
  100. icon="el-icon-plus"
  101. size="mini"
  102. @click="handleAdd"
  103. v-hasPermi="['core:letter:add']"
  104. >录入介绍信</el-button>
  105. </el-col> -->
  106. <right-toolbar
  107. :showSearch.sync="showSearch"
  108. @queryTable="getList"
  109. ></right-toolbar>
  110. </el-row>
  111. </div>
  112. <el-table
  113. v-loading="loading"
  114. :data="dataList"
  115. border
  116. height="600"
  117. size="small"
  118. >
  119. <el-table-column label="序号" type="index" align="center" width="70">
  120. <template slot-scope="scope">
  121. {{
  122. (queryParams.pageNum - 1) * queryParams.pageSize +
  123. scope.$index +
  124. 1
  125. }}
  126. </template>
  127. </el-table-column>
  128. <el-table-column
  129. align="center"
  130. label="地区"
  131. prop="affiliatedArea"
  132. show-overflow-tooltip
  133. min-width="80"
  134. />
  135. <el-table-column
  136. align="center"
  137. label="行社名称"
  138. prop="affiliatedBank"
  139. show-overflow-tooltip
  140. min-width="120"
  141. />
  142. <el-table-column
  143. :show-overflow-tooltip="true"
  144. align="center"
  145. label="组织机构"
  146. prop="orgName"
  147. min-width="160"
  148. ></el-table-column>
  149. <!-- <el-table-column :show-overflow-tooltip="true" align="center" label="设备名称" prop="reasons"/>-->
  150. <el-table-column
  151. :show-overflow-tooltip="true"
  152. align="center"
  153. label="主机名称"
  154. prop="hostName"
  155. ></el-table-column>
  156. <el-table-column
  157. :show-overflow-tooltip="true"
  158. align="center"
  159. label="通道名称"
  160. prop="channelName"
  161. min-width="200"
  162. ></el-table-column>
  163. <!-- <el-table-column
  164. align="center"
  165. label="IP地址"
  166. prop="channelIp"
  167. ></el-table-column> -->
  168. <el-table-column
  169. align="center"
  170. label="录像丢失时长"
  171. prop="loseDuration"
  172. width="120"
  173. >
  174. <template slot-scope="r">
  175. {{
  176. lostDurationText( r.row.loseDuration)
  177. }}
  178. </template>
  179. </el-table-column>
  180. <!-- <el-table-column
  181. align="center"
  182. label="实际/计划存储(天)"
  183. prop="planDays"
  184. width="180"
  185. >
  186. <template slot-scope="r">
  187. {{
  188. r.row.planDays == null
  189. ? "未知"
  190. : `${r.row.realDays}/${r.row.planDays}`
  191. }}
  192. </template>
  193. </el-table-column>-->
  194. <!-- <el-table-column
  195. align="center"
  196. label="无视频信号"
  197. prop="signalLost"
  198. width="120"
  199. >
  200. <template slot-scope="r">
  201. {{
  202. getLabel(
  203. dict.type.video_diagnosis_state,
  204. r.row.signalLost,
  205. "未知"
  206. )
  207. }}
  208. </template>
  209. </el-table-column>
  210. <el-table-column
  211. align="center"
  212. label="视频遮挡"
  213. prop="occlude"
  214. width="120"
  215. ><template slot-scope="r">
  216. {{
  217. getLabel(dict.type.video_diagnosis_state, r.row.occlude, "未知")
  218. }}
  219. </template></el-table-column
  220. > -->
  221. <el-table-column
  222. align="center"
  223. label="视频质量"
  224. prop="quality"
  225. width="120"
  226. ><template slot-scope="r">
  227. {{
  228. getLabel(dict.type.video_diagnosis_state, r.row.quality, "未知")
  229. }}
  230. </template></el-table-column
  231. >
  232. <el-table-column label="操作" align="center" width="120">
  233. <template slot-scope="r">
  234. <el-button
  235. type="text"
  236. @click="openDetail(r.row.hostCode, r.row.channelCode)"
  237. >详情</el-button
  238. >
  239. </template>
  240. </el-table-column>
  241. </el-table>
  242. <pagination
  243. v-show="total > 0"
  244. :limit.sync="queryParams.pageSize"
  245. :page.sync="queryParams.pageNum"
  246. :total="total"
  247. @pagination="getList"
  248. />
  249. </div>
  250. <!--详情页面-->
  251. <detail
  252. ref="DialogDetail"
  253. @success="refresh(true)"
  254. :videoDaysState="dict.type.video_days_state"
  255. :videoDiagnosisState="dict.type.video_diagnosis_state"
  256. :videoIntegrityState="dict.type.video_integrity_state"
  257. ></detail>
  258. </div>
  259. </template>
  260. <script>
  261. import OrgTree from "@/components/orgTree/orgQuerySelector.vue";
  262. import dayjs from "dayjs";
  263. import detail from "./detail.vue";
  264. import { list } from "@/api/iot/videoDiagnosis.js";
  265. import { getLabel } from "@/views/commonOption.js";
  266. export default {
  267. components: { detail, OrgTree },
  268. dicts: ["video_integrity_state", "video_days_state", "video_diagnosis_state"],
  269. data() {
  270. return {
  271. loading: false,
  272. // 显示搜索条件
  273. showSearch: true,
  274. // 总条数
  275. total: 0,
  276. // 查询参数
  277. queryParams: {
  278. pageNum: 1,
  279. pageSize: 10,
  280. hostName: null,
  281. channelName: null,
  282. integrityState: null,
  283. daysState: null,
  284. diagnosisState: null,
  285. orgId: null,
  286. checkSub: true,
  287. },
  288. dataList: [],
  289. };
  290. },
  291. mounted() {},
  292. methods: {
  293. dayjs,
  294. getLabel,
  295. openDetail(hostCode, channelCode) {
  296. this.$refs.DialogDetail.show(hostCode, channelCode);
  297. },
  298. getDefaultKey(key) {
  299. this.queryParams.orgId = key;
  300. this.getList();
  301. },
  302. // 节点单击事件
  303. handleNodeClick(data) {
  304. this.queryParams.orgId = data.id;
  305. this.handleQuery();
  306. },
  307. /** 下穿状态改变*/
  308. changeCheckBox() {
  309. this.queryParams.checkSub = !this.queryParams.checkSub;
  310. this.handleQuery();
  311. },
  312. /** 查询介绍信列表 */
  313. getList() {
  314. this.loading = true;
  315. list(this.queryParams).then((response) => {
  316. this.dataList = response.rows;
  317. this.total = response.total;
  318. this.loading = false;
  319. });
  320. },
  321. /** 搜索按钮操作 */
  322. handleQuery() {
  323. this.queryParams.pageNum = 1;
  324. this.getList();
  325. },
  326. /** 重置按钮操作 */
  327. resetQuery() {
  328. this.resetForm("queryForm");
  329. this.handleQuery();
  330. },
  331. lostDurationText(duration) {
  332. if (!duration) {
  333. return "未知";
  334. }
  335. if (duration=='0') {
  336. return "未丢失";
  337. }
  338. let str = "";
  339. let hour = Math.floor(duration / 60);
  340. if (hour > 0) {
  341. str += `${hour}小时`;
  342. }
  343. let minute = duration % 60;
  344. if (minute > 0) {
  345. str += `${minute}分`;
  346. }
  347. return str;
  348. },
  349. },
  350. };
  351. </script>