vxe-table-demonic
Version:
一个基于 vue 的 PC 端表单/表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、JSON 配置式...
137 lines (136 loc) • 4.48 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _vue = require("vue");
var _xeUtils = _interopRequireDefault(require("xe-utils"));
var _utils = require("../../tools/utils");
var _conf = _interopRequireDefault(require("../../v-x-e-table/src/conf"));
var _size = require("../../hooks/size");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _default = (0, _vue.defineComponent)({
name: 'VxeRadio',
props: {
modelValue: [String, Number, Boolean],
label: {
type: [String, Number, Boolean],
default: null
},
title: [String, Number],
content: [String, Number],
disabled: Boolean,
name: String,
strict: {
type: Boolean,
default: function () {
return _conf.default.radio.strict;
}
},
size: {
type: String,
default: function () {
return _conf.default.radio.size || _conf.default.size;
}
}
},
emits: ['update:modelValue', 'change'],
setup: function (props, context) {
var slots = context.slots,
emit = context.emit;
var $xeform = (0, _vue.inject)('$xeform', null);
var $xeformiteminfo = (0, _vue.inject)('$xeformiteminfo', null);
var xID = _xeUtils.default.uniqueId();
var $xeradio = {
xID: xID,
props: props,
context: context
};
var computeSize = (0, _size.useSize)(props);
var $xeradiogroup = (0, _vue.inject)('$xeradiogroup', null);
var radioMethods = {};
var computeDisabled = (0, _vue.computed)(function () {
return props.disabled || $xeradiogroup && $xeradiogroup.props.disabled;
});
var computeName = (0, _vue.computed)(function () {
return $xeradiogroup ? $xeradiogroup.name : props.name;
});
var computeStrict = (0, _vue.computed)(function () {
return $xeradiogroup ? $xeradiogroup.props.strict : props.strict;
});
var computeChecked = (0, _vue.computed)(function () {
var modelValue = props.modelValue,
label = props.label;
return $xeradiogroup ? $xeradiogroup.props.modelValue === label : modelValue === label;
});
var handleValue = function (label, evnt) {
if ($xeradiogroup) {
$xeradiogroup.handleChecked({
label: label
}, evnt);
} else {
emit('update:modelValue', label);
radioMethods.dispatchEvent('change', {
label: label
}, evnt);
// 自动更新校验状态
if ($xeform && $xeformiteminfo) {
$xeform.triggerItemEvent(evnt, $xeformiteminfo.itemConfig.field, label);
}
}
};
var changeEvent = function (evnt) {
var isDisabled = computeDisabled.value;
if (!isDisabled) {
handleValue(props.label, evnt);
}
};
var clickEvent = function (evnt) {
var isDisabled = computeDisabled.value;
var isStrict = computeStrict.value;
if (!isDisabled && !isStrict) {
if (props.label === ($xeradiogroup ? $xeradiogroup.props.modelValue : props.modelValue)) {
handleValue(null, evnt);
}
}
};
radioMethods = {
dispatchEvent: function (type, params, evnt) {
emit(type, Object.assign({
$radio: $xeradio,
$event: evnt
}, params));
}
};
Object.assign($xeradio, radioMethods);
var renderVN = function () {
var _a;
var vSize = computeSize.value;
var isDisabled = computeDisabled.value;
var name = computeName.value;
var isChecked = computeChecked.value;
return (0, _vue.h)('label', {
class: ['vxe-radio', (_a = {}, _a["size--".concat(vSize)] = vSize, _a['is--checked'] = isChecked, _a['is--disabled'] = isDisabled, _a)],
title: props.title
}, [(0, _vue.h)('input', {
class: 'vxe-radio--input',
type: 'radio',
name: name,
checked: isChecked,
disabled: isDisabled,
onChange: changeEvent,
onClick: clickEvent
}), (0, _vue.h)('span', {
class: ['vxe-radio--icon', isChecked ? 'vxe-icon-radio-checked' : 'vxe-icon-radio-unchecked']
}), (0, _vue.h)('span', {
class: 'vxe-radio--label'
}, slots.default ? slots.default({}) : (0, _utils.getFuncText)(props.content))]);
};
$xeradio.renderVN = renderVN;
return $xeradio;
},
render: function () {
return this.renderVN();
}
});
exports.default = _default;