import { DesignComp } from "@/modules/editor/objects/DesignTemp/DesignComp"; import FormUI, { ColumnItem } from "@queenjs/components/FormUI"; import { isEmpty, set } from "lodash"; import { defineComponent } from "vue"; import { any } from "vue-types"; import { GroupNumber } from "../formItems/GroupNumber"; import { InputNumber, Select } from "ant-design-vue"; import { createColorOpts } from "./formOpts/createColorOpts"; import { ImagePicker } from "../formItems/ImagePicker"; import { compMasks } from "@/modules/editor/objects/DesignTemp/creates/CompMasks"; const layoutColumns: ColumnItem[] = [ { label: "尺寸", dataIndex: "layout.size", component: GroupNumber, props: { labels: ["宽度", "高度"], }, }, // { // label: "对齐", // dataIndex: "layout.alignSelf", // component: Select, // props: { // class: "w-full", // options: [ // { label: "左对齐", value: "start" }, // { label: "居中", value: "center" }, // { label: "右对齐", value: "end" }, // ], // }, // }, { label: "外边距", dataIndex: "layout.margin", component: "Input", }, { label: "内边距", dataIndex: "layout.padding", component: "Input", }, // { // label: "左右偏移", // dataIndex: "layout.offsetX", // component: "Slider", // props: { // min: -375, // max: 375, // }, // getValue: (v) => v || 0, // }, // { // label: "上下偏移", // dataIndex: "layout.offsetY", // component: "Slider", // props: { // min: -375, // max: 375, // }, // getValue: (v) => v || 0, // }, { label: "层级", dataIndex: "layout.zIndex", component: InputNumber, props: { min: 0, max: 99, }, }, { label: "遮罩", dataIndex: "layout.mask", component: Select, props: { class: "w-full", options: [{ label: "无", value: "" }].concat( Object.entries(compMasks).map(([key, value]) => { return { label: value.name, value: key, }; }) ), }, }, ]; const bgColumns: ColumnItem[] = [ { label: "背景颜色", dataIndex: "background.color", ...createColorOpts(), }, { label: "背景图片", dataIndex: "background.image", component: ImagePicker, }, { label: "repeat", dataIndex: "background.repeat", component: "Select", props: { options: [ "repeat", "no-repeat", "repeat-x", "repeat-y", "repeat-round", "repeat-space", ].map((v) => ({ label: v, value: v })), }, }, { label: "position", dataIndex: "background.position", component: "Select", props: { options: [ "center", "top", "bottom", "left", "left-top", "left-bottom", "right", "right-top", "right-bottom", ].map((v) => ({ label: v, value: v })), }, }, { label: "size", dataIndex: "background.size", component: "Select", props: { options: ["auto", "cover", "contain"].map((v) => ({ label: v, value: v, })), }, }, { label: "clipPath", dataIndex: "background.clipPath", component: "Input", }, ]; export function createAttrsForm(valueColumns: ColumnItem[]) { return defineComponent({ props: { component: any().isRequired, }, setup(props) { function changeVal(e: { dataIndex: string; value: any }) { set(props.component, e.dataIndex, e.value); } return () => { const { component } = props; return (
{valueColumns.length ? ( <>
组件属性
) : null}
组件布局
{!isEmpty(component?.background) ? ( <>
组件背景
) : null}
); }; }, }); }