diff --git a/package.json b/package.json
index 2c5e8f6..dccd229 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@kne-components/components-admin",
- "version": "1.1.3",
+ "version": "1.1.4",
"description": "用于实现一个后台管理系统的必要组件",
"scripts": {
"init": "husky",
diff --git a/src/components/Apis/getApis.js b/src/components/Apis/getApis.js
index 28f2647..e8449e9 100644
--- a/src/components/Apis/getApis.js
+++ b/src/components/Apis/getApis.js
@@ -245,6 +245,26 @@ const getApis = options => {
url: `${prefix}/tenant/admin/append-args`,
method: 'POST'
},
+ appendCustomComponent: {
+ url: `${prefix}/tenant/admin/append-custom-component`,
+ method: 'POST'
+ },
+ removeCustomComponent: {
+ url: `${prefix}/tenant/admin/remove-custom-component`,
+ method: 'POST'
+ },
+ saveCustomComponent: {
+ url: `${prefix}/tenant/admin/save-custom-component`,
+ method: 'POST'
+ },
+ copyCustomComponent: {
+ url: `${prefix}/tenant/admin/copy-custom-component`,
+ method: 'POST'
+ },
+ customComponentDetail: {
+ url: `${prefix}/tenant/admin/custom-component-detail`,
+ method: 'GET'
+ },
removeArg: {
url: `${prefix}/tenant/admin/remove-arg`,
method: 'POST'
@@ -350,7 +370,11 @@ const getApis = options => {
userInviteMessage: {
url: `${prefix}/tenant/send-invite-message`,
method: 'POST'
- }
+ },
+ customComponentDetail: {
+ url: `${prefix}/tenant/custom-component-detail`,
+ method: 'GET'
+ },
}
};
};
diff --git a/src/components/TenantAdmin/TabDetail/Setting/index.js b/src/components/TenantAdmin/TabDetail/Setting/index.js
index d1e5cf7..651d95e 100644
--- a/src/components/TenantAdmin/TabDetail/Setting/index.js
+++ b/src/components/TenantAdmin/TabDetail/Setting/index.js
@@ -1,15 +1,63 @@
import { createWithRemoteLoader } from '@kne/remote-loader';
import { Flex, Button, App } from 'antd';
+import { useState, forwardRef, useImperativeHandle } from 'react';
+import style from './style.module.scss';
+
+const LiveComponent = createWithRemoteLoader({
+ modules: ['components-thirdparty:LiveComponentEditor']
+})(
+ forwardRef(({ remoteModules, defaultValue }, ref) => {
+ const [LiveComponentEditor] = remoteModules;
+ const [value, setValue] = useState(defaultValue || '');
+ useImperativeHandle(ref, () => {
+ return {
+ getValue: () => value
+ };
+ });
+ return (
+
+
+
+ );
+ })
+);
+
+const CustomComponentFormInner = createWithRemoteLoader({
+ modules: ['components-core:FormInfo']
+})(({ remoteModules, isEdit }) => {
+ const [FormInfo] = remoteModules;
+ const { Input, TextArea } = FormInfo.fields;
+
+ return (
+ ,
+ ,
+ ,
+
+ ]}
+ />
+ );
+});
const Setting = createWithRemoteLoader({
- modules: ['components-core:Global@usePreset', 'components-core:Table', 'components-core:FormInfo']
+ modules: [
+ 'components-core:Global@usePreset',
+ 'components-core:Table',
+ 'components-core:FormInfo',
+ 'components-core:Modal@useModal',
+ 'components-core:Modal@ModalButton',
+ 'components-thirdparty:LiveComponentView'
+ ]
})(({ remoteModules, tenant, reload }) => {
- const [usePreset, Table, FormInfo] = remoteModules;
+ const [usePreset, Table, FormInfo, useModal, ModalButton, LiveComponentView] = remoteModules;
const { apis, ajax } = usePreset();
- const { useFormModal, TableList } = FormInfo;
+ const { useFormModal, TableList, Form } = FormInfo;
const { Input, Switch } = FormInfo.fields;
const formModal = useFormModal();
const { message } = App.useApp();
+ const modal = useModal();
const formInner = (
- {/*
+
-
- */}
+
+ {
+ return [
+ {
+ buttonComponent: ModalButton,
+ children: '预览',
+ api: Object.assign({}, apis.tenantAdmin.customComponentDetail, {
+ params: {
+ tenantId: tenant.id,
+ key: item.key
+ }
+ }),
+ modalProps: ({ data }) => {
+ return {
+ title: '预览',
+ footer: null,
+ children: (
+
+ )
+ };
+ }
+ },
+ {
+ buttonComponent: ModalButton,
+ children: '编辑',
+ api: Object.assign({}, apis.tenantAdmin.customComponentDetail, {
+ params: {
+ tenantId: tenant.id,
+ key: item.key
+ }
+ }),
+ modalProps: ({ data, close }) => {
+ return {
+ title: '编辑',
+ size: 'large',
+ children: ({ childrenRef }) => ,
+ onConfirm: (e, { childrenRef }) => {
+ const content = childrenRef.current.getValue();
+ formModal({
+ title: '编辑自定义组件',
+ size: 'small',
+ formProps: {
+ data: Object.assign({}, item),
+ onSubmit: async formData => {
+ const { data: resData } = await ajax(
+ Object.assign({}, apis.tenantAdmin.saveCustomComponent, {
+ data: {
+ tenantId: tenant.id,
+ customComponent: Object.assign({}, formData, {
+ key: item.key,
+ content
+ })
+ }
+ })
+ );
+
+ if (resData.code !== 0) {
+ return false;
+ }
+ message.success('修改');
+ close();
+ reload();
+ }
+ },
+ children:
+ });
+ return false;
+ }
+ };
+ }
+ },
+ {
+ children: '复制',
+ onClick: async () => {
+ const { data: resData } = await ajax(
+ Object.assign({}, apis.tenantAdmin.copyCustomComponent, {
+ data: {
+ tenantId: tenant.id,
+ key: item.key
+ }
+ })
+ );
+ if (resData.code !== 0) {
+ return;
+ }
+ message.success('复制成功');
+ reload();
+ }
+ },
+ {
+ children: '删除',
+ confirm: true,
+ onClick: async () => {
+ const { data: resData } = await ajax(
+ Object.assign({}, apis.tenantAdmin.removeCustomComponent, {
+ data: {
+ tenantId: tenant.id,
+ key: item.key
+ }
+ })
+ );
+ if (resData.code !== 0) {
+ return;
+ }
+ message.success('删除成功');
+ reload();
+ }
+ }
+ ];
+ }
+ }
+ ]}
+ />
);
});
diff --git a/src/components/TenantAdmin/TabDetail/Setting/style.module.scss b/src/components/TenantAdmin/TabDetail/Setting/style.module.scss
new file mode 100644
index 0000000..b725d33
--- /dev/null
+++ b/src/components/TenantAdmin/TabDetail/Setting/style.module.scss
@@ -0,0 +1,7 @@
+.modal-wrap {
+ :global {
+ .modal-body-inner {
+ padding-top: 0;
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/preset.js b/src/preset.js
index 16d2ff9..9e85c63 100644
--- a/src/preset.js
+++ b/src/preset.js
@@ -90,6 +90,13 @@ export const globalInit = async () => {
remote: 'components-iconfont',
defaultVersion: '0.1.8'
},
+ 'components-thirdparty': {
+ ...registry,
+ //url: 'http://localhost:3010',
+ //tpl: '{{url}}',
+ remote: 'components-thirdparty',
+ defaultVersion: '0.1.2'
+ },
'components-admin':
process.env.NODE_ENV === 'development'
? {