diff --git a/apps/vben5/apps/app-antd/package.json b/apps/vben5/apps/app-antd/package.json index 74ec14a0d..0d22aff5b 100644 --- a/apps/vben5/apps/app-antd/package.json +++ b/apps/vben5/apps/app-antd/package.json @@ -42,6 +42,7 @@ "@abp/saas": "workspace:*", "@abp/settings": "workspace:*", "@abp/tasks": "workspace:*", + "@abp/text-templating": "workspace:*", "@abp/ui": "workspace:*", "@abp/webhooks": "workspace:*", "@vben/access": "workspace:*", diff --git a/apps/vben5/apps/app-antd/src/locales/langs/en-US/abp.json b/apps/vben5/apps/app-antd/src/locales/langs/en-US/abp.json index 2bda6ce06..fb7826de2 100644 --- a/apps/vben5/apps/app-antd/src/locales/langs/en-US/abp.json +++ b/apps/vben5/apps/app-antd/src/locales/langs/en-US/abp.json @@ -120,5 +120,9 @@ "definitions": "Definitions", "subscriptions": "Subscriptions", "sendAttempts": "Send Attempts" + }, + "textTemplating": { + "title": "Text Templating", + "definitions": "Definitions" } } diff --git a/apps/vben5/apps/app-antd/src/locales/langs/zh-CN/abp.json b/apps/vben5/apps/app-antd/src/locales/langs/zh-CN/abp.json index 5efb8914d..275e9f92d 100644 --- a/apps/vben5/apps/app-antd/src/locales/langs/zh-CN/abp.json +++ b/apps/vben5/apps/app-antd/src/locales/langs/zh-CN/abp.json @@ -120,5 +120,9 @@ "definitions": "Webhook定义", "subscriptions": "管理订阅", "sendAttempts": "发送记录" + }, + "textTemplating": { + "title": "文本模板", + "definitions": "模板定义" } } diff --git a/apps/vben5/apps/app-antd/src/router/routes/modules/abp.ts b/apps/vben5/apps/app-antd/src/router/routes/modules/abp.ts index 11889b8f0..62625ed22 100644 --- a/apps/vben5/apps/app-antd/src/router/routes/modules/abp.ts +++ b/apps/vben5/apps/app-antd/src/router/routes/modules/abp.ts @@ -496,6 +496,26 @@ const routes: RouteRecordRaw[] = [ }, ], }, + { + meta: { + title: $t('abp.textTemplating.title'), + icon: 'tdesign:template', + }, + name: 'TextTemplating', + path: '/text-templating', + children: [ + { + meta: { + title: $t('abp.textTemplating.definitions'), + icon: 'qlementine-icons:template-16', + }, + name: 'TemplateDefinitions', + path: '/text-templating/definitions', + component: () => + import('#/views/text-templating/definitions/index.vue'), + }, + ], + }, { name: 'AbpDemo', path: '/abp/demos', diff --git a/apps/vben5/apps/app-antd/src/views/text-templating/definitions/index.vue b/apps/vben5/apps/app-antd/src/views/text-templating/definitions/index.vue new file mode 100644 index 000000000..1af35925d --- /dev/null +++ b/apps/vben5/apps/app-antd/src/views/text-templating/definitions/index.vue @@ -0,0 +1,15 @@ + + + diff --git a/apps/vben5/packages/@abp/components/src/vditor/Viewer.vue b/apps/vben5/packages/@abp/components/src/vditor/Viewer.vue new file mode 100644 index 000000000..de960fbda --- /dev/null +++ b/apps/vben5/packages/@abp/components/src/vditor/Viewer.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/apps/vben5/packages/@abp/components/src/vditor/index.ts b/apps/vben5/packages/@abp/components/src/vditor/index.ts index 7ceb1995b..437fcb85c 100644 --- a/apps/vben5/packages/@abp/components/src/vditor/index.ts +++ b/apps/vben5/packages/@abp/components/src/vditor/index.ts @@ -1 +1,2 @@ export { default as MarkdownEditor } from './Editor.vue'; +export { default as MarkdownViewer } from './Viewer.vue'; diff --git a/apps/vben5/packages/@abp/text-templating/package.json b/apps/vben5/packages/@abp/text-templating/package.json new file mode 100644 index 000000000..ec4efb8c5 --- /dev/null +++ b/apps/vben5/packages/@abp/text-templating/package.json @@ -0,0 +1,40 @@ +{ + "name": "@abp/text-templating", + "version": "9.0.4", + "homepage": "https://github.com/colinin/abp-next-admin", + "bugs": "https://github.com/colinin/abp-next-admin/issues", + "repository": { + "type": "git", + "url": "git+https://github.com/colinin/abp-next-admin.git", + "directory": "packages/@abp/text-templating" + }, + "license": "MIT", + "type": "module", + "sideEffects": [ + "**/*.css" + ], + "exports": { + ".": { + "types": "./src/index.ts", + "default": "./src/index.ts" + } + }, + "dependencies": { + "@abp/components": "workspace:*", + "@abp/core": "workspace:*", + "@abp/localization": "workspace:*", + "@abp/request": "workspace:*", + "@abp/saas": "workspace:*", + "@abp/ui": "workspace:*", + "@ant-design/icons-vue": "catalog:", + "@vben/access": "workspace:*", + "@vben/common-ui": "workspace:*", + "@vben/hooks": "workspace:*", + "@vben/icons": "workspace:*", + "@vben/layouts": "workspace:*", + "@vben/locales": "workspace:*", + "ant-design-vue": "catalog:", + "vue": "catalog:*", + "vxe-table": "catalog:" + } +} diff --git a/apps/vben5/packages/@abp/text-templating/src/api/index.ts b/apps/vben5/packages/@abp/text-templating/src/api/index.ts new file mode 100644 index 000000000..03e35288d --- /dev/null +++ b/apps/vben5/packages/@abp/text-templating/src/api/index.ts @@ -0,0 +1,2 @@ +export { useTemplateContentsApi } from './useTemplateContentsApi'; +export { useTemplateDefinitionsApi } from './useTemplateDefinitionsApi'; diff --git a/apps/vben5/packages/@abp/text-templating/src/api/useTemplateContentsApi.ts b/apps/vben5/packages/@abp/text-templating/src/api/useTemplateContentsApi.ts new file mode 100644 index 000000000..1e5fa5a99 --- /dev/null +++ b/apps/vben5/packages/@abp/text-templating/src/api/useTemplateContentsApi.ts @@ -0,0 +1,69 @@ +import type { + TextTemplateContentDto, + TextTemplateContentGetInput, + TextTemplateContentUpdateDto, + TextTemplateRestoreInput, +} from '../types/contents'; + +import { useRequest } from '@abp/request'; + +export function useTemplateContentsApi() { + const { cancel, request } = useRequest(); + /** + * 获取模板内容 + * @param input 参数 + * @returns 模板内容数据传输对象 + */ + function getApi( + input: TextTemplateContentGetInput, + ): Promise { + let url = '/api/text-templating/templates/content'; + url += input.culture ? `/${input.culture}/${input.name}` : `/${input.name}`; + return request(url, { + method: 'GET', + }); + } + /** + * 重置模板内容为默认值 + * @param name 模板名称 + * @param input 参数 + * @returns 模板定义数据传输对象列表 + */ + function restoreToDefaultApi( + name: string, + input: TextTemplateRestoreInput, + ): Promise { + return request( + `/api/text-templating/templates/content/${name}/restore-to-default`, + { + data: input, + method: 'PUT', + }, + ); + } + /** + * 更新模板内容 + * @param name 模板名称 + * @param input 参数 + * @returns 模板内容数据传输对象 + */ + function updateApi( + name: string, + input: TextTemplateContentUpdateDto, + ): Promise { + return request( + `/api/text-templating/templates/content/${name}`, + { + data: input, + method: 'PUT', + }, + ); + } + + return { + cancel, + getApi, + restoreToDefaultApi, + updateApi, + }; +} diff --git a/apps/vben5/packages/@abp/text-templating/src/api/useTemplateDefinitionsApi.ts b/apps/vben5/packages/@abp/text-templating/src/api/useTemplateDefinitionsApi.ts new file mode 100644 index 000000000..5d89e36fb --- /dev/null +++ b/apps/vben5/packages/@abp/text-templating/src/api/useTemplateDefinitionsApi.ts @@ -0,0 +1,95 @@ +import type { ListResultDto } from '@abp/core'; + +import type { + TextTemplateDefinitionCreateDto, + TextTemplateDefinitionDto, + TextTemplateDefinitionGetListInput, + TextTemplateDefinitionUpdateDto, +} from '../types/definitions'; + +import { useRequest } from '@abp/request'; + +export function useTemplateDefinitionsApi() { + const { cancel, request } = useRequest(); + + /** + * 新增模板定义 + * @param input 参数 + * @returns 模板定义数据传输对象 + */ + function createApi( + input: TextTemplateDefinitionCreateDto, + ): Promise { + return request( + '/api/text-templating/template/definitions', + { + data: input, + method: 'POST', + }, + ); + } + /** + * 删除模板定义 + * @param name 模板名称 + */ + function deleteApi(name: string): Promise { + return request(`/api/text-templating/template/definitions/${name}`, { + method: 'DELETE', + }); + } + /** + * 获取模板定义 + * @param name 模板名称 + * @returns 模板定义数据传输对象 + */ + function getApi(name: string): Promise { + return request( + `/api/text-templating/template/definitions/${name}`, + { + method: 'GET', + }, + ); + } + /** + * 获取模板定义列表 + * @param input 过滤参数 + * @returns 模板定义数据传输对象列表 + */ + function getListApi( + input?: TextTemplateDefinitionGetListInput, + ): Promise> { + return request>( + `/api/text-templating/template/definitions/${name}`, + { + method: 'GET', + params: input, + }, + ); + } + /** + * 更新模板定义 + * @param name 模板名称 + * @returns 模板定义数据传输对象 + */ + function updateApi( + name: string, + input: TextTemplateDefinitionUpdateDto, + ): Promise { + return request( + `/api/text-templating/template/definitions/${name}`, + { + data: input, + method: 'PUT', + }, + ); + } + + return { + cancel, + createApi, + deleteApi, + getApi, + getListApi, + updateApi, + }; +} diff --git a/apps/vben5/packages/@abp/text-templating/src/components/definitions/TemplateContentCurtuleModal.vue b/apps/vben5/packages/@abp/text-templating/src/components/definitions/TemplateContentCurtuleModal.vue new file mode 100644 index 000000000..8ce007057 --- /dev/null +++ b/apps/vben5/packages/@abp/text-templating/src/components/definitions/TemplateContentCurtuleModal.vue @@ -0,0 +1,216 @@ + + + + + diff --git a/apps/vben5/packages/@abp/text-templating/src/components/definitions/TemplateContentModal.vue b/apps/vben5/packages/@abp/text-templating/src/components/definitions/TemplateContentModal.vue new file mode 100644 index 000000000..564030291 --- /dev/null +++ b/apps/vben5/packages/@abp/text-templating/src/components/definitions/TemplateContentModal.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/apps/vben5/packages/@abp/text-templating/src/components/definitions/TemplateDefinitionModal.vue b/apps/vben5/packages/@abp/text-templating/src/components/definitions/TemplateDefinitionModal.vue new file mode 100644 index 000000000..1c7506d7c --- /dev/null +++ b/apps/vben5/packages/@abp/text-templating/src/components/definitions/TemplateDefinitionModal.vue @@ -0,0 +1,289 @@ + + + + + diff --git a/apps/vben5/packages/@abp/text-templating/src/components/definitions/TemplateDefinitionTable.vue b/apps/vben5/packages/@abp/text-templating/src/components/definitions/TemplateDefinitionTable.vue new file mode 100644 index 000000000..7a3addee4 --- /dev/null +++ b/apps/vben5/packages/@abp/text-templating/src/components/definitions/TemplateDefinitionTable.vue @@ -0,0 +1,315 @@ + + + + + diff --git a/apps/vben5/packages/@abp/text-templating/src/components/index.ts b/apps/vben5/packages/@abp/text-templating/src/components/index.ts new file mode 100644 index 000000000..be1c268c7 --- /dev/null +++ b/apps/vben5/packages/@abp/text-templating/src/components/index.ts @@ -0,0 +1 @@ +export { default as TemplateDefinitionTable } from './definitions/TemplateDefinitionTable.vue'; diff --git a/apps/vben5/packages/@abp/text-templating/src/constants/permissions.ts b/apps/vben5/packages/@abp/text-templating/src/constants/permissions.ts new file mode 100644 index 000000000..bc52ea18d --- /dev/null +++ b/apps/vben5/packages/@abp/text-templating/src/constants/permissions.ts @@ -0,0 +1,10 @@ +/** 模板定义权限 */ +export const WebhookDefinitionsPermissions = { + /** 新增 */ + Create: 'AbpTextTemplating.TextTemplateDefinitions.Create', + Default: 'AbpTextTemplating.TextTemplateDefinitions', + /** 删除 */ + Delete: 'AbpTextTemplating.TextTemplateDefinitions.Delete', + /** 更新 */ + Update: 'AbpTextTemplating.TextTemplateDefinitions.Update', +}; diff --git a/apps/vben5/packages/@abp/text-templating/src/index.ts b/apps/vben5/packages/@abp/text-templating/src/index.ts new file mode 100644 index 000000000..314dad0cd --- /dev/null +++ b/apps/vben5/packages/@abp/text-templating/src/index.ts @@ -0,0 +1,3 @@ +export * from './api'; +export * from './components'; +export * from './types'; diff --git a/apps/vben5/packages/@abp/text-templating/src/types/contents.ts b/apps/vben5/packages/@abp/text-templating/src/types/contents.ts new file mode 100644 index 000000000..4469c36fe --- /dev/null +++ b/apps/vben5/packages/@abp/text-templating/src/types/contents.ts @@ -0,0 +1,26 @@ +interface TextTemplateContentDto { + content?: string; + culture?: string; + name: string; +} + +interface TextTemplateContentGetInput { + culture?: string; + name: string; +} + +interface TextTemplateRestoreInput { + culture?: string; +} + +interface TextTemplateContentUpdateDto { + content: string; + culture?: string; +} + +export type { + TextTemplateContentDto, + TextTemplateContentGetInput, + TextTemplateContentUpdateDto, + TextTemplateRestoreInput, +}; diff --git a/apps/vben5/packages/@abp/text-templating/src/types/definitions.ts b/apps/vben5/packages/@abp/text-templating/src/types/definitions.ts new file mode 100644 index 000000000..44b37260d --- /dev/null +++ b/apps/vben5/packages/@abp/text-templating/src/types/definitions.ts @@ -0,0 +1,47 @@ +import type { ExtensibleObject, IHasConcurrencyStamp } from '@abp/core'; + +interface TextTemplateDefinitionDto + extends ExtensibleObject, + IHasConcurrencyStamp { + defaultCultureName?: string; + displayName: string; + isInlineLocalized: boolean; + isLayout: boolean; + isStatic: boolean; + layout?: string; + localizationResourceName?: string; + name: string; + renderEngine?: string; +} + +interface TextTemplateDefinitionCreateOrUpdateDto { + defaultCultureName?: string; + displayName: string; + isInlineLocalized: boolean; + isLayout: boolean; + layout?: string; + localizationResourceName?: string; + renderEngine?: string; +} + +interface TextTemplateDefinitionCreateDto + extends TextTemplateDefinitionCreateOrUpdateDto { + name: string; +} + +interface TextTemplateDefinitionUpdateDto + extends IHasConcurrencyStamp, + TextTemplateDefinitionCreateOrUpdateDto {} + +interface TextTemplateDefinitionGetListInput { + filter?: string; + isLayout?: boolean; + isStatic?: boolean; +} + +export type { + TextTemplateDefinitionCreateDto, + TextTemplateDefinitionDto, + TextTemplateDefinitionGetListInput, + TextTemplateDefinitionUpdateDto, +}; diff --git a/apps/vben5/packages/@abp/text-templating/src/types/index.ts b/apps/vben5/packages/@abp/text-templating/src/types/index.ts new file mode 100644 index 000000000..836cc4689 --- /dev/null +++ b/apps/vben5/packages/@abp/text-templating/src/types/index.ts @@ -0,0 +1,2 @@ +export * from './contents'; +export * from './definitions'; diff --git a/apps/vben5/packages/@abp/text-templating/tsconfig.json b/apps/vben5/packages/@abp/text-templating/tsconfig.json new file mode 100644 index 000000000..ce1a891fb --- /dev/null +++ b/apps/vben5/packages/@abp/text-templating/tsconfig.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://json.schemastore.org/tsconfig", + "extends": "@vben/tsconfig/web.json", + "include": ["src"], + "exclude": ["node_modules"] +}