UNPKG

vue-ant-patterns

Version:

vue-ant-patterns

394 lines (353 loc) 13.5 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _babelHelperVueJsxMergeProps = require('babel-helper-vue-jsx-merge-props'); var _babelHelperVueJsxMergeProps2 = _interopRequireDefault(_babelHelperVueJsxMergeProps); var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); var _vueTypes = require('ant-design-vue/lib/_util/vue-types'); var _vueTypes2 = _interopRequireDefault(_vueTypes); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _vuedraggable = require('vuedraggable'); var _vuedraggable2 = _interopRequireDefault(_vuedraggable); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var DFormList = { name: 'DFormList', props: { prefixCls: _vueTypes2['default'].string.def('depot-dformlist'), columns: _vueTypes2['default'].array, // 标题列数组 dataSource: _vueTypes2['default'].array, // 数据数组 sortDone: _vueTypes2['default'].func, // 排序调整回调方法 removeDone: _vueTypes2['default'].func, // 移除行数据回调方法 addDone: _vueTypes2['default'].func, // 新增行回调方法 showAddBtn: _vueTypes2['default'].bool.def(true), // 是否可新增 showRemoveBtn: _vueTypes2['default'].bool.def(true), // 是否可移除 isDrag: _vueTypes2['default'].bool.def(true), // 是否允许拖拽排序 addlabel: _vueTypes2['default'].string }, model: { prop: 'dataSource', event: 'change' }, data: function data() { return { dataSource_data: this.dataSource, formObjList: [] }; }, watch: { dataSource: { handler: function handler(val, oval) { this.formObjList = []; this.dataSource_data = val; }, deep: true } }, methods: { /** * 新增列表项 * @param {*} e */ addListItem: function addListItem(e) { var olddata = [].concat((0, _toConsumableArray3['default'])(this.dataSource_data)); var newData = {}; this.columns.forEach(function (citem, cindex) { newData[citem.dataIndex] = ''; }); var newRdata = this.dataSource_data.concat([newData]); this.$emit('addDone', newRdata, olddata); }, /** * 删除列表项方法 * @param {*} mindex */ minusListItem: function minusListItem(mindex) { var _this = this; var olditem = this.dataSource_data[mindex]; this.formObjList.splice(mindex, 1); var newDataSource = this.formObjList.map(function (_fobj, _findex) { return (0, _extends3['default'])({}, _this.dataSource_data[_findex], _fobj.getFieldsValue()); }); this.$emit('removeDone', newDataSource, mindex, olditem); }, /** * 值变更回调 * * @param {*} dindex * @param {*} values */ changeValue: function changeValue(dindex, values) { var newdata = this.collectDataSource(dindex, values); this.$emit('changeDone', newdata, dindex, values); }, /** * @description: change 收集新数据 * @param {type} * @return: */ collectDataSource: function collectDataSource(dindex, values) { var _this2 = this; var newDataSource = this.formObjList.map(function (_fobj, _findex) { return (0, _extends3['default'])({}, _this2.dataSource_data[_findex], _fobj.getFieldsValue()); }); newDataSource[dindex] = (0, _extends3['default'])({}, this.dataSource_data[dindex], newDataSource[dindex], values); return newDataSource; }, /** * 排序变更回调 * @param {*} element * @param {*} newIndex * @param {*} oldIndex */ sortCBack: function sortCBack(element, newIndex, oldIndex) { this.$emit('sortDone', this.dataSource_data, element, newIndex, oldIndex); }, /** * @description: 构建行 * @param {type} * @return: */ renderListBody: function renderListBody(ditem, dindex) { var _this3 = this; var h = this.$createElement; var prefixCls = this.prefixCls, columns = this.columns; var formobj = this.formObjList[dindex] ? this.formObjList[dindex] : this.$form.createForm(this, { onValuesChange: function onValuesChange(props, values) { _this3.changeValue(dindex, values); } }); this.formObjList[dindex] = formobj; var getFieldDecorator = formobj.getFieldDecorator; var resDoms = columns.map(function (citem, cindex) { var _cx; var controwitemProps = { 'class': (0, _classnames2['default'])((_cx = {}, (0, _defineProperty3['default'])(_cx, prefixCls + '-content-row-item', true), (0, _defineProperty3['default'])(_cx, prefixCls + '-content-row-item-flex', !citem.width), _cx)) }; var v = ditem[citem.dataIndex]; var rules = citem.rules; var rdom = getFieldDecorator(citem.dataIndex, { initialValue: v, rules: rules })(_this3.renderDom(citem, dindex, v)); return h( 'a-form-item', (0, _babelHelperVueJsxMergeProps2['default'])([controwitemProps, { style: { width: citem.width ? citem.width + 'px' : 'auto', 'margin-right': '0px' } }]), [rdom] ); }); var resformProps = { props: { form: formobj, layout: 'inline' }, style: { display: 'flex', width: '100%', flex: 1 } }; var resform = h( 'a-form', resformProps, [resDoms] ); return resform; }, /** * @description: 构建输入组件 * @param {type} * @return: */ renderDom: function renderDom(citem, dindex, v) { var h = this.$createElement; var $slots = this.$slots, $scopedSlots = this.$scopedSlots, dataSource_data = this.dataSource_data; var slot_name = citem.dataIndex; var _vnode = $scopedSlots[slot_name] && $scopedSlots[slot_name]({ record: dataSource_data[dindex], index: dindex }) || h('a-input', (0, _babelHelperVueJsxMergeProps2['default'])([{ attrs: { size: 'small' } }, citem.wrappers])); return _vnode; }, /** * 校验 并获取字段 value * 返回 promise */ validateFields: function validateFields() { var _this4 = this; var formObjList = this.formObjList; // validateFields var errorsArray = []; formObjList.forEach(function (_formItem) { _formItem.validateFields(function (errors, values) { errorsArray.push(errors); }); }); var hasErr = errorsArray.some(function (errItem) { return errItem !== null; }); return new Promise(function (resolve, reject) { resolve({ errors: hasErr ? errorsArray : undefined, values: _this4.dataSource_data }); }); } }, render: function render() { var _cx4, _cx5, _this5 = this, _cx7, _cx8, _cx9, _cx10, _cx11; var h = arguments[0]; var prefixCls = this.prefixCls, columns = this.columns, dataSource_data = this.dataSource_data, showAddBtn = this.showAddBtn, showRemoveBtn = this.showRemoveBtn, isDrag = this.isDrag, addlabel = this.addlabel, $slots = this.$slots; var dformlistProps = { 'class': (0, _classnames2['default'])((0, _defineProperty3['default'])({}, '' + prefixCls, true)) }; var titleProps = { 'class': (0, _classnames2['default'])((0, _defineProperty3['default'])({}, prefixCls + '-title', true)) }; var titleiconProps = { 'class': (0, _classnames2['default'])((_cx4 = {}, (0, _defineProperty3['default'])(_cx4, prefixCls + '-title-icon', true), (0, _defineProperty3['default'])(_cx4, prefixCls + '-title-icon-hidden', !isDrag), _cx4)) }; var titleoperationProps = { 'class': (0, _classnames2['default'])((_cx5 = {}, (0, _defineProperty3['default'])(_cx5, prefixCls + '-title-operation', true), (0, _defineProperty3['default'])(_cx5, prefixCls + '-title-operation-hidden', !showRemoveBtn), _cx5)) }; var contProps = { 'class': (0, _classnames2['default'])((0, _defineProperty3['default'])({}, prefixCls + '-content', true)), props: { list: dataSource_data }, attrs: { handle: '.icondraganddrop' }, on: { start: function start(e) { e.item.classList.add(prefixCls + '-content-dropactive'); }, end: function end(e) { e.item.classList.remove(prefixCls + '-content-dropactive'); }, change: function change(e) { var _e$moved = e.moved, element = _e$moved.element, newIndex = _e$moved.newIndex, oldIndex = _e$moved.oldIndex; _this5.sortCBack(element, newIndex, oldIndex); } } }; var controwProps = { 'class': (0, _classnames2['default'])((_cx7 = {}, (0, _defineProperty3['default'])(_cx7, prefixCls + '-content-row', true), (0, _defineProperty3['default'])(_cx7, prefixCls + '-content-row-cursormove', isDrag), _cx7)) }; var controwiconProps = { 'class': (0, _classnames2['default'])((_cx8 = {}, (0, _defineProperty3['default'])(_cx8, prefixCls + '-content-row-icon', true), (0, _defineProperty3['default'])(_cx8, prefixCls + '-content-row-icon-hidden', !isDrag), (0, _defineProperty3['default'])(_cx8, 'handleicon', true), _cx8)) }; var dragiconProps = { 'class': (0, _classnames2['default'])((_cx9 = {}, (0, _defineProperty3['default'])(_cx9, 'iconfont', true), (0, _defineProperty3['default'])(_cx9, 'icondraganddrop', true), (0, _defineProperty3['default'])(_cx9, prefixCls + '-content-row-dragicon', true), _cx9)) }; var controwoperationProps = { 'class': (0, _classnames2['default'])((_cx10 = {}, (0, _defineProperty3['default'])(_cx10, prefixCls + '-content-row-operation', true), (0, _defineProperty3['default'])(_cx10, prefixCls + '-content-row-operation-hidden', !showRemoveBtn), _cx10)) }; var footProps = { 'class': (0, _classnames2['default'])((_cx11 = {}, (0, _defineProperty3['default'])(_cx11, prefixCls + '-foot', true), (0, _defineProperty3['default'])(_cx11, prefixCls + '-foot-hidden', !showAddBtn), _cx11)), on: { click: this.addListItem } }; var plusProps = { 'class': (0, _classnames2['default'])((0, _defineProperty3['default'])({}, prefixCls + '-content-row-plusicon', true)), props: { style: { fontSize: '18px' }, type: 'plus' } }; var minusProps = { 'class': (0, _classnames2['default'])((0, _defineProperty3['default'])({}, prefixCls + '-content-row-minusicon', true)), props: { type: 'minus-circle' } }; return h( 'div', dformlistProps, [h( 'div', titleProps, [h('div', titleiconProps), columns.map(function (citem, cindex) { var _cx14; var titleitemProps = { 'class': (0, _classnames2['default'])((_cx14 = {}, (0, _defineProperty3['default'])(_cx14, prefixCls + '-title-item', true), (0, _defineProperty3['default'])(_cx14, prefixCls + '-title-item-flex', !citem.width), _cx14)) }; return h( 'div', (0, _babelHelperVueJsxMergeProps2['default'])([titleitemProps, { style: { width: citem.width ? citem.width + 'px' : 'auto' } }]), [h( 'span', { 'class': citem && citem.rules && citem.rules.find(function (_ritem) { return _ritem.required; }) ? 'formlistTitlerequired' : '' }, [citem.title] )] ); }), h('div', titleoperationProps)] ), h( _vuedraggable2['default'], contProps, [h( 'transition-group', { attrs: { type: 'transition', name: 'flip-list' } }, [dataSource_data.map(function (ditem, dindex) { // const k = ditem[rowKey]; return h( 'div', (0, _babelHelperVueJsxMergeProps2['default'])([controwProps, { key: dindex }]), [h( 'div', controwiconProps, [h('span', dragiconProps)] ), _this5.renderListBody(ditem, dindex), h( 'div', controwoperationProps, [h('a-icon', (0, _babelHelperVueJsxMergeProps2['default'])([minusProps, { on: { 'click': function click() { return _this5.minusListItem(dindex); } } }]))] )] ); })] )] ), h( 'div', footProps, [addlabel ? addlabel : $slots.addlabel ? $slots.addlabel : h('a-icon', plusProps)] )] ); } }; exports['default'] = DFormList;