| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- <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>
- <!-- 回答类型:wb-文本,sz-数字,rq-日期,zp-照片,dx -->
- <template v-if="val.answerType == 'wb'">
- <template v-if="parentOptionList.searchValue == val.itemOptionParentId">
- <van-field
- v-model="val.answerValue"
- :placeholder="val.remark"
- :minTextLength="val.minTextLength"
- :error-message="val.remark"
- :class="{
- fieldInput: true,
- rulesClass: val.answerValue != null && val.answerValue.length < val.minTextLength,
- }" />
- <span
- class="rulesErrorMessage"
- v-if="val.answerValue != null && val.answerValue.length < val.minTextLength">
- {{ val.remark }}
- </span>
- </template>
- </template>
- <template v-if="val.answerType == 'sz'">
- <van-field
- class="fieldInput"
- v-model="val.answerValue"
- :placeholder="val.remark"
- :minTextLength="val.minTextLength"
- :error-message="val.remark"
- type="number"></van-field>
- </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 {
- padding: 0;
- width: 100%;
- border-radius: 4px;
- overflow: hidden;
- background-color: unset;
- height: 30px;
- line-height: 30px;
- border: 1px solid #cdc8c8;
- }
- .van-field__control {
- /* padding: 0 10px; */
- /* margin: 5px 0; */
- padding-left: 10px;
- }
- .van-radio__label {
- /* font-size: 14px; */
- }
- .van-f-red {
- font-size: 14px;
- }
- .rulesClass {
- border: 1px solid #ff0505;
- }
- .fieldInput {
- /* height: 38px; */
- }
- .rulesErrorMessage {
- color: red;
- font-size: 12px;
- padding: 3px 0;
- }
- }
- </style>
|