UNPKG

vue-ant-patterns

Version:

vue-ant-patterns

202 lines (174 loc) 6.47 kB
import _toConsumableArray from 'babel-runtime/helpers/toConsumableArray'; import _slicedToArray from 'babel-runtime/helpers/slicedToArray'; import _extends from 'babel-runtime/helpers/extends'; /* * @Author: w.pengfei * @Date: 2020-06-22 13:29:49 * @LastEditTime: 2021-04-22 10:21:34 * @Description: '' * @LastEditors: w.pengfei */ import { isEmptyObj, sortList, isVnode } from '../../es/_utils'; import props, { sectionOptions as vEditCfg } from './defaultProps'; import mixin from './mixinBase'; import { filterSlot } from './utils'; import extend from 'extend'; import Section from './Section'; var cardStatusToStr = ['view', 'edit']; export default { name: 'RenderMixin', mixins: [mixin], props: _extends({}, props), data: function data() { // 获取到 区段插槽 var sectionSlot = this.getSectionSlots(); // 获取到字段插槽 var fieldSlot = this.getFieldSlots(); return { sectionSlot: sectionSlot, fieldSlot: fieldSlot, singleEditStatus: {} }; }, mounted: function mounted() { this.sectionSlot = this.getSectionSlots(); this.fieldSlot = this.getFieldSlots(); }, methods: { /** * 渲染区段 */ renderSection: function renderSection(panel) { var _panel$sectionList = panel.sectionList, sectionList = _panel$sectionList === undefined ? [] : _panel$sectionList; var _getSlots = this.getSlots('section'), firstSlot = _getSlots.firstSlot, lastSlot = _getSlots.lastSlot; /** * 新需求实现 * 在没有区段的情况下, 需要能正常渲染区段插槽 * 在判断是否有区段信息时, 同时也需要判断下是否有 首尾插槽 * 在没有区段信息时, 需支持首尾插槽 */ var isSlot = !firstSlot && !lastSlot; if ((!sectionList || !sectionList.length) && isSlot) { return this.renderEmpty(); } return this.renderSectionItem(panel); }, /** * 渲染区段 */ renderSectionItem: function renderSectionItem(panel) { var _this = this; var h = this.$createElement; var $listeners = this.$listeners, isEdit = this.isEdit, langType = this.langType, $scopedSlots = this.$scopedSlots; var _panel$sectionList2 = panel.sectionList, sectionList = _panel$sectionList2 === undefined ? [] : _panel$sectionList2; var _$props = this.$props, vmStatus = _$props.vmStatus, sectionInfo = _$props.sectionInfo, sectionOptions = _$props.sectionOptions, sectionDefaultEdit = _$props.sectionDefaultEdit, sectionSingleEdit = _$props.sectionSingleEdit, hideKeys = _$props.forceHideSection, showKeys = _$props.forceShowSection; var _sectionInfo = _slicedToArray(sectionInfo, 3), sectionKey = _sectionInfo[0], sectionCode = _sectionInfo[1], sectionName = _sectionInfo[2]; var _getSlots2 = this.getSlots('section'), firstSlot = _getSlots2.firstSlot, lastSlot = _getSlots2.lastSlot, afterSlot = _getSlots2.afterSlot, customSlot = _getSlots2.customSlot; /** * 排序 */ var cloneList = [].concat(_toConsumableArray(sectionList)); cloneList = cloneList.map(function (item) { if (isVnode(item)) return item; var isDisplay = item.isDisplay, code = item[sectionCode]; if (hideKeys.includes(code)) { isDisplay = false; } if (!isDisplay && showKeys.includes(code)) { isDisplay = true; } if (isDisplay) { return item; } return null; }).filter(function (T) { return T; }); /** * 排序, 根据后台返回的数据排序, 排序属性, displayNum */ sortList(cloneList); var clonePanel = extend({}, panel); var firstSlotRes = firstSlot ? filterSlot(firstSlot({ panel: clonePanel })) : null; var lastSlotRes = lastSlot ? filterSlot(lastSlot({ panel: clonePanel })) : null; if (firstSlotRes) { cloneList = [].concat(_toConsumableArray(firstSlotRes), _toConsumableArray(cloneList)); } if (lastSlotRes) { cloneList = [].concat(_toConsumableArray(cloneList), _toConsumableArray(lastSlotRes)); } return cloneList.map(function (item) { if (isVnode(item)) return item; var sCode = item[sectionCode]; var vStatus = cardStatusToStr[Number(isEdit)]; var vSingleEdit = sectionSingleEdit; var isConfig = item.isConfig; /** * 默认开启编辑的区段 * 单区段编辑, 是否有默认编辑的区段 * 默认开启编辑的区段, 优先级高于数据返回的配置项 */ if (sectionSingleEdit) { vStatus = cardStatusToStr[0]; if (sectionDefaultEdit && sectionDefaultEdit.length) { vStatus = cardStatusToStr[Number(sectionDefaultEdit.includes(sCode))]; } } /** * vm 模板数据返回的区段编辑, 优先级高于 vm.props.sectionSingleEdit * 同时需要 vm.props.sectionSingleEdit 为 true */ if (isConfig !== 'undefined' && sectionSingleEdit) { vSingleEdit = isConfig; } var sectionProps = { props: _extends({}, _this.$props, { sectionSingleEdit: vSingleEdit, section: item, vmStatus: vStatus, // 单区段编辑, 控制编辑状态 cardStatus: vStatus, panel: panel }), scopedSlots: _extends({}, $scopedSlots), on: _extends({}, $listeners), ref: sCode, key: sCode + '-section' }; var card = h(Section, sectionProps); var sectionNodes = [card]; var afterSlotRes = afterSlot ? filterSlot(afterSlot({ panel: clonePanel, section: item })) : null; var customSlotRes = customSlot ? filterSlot(customSlot({ panel: clonePanel, section: item })) : null; if (customSlotRes && customSlotRes.length) { sectionNodes = [customSlotRes]; } if (afterSlotRes && afterSlotRes.length) { sectionNodes = [].concat(_toConsumableArray(sectionNodes), _toConsumableArray(afterSlotRes)); } return sectionNodes; }); } } };