@jecloud/ui
Version:
JECloud UI库,基于ant-design-vue封装
1 lines • 2.59 kB
JavaScript
import{isVNode as e,createVNode as c,mergeProps as l}from"vue";import{defineComponent as n,watch as t,computed as o}from"vue";import{Switch as u}from"ant-design-vue";import{filterEmpty as i}from"../../utils/props";import{useModelValue as a}from"../../hooks";import{isNotEmpty as d,isEmpty as r,pick as h}from"@jecloud/utils";import s from"../../checkbox";function v(c){return"function"==typeof c||"[object Object]"===Object.prototype.toString.call(c)&&!e(c)}export default n({name:"JeSwitch",inheritAttrs:!1,props:{checkedValue:{type:[String,Number,Boolean],default:"1"},unCheckedValue:{type:[String,Number,Boolean],default:"0"},checkedChildren:String,unCheckedChildren:String,checkedIcon:String,unCheckedIcon:String,emptyValue:{type:Boolean,default:!0},mode:{type:String,default:"switch",validator:function(e){return["switch","checkbox"].includes(e)}},value:{type:[String,Number,Boolean],default:"0"},checked:Boolean,label:String,labelConfig:Object,iconConfig:Object,readonly:Boolean,disabled:Boolean},emits:["update:value","update:checked"],setup:function(e,n){var k=n.slots,f=n.attrs,p=a({props:e,context:n,changeEvent:!0}),m=a({props:e,context:n,key:"checked"}),b=o((function(){return e.readonly||e.disabled}));return t((function(){return p.value}),(function(){m.value=p.value===e.checkedValue}),{immediate:!0}),t((function(){return m.value}),(function(){m.value?p.value=e.checkedValue:e.emptyValue&&!d(p.value)||(p.value=e.unCheckedValue)})),function(){var n,t,o,a,C,g,j;if("switch"===e.mode)return c(u,l({class:"je-switch"},f,h(e,["checkedChildren","unCheckedChildren","checkedValue","unCheckedValue"]),{disabled:b.value,checked:p.value,"onUpdate:checked":function(e){return p.value=e}}),k);var w=i((null!==(o=null===(t=k.label)||void 0===t?void 0:t.call(k))&&void 0!==o?o:e.label)||(m.value?null!==(C=null===(a=k.checkedChildren)||void 0===a?void 0:a.call(k))&&void 0!==C?C:e.checkedChildren:null!==(j=null===(g=k.unCheckedChildren)||void 0===g?void 0:g.call(k))&&void 0!==j?j:e.unCheckedChildren)),y=e.checkedIcon||e.unCheckedIcon;return r(y)?c(s,{class:"je-switch je-switch-checkbox",disabled:b.value,checked:m.value,"onUpdate:checked":function(e){return m.value=e}},v(w)?w:{default:function(){return[w]}}):c("div",{class:["je-switch je-switch-checkbox je-switch-checkbox-custom",{"je-switch-disabled":b.value,"je-switch-checked":m.value}],onClick:function(){b.value||(m.value=!m.value)}},[c("i",l({class:(n={"je-switch-icon":!0},n[e.checkedIcon]=m.value,n[e.unCheckedIcon]=!m.value,n)},e.iconConfig),null),d(w)?c("span",l({class:"je-switch-label"},e.labelConfig),[w]):null])}}});