UNPKG

vxe-table

Version:

一个基于 vue 的 PC 端表单/表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、JSON 配置式...

1 lines 4.6 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var autoTxtElem,_vue=require("vue"),_xeUtils=_interopRequireDefault(require("xe-utils")),_conf=_interopRequireDefault(require("../../v-x-e-table/src/conf")),_utils=require("../../tools/utils"),_size=require("../../hooks/size");function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}var _default=(0,_vue.defineComponent)({name:"VxeTextarea",props:{modelValue:[String,Number],className:String,immediate:{type:Boolean,default:!0},name:String,readonly:Boolean,disabled:Boolean,placeholder:{type:String,default:function(){return _xeUtils.default.eqNull(_conf.default.textarea.placeholder)?_conf.default.i18n("vxe.base.pleaseInput"):_conf.default.textarea.placeholder}},maxlength:[String,Number],rows:{type:[String,Number],default:2},cols:{type:[String,Number],default:null},showWordCount:Boolean,countMethod:Function,autosize:[Boolean,Object],form:String,resize:{type:String,default:function(){return _conf.default.textarea.resize}},size:{type:String,default:function(){return _conf.default.textarea.size||_conf.default.size}}},emits:["update:modelValue","input","keydown","keyup","click","change","focus","blur"],setup:function(p,e){function t(){var e,t=p.size,u=p.autosize,a=h.inputValue;u&&((autoTxtElem=autoTxtElem||document.createElement("div")).parentNode||document.body.appendChild(autoTxtElem),u=z.value,e=getComputedStyle(u),autoTxtElem.className=["vxe-textarea--autosize",t?"size--".concat(t):""].join(" "),autoTxtElem.style.width="".concat(u.clientWidth,"px"),autoTxtElem.style.padding=e.padding,autoTxtElem.innerHTML=(""+(a||" ")).replace(/\n$/,"\n "))}function x(e){var t=p.immediate,u=e.target.value;h.inputValue=u,t&&c(u,e),i.dispatchEvent("input",{value:u},e),s()}function v(e){p.immediate?N(e):c(h.inputValue,e)}function _(e){var t=p.immediate,u=h.inputValue;t||c(u,e),i.dispatchEvent("blur",{value:u},e)}var a=e.emit,u=(0,_vue.inject)("$xeform",null),n=(0,_vue.inject)("$xeformiteminfo",null),l=_xeUtils.default.uniqueId(),g=(0,_size.useSize)(p),h=(0,_vue.reactive)({inputValue:p.modelValue}),b=(0,_vue.ref)(),z=(0,_vue.ref)(),o={refElem:b,refTextarea:z},i={xID:l,props:p,context:e,reactData:h,getRefMaps:function(){return o}},y=(0,_vue.computed)(function(){return _xeUtils.default.getSize(h.inputValue)}),V=(0,_vue.computed)(function(){var e=y.value;return p.maxlength&&e>_xeUtils.default.toNumber(p.maxlength)}),r=(0,_vue.computed)(function(){return Object.assign({minRows:1,maxRows:10},_conf.default.textarea.autosize,p.autosize)}),s=function(){p.autosize&&(0,_vue.nextTick)(function(){var e=r.value,t=e.minRows,e=e.maxRows,u=z.value,a=autoTxtElem.clientHeight,n=getComputedStyle(u),l=_xeUtils.default.toNumber(n.lineHeight),n=_xeUtils.default.toNumber(n.paddingTop)+_xeUtils.default.toNumber(n.paddingBottom)+_xeUtils.default.toNumber(n.borderTopWidth)+_xeUtils.default.toNumber(n.borderBottomWidth),a=(a-n)/l,a=a&&/[0-9]/.test(""+a)?a:Math.floor(a)+1,o=a;a<t?o=t:e<a&&(o=e),u.style.height="".concat(o*l+n,"px")})},N=function(e){var t=h.inputValue;i.dispatchEvent(e.type,{value:t},e)},c=function(e,t){h.inputValue=e,a("update:modelValue",e),_xeUtils.default.toValueString(p.modelValue)!==e&&(d.dispatchEvent("change",{value:e},t),u)&&n&&u.triggerItemEvent(t,n.itemConfig.field,e)},d={dispatchEvent:function(e,t,u){a(e,Object.assign({$textarea:i,$event:u},t))},focus:function(){return z.value.focus(),(0,_vue.nextTick)()},blur:function(){return z.value.blur(),(0,_vue.nextTick)()}};Object.assign(i,d),(0,_vue.watch)(function(){return p.modelValue},function(e){h.inputValue=e,t()}),(0,_vue.nextTick)(function(){p.autosize&&(t(),s())});return i.renderVN=function(){var e=p.className,t=p.resize,u=p.placeholder,a=p.disabled,n=p.maxlength,l=p.autosize,o=p.showWordCount,i=p.countMethod,r=p.rows,s=p.cols,c=h.inputValue,d=g.value,f=V.value,m=y.value;return(0,_vue.h)("div",{ref:b,class:["vxe-textarea",e,((e={})["size--".concat(d)]=d,e["is--autosize"]=l,e["is--count"]=o,e["is--disabled"]=a,e["def--rows"]=!_xeUtils.default.eqNull(r),e["def--cols"]=!_xeUtils.default.eqNull(s),e)]},[(0,_vue.h)("textarea",{ref:z,class:"vxe-textarea--inner",value:c,name:p.name,placeholder:u?(0,_utils.getFuncText)(u):null,maxlength:n,readonly:p.readonly,disabled:a,rows:r,cols:s,style:t?{resize:t}:null,onInput:x,onChange:v,onKeydown:N,onKeyup:N,onClick:N,onFocus:N,onBlur:_}),o?(0,_vue.h)("span",{class:["vxe-textarea--count",{"is--error":f}]},i?"".concat(i({value:c})):"".concat(m).concat(n?"/".concat(n):"")):null])},i},render:function(){return this.renderVN()}});exports.default=_default;