【前端】智能库房综合管理系统前端项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

144 lines
4.1 KiB

  1. <template>
  2. <div>
  3. <div class="head-container">
  4. <div>
  5. <el-select
  6. v-model="room"
  7. class="filter-item"
  8. style="width:245px"
  9. >
  10. <el-option
  11. v-for="item in options"
  12. :key="item.value"
  13. :label="item.label"
  14. :value="item.value"
  15. />
  16. </el-select>
  17. </div>
  18. <div>
  19. <el-button type="primary" class="el-icon-more" size="mini" @click="handleBindParam">绑定参数</el-button>
  20. </div>
  21. </div>
  22. <div class="app-container container-wrap">
  23. <span class="right-top-line" />
  24. <span class="left-bottom-line" />
  25. <!--表格渲染-->
  26. <el-table
  27. ref="table"
  28. :data="tableData"
  29. style="width: 100%;"
  30. height="calc(100vh - 245px)"
  31. :cell-class-name="cell"
  32. @selection-change="selectionChangeHandler"
  33. @row-click="clickRowHandler"
  34. >
  35. <el-table-column type="selection" width="55" align="center" />
  36. <el-table-column type="index" label="序号" width="55" align="center" />
  37. <el-table-column prop="showPosition" label="显示位置" align="center" />
  38. <el-table-column prop="devName" label="设备名称" align="center" />
  39. <el-table-column prop="paramName" label="参数名称" align="center" />
  40. <el-table-column prop="bindState" label="绑定状态" align="center">
  41. <template slot-scope="scope">
  42. <span class="clear" style="width:76px">{{ scope.row.bindState }}</span>
  43. </template>
  44. </el-table-column>
  45. <el-table-column prop="isShow" label="是否显示" align="center">
  46. <template slot-scope="scope">
  47. <span class="clear" style="width:76px">{{ scope.row.isShow }}</span>
  48. </template>
  49. </el-table-column>
  50. </el-table>
  51. </div>
  52. <!-- 绑定参数对话框 -->
  53. <el-dialog
  54. title="绑定参数"
  55. :visible.sync="dialogVisible"
  56. >
  57. <span class="dialog-right-top" />
  58. <span class="dialog-left-bottom" />
  59. <div class="setting-dialog">
  60. <div slot="footer" class="dialog-footer">
  61. <el-button type="primary" @click="handleConfirm">确定</el-button>
  62. </div>
  63. </div>
  64. </el-dialog>
  65. </div>
  66. </template>
  67. <script>
  68. import data from './data.json'
  69. export default {
  70. data() {
  71. return {
  72. room: '选项1',
  73. options: [
  74. { value: '选项1', label: '档案库' },
  75. { value: '选项2', label: '阅览室' },
  76. { value: '选项3', label: '整理室' },
  77. { value: '选项4', label: '走廊' }
  78. ],
  79. tableData: [],
  80. selections: [],
  81. dialogVisible: false
  82. }
  83. },
  84. created() {
  85. this.getData()
  86. },
  87. methods: {
  88. getData() {
  89. this.tableData = data.rows
  90. },
  91. selectionChangeHandler(val) {
  92. this.selections = val
  93. },
  94. // 单元格样式
  95. cell({ row, columnIndex }) {
  96. if ((row.bindState === '已绑定' && columnIndex === 5) || (row.isShow === '显示' && columnIndex === 6)) {
  97. return 'have-clear'
  98. } else if ((row.bindState === '未绑定' && columnIndex === 5) || (row.isShow === '隐藏' && columnIndex === 6)) {
  99. return 'fail-clear'
  100. }
  101. },
  102. handleBindParam() {
  103. if (this.selections.length === 1) {
  104. this.dialogVisible = true
  105. } else {
  106. this.$message({
  107. message: '只可以同时修改一个设备的参数',
  108. type: 'warning'
  109. })
  110. }
  111. },
  112. clickRowHandler(row) {
  113. this.$refs.table.clearSelection()
  114. this.$refs.table.toggleRowSelection(row) // 单选选中
  115. },
  116. handleConfirm() {
  117. this.dialogVisible = false
  118. }
  119. }
  120. }
  121. </script>
  122. <style lang="scss" scoped>
  123. @import '~@/assets/styles/lend-manage.scss';
  124. .head-container{
  125. display: flex;
  126. justify-content: space-between;
  127. .el-button{
  128. width: 106px;
  129. height: 32px;
  130. background-color: #1AAE93;
  131. border: none;
  132. }
  133. }
  134. ::v-deep .el-icon-more:before{
  135. margin-right: 8px;
  136. }
  137. .app-container{
  138. margin-top: 0;
  139. min-height: calc(100vh - 242px);
  140. }
  141. </style>