UNPKG

vue-easytable

Version:
114 lines (101 loc) 2.95 kB
import VeRadio from "vue-easytable/packages/ve-radio"; import { COMPS_NAME, EMIT_EVENTS } from "../util/constant"; import { clsName } from "../util"; import emitter from "../../../src/mixins/emitter"; export default { name: COMPS_NAME.VE_TABLE_BODY_RADIO_CONTENT, mixins: [emitter], props: { // checkbox option radioOption: { type: Object, default: function () { return null; }, }, rowKey: { type: [String, Number], required: true, }, internalRadioSelectedRowKey: { type: [String, Number], default: null, }, }, data() { return { isSelected: false, }; }, computed: { // disabled disabled() { let result = false; const { radioOption, rowKey } = this; if (!radioOption) { return; } const { disableSelectedRowKeys } = radioOption; if ( Array.isArray(disableSelectedRowKeys) && disableSelectedRowKeys.includes(rowKey) ) { result = true; } return result; }, // 是否是受控属性(取决于selectedRowKey) isControlledProp() { const { radioOption } = this; return ( radioOption && Object.keys(radioOption).includes("selectedRowKey") ); }, }, watch: { // watch internal radio SelectedRowKey internalRadioSelectedRowKey: { handler: function () { this.initSelected(); }, immediate: true, }, }, methods: { // init selected initSelected() { this.isSelected = this.internalRadioSelectedRowKey === this.rowKey; }, // selected change selectedChange() { const { isControlledProp } = this; // 非受控 if (!isControlledProp) { this.isSelected = true; } this.dispatch( COMPS_NAME.VE_TABLE_BODY, EMIT_EVENTS.RADIO_SELECTED_ROW_CHANGE, { rowKey: this.rowKey, }, ); }, }, render() { const { isSelected, selectedChange, disabled } = this; const radioProps = { class: clsName("radio-wrapper"), props: { isControlled: true, isSelected, disabled, }, on: { "on-radio-change": () => selectedChange(), }, }; return <VeRadio {...radioProps} />; }, };