@farris/ui-vue
Version:
Farris Vue, a Farris Design based Vue3 component library.
126 lines (125 loc) • 3.04 kB
JavaScript
import { radioCheckboxCommonProps as b, useGuid as V, RADIOGROUP_CONTEXT as C, withInstall as R } from "../common/index.esm.js";
import { computed as v, defineComponent as k, ref as f, provide as x, watch as F, createVNode as u } from "vue";
const p = {
...b,
/**
* 组件标识
*/
id: String,
/**
* 可选,是否禁用组件
* @default false
*/
disabled: { type: Boolean, default: !1 },
/**
* 功能同disabled
*/
readonly: { type: Boolean, default: !1 },
/**
* 废弃
* @deprecated
*/
enumData: {
type: Array
},
/**
* 单选组数据源
*/
data: {
type: Array
},
/**
* 组件值
*/
modelValue: { type: String, default: "" },
/**
* 组件名称
*/
name: { type: String, default: "" },
/**
* 输入框Tab键索引
*/
tabIndex: { type: Number, default: -1 },
/**
* 可选,默认为name,显示文本字段
* @default 'name'
*/
textField: { type: String, default: "name" },
/**
* 可选,默认为value,值字段
* @default 'value'
*/
valueField: { type: String, default: "value" }
};
function D(e, a, d) {
const r = v(() => !e.disabled), i = v(() => e.data || e.enumData || e.options || []);
function o(t) {
return t[e.valueField];
}
function c(t) {
return t[e.textField];
}
function s(t, m) {
if (r.value) {
const n = o(t);
d.value !== n && (d.value = n, a.emit("change", n), a.emit("changeValue", n), a.emit("update:modelValue", n));
}
m.stopPropagation();
}
return {
enumData: i,
getValue: o,
getText: c,
onClickRadio: s
};
}
const G = /* @__PURE__ */ k({
name: "FRadioGroup",
props: p,
emits: ["changeValue", "update:modelValue", "change"],
setup(e, a) {
const {
guid: d
} = V(), r = `radio_${d().slice(0, 8)}`, i = f(e.name || r), o = f(e.modelValue), {
enumData: c,
onClickRadio: s,
getValue: t,
getText: m
} = D(e, a, o), n = v(() => ({
"farris-checkradio-hor": e.direction === "horizontal",
"farris-checkradio-ver": e.direction === "vertical"
})), h = f([]);
return x(C, {
radios: h,
parentProps: e,
parentContext: a
}), F(() => e.modelValue, (l) => {
o.value = l;
}), () => u("div", {
class: ["farris-input-wrap", "btn-group", n.value]
}, [a.slots.default ? a.slots.default() : c.value.map((l, P) => {
const g = "radio_" + e.id + i.value + l[e.valueField];
return u("div", {
class: "custom-control custom-radio"
}, [u("input", {
type: "radio",
class: "custom-control-input",
name: i.value,
id: g,
value: t(l),
checked: t(l) === o.value,
disabled: e.readonly || e.disabled,
tabindex: e.tabIndex,
onClick: (y) => s(l, y)
}, null), u("label", {
class: "custom-control-label",
for: g
}, [m(l)])]);
})]);
}
}), I = R(G);
export {
G as FRadioGroup,
I as default,
p as radioGroupProps
};