vxe-table-demonic
Version:
一个基于 vue 的 PC 端表单/表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、JSON 配置式...
1 lines • 4.43 kB
JavaScript
;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},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,n=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.innerText=(""+(n||" ")).replace(/\n$/,"\n "))}function v(e){var t=p.immediate,u=e.target.value;h.inputValue=u,t&&c(u,e),o.dispatchEvent("input",{value:u},e),s()}function x(e){p.immediate?T(e):c(h.inputValue,e)}function _(e){var t=p.immediate,u=h.inputValue;t||c(u,e),o.dispatchEvent("blur",{value:u},e)}var n=e.emit,u=(0,_vue.inject)("$xeform",null),a=(0,_vue.inject)("$xeformiteminfo",null),i=_xeUtils.default.uniqueId(),g=(0,_size.useSize)(p),h=(0,_vue.reactive)({inputValue:p.modelValue}),b=(0,_vue.ref)(),z=(0,_vue.ref)(),l={refElem:b,refTextarea:z},o={xID:i,props:p,context:e,reactData:h,getRefMaps:function(){return l}},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,n=autoTxtElem.clientHeight,a=getComputedStyle(u),i=_xeUtils.default.toNumber(a.lineHeight),a=_xeUtils.default.toNumber(a.paddingTop)+_xeUtils.default.toNumber(a.paddingBottom)+_xeUtils.default.toNumber(a.borderTopWidth)+_xeUtils.default.toNumber(a.borderBottomWidth),n=(n-a)/i,n=n&&/[0-9]/.test(""+n)?n:Math.floor(n)+1,l=n;n<t?l=t:e<n&&(l=e),u.style.height="".concat(l*i+a,"px")})},T=function(e){var t=h.inputValue;o.dispatchEvent(e.type,{value:t},e)},c=function(e,t){h.inputValue=e,n("update:modelValue",e),_xeUtils.default.toValueString(p.modelValue)!==e&&(d.dispatchEvent("change",{value:e},t),u)&&a&&u.triggerItemEvent(t,a.itemConfig.field,e)},d={dispatchEvent:function(e,t,u){n(e,Object.assign({$textarea:o,$event:u},t))},focus:function(){return z.value.focus(),(0,_vue.nextTick)()},blur:function(){return z.value.blur(),(0,_vue.nextTick)()}};Object.assign(o,d),(0,_vue.watch)(function(){return p.modelValue},function(e){h.inputValue=e,t()}),(0,_vue.nextTick)(function(){p.autosize&&(t(),s())});return o.renderVN=function(){var e=p.className,t=p.resize,u=p.placeholder,n=p.disabled,a=p.maxlength,i=p.autosize,l=p.showWordCount,o=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"]=i,e["is--count"]=l,e["is--disabled"]=n,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:a,readonly:p.readonly,disabled:n,rows:r,cols:s,style:t?{resize:t}:null,onInput:v,onChange:x,onKeydown:T,onKeyup:T,onClick:T,onFocus:T,onBlur:_}),l?(0,_vue.h)("span",{class:["vxe-textarea--count",{"is--error":f}]},o?"".concat(o({value:c})):"".concat(m).concat(a?"/".concat(a):"")):null])},o},render:function(){return this.renderVN()}});exports.default=_default;