vue-ant-patterns
Version:
vue-ant-patterns
233 lines (186 loc) • 7.41 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _utils = require('../../lib/_utils');
var _defaultProps = require('./defaultProps');
var _defaultProps2 = _interopRequireDefault(_defaultProps);
var _mixinBase = require('./mixinBase');
var _mixinBase2 = _interopRequireDefault(_mixinBase);
var _utils2 = require('./utils');
var _extend = require('extend');
var _extend2 = _interopRequireDefault(_extend);
var _Section = require('./Section');
var _Section2 = _interopRequireDefault(_Section);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
/*
* @Author: w.pengfei
* @Date: 2020-06-22 13:29:49
* @LastEditTime: 2021-04-22 10:21:34
* @Description: ''
* @LastEditors: w.pengfei
*/
var cardStatusToStr = ['view', 'edit'];
exports['default'] = {
name: 'RenderMixin',
mixins: [_mixinBase2['default']],
props: (0, _extends3['default'])({}, _defaultProps2['default']),
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 = (0, _slicedToArray3['default'])(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((0, _toConsumableArray3['default'])(sectionList));
cloneList = cloneList.map(function (item) {
if ((0, _utils.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
*/
(0, _utils.sortList)(cloneList);
var clonePanel = (0, _extend2['default'])({}, panel);
var firstSlotRes = firstSlot ? (0, _utils2.filterSlot)(firstSlot({ panel: clonePanel })) : null;
var lastSlotRes = lastSlot ? (0, _utils2.filterSlot)(lastSlot({ panel: clonePanel })) : null;
if (firstSlotRes) {
cloneList = [].concat((0, _toConsumableArray3['default'])(firstSlotRes), (0, _toConsumableArray3['default'])(cloneList));
}
if (lastSlotRes) {
cloneList = [].concat((0, _toConsumableArray3['default'])(cloneList), (0, _toConsumableArray3['default'])(lastSlotRes));
}
return cloneList.map(function (item) {
if ((0, _utils.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: (0, _extends3['default'])({}, _this.$props, {
sectionSingleEdit: vSingleEdit,
section: item,
vmStatus: vStatus,
// 单区段编辑, 控制编辑状态
cardStatus: vStatus,
panel: panel
}),
scopedSlots: (0, _extends3['default'])({}, $scopedSlots),
on: (0, _extends3['default'])({}, $listeners),
ref: sCode,
key: sCode + '-section'
};
var card = h(_Section2['default'], sectionProps);
var sectionNodes = [card];
var afterSlotRes = afterSlot ? (0, _utils2.filterSlot)(afterSlot({ panel: clonePanel, section: item })) : null;
var customSlotRes = customSlot ? (0, _utils2.filterSlot)(customSlot({ panel: clonePanel, section: item })) : null;
if (customSlotRes && customSlotRes.length) {
sectionNodes = [customSlotRes];
}
if (afterSlotRes && afterSlotRes.length) {
sectionNodes = [].concat((0, _toConsumableArray3['default'])(sectionNodes), (0, _toConsumableArray3['default'])(afterSlotRes));
}
return sectionNodes;
});
}
}
};