hookehuyr

✨ feat(单选,多选,性别组件): 新增文字颜色和背景颜色

1 <!-- 1 <!--
2 * @Date: 2022-08-30 11:34:19 2 * @Date: 2022-08-30 11:34:19
3 * @LastEditors: hookehuyr hookehuyr@gmail.com 3 * @LastEditors: hookehuyr hookehuyr@gmail.com
4 - * @LastEditTime: 2024-12-23 15:44:01 4 + * @LastEditTime: 2025-02-25 15:41:38
5 * @FilePath: /data-table/src/components/CheckboxField/index.vue 5 * @FilePath: /data-table/src/components/CheckboxField/index.vue
6 * @Description: 多项选择控件 6 * @Description: 多项选择控件
7 --> 7 -->
...@@ -20,15 +20,17 @@ ...@@ -20,15 +20,17 @@
20 <template #input> 20 <template #input>
21 <van-checkbox-group v-model="checkbox_value" :direction="item.component_props.direction" 21 <van-checkbox-group v-model="checkbox_value" :direction="item.component_props.direction"
22 :max="item.component_props.max" style="width: 100%"> 22 :max="item.component_props.max" style="width: 100%">
23 - <div v-for="x in item.component_props.options" :key="x.title" class="checkbox-wrapper" :style="{ border: item.component_props.readonly ? 0 : ''}"> 23 + <div v-for="x in item.component_props.options" :key="x.title" class="checkbox-wrapper" :style="{ border: item.component_props.readonly ? 0 : '', backgroundColor: x.background_color || ''}">
24 <!-- <div v-if="item.component_props.readonly"> 24 <!-- <div v-if="item.component_props.readonly">
25 <div v-if="checkbox_value.includes(x.value)" role="checkbox" class="van-checkbox van-checkbox--vertical" tabindex="0" aria-checked="true" data-v-3722f8ba="" style="margin-bottom: 0.25rem;"><div class="van-checkbox__icon van-checkbox__icon--square van-checkbox__icon--checked" style="font-size: 1rem;"><i class="van-badge__wrapper van-icon van-icon-success" style="border-color: rgb(194, 145, 95); background-color: rgb(194, 145, 95);"></i></div><span class="van-checkbox__label">{{ x.title }}</span></div> 25 <div v-if="checkbox_value.includes(x.value)" role="checkbox" class="van-checkbox van-checkbox--vertical" tabindex="0" aria-checked="true" data-v-3722f8ba="" style="margin-bottom: 0.25rem;"><div class="van-checkbox__icon van-checkbox__icon--square van-checkbox__icon--checked" style="font-size: 1rem;"><i class="van-badge__wrapper van-icon van-icon-success" style="border-color: rgb(194, 145, 95); background-color: rgb(194, 145, 95);"></i></div><span class="van-checkbox__label">{{ x.title }}</span></div>
26 <div v-else role="checkbox" class="van-checkbox van-checkbox--vertical" tabindex="0" aria-checked="false" data-v-3722f8ba="" style="margin-bottom: 0.25rem;"><div class="van-checkbox__icon van-checkbox__icon--square" style="font-size: 1rem;"><i class="van-badge__wrapper van-icon van-icon-success" style=""></i></div><span class="van-checkbox__label">{{ x.title }}</span></div> 26 <div v-else role="checkbox" class="van-checkbox van-checkbox--vertical" tabindex="0" aria-checked="false" data-v-3722f8ba="" style="margin-bottom: 0.25rem;"><div class="van-checkbox__icon van-checkbox__icon--square" style="font-size: 1rem;"><i class="van-badge__wrapper van-icon van-icon-success" style=""></i></div><span class="van-checkbox__label">{{ x.title }}</span></div>
27 </div> 27 </div>
28 <van-checkbox v-else @click="onClick(x)" :name="x.title" icon-size="1rem" shape="square" 28 <van-checkbox v-else @click="onClick(x)" :name="x.title" icon-size="1rem" shape="square"
29 :checked-color="themeVars.radioColor" style="margin-bottom: 0.25rem">{{ x.title }}</van-checkbox> --> 29 :checked-color="themeVars.radioColor" style="margin-bottom: 0.25rem">{{ x.title }}</van-checkbox> -->
30 + <van-config-provider :theme-vars="{ checkboxLabelColor: x.color }">
30 <van-checkbox @click="onClick(x)" :name="x.title" icon-size="1rem" shape="square" 31 <van-checkbox @click="onClick(x)" :name="x.title" icon-size="1rem" shape="square"
31 :checked-color="themeVars.radioColor" style="margin-bottom: 0.25rem">{{ x.title }}</van-checkbox> 32 :checked-color="themeVars.radioColor" style="margin-bottom: 0.25rem">{{ x.title }}</van-checkbox>
33 + </van-config-provider>
32 <van-field v-if="checkbox_value.includes(x.value) && x.is_input" :name="'_' + item.key" @blur="onBlur(x)" v-model="x.affix" 34 <van-field v-if="checkbox_value.includes(x.value) && x.is_input" :name="'_' + item.key" @blur="onBlur(x)" v-model="x.affix"
33 label=" " label-width="5px" :placeholder="x.input_placeholder" :rules="x.input_required ? rules : ''" 35 label=" " label-width="5px" :placeholder="x.input_placeholder" :rules="x.input_required ? rules : ''"
34 :required="x.input_required" :readonly="item.component_props.readonly" class="affix-input" /> 36 :required="x.input_required" :readonly="item.component_props.readonly" class="affix-input" />
...@@ -36,8 +38,8 @@ ...@@ -36,8 +38,8 @@
36 </van-checkbox-group> 38 </van-checkbox-group>
37 </template> 39 </template>
38 </van-field> 40 </van-field>
39 - <div v-else style="padding: 0.5rem 1.3rem;"> 41 + <div v-else class="readonly-wrapper">
40 - <span v-for="(item, index) in checkbox_value" :key="index" style="font-size: 0.9rem;">{{ item }}&nbsp;</span> 42 + <span v-for="(item, index) in checkbox_value" :key="index" class="readonly-text">{{ item }}&nbsp;</span>
41 </div> 43 </div>
42 </div> 44 </div>
43 </template> 45 </template>
...@@ -210,5 +212,11 @@ onMounted(() => { ...@@ -210,5 +212,11 @@ onMounted(() => {
210 margin-top: 0.5rem; 212 margin-top: 0.5rem;
211 margin-bottom: 0.25rem; 213 margin-bottom: 0.25rem;
212 } 214 }
215 + .readonly-wrapper {
216 + padding: 0.5rem 1.3rem;
217 + }
218 + .readonly-text {
219 + font-size: 0.9rem;
220 + }
213 } 221 }
214 </style> 222 </style>
......
1 <!-- 1 <!--
2 * @Date: 2022-08-30 11:34:19 2 * @Date: 2022-08-30 11:34:19
3 * @LastEditors: hookehuyr hookehuyr@gmail.com 3 * @LastEditors: hookehuyr hookehuyr@gmail.com
4 - * @LastEditTime: 2024-12-23 15:43:52 4 + * @LastEditTime: 2025-02-25 15:49:20
5 * @FilePath: /data-table/src/components/GenderField/index.vue 5 * @FilePath: /data-table/src/components/GenderField/index.vue
6 * @Description: 性别选择控件 6 * @Description: 性别选择控件
7 --> 7 -->
...@@ -22,15 +22,17 @@ ...@@ -22,15 +22,17 @@
22 > 22 >
23 <template #input> 23 <template #input>
24 <van-radio-group @change="onChange(item)" v-model="gender_value" :direction="item.component_props.direction" style="width: 100%"> 24 <van-radio-group @change="onChange(item)" v-model="gender_value" :direction="item.component_props.direction" style="width: 100%">
25 - <div v-for="x in item.component_props.options" :key="x.value" class="radio-wrapper"> 25 + <div v-for="x in item.component_props.options" :key="x.value" class="radio-wrapper" :style="{ backgroundColor: x.background_color || '' }">
26 <!-- <div v-if="item.component_props.readonly"> 26 <!-- <div v-if="item.component_props.readonly">
27 <div v-if="item.component_props.default === x.value" role="radio" class="van-radio van-radio--vertical" tabindex="0" aria-checked="true" data-v-04873bb2="" style="margin-bottom: 0.25rem;"><div class="van-radio__icon van-radio__icon--round van-radio__icon--checked" style="font-size: 1rem;"><i class="van-badge__wrapper van-icon van-icon-success" style="border-color: rgb(194, 145, 95); background-color: rgb(194, 145, 95);"></i></div><span class="van-radio__label">{{ x.title }}</span></div> 27 <div v-if="item.component_props.default === x.value" role="radio" class="van-radio van-radio--vertical" tabindex="0" aria-checked="true" data-v-04873bb2="" style="margin-bottom: 0.25rem;"><div class="van-radio__icon van-radio__icon--round van-radio__icon--checked" style="font-size: 1rem;"><i class="van-badge__wrapper van-icon van-icon-success" style="border-color: rgb(194, 145, 95); background-color: rgb(194, 145, 95);"></i></div><span class="van-radio__label">{{ x.title }}</span></div>
28 <div v-else role="radio" class="van-radio van-radio--vertical" tabindex="0" aria-checked="false" data-v-04873bb2="" style="margin-bottom: 0.25rem;"><div class="van-radio__icon van-radio__icon--round" style="font-size: 1rem;"><i class="van-badge__wrapper van-icon van-icon-success"></i></div><span class="van-radio__label">{{ x.title }}</span></div> 28 <div v-else role="radio" class="van-radio van-radio--vertical" tabindex="0" aria-checked="false" data-v-04873bb2="" style="margin-bottom: 0.25rem;"><div class="van-radio__icon van-radio__icon--round" style="font-size: 1rem;"><i class="van-badge__wrapper van-icon van-icon-success"></i></div><span class="van-radio__label">{{ x.title }}</span></div>
29 </div> 29 </div>
30 <van-radio v-else :name="x.value" icon-size="1rem" :checked-color="themeVars.radioColor" 30 <van-radio v-else :name="x.value" icon-size="1rem" :checked-color="themeVars.radioColor"
31 style="margin-bottom: 0.25rem">{{ x.title }}</van-radio> --> 31 style="margin-bottom: 0.25rem">{{ x.title }}</van-radio> -->
32 + <van-config-provider :theme-vars="{ radioLabelColor: x.color }">
32 <van-radio :name="x.value" icon-size="1rem" :checked-color="themeVars.radioColor" 33 <van-radio :name="x.value" icon-size="1rem" :checked-color="themeVars.radioColor"
33 style="margin-bottom: 0.25rem">{{ x.title }}</van-radio> 34 style="margin-bottom: 0.25rem">{{ x.title }}</van-radio>
35 + </van-config-provider>
34 </div> 36 </div>
35 </van-radio-group> 37 </van-radio-group>
36 </template> 38 </template>
......
1 <!-- 1 <!--
2 * @Date: 2022-08-30 11:34:19 2 * @Date: 2022-08-30 11:34:19
3 * @LastEditors: hookehuyr hookehuyr@gmail.com 3 * @LastEditors: hookehuyr hookehuyr@gmail.com
4 - * @LastEditTime: 2024-12-23 15:44:07 4 + * @LastEditTime: 2025-02-25 15:17:28
5 * @FilePath: /data-table/src/components/RadioField/index.vue 5 * @FilePath: /data-table/src/components/RadioField/index.vue
6 * @Description: 单项选择控件 6 * @Description: 单项选择控件
7 --> 7 -->
...@@ -17,19 +17,29 @@ ...@@ -17,19 +17,29 @@
17 <template #input> 17 <template #input>
18 <van-radio-group @change="onChange(item)" v-model="radio_value" :direction="item.component_props.direction" 18 <van-radio-group @change="onChange(item)" v-model="radio_value" :direction="item.component_props.direction"
19 style="width: 100%"> 19 style="width: 100%">
20 - <div v-for="x in item.component_props.options" :key="x.value" class="radio-wrapper" :style="{ border: item.component_props.readonly ? 0 : ''}"> 20 + <div v-for="x in item.component_props.options" :key="x.value" class="radio-wrapper" :style="{ border: item.component_props.readonly ? 0 : '', backgroundColor: x.background_color || ''}">
21 <div v-if="item.component_props.readonly"> 21 <div v-if="item.component_props.readonly">
22 <div v-if="default_value === x.value" role="radio" class="van-radio van-radio--vertical" tabindex="0" aria-checked="true" data-v-04873bb2="" style="margin-bottom: 0.25rem;"><div class="van-radio__icon van-radio__icon--round van-radio__icon--checked" style="font-size: 1rem;"><i class="van-badge__wrapper van-icon van-icon-success" style="border-color: rgb(194, 145, 95); background-color: rgb(194, 145, 95);"></i></div><span class="van-radio__label">{{ x.title }}</span></div> 22 <div v-if="default_value === x.value" role="radio" class="van-radio van-radio--vertical" tabindex="0" aria-checked="true" data-v-04873bb2="" style="margin-bottom: 0.25rem;"><div class="van-radio__icon van-radio__icon--round van-radio__icon--checked" style="font-size: 1rem;"><i class="van-badge__wrapper van-icon van-icon-success" style="border-color: rgb(194, 145, 95); background-color: rgb(194, 145, 95);"></i></div><span class="van-radio__label">{{ x.title }}</span></div>
23 <div v-else role="radio" class="van-radio van-radio--vertical" tabindex="0" aria-checked="false" data-v-04873bb2="" style="margin-bottom: 0.25rem;"><div class="van-radio__icon van-radio__icon--round" style="font-size: 1rem;"><i class="van-badge__wrapper van-icon van-icon-success"></i></div><span class="van-radio__label">{{ x.title }}</span></div> 23 <div v-else role="radio" class="van-radio van-radio--vertical" tabindex="0" aria-checked="false" data-v-04873bb2="" style="margin-bottom: 0.25rem;"><div class="van-radio__icon van-radio__icon--round" style="font-size: 1rem;"><i class="van-badge__wrapper van-icon van-icon-success"></i></div><span class="van-radio__label">{{ x.title }}</span></div>
24 <span v-if="default_value === x.value && default_affix_value">{{ default_affix_value }}</span> 24 <span v-if="default_value === x.value && default_affix_value">{{ default_affix_value }}</span>
25 </div> 25 </div>
26 - <van-radio v-else :name="x.value" icon-size="1rem" :checked-color="themeVars.radioColor" 26 +
27 - style="margin-bottom: 0.25rem">{{ x.title }}</van-radio> 27 + <van-config-provider v-else :theme-vars="{ radioLabelColor: x.color }">
28 - <div v-if="x.desc_text" class="van-multi-ellipsis--l3 rule-desc-text">{{ x.desc_text }}</div> 28 + <van-radio
29 - <div v-if="x.desc_type === 'text'" class="rule-box" @click="showRule(x)"> 29 + :name="x.value"
30 + icon-size="1rem"
31 + :checked-color="themeVars.radioColor"
32 + style="margin-bottom: 0.25rem"
33 + >
34 + {{ x.title }}
35 + </van-radio>
36 + </van-config-provider>
37 +
38 + <div v-if="x.desc_text" class="van-multi-ellipsis--l3 rule-desc-text" :style="x.color ? { color: x.color } : {}">{{ x.desc_text }}</div>
39 + <div v-if="x.desc_type === 'text'" class="rule-box" :style="x.color ? { color: x.color } : {}" @click="showRule(x)">
30 {{ x.desc_btn_name }}&nbsp;>> 40 {{ x.desc_btn_name }}&nbsp;>>
31 </div> 41 </div>
32 - <div v-if="x.desc_type === 'url'" class="rule-box" @click="showUrl(x)"> 42 + <div v-if="x.desc_type === 'url'" class="rule-box" :style="x.color ? { color: x.color } : {}" @click="showUrl(x)">
33 {{ x.desc_btn_name }}&nbsp;<van-icon name="link-o" /> 43 {{ x.desc_btn_name }}&nbsp;<van-icon name="link-o" />
34 </div> 44 </div>
35 <van-field 45 <van-field
......