deviceConfig.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411
  1. <template>
  2. <div class="container">
  3. <div class="left-pane">
  4. <el-input placeholder="告警类别" v-model="filterText" class="left-input">
  5. <template slot="append">
  6. <i
  7. class="el-icon-search"
  8. style="cursor: pointer"
  9. @click="searchTypeEvent"
  10. ></i>
  11. </template>
  12. </el-input>
  13. <el-tree
  14. ref="tree"
  15. :data="data"
  16. :props="defaultProps"
  17. node-key="id"
  18. default-expand-all
  19. :filter-node-method="filterNode"
  20. @node-click="handleNodeClick"
  21. >
  22. </el-tree>
  23. <el-button
  24. @click="newDeviceType()"
  25. style="color: #fff; background: #3da0d6"
  26. ><i class="el-icon-s-order"></i>新建设备类别</el-button
  27. >
  28. </div>
  29. <div class="right-pane">
  30. <div class="right-pane-inner">
  31. <div class="top">
  32. <el-button @click="addDevice()" class="add-btn">添加设备</el-button>
  33. <el-button @click="dataImport()" class="import-btn"
  34. >批量导入</el-button
  35. >
  36. <el-button @click="batchDelete" class="delete-btn"
  37. >批量删除</el-button
  38. >
  39. <el-input
  40. class="search-input"
  41. v-model="searchInput"
  42. placeholder="请输入"
  43. suffix-icon="el-icon-search"
  44. ></el-input>
  45. </div>
  46. <div class="center">
  47. <el-table
  48. ref="multipleTable"
  49. :data="tableData"
  50. tooltip-effect="dark"
  51. :header-cell-style="{ textAlign: 'center' }"
  52. :cell-style="{ textAlign: 'center' }"
  53. style="width: 100%"
  54. height="500"
  55. @selection-change="handleSelectionChange"
  56. >
  57. <el-table-column type="selection" width="50"> </el-table-column>
  58. <el-table-column type="index" width="80" label="序号">
  59. </el-table-column>
  60. <el-table-column prop="deviceName" label="设备名称">
  61. </el-table-column>
  62. <el-table-column prop="deviceID" label="设备ID"> </el-table-column>
  63. <el-table-column prop="deviceUse" label="设备用途">
  64. </el-table-column>
  65. <el-table-column prop="devicePosition" label="设备位置">
  66. </el-table-column>
  67. <el-table-column prop="deviceLife" label="设备使用年限">
  68. </el-table-column>
  69. <el-table-column prop="company" label="设备单位"> </el-table-column>
  70. <el-table-column prop="deviceRespon" label="设备责任人">
  71. </el-table-column>
  72. <el-table-column prop="operation" label="操作">
  73. <template slot-scope="scope">
  74. <el-button
  75. v-show="scope.row.deviceID == null ? false : true"
  76. size="mini"
  77. type="text"
  78. @click="deviceEdit()"
  79. >编辑</el-button
  80. >
  81. <el-button
  82. v-show="scope.row.deviceID == null ? false : true"
  83. size="mini"
  84. type="text"
  85. >删除</el-button
  86. >
  87. </template>
  88. </el-table-column>
  89. </el-table>
  90. </div>
  91. <div class="bottom">
  92. <page :paginationData="paginationData"></page>
  93. </div>
  94. </div>
  95. </div>
  96. <!--弹窗-->
  97. <NewDeviceType ref="newDevice"></NewDeviceType>
  98. <addDevice ref="addDevice"></addDevice>
  99. <dataImport ref="dataImport"></dataImport>
  100. <deviceEdit ref="deviceEdit"></deviceEdit>
  101. </div>
  102. </template>
  103. <script>
  104. import checkbox from "@/components/Checkbox/index";
  105. import page from "@/components/pagination/index";
  106. import NewDeviceType from "./messageDailog/newDeviceType";
  107. import dataImport from "./messageDailog/dataImport";
  108. import addDevice from "./messageDailog/addDevice";
  109. import deviceEdit from "./messageDailog/deviceEdit";
  110. export default {
  111. components: {
  112. checkbox,
  113. page,
  114. NewDeviceType,
  115. dataImport,
  116. addDevice,
  117. deviceEdit,
  118. },
  119. data() {
  120. return {
  121. searchInput: "",
  122. filterText: "",
  123. filter: "",
  124. form: {
  125. typeName: "",
  126. },
  127. data: [
  128. {
  129. label: "楼层",
  130. children: [
  131. {
  132. label: "A设备",
  133. },
  134. {
  135. label: "B设备",
  136. },
  137. ],
  138. },
  139. ],
  140. defaultProps: {
  141. children: "children",
  142. label: "label",
  143. },
  144. tableData: [
  145. {
  146. deviceName: "摄像头",
  147. deviceID: "SXT-001",
  148. deviceUse: "监控摄像头",
  149. devicePosition: "1层101",
  150. deviceLife: "3年6个月",
  151. company: "北京电信规划院",
  152. deviceRespon: "张三",
  153. },
  154. {
  155. deviceName: "摄像头",
  156. deviceID: "SXT-001",
  157. deviceUse: "监控摄像头",
  158. devicePosition: "1层101",
  159. deviceLife: "3年6个月",
  160. company: "北京电信规划院",
  161. deviceRespon: "张三",
  162. },
  163. {
  164. deviceName: "摄像头",
  165. deviceID: "SXT-001",
  166. deviceUse: "监控摄像头",
  167. devicePosition: "1层101",
  168. deviceLife: "3年6个月",
  169. company: "北京电信规划院",
  170. deviceRespon: "张三",
  171. },
  172. ],
  173. multipleSelection: [],
  174. show: true,
  175. paginationData: {
  176. pageSize: 10,
  177. pagerCount: 5,
  178. currentPage: 1,
  179. pageSizes: [5, 10, 20, 30],
  180. total: 30,
  181. currentChange: (val) => {
  182. this.getTableData(val);
  183. },
  184. handleSizeChange: (val) => {
  185. this.handleSizeChange(val);
  186. },
  187. },
  188. };
  189. },
  190. watch: {
  191. filterText(val) {
  192. this.$refs.tree.filter(val);
  193. },
  194. },
  195. methods: {
  196. searchTypeEvent() {},
  197. getTableData(val) {},
  198. handleSizeChange(val) {},
  199. filterNode(value, data) {
  200. if (!value) return true;
  201. return data.label.indexOf(value) !== -1;
  202. },
  203. newDeviceType() {
  204. this.$refs.newDevice.dialogVisible = true;
  205. },
  206. dataImport() {
  207. this.$refs.dataImport.dialogVisible = true;
  208. },
  209. addDevice() {
  210. this.$refs.addDevice.dialogVisible = true;
  211. },
  212. deviceEdit() {
  213. this.$refs.deviceEdit.dialogVisible = true;
  214. },
  215. handleSelectionChange() {
  216. //
  217. },
  218. handleNodeClick() {
  219. //
  220. },
  221. cancelChecked() {
  222. //
  223. },
  224. batchDelete() {},
  225. },
  226. };
  227. </script>
  228. <style lang="less" scoped>
  229. .container {
  230. width: 100%;
  231. height: 100%;
  232. background-color: rgba(255, 255, 255, 1);
  233. color: rgba(16, 16, 16, 1);
  234. font-size: 14px;
  235. // text-align: center;
  236. box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.15);
  237. display: flex;
  238. align-items: center;
  239. .left-pane {
  240. width: 300px;
  241. padding: 15px;
  242. height: 90%;
  243. position: relative;
  244. .left-input {
  245. height: 30px;
  246. width: 98%;
  247. /deep/.el-input-group__append {
  248. cursor: pointer;
  249. }
  250. }
  251. .el-tree {
  252. margin-top: 10px;
  253. height: calc(98% - 30px);
  254. background-color: rgb(247, 245, 243);
  255. }
  256. .el-button {
  257. position: absolute;
  258. left: 25px;
  259. bottom: 40px;
  260. width: 250px;
  261. background-color: rgb(131, 208, 243);
  262. text-align: center;
  263. font-size: 16px;
  264. }
  265. }
  266. .right-pane {
  267. width: calc(100% - 300px);
  268. height: 100%;
  269. display: flex;
  270. align-items: center;
  271. justify-content: center;
  272. &-inner {
  273. width: calc(100% - 15px);
  274. height: calc(100% - 15px);
  275. .top {
  276. height: 80px;
  277. width: 100%;
  278. position: relative;
  279. .add-btn,
  280. .import-btn,
  281. .delete-btn {
  282. color: #fff;
  283. }
  284. .add-btn {
  285. position: absolute;
  286. background: #2ea8e6;
  287. top: 20px;
  288. left: 20px;
  289. }
  290. .import-btn {
  291. position: absolute;
  292. background: #2ea8e6;
  293. top: 20px;
  294. left: 130px;
  295. }
  296. .delete-btn {
  297. position: absolute;
  298. background: #b3b3b3;
  299. top: 20px;
  300. left: 250px;
  301. }
  302. .search-input {
  303. position: absolute;
  304. top: 20px;
  305. right: 30px;
  306. width: 300px;
  307. }
  308. }
  309. .center {
  310. width: 100%;
  311. height: calc(100% - 150px);
  312. .el-table {
  313. // height: 100%;
  314. border: 1px solid #f0f2f2;
  315. margin-top: 10px;
  316. font-size: 0.95rem;
  317. font-family: PingFang SC;
  318. font-weight: 500;
  319. color: #b2b2b2;
  320. background: rgba(255, 255, 255, 0.8);
  321. /deep/th {
  322. background: #f7fbff;
  323. }
  324. /deep/.el-checkbox {
  325. color: #b2b2b2;
  326. .el-checkbox__input.is-checked + .el-checkbox__label {
  327. color: #2ea8e6;
  328. }
  329. .el-checkbox__input.is-checked .el-checkbox__inner::after {
  330. width: 70%;
  331. height: 70%;
  332. background: #2ea8e6;
  333. border-radius: 0;
  334. transform: rotate(0deg) scaleY(1);
  335. position: static;
  336. // border: 1px solid #8DD9FF;
  337. }
  338. .el-checkbox__inner {
  339. border: 1px solid #8dd9ff;
  340. background: rgba(0, 170, 255, 0);
  341. display: flex;
  342. align-items: center;
  343. justify-content: center;
  344. position: static;
  345. &::after {
  346. transition: 0ms;
  347. }
  348. }
  349. .el-checkbox__label {
  350. padding-left: 0;
  351. font-size: 15px;
  352. position: absolute;
  353. top: 1px;
  354. left: 25px;
  355. }
  356. }
  357. }
  358. }
  359. .bottom {
  360. height: 70px;
  361. width: 100%;
  362. position: relative;
  363. }
  364. }
  365. }
  366. .el-form {
  367. margin: 30px 0 0 0;
  368. .el-form-item {
  369. margin-inline: 20px;
  370. margin-bottom: 0;
  371. }
  372. /deep/.el-form-item__label {
  373. padding: 0;
  374. }
  375. /deep/.el-form-item__content {
  376. display: flex;
  377. }
  378. /deep/.el-input__inner {
  379. width: 300px;
  380. }
  381. }
  382. /deep/.el-dialog {
  383. height: 30vh;
  384. }
  385. /deep/.el-dialog__title {
  386. margin-right: 330px;
  387. }
  388. /deep/.el-dialog__headerbtn {
  389. font-size: 25px;
  390. }
  391. /deep/.el-dialog__body {
  392. padding: 0;
  393. }
  394. }
  395. </style>