| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- <template>
- <div class="radioGroup">
- <template v-for="(val, ind) in clueOptionList">
- <div class="title" v-if="val.customerClueName">
- <span class="van-f-red" v-if="val.isMust == 0">*</span>
- {{ val.customerClueName }}
- </div>
- <template v-if="val.answerType == 'dx'">
- <van-radio-group v-model="val.searchValue" @change="radioGroupChange">
- <template v-for="(item, index) in val.customerClueOptionList">
- <van-radio :name="item.customerClueOptionId" :key="index" @click="radioClick">
- {{ item.customerClueOption }}
- </van-radio>
- <radioGroup
- :clueOptionList="item.customerClueItemList"
- :parentOptionList="val"
- :parentId="item.customerClueOptionId"
- v-if="val.searchValue == item.customerClueOptionId"></radioGroup>
- </template>
- </van-radio-group>
- </template>
- <template v-if="val.answerType == 'wb'">
- <template v-if="parentOptionList.searchValue == val.itemOptionParentId">
- <van-field v-model="val.answerValue" :placeholder="val.remark" />
- </template>
- </template>
- </template>
- </div>
- </template>
- <script>
- export default {
- name: 'radioGroup',
- props: {
- clueOptionList: {
- type: Array,
- default: () => [],
- },
- parentOptionList: {
- type: Object,
- default: () => {},
- },
- parentId: {
- type: [Number, null],
- default: null,
- },
- },
- data() {
- return {};
- },
- created() {
- // console.log(this.clueOptionList);
- },
- methods: {
- radioGroupChange(name) {
- if (!name) return;
- // console.log(name);
- // console.log(this.clueOptionList);
- // 如果选中的数据有父级,将父级数据修改为选中状态
- if (this.parentOptionList && this.parentId) {
- this.$set(this.parentOptionList, 'searchValue', this.parentId);
- }
- // 获取选中数据
- let clueOptionList = this.clueOptionList.find((val) => val.searchValue == name);
- let activaRadio = clueOptionList.customerClueOptionList.find(
- (val) => val.customerClueOptionId == name
- );
- // 修改选中状态
- this.$set(activaRadio, 'value', 'Y');
- // 过滤未选中的数据
- let exceptItself = clueOptionList.customerClueOptionList.filter(
- (val) => val.customerClueOptionId !== name
- );
- // 删除未选中数据状态兄弟级和子级
- // console.log(exceptItself);
- this.toggleOtheChildren(exceptItself);
- },
- toggleOtheChildren(exceptItself) {
- if (!exceptItself) return;
- exceptItself.forEach((val) => {
- this.$set(val, 'value', 'N');
- if (val.customerClueItemList && val.customerClueItemList[0]) {
- this.$set(val.customerClueItemList[0], 'searchValue', null);
- if (
- val.customerClueItemList[0] &&
- val.customerClueItemList[0].customerClueOptionList.length
- ) {
- this.toggleOtheChildren(val.customerClueItemList[0].customerClueOptionList);
- }
- }
- });
- },
- radioClick(event) {
- // console.log(event);
- },
- },
- };
- </script>
- <style lang="scss">
- .radioGroup {
- font-size: 15px;
- .van-radio {
- padding: 5px 0;
- }
- .van-radio-group {
- padding-left: 20px;
- }
- .van-cell {
- padding: 10px 0;
- /* font-size: 14px; */
- }
- .van-cell::after {
- border: 0;
- }
- .van-field {
- border: 1px solid #cdc8c8;
- padding: 0;
- width: 100%;
- border-radius: 4px;
- overflow: hidden;
- background-color: unset;
- height: 30px;
- line-height: 30px;
- margin: 5px 0;
- }
- .van-field__control {
- padding: 0 10px;
- }
- .van-field__control {
- padding: 0 10px;
- }
- .van-radio__label {
- /* font-size: 14px; */
- }
- }
- </style>
|