UNPKG

@cataract6545/tmui

Version:

tm-vuetify是一个新势力由主题驱动的UI组件库,相比其它优势大,组件全,设计趋势紧跟未来。具有主题生成,主题实时切换,暗黑实时切换,lottie动画,图表等新颖功能,tmui TMUI

248 lines (241 loc) 5.79 kB
import colors from '../theme/theme'; import { cssDirection, linearDirection, linearDeep, borderStyle, cssstyle, tmVuetify, cssDirectionType, linearDirectionType, linearDeepType, borderStyleType } from './interface'; import { computed,PropType,ref } from "vue" import { borderDirectionType, linearType } from '@/tmui/interface'; // import { useTmpiniaStore } from './tmpinia'; // const store = useTmpiniaStore(); //自定义props export const custom_props = { /** * 自定义的样式属性 */ _style: { type: [Array, String, Object], default: () => [] }, /** * 自定义类名 */ _class: { type: [Array, String], default: '' }, /** * 当前组件的主题。可以是颜色值,也可以是主题名称。 */ color: { type: String, default: 'primary' }, /** * 是否跟随全局主题的变换而变换 */ followTheme: { type: [Boolean, String], default: false }, /** * 暗黑 */ dark: { type: [Boolean, String], default: false }, /** * 是否跟随主题全局切换暗黑模式。 */ followDark: { type: [Boolean, String], default: true }, /** * 圆角 */ round: { type: [Number,Array] as PropType<Number|Number[]>, default: 0 }, /** * 投影,安卓上只有黑灰投影。 */ shadow: { type: [Number], default: 0,//4 }, /** * 是否镂空背景。 */ outlined: { type: [Boolean], default: false }, /** * 边线 */ border: { type: [Number], default: 0 }, /** * 边线样式 * @field solid|dashed|dotted * @default solid */ borderStyle: { type: String as PropType<borderStyleType>, default: borderStyle.solid }, /** * 边线的方向。 */ borderDirection: { type: String as PropType<borderDirectionType>, default: cssDirection.all }, /** * 是否浅色背景 */ text: { type: [Boolean, String], default: false }, /** * 是否透明背景 */ transprent: { type: [Boolean, String], default: true }, /** * 是否透明背景,等同transprent,因单词拼写错误,现在写一个正确的。 */ transparent: { type: [Boolean, String], default: true }, /** * 渐变背景方向, * left:右->左,right:左->右。top:下->上,bottom:上->下。 */ linear: { type: String as PropType<linearType>, default: '' }, /** 渐变的亮浅 light,dark,accent亮系渐变和深色渐变。 */ linearDeep: { type: String as PropType<linearDeepType>, default: 'light' }, /**当开启渐变时,如果提供些数组属性将产生自定义颜色的渐变值。 */ linearColor:{ type:[Array] as PropType<Array<string>>, default:()=>[] }, //是否禁用圆角功能 ,针对安卓的特别处理。 isDisabledRoundAndriod: { type: [Boolean, String], default: false }, //是否开启磨砂背景。 blur:{ type:Boolean, default:false }, /**线的边线颜色,如果不提供自动从color中匹配计算。 */ borderColor:{ type:String, default:"" } } //暗黑状态。 export const computedDark = (props: any, tmcfg: tmVuetify): boolean => { const followDark = props.followDark; const dark = props.dark; const glboalDark = tmcfg.dark; if (followDark) { return glboalDark; } return dark; } //自定义类计算属性。 export const computedClass = (props: any): string => { const _class = props._class; if (typeof _class == 'string') { return _class } if (Array.isArray(_class)) { return _class.join(' '); } return ''; } //自定义样式计算属性。 export const computedStyle = (props: any): object => { const _style = props._style; if (typeof _style == 'string') { let p = _style.split(";"); let k = p.map(el => { el = el.replace(";", ""); let node: any = {}; let idx = el.split(":"); node[idx[0]] = idx[1]; return node; }) let kl = {}; k.forEach(el => { kl = { ...kl, ...el } }) return kl; } if (typeof _style == 'object' && !Array.isArray(_style)) { return _style; } if (typeof _style == 'object' && Array.isArray(_style)) { let kl = {}; _style.forEach(el => { kl = { ...kl, ...el } }) return kl; } return {}; } //主题样式表 export const computedTheme = (props: any, dark:boolean,store:any):cssstyle => { const color = props.color; const border = props.border; const shadow = props.shadow; const round = props.round; const outlined = props.outlined; const text = props.text; const borderStyle = props.borderStyle; const borderDirection = props.borderDirection; const linear = props.linear; const linearDeep = props.linearDeep; const blur = props.blur; var borderColor = props?.borderColor??''; var theme = new colors.themeColors(store.colorList); if (colors.isCssColor(color)&&!theme.hasColors(color)) { // console.error('不支持自定义组件上的颜色值,请在theme/theme.js中添加自定义的颜色值为主题。当前已切换为primary主题。'); theme = new colors.themeColors(theme.add(color,color)); } let defaultColorName = color || 'primary'; if(props?.followTheme==true&&store.color){ defaultColorName = store.color; borderColor = "" } let c = theme.getTheme({ colorname: defaultColorName, dark: dark, borderWidth: border, shadow: parseInt(String(shadow)), round: parseInt(String(round)), outlined: outlined ? true : false, text: text ? true : false, borderStyle: borderStyle, borderDirection: <cssDirectionType>borderDirection, linearDirection: <linearDirectionType>linear, linearDeep: <linearDeep>linearDeep, blur: blur, borderColor:borderColor }); return c; };