82ac4185245d68a2cea8ea98e934079881a6274d.svn-base 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <template>
  2. <j-editable-table
  3. :columns="columns"
  4. :dataSource="dataSource"
  5. :rowNumber="true"
  6. :actionButton="true"
  7. :rowSelection="true"
  8. :maxHeight="400"
  9. @valueChange="handleValueChange"
  10. />
  11. </template>
  12. <script>
  13. import { FormTypes } from '@/utils/JEditableTableUtil'
  14. import JEditableTable from '@/components/jeecg/JEditableTable'
  15. export default {
  16. name: 'ThreeLinkage',
  17. components: { JEditableTable },
  18. data() {
  19. return {
  20. columns: [
  21. {
  22. title: '省/直辖市/自治区',
  23. key: 's1',
  24. type: FormTypes.select,
  25. width: '240px',
  26. options: [],
  27. placeholder: '请选择${title}'
  28. },
  29. {
  30. title: '市',
  31. key: 's2',
  32. type: FormTypes.select,
  33. width: '240px',
  34. options: [],
  35. placeholder: '请选择${title}'
  36. },
  37. {
  38. title: '县/区',
  39. key: 's3',
  40. type: FormTypes.select,
  41. width: '240px',
  42. options: [],
  43. placeholder: '请选择${title}'
  44. }
  45. ],
  46. dataSource: [],
  47. mockData: [
  48. { label: '北京市', value: '110000', parent: null },
  49. { label: '天津市', value: '120000', parent: null },
  50. { label: '河北省', value: '130000', parent: null },
  51. { label: '上海市', value: '310000', parent: null },
  52. { label: '北京市', value: '110100', parent: '110000' },
  53. { label: '天津市市', value: '120100', parent: '120000' },
  54. { label: '石家庄市', value: '130100', parent: '130000' },
  55. { label: '唐山市', value: '130200', parent: '130000' },
  56. { label: '秦皇岛市', value: '130300', parent: '130000' },
  57. { label: '上海市', value: '310100', parent: '310000' },
  58. { label: '东城区', value: '110101', parent: '110100' },
  59. { label: '西城区', value: '110102', parent: '110100' },
  60. { label: '朝阳区', value: '110105', parent: '110100' },
  61. { label: '和平区', value: '120101', parent: '120000' },
  62. { label: '河东区', value: '120102', parent: '120000' },
  63. { label: '河西区', value: '120103', parent: '120000' },
  64. { label: '黄浦区', value: '310101', parent: '310100' },
  65. { label: '徐汇区', value: '310104', parent: '310100' },
  66. { label: '长宁区', value: '310105', parent: '310100' },
  67. { label: '长安区', value: '130102', parent: '130100' },
  68. { label: '桥西区', value: '130104', parent: '130100' },
  69. { label: '新华区', value: '130105', parent: '130100' },
  70. { label: '路南区', value: '130202', parent: '130200' },
  71. { label: '路北区', value: '130203', parent: '130200' },
  72. { label: '古冶区', value: '130204', parent: '130200' },
  73. { label: '海港区', value: '130302', parent: '130300' },
  74. { label: '山海关区', value: '130303', parent: '130300' },
  75. { label: '北戴河区', value: '130304', parent: '130300' },
  76. ]
  77. }
  78. },
  79. mounted() {
  80. // 初始化数据
  81. this.columns[0].options = this.request(null)
  82. },
  83. methods: {
  84. request(parentId) {
  85. return this.mockData.filter(i => i.parent === parentId)
  86. },
  87. /** 当选项被改变时,联动其他组件 */
  88. handleValueChange(event) {
  89. const { type, row, column, value, target } = event
  90. if (type === FormTypes.select) {
  91. // 第一列
  92. if (column.key === 's1') {
  93. // 设置第二列的 options
  94. this.columns[1].options = this.request(value)
  95. // 清空后两列的数据
  96. target.setValues([{
  97. rowKey: row.id,
  98. values: { s2: '', s3: '' }
  99. }])
  100. this.columns[2].options = []
  101. } else
  102. // 第二列
  103. if (column.key === 's2') {
  104. this.columns[2].options = this.request(value)
  105. target.setValues([{
  106. rowKey: row.id,
  107. values: { s3: '' }
  108. }])
  109. }
  110. }
  111. }
  112. }
  113. }
  114. </script>
  115. <style scoped>
  116. </style>