@farris/ui-vue
Version:
Farris Vue, a Farris Design based Vue3 component library.
121 lines (120 loc) • 2.84 kB
JavaScript
import { radioCheckboxCommonProps as y, RADIOGROUP_CONTEXT as b, withInstall as h } from "../common/index.esm.js";
import { computed as m, defineComponent as V, ref as g, provide as C, watch as p, createVNode as u } from "vue";
const x = {
...y,
/**
* 组件标识
*/
id: String,
/**
* 禁用组件,不允许切换单选值
*/
disabled: { type: Boolean, default: !1 },
/**
* 功能同disabled
*/
readonly: { type: Boolean, default: !1 },
/**
* 单选组枚举数组----废弃
*/
enumData: {
type: Array,
default: []
},
/**
* 单选组枚举数组
*/
data: {
type: Array,
default: []
},
/**
* 组件值
*/
modelValue: { type: String, default: "" },
/**
* 组件名称
*/
name: { type: String, default: "" },
/**
* 输入框Tab键索引
*/
tabIndex: { type: Number, default: -1 },
/**
* 枚举数组中展示文本的key值。
*/
textField: { type: String, default: "name" },
/**
* 枚举数组中枚举值的key值。
*/
valueField: { type: String, default: "value" }
};
function R(e, t, n) {
const i = m(() => !e.disabled), r = m(() => e.data || e.enumData || e.options || []);
function o(l) {
return l[e.valueField];
}
function c(l) {
return l[e.textField];
}
function s(l, a) {
if (i.value) {
const d = o(l);
n.value !== d && (n.value = d, t.emit("changeValue", d), t.emit("update:modelValue", d));
}
a.stopPropagation();
}
return {
enumData: r,
getValue: o,
getText: c,
onClickRadio: s
};
}
const F = /* @__PURE__ */ V({
name: "FRadioGroup",
props: x,
emits: ["changeValue", "update:modelValue"],
setup(e, t) {
const n = g(e.modelValue), {
enumData: i,
onClickRadio: r,
getValue: o,
getText: c
} = R(e, t, n), s = m(() => ({
"farris-checkradio-hor": e.direction === "horizontal"
})), l = g([]);
return C(b, {
radios: l,
parentProps: e,
parentContext: t
}), p(() => e.modelValue, (a) => {
n.value = a;
}), () => u("div", {
class: ["farris-input-wrap", "btn-group", s.value]
}, [t.slots.default ? t.slots.default() : i.value.map((a, d) => {
const f = "radio_" + e.id + e.name + a[e.valueField];
return u("div", {
class: "custom-control custom-radio"
}, [u("input", {
type: "radio",
class: "custom-control-input",
name: f,
id: f,
value: o(a),
checked: o(a) === n.value,
disabled: e.readonly || e.disabled,
tabindex: e.tabIndex,
onClick: (v) => r(a, v)
}, null), u("label", {
class: "custom-control-label",
for: f
}, [c(a)])]);
})]);
}
}), P = h(F);
export {
F as FRadioGroup,
P as default,
x as radioGroupProps
};