index.vue 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  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="646"
  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="200"
  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. ></el-table-column>
  162. <!-- <el-table-column
  163. align="center"
  164. label="IP地址"
  165. prop="channelIp"
  166. ></el-table-column> -->
  167. <el-table-column
  168. align="center"
  169. label="录像丢失时长"
  170. prop="loseDuration"
  171. width="120"
  172. >
  173. <template slot-scope="r">
  174. {{
  175. r.row.loseDuration == null
  176. ? "未知"
  177. : r.row.loseDuration
  178. ? r.row.loseDuration + "分钟"
  179. : "未丢失"
  180. }}
  181. </template>
  182. </el-table-column>
  183. <el-table-column
  184. align="center"
  185. label="实际/计划存储(天)"
  186. prop="planDays"
  187. width="180"
  188. >
  189. <template slot-scope="r">
  190. {{
  191. r.row.planDays == null
  192. ? "未知"
  193. : `${r.row.realDays}/${r.row.planDays}`
  194. }}
  195. </template>
  196. </el-table-column>
  197. <!-- <el-table-column
  198. align="center"
  199. label="无视频信号"
  200. prop="signalLost"
  201. width="120"
  202. >
  203. <template slot-scope="r">
  204. {{
  205. getLabel(
  206. dict.type.video_diagnosis_state,
  207. r.row.signalLost,
  208. "未知"
  209. )
  210. }}
  211. </template>
  212. </el-table-column>
  213. <el-table-column
  214. align="center"
  215. label="视频遮挡"
  216. prop="occlude"
  217. width="120"
  218. ><template slot-scope="r">
  219. {{
  220. getLabel(dict.type.video_diagnosis_state, r.row.occlude, "未知")
  221. }}
  222. </template></el-table-column
  223. > -->
  224. <el-table-column
  225. align="center"
  226. label="视频质量"
  227. prop="quality"
  228. width="120"
  229. ><template slot-scope="r">
  230. {{
  231. getLabel(dict.type.video_diagnosis_state, r.row.quality, "未知")
  232. }}
  233. </template></el-table-column
  234. >
  235. <el-table-column label="操作" align="center" width="120">
  236. <template slot-scope="r">
  237. <el-button
  238. type="text"
  239. @click="openDetail(r.row.hostCode, r.row.channelCode)"
  240. >详情</el-button
  241. >
  242. </template>
  243. </el-table-column>
  244. </el-table>
  245. <pagination
  246. v-show="total > 0"
  247. :limit.sync="queryParams.pageSize"
  248. :page.sync="queryParams.pageNum"
  249. :total="total"
  250. @pagination="getList"
  251. />
  252. </div>
  253. <!--详情页面-->
  254. <detail
  255. ref="DialogDetail"
  256. @success="refresh(true)"
  257. :videoDaysState="dict.type.video_integrity_state"
  258. :videoDiagnosisState="dict.type.video_diagnosis_state"
  259. :videoIntegrityState="dict.type.video_diagnosis_state"
  260. ></detail>
  261. </div>
  262. </template>
  263. <script>
  264. import OrgTree from "@/components/orgTree/orgQuerySelector.vue";
  265. import dayjs from "dayjs";
  266. import detail from "./detail.vue";
  267. import { list } from "@/api/iot/videoDiagnosis.js";
  268. import { getLabel } from "@/views/commonOption.js";
  269. export default {
  270. components: { detail, OrgTree },
  271. dicts: ["video_integrity_state", "video_days_state", "video_diagnosis_state"],
  272. data() {
  273. return {
  274. loading: false,
  275. // 显示搜索条件
  276. showSearch: true,
  277. // 总条数
  278. total: 0,
  279. // 查询参数
  280. queryParams: {
  281. pageNum: 1,
  282. pageSize: 10,
  283. hostName: null,
  284. channelName: null,
  285. integrityState: null,
  286. daysState: null,
  287. diagnosisState: null,
  288. orgId: null,
  289. checkSub: true,
  290. },
  291. dataList: [],
  292. };
  293. },
  294. mounted() {},
  295. methods: {
  296. dayjs,
  297. getLabel,
  298. openDetail(hostCode, channelCode) {
  299. this.$refs.DialogDetail.show(hostCode, channelCode);
  300. },
  301. getDefaultKey(key) {
  302. this.queryParams.orgId = key;
  303. this.getList();
  304. },
  305. // 节点单击事件
  306. handleNodeClick(data) {
  307. this.queryParams.orgId = data.id;
  308. this.handleQuery();
  309. },
  310. /** 下穿状态改变*/
  311. changeCheckBox() {
  312. this.queryParams.checkSub = !this.queryParams.checkSub;
  313. this.handleQuery();
  314. },
  315. /** 查询介绍信列表 */
  316. getList() {
  317. this.loading = true;
  318. list(this.queryParams).then((response) => {
  319. this.dataList = response.rows;
  320. this.total = response.total;
  321. this.loading = false;
  322. });
  323. },
  324. /** 搜索按钮操作 */
  325. handleQuery() {
  326. this.queryParams.pageNum = 1;
  327. this.getList();
  328. },
  329. /** 重置按钮操作 */
  330. resetQuery() {
  331. this.resetForm("queryForm");
  332. this.handleQuery();
  333. },
  334. },
  335. };
  336. </script>