UNPKG

vue-fantable

Version:
122 lines (106 loc) 2.72 kB
import VeCheckbox from '@P/ve-checkbox/ve-checkbox.js' import { COMPS_NAME } from '../util/constant' import { clsName } from '../util/index' // import eventCenter from '@P/events/event-center' import { GLOBAL_EVENT } from '@P/events/global-events' export default { name: COMPS_NAME.FAN_TABLE_BODY_CHECKBOX_CONTENT, inject: ['eventCenter'], props: { // checkbox option checkboxOption: { type: Object, default: function () { return null }, }, rowKey: { type: [String, Number], required: true, }, internalCheckboxSelectedRowKeys: { type: Array, default: function () { return null }, }, }, data() { return { isSelected: false, } }, computed: { // disabled disabled() { let result = false const { checkboxOption, rowKey } = this if (!checkboxOption) { return } const { disableSelectedRowKeys } = checkboxOption if ( Array.isArray(disableSelectedRowKeys) && disableSelectedRowKeys.includes(rowKey) ) { result = true } return result }, // 是否是受控属性(取决于selectedRowKeys) isControlledProp() { const { checkboxOption } = this return ( checkboxOption && Array.isArray(checkboxOption.selectedRowKeys) ) }, }, watch: { // watch internalCheckboxSelectedRowKeys internalCheckboxSelectedRowKeys: { handler: function () { this.initSelected() }, immediate: true, }, }, methods: { // init selected initSelected() { let result = false const { rowKey, internalCheckboxSelectedRowKeys } = this if ( Array.isArray(internalCheckboxSelectedRowKeys) && internalCheckboxSelectedRowKeys.includes(rowKey) ) { result = true } this.isSelected = result }, // selected change selectedChange(isSelected) { const { isControlledProp } = this // 非受控 if (!isControlledProp) { this.isSelected = isSelected } this.eventCenter.emit(GLOBAL_EVENT.CHECKBOX_SELECTED_ROW_CHANGE, { rowKey: this.rowKey, isSelected, }, ) }, }, render() { const { isSelected, selectedChange, disabled } = this const checkboxProps = { class: clsName('checkbox-wrapper'), isControlled: true, isSelected, disabled, onCheckedChange: (isSelected) => selectedChange(isSelected), } return <VeCheckbox {...checkboxProps} /> }, }