| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import { computed } from "vue";
- import { useTheme } from "../theme/ThemeDefine";
- import type { FlexProps } from "./FlexView.vue";
- import { configMargin, configPadding } from "../theme/ThemeTools";
- export function useBaseViewStyleBuilder(props: FlexProps) {
-
- const themeContext = useTheme();
- const commonStyle = computed(() => {
- const obj : Record<string, any> = {
- display: 'flex',
- flexDirection: props.direction,
- flexBasis: props.flexBasis,
- flexGrow: props.flexGrow,
- flexShrink: props.flexShrink,
- justifyContent: props.center ? (props.justify || 'center') : props.justify,
- alignItems: props.center ? (props.align || 'center') : props.align,
- position: props.position,
- alignSelf: props.alignSelf,
- flexWrap: props.wrap ? 'wrap' : 'nowrap',
- backgroundColor: themeContext.resolveThemeColor(props.backgroundColor),
- width: themeContext.resolveThemeSize(props.width),
- height: themeContext.resolveThemeSize(props.height),
- gap: themeContext.resolveThemeSize(props.gap),
- borderRadius: themeContext.resolveThemeSize(props.radius),
- overflow: props.overflow,
- border: props.border && !props.border.includes(' ') ? themeContext.getVar('border.' + props.border, undefined) : props.border,
- borderColor: themeContext.resolveThemeColor(props.borderColor),
- borderWidth: themeContext.resolveThemeSize(props.borderWidth),
- borderStyle: props.borderStyle,
- boxShadow: props.shadow ? themeContext.getVar('shadow.' + props.shadow, undefined) : undefined,
- zIndex: props.zIndex,
- ...(props.innerStyle ? props.innerStyle : {}),
- }
- //内边距样式
- configPadding(obj, themeContext.theme.value, props.padding as any);
- //外边距样式
- configMargin(obj, themeContext.theme.value, props.margin as any);
- if (obj.paddingVertical) {
- if (obj.paddingTop === undefined)
- obj.paddingTop = obj.paddingVertical;
- if (obj.paddingBottom === undefined)
- obj.paddingBottom = obj.paddingVertical;
- obj.paddingVertical = undefined;
- }
- if (obj.paddingHorizontal) {
- if (obj.paddingLeft === undefined)
- obj.paddingLeft = obj.paddingHorizontal;
- if (obj.paddingRight === undefined)
- obj.paddingRight = obj.paddingHorizontal;
- obj.paddingHorizontal = undefined;
- }
- if (obj.marginVertical) {
- obj.marginTop = obj.marginVertical;
- obj.marginBottom = obj.marginVertical;
- obj.marginVertical = undefined;
- }
- if (obj.marginHorizontal) {
- obj.marginLeft = obj.marginHorizontal;
- obj.marginRight = obj.marginHorizontal;
- obj.marginHorizontal = undefined;
- }
- //绝对距样式
- if (typeof props.left !== 'undefined')
- obj.left = themeContext.resolveThemeSize(props.left);
- if (typeof props.right !== 'undefined')
- obj.right = themeContext.resolveThemeSize(props.right);
- if (typeof props.top !== 'undefined')
- obj.top = themeContext.resolveThemeSize(props.top);
- if (typeof props.bottom !== 'undefined')
- obj.bottom = themeContext.resolveThemeSize(props.bottom);
- if (typeof props.flex !== 'undefined')
- obj.flex = props.flex;
- return obj
- });
- return {
- commonStyle
- }
- }
|