tm-groupradio.vue 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. <template>
  2. <view class="tm-groupradio" :class="[customClass]">
  3. <slot></slot>
  4. </view>
  5. </template>
  6. <script>
  7. /**
  8. * 单选框组
  9. * @description 此组件必须,配合tm-radio组件使用,不可单独使用。
  10. * @property {Function} change 任何一个tm-radio改变将会触发此事件,并携带选中的数组数据。
  11. * @property {String} name = [] 默认:'',提交表单时的的字段名称标识
  12. * @property {String} customClass = [] 默认:'',自定义class
  13. */
  14. export default {
  15. name:'tm-groupradio',
  16. props:{
  17. //提交表单时的的字段名称
  18. name:{
  19. type:String,
  20. default:''
  21. },
  22. customClass:{
  23. type:String,
  24. default:''
  25. }
  26. },
  27. data() {
  28. return {
  29. };
  30. },
  31. methods: {
  32. change(e) {
  33. this.$emit('change',e)
  34. },
  35. // 获取选中的结果。
  36. getVal(){
  37. let box = [];
  38. function findchild(p,index){
  39. let preat = p;
  40. if(preat.$options?.name==='tm-radio'){
  41. if(preat.value){
  42. box.push({index:index,value:preat.value,checked:preat.value})
  43. }
  44. }else{
  45. if(preat.$children.length>0){
  46. preat.$children.forEach(item=>{
  47. findchild(item,index++);
  48. })
  49. }
  50. }
  51. };
  52. findchild(this,0);
  53. return box;
  54. },
  55. // 清除选中。
  56. clear(){
  57. console.log(9)
  58. function findchild(p,index){
  59. let preat = p;
  60. if(preat.$options?.name==='tm-radio'){
  61. if(preat.value===true){
  62. preat.changValue = false;
  63. }
  64. }else{
  65. if(preat.$children.length>0){
  66. preat.$children.forEach(item=>{
  67. findchild(item,index++);
  68. })
  69. }
  70. }
  71. };
  72. findchild(this,0);
  73. },
  74. },
  75. }
  76. </script>
  77. <style lang="scss">
  78. </style>