radio-select-group.vue 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <template>
  2. <view class="radio-slect-group">
  3. <template v-for="(item, i) in list">
  4. <view class="radio-slect-item" :key="i">
  5. <view class="p-view" @click="changeOpenKey(i)">
  6. <image class="icon"
  7. :src="`/static/${isOpen(i) ? 'up-icon' : 'down-icon'}.png`"></image>
  8. <text>{{ item[setting.pName] }}</text>
  9. </view>
  10. <template v-if="isOpen(i)">
  11. <view class="child-radio-group">
  12. <child-radio-group
  13. :list="item[setting.child] || []"
  14. :defaultValue="defaultValue"
  15. :label="label"
  16. :setting="setting"
  17. @change="toggleSelect"
  18. />
  19. </view>
  20. </template>
  21. </view>
  22. </template>
  23. </view>
  24. </template>
  25. <script>
  26. /**
  27. * 下拉式单选列表组合
  28. * 芦荟
  29. * 2021.2.3
  30. * props:属性说明看tm-radio-gruop.vue
  31. */
  32. import childRadioGroup from './radio-group.vue'
  33. export default {
  34. props: ['list', 'defaultValue', 'label', 'setting', 'openkeys'],
  35. created() {
  36. },
  37. methods: {
  38. /**
  39. * 选中变化调用
  40. * @param {Object} selectData 当前选中的对象
  41. * @param {Object} index 当前选中下标
  42. */
  43. toggleSelect(selectVal, selectData, index){
  44. this.$emit('change', selectVal, selectData, index);
  45. },
  46. changeOpenKey(key) {
  47. let openKey = this.openkeys.find(openKey => openKey === key);
  48. this.$emit('changeOpenPKey', (openKey || openKey === 0 ? 'close' : 'open'), key)
  49. },
  50. isOpen(key) {
  51. let openKey = this.openkeys.find(openKey => openKey === key);
  52. return openKey || openKey === 0
  53. }
  54. },
  55. components: {
  56. childRadioGroup
  57. }
  58. }
  59. </script>
  60. <style lang="less">
  61. .radio-slect-group {
  62. background: #ffffff;
  63. .radio-slect-item {
  64. .p-view {
  65. display: flex;
  66. align-items: center;
  67. height: 75rpx;
  68. padding-left: 25rpx;
  69. .icon {
  70. margin-right: 15rpx;
  71. width: 21.25rpx;
  72. height: 12.5rpx;
  73. }
  74. >text {
  75. font-size: 22.5rpx;
  76. color: #292C33;
  77. }
  78. }
  79. }
  80. .child-radio-group {
  81. padding-left: 62.5rpx;
  82. }
  83. }
  84. </style>