@blueking/vxe-table
Version:
一个基于 vue 的 PC 端表格组件,支持增删改查、虚拟树、列拖拽,懒加载、快捷菜单、数据校验、树形结构、打印、导入导出、自定义模板、渲染器、JSON 配置式...
1 lines • 6.9 kB
JavaScript
var _vue=require("vue"),_xeUtils=_interopRequireDefault(require("xe-utils")),_ui=require("../../../ui"),_utils=require("../../../ui/src/utils"),_dom=require("../../../ui/src/dom"),_util=require("../../src/util"),_log=require("../../../ui/src/log");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}let{getConfig,validators,hooks}=_ui.VxeUI;class Rule{constructor(e){Object.assign(this,{$options:e,required:e.required,min:e.min,max:e.max,type:e.type,pattern:e.pattern,validator:e.validator,trigger:e.trigger,maxWidth:e.maxWidth})}get content(){return(0,_utils.getFuncText)(this.$options.content||this.$options.message)}get message(){return this.content}}let tableValidatorMethodKeys=["fullValidate","validate","fullValidateField","validateField","clearValidate"];hooks.add("tableValidatorModule",{setupTable(m){let{props:v,reactData:h,internalData:l}=m,g=m.getRefMaps().refValidTooltip,{computeValidOpts:p,computeTreeOpts:_,computeEditOpts:r}=m.getComputeMaps(),x={},w={},R,t=(e,t,s,a)=>{let u={},{editRules:o,treeConfig:r}=v;var i=l.afterFullData,n=_.value,n=n.children||n.childrenField;let d=p.value,c,g=(!0===e?c=i:e&&(_xeUtils.default.isFunction(e)?s=e:c=_xeUtils.default.isArray(e)?e:[e]),c=c||(m.getInsertRecords?m.getInsertRecords().concat(m.getUpdateRecords()):[]),[]),f=(l._lastCallTime=Date.now(),R=!1,x.clearValidate(),{});if(o){let l=t&&t.length?t:m.getColumns();i=i=>{if(a||!R){let e=[];l.forEach(t=>{let r=_xeUtils.default.isString(t)?t:t.field;!a&&R||!_xeUtils.default.has(o,r)||e.push(w.validCellRules("all",i,t).catch(({rule:e,rules:l})=>{l={rule:e,rules:l,rowIndex:m.getRowIndex(i),row:i,columnIndex:m.getColumnIndex(t),column:t,field:r,$table:m};if(u[r]||(u[r]=[]),f[(0,_util.getRowid)(m,i)+":"+t.id]={column:t,row:i,rule:e,content:e.content},u[r].push(l),!a)return R=!0,Promise.reject(l)}))}),g.push(Promise.all(e))}};return r?_xeUtils.default.eachTree(c,i,{children:n}):c.forEach(i),Promise.all(g).then(()=>{let e=Object.keys(u);var l,t,r;return h.validErrorMaps=(l=f,"single"===p.value.msgMode?(t={},(r=Object.keys(l)).length&&(t[r=r[0]]=l[r]),t):l),(0,_vue.nextTick)().then(()=>{if(e.length)return Promise.reject(u[e[0]][0]);s&&s()})}).catch(a=>new Promise((e,l)=>{let t=()=>{(0,_vue.nextTick)(()=>{s?(s(u),e()):("obsolete"===getConfig().validToReject?l:e)(u)})};var r,i=()=>{var l;a.cell=m.getCellElement(a.row,a.column),(0,_dom.scrollToView)(a.cell),l=a,new Promise(e=>{!1===p.value.autoPos?(m.dispatchEvent("valid-error",l,null),e()):m.handleEdit(l,{type:"valid-error",trigger:"call"}).then(()=>{e(w.showValidTooltip(l))})}).then(t)};!1===d.autoPos?t():(r=a.row,m.scrollToRow(r,a.column).then(i))}))}return h.validErrorMaps={},(0,_vue.nextTick)().then(()=>{s&&s()})},U=(x={fullValidate(e,l){return"development"===process.env.NODE_ENV&&_xeUtils.default.isFunction(l)&&(0,_log.warnLog)("vxe.error.notValidators",["fullValidate(rows, callback)","fullValidate(rows)"]),t(e,null,l,!0)},validate(e,l){return t(e,null,l)},fullValidateField(e,l){l=(_xeUtils.default.isArray(l)?l:l?[l]:[]).map(e=>(0,_util.handleFieldOrColumn)(m,e));return l.length?t(e,l,null,!0):(0,_vue.nextTick)()},validateField(e,l){l=(_xeUtils.default.isArray(l)?l:l?[l]:[]).map(e=>(0,_util.handleFieldOrColumn)(m,e));return l.length?t(e,l,null):(0,_vue.nextTick)()},clearValidate(e,l){var r=h.validErrorMaps,t=g.value,i=p.value,e=_xeUtils.default.isArray(e)?e:e?[e]:[];let a=(_xeUtils.default.isArray(l)?l:l?[l]:[]).map(e=>(0,_util.handleFieldOrColumn)(m,e)),s={};if(t&&t.reactData.visible&&t.close(),"single"===i.msgMode)h.validErrorMaps={};else{if(e.length&&a.length)s=Object.assign({},r),e.forEach(l=>{a.forEach(e=>{e=(0,_util.getRowid)(m,l)+":"+e.id;s[e]&&delete s[e]})});else if(e.length){let t=e.map(e=>""+(0,_util.getRowid)(m,e));_xeUtils.default.each(r,(e,l)=>{-1<t.indexOf(l.split(":")[0])&&(s[l]=e)})}else if(a.length){let t=a.map(e=>""+e.id);_xeUtils.default.each(r,(e,l)=>{-1<t.indexOf(l.split(":")[1])&&(s[l]=e)})}h.validErrorMaps=s}return(0,_vue.nextTick)()}},(e,l)=>{var{type:e,min:t,max:r,pattern:i}=e,e="number"===e,a=e?_xeUtils.default.toNumber(l):_xeUtils.default.getSize(l);return!(!e||!isNaN(l))||!_xeUtils.default.eqNull(t)&&a<_xeUtils.default.toNumber(t)||!_xeUtils.default.eqNull(r)&&a>_xeUtils.default.toNumber(r)||!(!i||(_xeUtils.default.isRegExp(i)?i:new RegExp(i)).test(l))});return w={validCellRules(e,d,c,l){var t=v.editRules,r=c.field;let g=[],f=[];if(r&&t){let n=_xeUtils.default.get(t,r);if(n){let o=_xeUtils.default.isUndefined(l)?_xeUtils.default.get(d,r):l;n.forEach(l=>{let{type:t,trigger:r,required:i,validator:a}=l;if("all"===e||!r||e===r)if(a){var s={cellValue:o,rule:l,rules:n,row:d,rowIndex:m.getRowIndex(d),column:c,columnIndex:m.getColumnIndex(c),field:c.field,$table:m,$grid:m.xegrid};let e;_xeUtils.default.isString(a)?(u=validators.get(a))?(u=u.tableCellValidatorMethod||u.cellValidatorMethod)?e=u(s):"development"===process.env.NODE_ENV&&(0,_log.warnLog)("vxe.error.notValidators",[a]):"development"===process.env.NODE_ENV&&(0,_log.errLog)("vxe.error.notValidators",[a]):e=a(s),e&&(_xeUtils.default.isError(e)?(R=!0,g.push(new Rule({type:"custom",trigger:r,content:e.message,rule:new Rule(l)}))):e.catch&&f.push(e.catch(e=>{R=!0,g.push(new Rule({type:"custom",trigger:r,content:e&&e.message?e.message:l.content||l.message,rule:new Rule(l)}))})))}else{var u="array"===t,s=_xeUtils.default.isArray(o);let e=!0;e=u||s?!s||!o.length:_xeUtils.default.isString(o)?(0,_utils.eqEmptyValue)(o.trim()):(0,_utils.eqEmptyValue)(o),(i?e||U(l,o):!e&&U(l,o))&&(R=!0,g.push(new Rule(l)))}})}}return Promise.all(f).then(()=>{var e;if(g.length)return e={rules:g,rule:g[0]},Promise.reject(e)})},hasCellRules(l,e,t){var r=v.editRules,t=t.field;return!(!t||!r)&&(r=_xeUtils.default.get(r,t))&&!!_xeUtils.default.find(r,e=>"all"===l||!e.trigger||l===e.trigger)},triggerValidate(i){var{editConfig:e,editRules:l}=v,a=h.editStore,a=a.actived;let s=r.value;var t=p.value;if(l&&"single"===t.msgMode&&(h.validErrorMaps={}),e&&l&&a.row){let{row:l,column:t,cell:r}=a.args;if(w.hasCellRules(i,l,t))return w.validCellRules(i,l,t).then(()=>{"row"===s.mode&&x.clearValidate(l,t)}).catch(({rule:e})=>e.trigger&&i!==e.trigger?Promise.resolve():(e={rule:e,row:l,column:t,cell:r},w.showValidTooltip(e),Promise.reject(e)))}return Promise.resolve()},showValidTooltip(e){var l=v.height,{tableData:t,validStore:r,validErrorMaps:i}=h,{rule:a,row:s,column:u,cell:o}=e,n=p.value,d=g.value,c=a.content;return r.visible=!0,"single"===n.msgMode?h.validErrorMaps={[(0,_util.getRowid)(m,s)+":"+u.id]:{column:u,row:s,rule:a,content:c}}:h.validErrorMaps=Object.assign({},i,{[(0,_util.getRowid)(m,s)+":"+u.id]:{column:u,row:s,rule:a,content:c}}),m.dispatchEvent("valid-error",e,null),d&&("tooltip"===n.message||"default"===n.message&&!l&&t.length<2)?d.open(o,c):(0,_vue.nextTick)()}},Object.assign(Object.assign({},x),w)},setupGrid(e){return e.extendTableMethods(tableValidatorMethodKeys)}});