1. <template>
    2. <el-dialog
    3. title="列表字段设置"
    4. :visible.sync="dialogVisible"
    5. width="30%"
    6. :before-close="handleClose"
    7. >
    8. <el-checkbox
    9. class="pl-20 w100"
    10. style="height: 50px; background-color: #f5f5f7"
    11. :indeterminate="isIndeterminate"
    12. v-model="checkAll"
    13. @change="handleCheckAllChange"
    14. >
    15. <span class="ml-20 fw-800">字段</span>
    16. <span class="fw-800" style="margin-left: 280px">拖拽排序</span>
    17. </el-checkbox>
    18. <el-checkbox class="pl-20 w100" checked style="height: 50px">
    19. <span class="ml-20 fw-600">姓名</span>
    20. </el-checkbox>
    21. <el-tree
    22. :data="data"
    23. show-checkbox
    24. node-key="id"
    25. icon-class="el"
    26. default-expand-all
    27. @node-drag-start="handleDragStart"
    28. @node-drag-enter="handleDragEnter"
    29. @node-drag-leave="handleDragLeave"
    30. @node-drag-over="handleDragOver"
    31. @node-drag-end="handleDragEnd"
    32. @node-drop="handleDrop"
    33. draggable
    34. :allow-drop="allowDrop"
    35. :allow-drag="allowDrag"
    36. >
    37. </el-tree>
    38. <span slot="footer" class="dialog-footer">
    39. <el-button size="mini" @click="dialogVisible = false">取 消</el-button>
    40. <el-button size="mini" type="primary" @click="dialogVisible = false"
    41. >确 定</el-button
    42. >
    43. </span>
    44. </el-dialog>
    45. </template>
    46. <script>
    47. export default {
    48. data() {
    49. return {
    50. dialogVisible: false,
    51. checkAll: false,
    52. isIndeterminate: true,
    53. defaultProps: {
    54. children: 'children',
    55. label: 'label'
    56. },
    57. data: [
    58. {
    59. id: 1,
    60. label: '一级 1'
    61. },
    62. {
    63. id: 2,
    64. label: '一级 2'
    65. },
    66. {
    67. id: 3,
    68. label: '一级 3'
    69. }
    70. ]
    71. }
    72. },
    73. methods: {
    74. // handleClose(done) {
    75. // this.$confirm('确认关闭?')
    76. // .then((_) => {
    77. // done()
    78. // })
    79. // .catch((_) => {})
    80. // },
    81. onShow() {
    82. this.dialogVisible = true
    83. // console.log(this.cities, 'cities')
    84. console.log(123, 'cities')
    85. },
    86. //
    87. handleDragStart(node, ev) {
    88. console.log('drag start', node)
    89. },
    90. handleDragEnter(draggingNode, dropNode, ev) {
    91. console.log('tree drag enter: ', dropNode.label)
    92. },
    93. handleDragLeave(draggingNode, dropNode, ev) {
    94. console.log('tree drag leave: ', dropNode.label)
    95. },
    96. handleDragOver(draggingNode, dropNode, ev) {
    97. console.log('tree drag over: ', dropNode.label)
    98. },
    99. handleDragEnd(draggingNode, dropNode, dropType, ev) {
    100. console.log('tree drag end: ', dropNode && dropNode.label, dropType)
    101. },
    102. handleDrop(draggingNode, dropNode, dropType, ev) {
    103. console.log('tree drop: ', dropNode.label, dropType)
    104. },
    105. allowDrop(draggingNode, dropNode, type) {
    106. if (dropNode.data.label) {
    107. return type !== 'inner'
    108. } else {
    109. return true
    110. }
    111. },
    112. allowDrag(draggingNode) {
    113. return draggingNode.data.label.indexOf('三级 3-2-2') === -1
    114. },
    115. //
    116. handleCheckAllChange(val) {
    117. this.checkedCities = val ? cityOptions : []
    118. this.isIndeterminate = false
    119. },
    120. handleCheckedCitiesChange(value) {
    121. let checkedCount = value.length
    122. this.checkAll = checkedCount === this.cities.length
    123. this.isIndeterminate =
    124. checkedCount > 0 && checkedCount < this.cities.length
    125. }
    126. }
    127. }
    128. </script>
    129. <style scoped>
    130. ::v-deep .el-checkbox {
    131. display: flex;
    132. align-items: center;
    133. padding: 0 20px;
    134. }
    135. ::v-deep .el-checkbox__label {
    136. color: #343435 !important;
    137. }
    138. ::v-deep .el-tree-node__expand-icon {
    139. display: none;
    140. }
    141. ::v-deep .el-tree-node__label {
    142. font-weight: 600;
    143. }
    144. ::v-deep .el-tree-node__label {
    145. /* 保证:after为元素的显示 */
    146. background-image: url('');
    147. }
    148. ::v-deep .el-tree-node__label:after {
    149. display: inline-block;
    150. background-image: url('../../assets/icon/caidan.png');
    151. background-position: center center;
    152. background-size: 40px 20px;
    153. content: '';
    154. width: 40px;
    155. height: 20px;
    156. /* visibility: hidden; 隐藏content中的内容*/
    157. margin-left: 280px;
    158. }
    159. ::v-deep .el-tree-node {
    160. height: 50px;
    161. display: flex;
    162. align-items: center;
    163. }
    164. </style>