vhb-table
Version:
一个基于 vue 的 PC 端表格组件,支持增删改查、虚拟列表、虚拟树、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、弹窗、自定义模板、渲染器、贼灵活的配置项、扩展接口等...
1 lines • 4.58 kB
JavaScript
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.default=void 0;var autoTxtElem,_xeUtils=_interopRequireDefault(require("xe-utils")),_conf=_interopRequireDefault(require("../../v-h-b-table/src/conf")),_size=_interopRequireDefault(require("../../mixins/size")),_utils=require("../../tools/utils");function _interopRequireDefault(t){return t&&t.__esModule?t:{default:t}}function _defineProperty(t,e,i){return e in t?Object.defineProperty(t,e,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[e]=i,t}var _default2={name:"VhbTextarea",mixins:[_size.default],model:{prop:"value",event:"modelValue"},props:{value:[String,Number],immediate:{type:Boolean,default:!0},name:String,readonly:Boolean,disabled:Boolean,placeholder: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}},className:String,size:{type:String,default:function(){return _conf.default.textarea.size||_conf.default.size}}},data:function(){return{inputValue:this.value}},computed:{inputCount:function(){return _xeUtils.default.getSize(this.inputValue)},isCountError:function(){return this.maxlength&&this.inputCount>_xeUtils.default.toNumber(this.maxlength)},defaultEvents:function(){var i=this,n={};return _xeUtils.default.each(this.$listeners,function(t,e){-1===["input","change","blur"].indexOf(e)&&(n[e]=i.triggerEvent)}),n.input=this.inputEvent,n.change=this.changeEvent,n.blur=this.blurEvent,n},sizeOpts:function(){return Object.assign({minRows:1,maxRows:10},_conf.default.textarea.autosize,this.autosize)}},watch:{value:function(t){this.inputValue=t,this.updateAutoTxt()}},mounted:function(){this.autosize&&(this.updateAutoTxt(),this.handleResize())},render:function(t){var e,i=this.className,n=this.defaultEvents,a=this.inputValue,u=this.vSize,r=this.name,s=this.form,o=this.resize,l=this.placeholder,d=this.readonly,h=this.disabled,c=this.maxlength,f=this.autosize,m=this.showWordCount,p=this.countMethod,x=this.rows,v=this.cols,g={name:r,form:s,placeholder:l,maxlength:c,readonly:d,disabled:h,rows:x,cols:v};return l&&(g.placeholder=(0,_utils.getFuncText)(l)),t("div",{class:["vhb-textarea",i,(e={},_defineProperty(e,"size--".concat(u),u),_defineProperty(e,"is--autosize",f),_defineProperty(e,"is--disabled",h),_defineProperty(e,"def--rows",!_xeUtils.default.eqNull(x)),_defineProperty(e,"def--cols",!_xeUtils.default.eqNull(v)),e)]},[t("textarea",{ref:"textarea",class:"vhb-textarea--inner",domProps:{value:a},attrs:g,style:o?{resize:o}:null,on:n}),m?t("span",{class:["vhb-textarea--count",{"is--error":this.isCountError}]},p?"".concat(p({value:a})):"".concat(this.inputCount).concat(c?"/".concat(c):"")):null])},methods:{focus:function(){return this.$refs.textarea.focus(),this.$nextTick()},blur:function(){return this.$refs.textarea.blur(),this.$nextTick()},triggerEvent:function(t){var e=this.inputValue;this.$emit(t.type,{value:e,$event:t})},emitUpdate:function(t,e){this.inputValue=t,this.$emit("modelValue",t),this.value!==t&&this.$emit("change",{value:t,$event:e})},inputEvent:function(t){var e=this.immediate,i=t.target.value;this.inputValue=i,e&&this.emitUpdate(i,t),this.handleResize(),this.triggerEvent(t)},changeEvent:function(t){this.immediate?this.triggerEvent(t):this.emitUpdate(this.inputValue,t)},blurEvent:function(t){var e=this.inputValue;this.immediate||this.emitUpdate(e,t),this.$emit("blur",{value:e,$event:t})},updateAutoTxt:function(){var t=this.$refs,e=this.inputValue,i=this.size;if(this.autosize){autoTxtElem||(autoTxtElem=document.createElement("div")),autoTxtElem.parentNode||document.body.appendChild(autoTxtElem);var n=t.textarea,a=getComputedStyle(n);autoTxtElem.className=["vhb-textarea--autosize",i?"size--".concat(i):""].join(" "),autoTxtElem.style.width="".concat(n.clientWidth,"px"),autoTxtElem.style.padding=a.padding,autoTxtElem.innerHTML=(""+(e||" ")).replace(/\n$/,"\n ")}},handleResize:function(){var c=this;this.autosize&&this.$nextTick(function(){var t=c.$refs,e=c.sizeOpts,i=e.minRows,n=e.maxRows,a=t.textarea,u=autoTxtElem.clientHeight,r=getComputedStyle(a),s=_xeUtils.default.toNumber(r.lineHeight),o=_xeUtils.default.toNumber(r.paddingTop)+_xeUtils.default.toNumber(r.paddingBottom)+_xeUtils.default.toNumber(r.borderTopWidth)+_xeUtils.default.toNumber(r.borderBottomWidth),l=(u-o)/s,d=l&&/[0-9]/.test(l)?l:Math.floor(l)+1,h=d;d<i?h=i:n<d&&(h=n),a.style.height="".concat(h*s+o,"px")})}}};exports.default=_default2;