UNPKG

@open-data-v/base

Version:

OpenDataV 公共基础包

1 lines 20 kB
{"version":3,"file":"component.umd.cjs","sources":["../src/component.ts"],"sourcesContent":["import { cloneDeep, isNumber } from 'lodash-es'\nimport { h } from 'vue'\n\nimport type { ComponentGroup } from './enums'\nimport { ContainerType, DataMode, FormType } from './enums'\nimport type {\n BaseScript,\n ComponentDataType,\n ComponentStyle,\n ComponentType,\n DataInstance,\n DOMRectStyle,\n GroupStyle,\n MetaContainerItem,\n MetaForm,\n Response\n} from './type'\nimport { buildModeValue, getObjProp, updateFormItemsValue, updateModeValue, uuid } from './utils'\n\nexport interface DataConfig {\n type: string\n dataInstance: DataInstance\n}\n\nexport class CustomComponent {\n id: string\n component: string\n group: ComponentGroup\n name: string\n icon = ''\n locked = false\n selected = false\n display = true\n show = true\n active = false\n dataMode: DataMode = DataMode.SELF\n /**\n * @deprecated dataIntegrationMode 即将弃用,建议使用 dataMode\n */\n dataIntegrationMode: DataMode = DataMode.SELF\n callbackProp?: (propKeys: Array<string>, value: any) => void\n callbackStyle?: (propKeys: Array<string>, value: any) => void\n callbackData?: (result: any, type?: string) => void\n protected componentDataCallback?: (result: any, type?: string) => void\n\n // 检测变化\n propIsChange = true\n styleIsChange = true\n defaultViewType: ContainerType = ContainerType.CARD\n\n // form表单中使用\n private _prop: MetaContainerItem[] = []\n private _style: MetaContainerItem[] = []\n extraStyle: Record<string, string | number | boolean> = {}\n groupStyle?: GroupStyle\n positionStyle: DOMRectStyle = { left: 0, top: 0, width: 0, height: 0, rotate: 0 }\n\n parent?: CustomComponent\n subComponents: CustomComponent[] = []\n\n _propValue: Record<string, any> = {}\n _styleValue: ComponentStyle = {\n ...this.positionStyle\n }\n dataConfig?: DataConfig\n scriptConfig?: BaseScript\n\n constructor(detail: ComponentType) {\n if (detail.id) {\n this.id = detail.id\n } else {\n this.id = uuid()\n }\n this.component = detail.component\n this.group = detail.group\n this.name = detail.name\n\n if (detail.icon) {\n this.icon = detail.icon\n }\n this.positionStyle.width = detail.width || 100\n this.positionStyle.height = detail.height || 100\n this.dataMode = detail.dataMode || detail.dataIntegrationMode || DataMode.SELF\n }\n\n get propFromValue(): MetaContainerItem[] {\n const common: MetaContainerItem = {\n label: '公共属性',\n prop: 'common',\n children: [\n {\n label: '名称',\n prop: 'name',\n type: FormType.TEXT,\n props: {\n defaultValue: this.name\n }\n },\n {\n label: '组件',\n prop: 'component',\n type: FormType.TEXT,\n props: {\n defaultValue: this.component,\n editable: false\n }\n },\n {\n label: '组件ID',\n prop: 'id',\n type: FormType.TEXT,\n props: {\n defaultValue: this.id,\n editable: false\n }\n }\n ]\n }\n const propFrom = [common, ...this._prop]\n const propValue = {}\n buildModeValue(propFrom, propValue)\n return propFrom\n }\n\n get styleFormValue(): MetaContainerItem[] {\n if (!this._style.find((item) => item.prop === 'position')) {\n const common: MetaContainerItem = {\n label: '位置大小',\n prop: 'position',\n children: [\n {\n label: '左边距',\n prop: 'left',\n type: FormType.NUMBER,\n props: {\n defaultValue: this.positionStyle.left,\n suffix: () => h('span', {}, 'px')\n }\n },\n {\n label: '上边距',\n prop: 'top',\n type: FormType.NUMBER,\n props: {\n defaultValue: this.positionStyle.top,\n suffix: () => h('span', {}, 'px')\n }\n },\n {\n label: '宽度',\n prop: 'width',\n type: FormType.NUMBER,\n props: {\n defaultValue: this.positionStyle.width,\n suffix: () => h('span', {}, 'px')\n }\n },\n {\n label: '高度',\n prop: 'height',\n type: FormType.NUMBER,\n props: {\n defaultValue: this.positionStyle.height,\n suffix: () => h('span', {}, 'px')\n }\n },\n {\n label: '旋转角度',\n prop: 'rotate',\n type: FormType.NUMBER,\n props: {\n defaultValue: this.positionStyle.rotate,\n suffix: () => h('span', {}, '°')\n }\n }\n ]\n }\n this._style = [common, ...this._style]\n }\n return this._style\n }\n\n get propValue() {\n if (this.propIsChange) {\n updateFormItemsValue(this._prop, this._propValue)\n this.propIsChange = false\n }\n return this._propValue\n }\n\n setViewType(viewType: ContainerType) {\n this.defaultViewType = viewType\n }\n\n get style(): ComponentStyle {\n if (this.styleIsChange) {\n const customStyle: Record<string, any>[] = []\n this.styleFormValue.forEach((item) => {\n ;(item.children || []).forEach((obj) => {\n const objProps = obj.props || obj.componentOptions\n if (objProps) {\n if (obj.type === FormType.CUSTOM) {\n customStyle[obj.prop] = objProps.defaultValue\n }\n this._styleValue[obj.prop] = objProps!.defaultValue\n }\n })\n })\n\n Object.assign(this._styleValue, this.extraStyle)\n const res = this.styleToCss(customStyle)\n if (res) {\n Object.assign(this._styleValue, res)\n }\n this.styleIsChange = false\n }\n return this._styleValue\n }\n get exampleData(): any {\n return undefined\n }\n private loadExampleData?: () => any\n\n public setExampleData(loader: () => any) {\n this.loadExampleData = loader\n }\n\n public getExampleData() {\n if (this.exampleData) {\n return this.exampleData\n } else {\n return this.loadExampleData ? this.loadExampleData() : undefined\n }\n }\n\n // 自定义样式编辑框数据处理\n styleToCss(_: Record<string, any>[]): Nullable<Record<string, any>> {\n return null\n }\n\n // 生成后端存储需要的Json\n toJson(): ComponentDataType {\n const subComponents = this.subComponents.map((item) => item.toJson())\n const component: ComponentDataType = {\n id: this.id,\n component: this.component,\n name: this.name,\n propValue: this.propValue,\n style: this.style,\n subComponents: subComponents.length > 0 ? subComponents : undefined,\n dataMode: this.dataMode || this.dataIntegrationMode,\n script: this.scriptConfig?.toJSON()\n }\n if (this.dataConfig) {\n component.data = {\n type: this.dataConfig?.type,\n requestOptions: this.dataConfig?.dataInstance.toJSON()\n }\n }\n if (this.groupStyle) {\n component.groupStyle = this.groupStyle\n }\n return component\n }\n\n // 后端数据回填propValue\n setPropValue({ propValue }: { propValue: Record<string, any> }) {\n this.propIsChange = true\n updateFormItemsValue(this._prop, propValue)\n this._propValue = propValue\n }\n\n // 后端数据回填style\n setStyleValue({ style }: { style: Record<string, any> }) {\n this.styleIsChange = true\n for (const prop in style) {\n this.styleFormValue.forEach((item) => {\n const propObj = (item.children || []).find((obj) => obj.prop === prop)\n if (propObj) {\n const objProps = propObj.props || propObj.componentOptions\n if (!objProps) {\n return\n }\n objProps.defaultValue = style[prop]\n if (prop in this.positionStyle) {\n this.positionStyle[prop] = style[prop]\n }\n }\n })\n }\n }\n\n // change(propKeys: Array<string>, value: any, from: 'style' | 'propValue' | 'data') {\n // if (from === 'propValue') {\n // this.changeProp(propKeys, value)\n // } else if (from === 'style') {\n // this.changeStyle(propKeys, value)\n // }\n // }\n // 修改属性\n changeProp(propKeys: Array<string>, value: string | number | boolean | any) {\n this.propIsChange = true\n if (propKeys.length === 2 && propKeys[0] === 'common' && propKeys[1] === 'name') {\n this.name = value as string\n return\n }\n updateModeValue(this._propValue, propKeys, value)\n if (this.callbackProp) {\n this.callbackProp(propKeys, value)\n }\n }\n\n setPropChangeCallback(callback: (propKeys: Array<string>, value: any) => void) {\n this.callbackProp = callback\n }\n afterCallbackChange(scriptHandler: BaseScript) {\n this.scriptConfig = scriptHandler\n if (this.dataConfig?.dataInstance && this.componentDataCallback) {\n this.callbackData = this.buildDataCallback()\n const { dataInstance } = this.dataConfig || {}\n if (dataInstance && dataInstance.close) {\n dataInstance.close()\n dataInstance.connect!(this.callbackData)\n }\n }\n }\n\n // 修改样式\n changeStyle(propKeys: Array<string>, value: any) {\n const positionKey = ['top', 'left', 'height', 'width', 'rotate']\n let changeValue = value\n if (propKeys[0] === 'position') {\n if (propKeys.length === 2 && positionKey.includes(propKeys[1])) {\n changeValue = Math.round(value)\n this.positionStyle[propKeys[1]] = changeValue\n } else if (propKeys.length === 1) {\n positionKey.forEach((el) => {\n if (!isNumber(value[el])) {\n return\n }\n this.positionStyle[el] = value[el]\n })\n }\n }\n this.styleIsChange = true\n const curObj = getObjProp(this.styleFormValue, propKeys) as MetaForm\n const objProps = curObj && (curObj.props || curObj.componentOptions)\n if (objProps) {\n objProps.defaultValue = value\n }\n\n if (this.callbackStyle) this.callbackStyle(propKeys, value)\n }\n\n setStyleChangeCallback(callback: (propKeys: Array<string>, value: any) => void) {\n this.callbackStyle = callback\n }\n\n /**\n * 添加子组件\n * @param components\n * @param deep\n * @param clear\n */\n addComponent(components: CustomComponent[], deep = false, clear = false) {\n if (clear) {\n this.subComponents = []\n }\n\n components.forEach((item) => {\n let com = item\n if (deep) {\n com = cloneDeep(item)\n }\n com.parent = this\n this.subComponents.push(com)\n })\n }\n /**\n * 设置组件的可见性\n */\n setVisible(visible: boolean) {\n this.display = visible\n }\n async changeDataConfig(dataConfig: DataConfig) {\n const { dataInstance } = this.dataConfig || {}\n if (dataInstance && dataInstance.close) {\n dataInstance.close()\n }\n this.dataConfig = dataConfig\n if (this.callbackData) {\n await this.dataConfig?.dataInstance.connect!(this.callbackData)\n }\n }\n setDataChangeCallback(callback: (result: any, type?: string) => void) {\n this.componentDataCallback = callback\n this.callbackData = this.buildDataCallback()\n const { dataInstance } = this.dataConfig || {}\n if (!dataInstance) {\n return\n }\n if (dataInstance.close) {\n dataInstance.close()\n }\n dataInstance.connect!(this.callbackData)\n }\n\n buildDataCallback() {\n return (resp: Response) => {\n if (this.scriptConfig && this.scriptConfig.afterCallback) {\n const afterCallback = this.scriptConfig.afterCallback\n const { status, data } = resp\n if (status === 'SUCCESS') {\n try {\n const afterData = afterCallback(data, this.propValue)\n resp['afterData'] = afterData\n } catch (err) {\n resp['afterData'] = undefined\n resp.status = 'FAILED'\n }\n }\n } else {\n resp['afterData'] = resp.data\n }\n if (this.componentDataCallback) {\n this.componentDataCallback(resp)\n }\n }\n }\n async loadDemoData() {\n const exampleData = await this.getExampleData()\n setTimeout(() => {\n if (this.callbackData) {\n this.callbackData({ status: 'SUCCESS', data: exampleData, afterData: exampleData }, 'DEMO')\n }\n }, 200)\n }\n appendChild(child: CustomComponent) {\n this.subComponents.push(child)\n }\n updateChild(index: number, child: CustomComponent) {\n this.subComponents[index] = child\n }\n\n loadExtraProp(prop: Array<MetaContainerItem>) {\n this._prop = prop\n }\n loadExtraStyle(style: Array<MetaContainerItem>) {\n this._style = style\n }\n}\n\nexport type BaseComponent = { new (id?: string, name?: string, icon?: string): CustomComponent }\n"],"names":["CustomComponent","detail","__publicField","DataMode","ContainerType","uuid","propFrom","FormType","propValue","buildModeValue","item","common","h","updateFormItemsValue","viewType","customStyle","obj","objProps","res","loader","_","subComponents","component","_a","_b","_c","style","prop","propObj","propKeys","value","updateModeValue","callback","scriptHandler","dataInstance","positionKey","changeValue","el","isNumber","curObj","getObjProp","components","deep","clear","com","cloneDeep","visible","dataConfig","resp","afterCallback","status","data","afterData","exampleData","child","index"],"mappings":"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"}