componentZRadio.vue 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <template>
  2. <div class="zSelect">
  3. <div class="checkbox">
  4. <van-radio-group v-model="zradioc" @change="radiofn" :disabled="disabled">
  5. <van-radio
  6. :name="item[id] + ''"
  7. @click="radioclick"
  8. v-for="(item, index) in zRadiocolumns"
  9. :key="index"
  10. >{{ item.customOption }}</van-radio
  11. >
  12. </van-radio-group>
  13. </div>
  14. </div>
  15. </template>
  16. <script>
  17. export default {
  18. name: 'zSelect',
  19. props: {
  20. textc: '',
  21. zRadiocolumns: [],
  22. answerType: '',
  23. collectionType: '',
  24. disabled: false,
  25. id: '',
  26. },
  27. data() {
  28. return {
  29. radioChange: false,
  30. zradioc: '',
  31. };
  32. },
  33. watch: {
  34. zRadiocolumns: {
  35. // 返显
  36. handler(val) {
  37. for (let i = 0; i < val.length; i++) {
  38. if (val[i].answerValue == 'Y') {
  39. this.zradioc = String(val[i][this.id]);
  40. }
  41. }
  42. },
  43. immediate: true,
  44. },
  45. },
  46. methods: {
  47. radiofn(value) {
  48. this.radioChange = true;
  49. var typeval = [...this.zRadiocolumns];
  50. for (var k = 0; k < this.zRadiocolumns.length; k++) {
  51. typeval[k].answerValue = 'N';
  52. if (this.zRadiocolumns[k][this.id] == value) {
  53. typeval[k].answerValue = 'Y';
  54. }
  55. }
  56. let datalist = {
  57. id: this.textc,
  58. answerValue: typeval,
  59. };
  60. this.$emit('zSelectVal', datalist);
  61. },
  62. radioclick() {
  63. if (this.disabled) return;
  64. if (!this.radioChange) {
  65. this.zradioc = '';
  66. }
  67. this.radioChange = false;
  68. },
  69. },
  70. };
  71. </script>
  72. <style scoped>
  73. .van-f-red {
  74. color: red;
  75. width: 4px;
  76. display: inline-block;
  77. }
  78. .zSelect .z-cell {
  79. padding: 10px 16px 0 16px;
  80. font-size: 16px;
  81. }
  82. .checkbox .van-radio {
  83. padding-bottom: 10px;
  84. }
  85. </style>
  86. <style>
  87. .checkbox .van-radio__icon {
  88. border: 1px solid #333;
  89. border-radius: 80px;
  90. width: 1em;
  91. }
  92. .checkbox .van-radio__icon .van-icon {
  93. border: 0 !important;
  94. height: 1em;
  95. width: 1em;
  96. }
  97. .checkbox .van-radio__icon--checked .van-icon {
  98. color: #1989fa;
  99. background-color: #fff;
  100. display: block;
  101. height: 14px;
  102. width: 14px;
  103. margin: 2px auto;
  104. background-color: #1989fa;
  105. color: transparent;
  106. }
  107. .checkbox .van-radio__icon--checked {
  108. border: 1px solid #1989fa;
  109. }
  110. </style>