Radio.vue 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <template>
  2. <div class="radio-wrap" v-if="item">
  3. <p class="quest">{{indx + '.' + item.name}}</p>
  4. <img :src="item.url.replace('{imageUrlPrefix}',imgUrl)" v-if="item.url">
  5. <p v-for="(it,index) in item.questionDetailList" :key="it.id" class="list">
  6. <img :src="index==current?check:defaultPic" @click="handleClick(it,index)">
  7. <!-- <img :src="it.select?check:defaultPic" @click="handleClick(it,index)"> -->
  8. <span :class="{'check':index==current}">{{it.name}}</span>
  9. </p>
  10. </div>
  11. </template>
  12. <script type="text/javascript">
  13. import icon from '../images/radio-default.png'
  14. import checkIcon from '../images/radio-check.png'
  15. import {deepClone} from '@utils/tools.js'
  16. export default{
  17. name:'Radio',
  18. data(){
  19. return{
  20. defaultPic:icon,
  21. check:checkIcon,
  22. current:null,
  23. datas:{}
  24. }
  25. },
  26. props:['item','indx','pId'],
  27. methods:{
  28. handleClick(it,index){
  29. this.current = index;
  30. const list = JSON.parse(JSON.stringify(this.item));
  31. let data = list.questionDetailList.slice(0); //数组深拷贝?
  32. // let data = deepClone(list);
  33. let value = "";
  34. for(let i=0;i<data.length; i++){
  35. data[i].select = 0
  36. if(i==index){
  37. data[i].select = 1;
  38. value = data[i].name;
  39. }
  40. }
  41. const newData = Object.assign({},this.item,{questionDetailList:data},{value:value})
  42. this.$store.commit('setDatas',{data:newData,pId:this.pId});
  43. this.$store.commit('getUpdate'); //更新数据
  44. }
  45. }
  46. }
  47. </script>
  48. <style lang="less" scoped>
  49. .radio-wrap{
  50. font-size: .3rem;
  51. .quest{
  52. color:#000;
  53. margin-bottom: .2rem;
  54. }
  55. img{
  56. width:100%;
  57. }
  58. .list{
  59. color: #7C828E;
  60. margin:0 .1rem .1rem 0;
  61. padding: .12rem .1rem;
  62. display: inline-block;
  63. img{
  64. width: .38rem;
  65. vertical-align: middle;
  66. }
  67. .check{
  68. color: #4F50FF;
  69. }
  70. }
  71. }
  72. </style>