From 3f0d62994c938d986082e7947c86fbc36a199e5d Mon Sep 17 00:00:00 2001 From: zhangkang <1752553776@qq.com> Date: Wed, 22 Nov 2023 19:14:40 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=90=AD?= =?UTF-8?q?=E8=BD=BD=E5=B9=B3=E5=8F=B0=E9=80=82=E9=85=8D=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/runtime/src/constant/index.ts | 1 + .../runtime/src/constant/platform-type.ts | 27 +++++++ packages/runtime/src/index.ts | 1 + packages/runtime/src/install.ts | 3 + .../interface/provider/i-platform-provider.ts | 74 +++++++++++++++++++ .../runtime/src/interface/provider/index.ts | 1 + packages/runtime/src/platform/index.ts | 2 + .../runtime/src/platform/platform-util.ts | 57 ++++++++++++++ .../provider/browser-platform-provider.ts | 12 +++ .../runtime/src/platform/provider/index.ts | 19 +++++ .../provider/platform-provider-base.ts | 74 +++++++++++++++++++ packages/runtime/src/register/helper/index.ts | 1 + .../src/register/helper/platform-register.ts | 56 ++++++++++++++ 13 files changed, 328 insertions(+) create mode 100644 packages/runtime/src/constant/platform-type.ts create mode 100644 packages/runtime/src/interface/provider/i-platform-provider.ts create mode 100644 packages/runtime/src/platform/index.ts create mode 100644 packages/runtime/src/platform/platform-util.ts create mode 100644 packages/runtime/src/platform/provider/browser-platform-provider.ts create mode 100644 packages/runtime/src/platform/provider/index.ts create mode 100644 packages/runtime/src/platform/provider/platform-provider-base.ts create mode 100644 packages/runtime/src/register/helper/platform-register.ts diff --git a/packages/runtime/src/constant/index.ts b/packages/runtime/src/constant/index.ts index 619f4b82249..a22f0a0627c 100644 --- a/packages/runtime/src/constant/index.ts +++ b/packages/runtime/src/constant/index.ts @@ -4,4 +4,5 @@ export { ViewMode } from './view-mode'; export { SysUIActionTag } from './sys-uiaction-tag'; export { ViewCallTag } from './view-call-tag'; export { ValueOP } from './value-op'; +export { PlatformType } from './platform-type'; export * from './studio-event'; diff --git a/packages/runtime/src/constant/platform-type.ts b/packages/runtime/src/constant/platform-type.ts new file mode 100644 index 00000000000..9941bcef7e1 --- /dev/null +++ b/packages/runtime/src/constant/platform-type.ts @@ -0,0 +1,27 @@ +/* eslint-disable no-shadow */ +/** + * 搭载平台类型 + * + * @author zk + * @date 2023-11-20 03:11:28 + * @export + * @enum {number} + */ +export enum PlatformType { + // ios + IOS = 'ios', + // 安卓 + ANDROID = 'android', + // 微信 + WEIXIN = 'weixin', + // 腾讯QQ + QQ = 'qq', + // 钉钉 + DINGDING = 'dingding', + // 浏览器 + BROWSER = 'browser', + // 微信小程序 + WXMP = 'miniprogram', + // 桌面端 + DESKTOP = 'desktop', +} diff --git a/packages/runtime/src/index.ts b/packages/runtime/src/index.ts index e06f562fa91..7ac980e9fd6 100644 --- a/packages/runtime/src/index.ts +++ b/packages/runtime/src/index.ts @@ -14,4 +14,5 @@ export * from './ui-logic'; export * from './de-logic'; export * from './engine'; export * from './model'; +export * from './platform'; export { Application } from './application'; diff --git a/packages/runtime/src/install.ts b/packages/runtime/src/install.ts index 388699b89ee..41f2ec30cb2 100644 --- a/packages/runtime/src/install.ts +++ b/packages/runtime/src/install.ts @@ -11,6 +11,7 @@ import { EngineFactory } from './engine'; import { GlobalUtil } from './global'; import { presetUIActionProvider } from './ui-action'; import { installLogicSchedule } from './logic-scheduler'; +import { presetPlatformProvider } from './platform/provider'; /** * 安装运行时 @@ -43,4 +44,6 @@ export function install(): void { presetAppCounterProvider(); // 安装逻辑调度器 installLogicSchedule(); + // 注册搭载平台适配器 + presetPlatformProvider(); } diff --git a/packages/runtime/src/interface/provider/i-platform-provider.ts b/packages/runtime/src/interface/provider/i-platform-provider.ts new file mode 100644 index 00000000000..4a82b954ef8 --- /dev/null +++ b/packages/runtime/src/interface/provider/i-platform-provider.ts @@ -0,0 +1,74 @@ +import { HttpResponse } from '@ibiz-template/core'; + +/** + * 搭载平台适配器接口 + * + * @author zk + * @date 2023-11-20 02:11:24 + * @export + * @interface IPlatformProvider + */ +export interface IPlatformProvider { + /** + * 登录 + * + * @author zk + * @date 2023-11-20 03:11:10 + * @param {string} loginName 账号! + * @param {string} passWord 密码! + * @param {string} [verificationCode] 验证码? + * @return {*} {Promise} + * @memberof IPlatformProvider + */ + login( + loginName: string, + passWord: string, + verificationCode?: string, + ): Promise; + + /** + * 上传 + * + * @author zk + * @date 2023-11-20 04:11:24 + * @param {string} url 上传地址 + * @param {File} file 上传文件 + * @param {IData} params 上传参数 + * @return {*} {Promise} + * @memberof IPlatformProvider + */ + upload( + url: string, + file: File, + params?: { param?: IData; headers?: IData }, + ): Promise; + + /** + * 下载 + * + * @author zk + * @date 2023-11-20 04:11:54 + * @param {string} url 下载地址 + * @param {string} name 文件名称 + * @memberof IPlatformProvider + */ + download(url: string, name: string): void; + + /** + * 初始化 + * + * @author zk + * @date 2023-11-21 11:11:57 + * @memberof IPlatformProvider + */ + init(): Promise; + + /** + * 返回 + * + * @author zk + * @date 2023-11-21 08:11:36 + * @memberof IPlatformProvider + */ + back(): void; +} diff --git a/packages/runtime/src/interface/provider/index.ts b/packages/runtime/src/interface/provider/index.ts index be635f24abb..bd78f0920be 100644 --- a/packages/runtime/src/interface/provider/index.ts +++ b/packages/runtime/src/interface/provider/index.ts @@ -11,3 +11,4 @@ export type * from './i-portlet.provider'; export type { IAppCounterProvider } from './i-app-counter.provider'; export type { IUILogicNodeProvider } from './i-ui-login-node.provider'; export type { IAsyncActionProvider } from './i-async-action.provider'; +export type { IPlatformProvider } from './i-platform-provider'; diff --git a/packages/runtime/src/platform/index.ts b/packages/runtime/src/platform/index.ts new file mode 100644 index 00000000000..466011aad7d --- /dev/null +++ b/packages/runtime/src/platform/index.ts @@ -0,0 +1,2 @@ +export * from './provider'; +export * from './platform-util'; diff --git a/packages/runtime/src/platform/platform-util.ts b/packages/runtime/src/platform/platform-util.ts new file mode 100644 index 00000000000..549caa5e637 --- /dev/null +++ b/packages/runtime/src/platform/platform-util.ts @@ -0,0 +1,57 @@ +import { PlatformType } from '../constant'; + +const ua = window.navigator.userAgent.toLowerCase(); + +// android平台 +function isAndroid(): boolean { + return /Android|Adr/i.test(ua); +} +// ios平台 + +function isIos(): boolean { + return /iPhone|iPod|iPad/i.test(ua); +} +// 微信生态 +function isWeChat(): boolean { + return /MicroMessenger/i.test(ua); +} + +// 钉钉环境 +function isDingDing(): boolean { + return /DingTalk/i.test(ua); +} +// 微信小程序 +function isWxMp(): boolean { + return ( + /miniProgram/i.test(ua) || + (window as IData).__wxjs_environment === 'miniprogram' + ); +} + +/** + * 获取搭载平台名称 + * + * @author zk + * @date 2023-11-21 02:11:28 + * @export + * @return {*} {PlatformType} + */ +export function getPlatformType(): PlatformType { + if (isAndroid()) { + return PlatformType.ANDROID; + } + if (isIos()) { + return PlatformType.IOS; + } + if (isWeChat()) { + return PlatformType.WEIXIN; + } + if (isDingDing()) { + return PlatformType.DINGDING; + } + if (isWxMp()) { + return PlatformType.WXMP; + } + // 默认为浏览器 + return PlatformType.BROWSER; +} diff --git a/packages/runtime/src/platform/provider/browser-platform-provider.ts b/packages/runtime/src/platform/provider/browser-platform-provider.ts new file mode 100644 index 00000000000..62705b251d8 --- /dev/null +++ b/packages/runtime/src/platform/provider/browser-platform-provider.ts @@ -0,0 +1,12 @@ +import { PlatformProviderBase } from './platform-provider-base'; + +/** + * 浏览器搭载平台适配器 + * + * @author zk + * @date 2023-11-20 03:11:25 + * @export + * @class BrowserPlatformProvider + * @extends {PlatformProviderBase} + */ +export class BrowserPlatformProvider extends PlatformProviderBase {} diff --git a/packages/runtime/src/platform/provider/index.ts b/packages/runtime/src/platform/provider/index.ts new file mode 100644 index 00000000000..90ecfb1a477 --- /dev/null +++ b/packages/runtime/src/platform/provider/index.ts @@ -0,0 +1,19 @@ +import { PlatformType } from '../../constant'; +import { registerPlatformProvider } from '../../register'; +import { BrowserPlatformProvider } from './browser-platform-provider'; +import { PlatformProviderBase } from './platform-provider-base'; + +/** + * 预置搭载平台适配器 + * + * @author zk + * @date 2023-11-20 03:11:00 + * @export + */ +export function presetPlatformProvider(): void { + // 预制浏览器搭载平台 + const browserPlatformProvider = new BrowserPlatformProvider(); + registerPlatformProvider(PlatformType.BROWSER, () => browserPlatformProvider); +} + +export { BrowserPlatformProvider, PlatformProviderBase }; diff --git a/packages/runtime/src/platform/provider/platform-provider-base.ts b/packages/runtime/src/platform/provider/platform-provider-base.ts new file mode 100644 index 00000000000..8cb8513a772 --- /dev/null +++ b/packages/runtime/src/platform/provider/platform-provider-base.ts @@ -0,0 +1,74 @@ +import { + downloadFileFromBlob, + HttpResponse, + IHttpResponse, + RuntimeError, +} from '@ibiz-template/core'; +import { IPlatformProvider } from '../../interface'; + +/** + * 搭载平台处理器基类 + * + * @author zk + * @date 2023-11-20 03:11:13 + * @export + * @abstract + * @class PlatformProviderBase + * @implements {IPlatformProvider} + */ +export abstract class PlatformProviderBase implements IPlatformProvider { + back(): void { + throw new Error('Method not implemented.'); + } + + init(): Promise { + throw new Error('Method not implemented.'); + } + + async login( + loginName: string, + passWord: string, + _verificationCode?: string | undefined, + ): Promise { + return ibiz.auth.login(loginName, passWord); + } + + async upload( + url: string, + file: File, + params: { param: IData; headers: IData }, + ): Promise { + const formData = new FormData(); + formData.append('file', file); + const { headers } = params; + const res = await ibiz.net.axios({ + url, + method: 'POST', + data: formData, + headers, + }); + return new HttpResponse(res.data, res.status); + } + + download(url: string, name: string): void { + // 发送get请求 + ibiz.net + .request(url, { + method: 'get', + responseType: 'blob', + }) + .then((response: IData) => { + if (response.status !== 200) { + throw new RuntimeError('下载文件失败'); + } + // 请求成功,后台返回的是一个文件流 + if (!response.data) { + throw new RuntimeError('文件流数据不存在'); + } else { + // 获取文件名 + const fileName = name; + downloadFileFromBlob(response.data, fileName); + } + }); + } +} diff --git a/packages/runtime/src/register/helper/index.ts b/packages/runtime/src/register/helper/index.ts index ba3bd8d4d57..f63e2d63123 100644 --- a/packages/runtime/src/register/helper/index.ts +++ b/packages/runtime/src/register/helper/index.ts @@ -9,3 +9,4 @@ export * from './ui-action-register'; export * from './ui-logic-node-register'; export * from './view-register'; export * from './async-action-register'; +export * from './platform-register'; diff --git a/packages/runtime/src/register/helper/platform-register.ts b/packages/runtime/src/register/helper/platform-register.ts new file mode 100644 index 00000000000..7e123df52d6 --- /dev/null +++ b/packages/runtime/src/register/helper/platform-register.ts @@ -0,0 +1,56 @@ +import { IPlatformProvider } from '../../interface'; + +import { PlatformType } from '../../constant'; +import { getPlatformType } from '../../platform'; + +/** 搭载平台适配器前缀 */ +export const PLATFORM_PROVIDER_PREFIX = 'PLATFORM'; + +/** + * 注册搭载平台适配器 + * @author zk + * @date 2023-11-20 02:11:36 + * @export + * @param {string} key + * @param {() => IPlatformProvider} callback 生成搭载平台适配器的回调 + */ + +export function registerPlatformProvider( + key: PlatformType, + callback: () => IPlatformProvider, +): void { + ibiz.register.register(`${PLATFORM_PROVIDER_PREFIX}_${key}`, callback); +} + +/** + * 获取适配器 + * + * @author zk + * @date 2023-11-20 02:11:00 + * @param {string} key + * @return {*} {(IPlatformProvider | undefined)} + */ +function getProvider(key: PlatformType): IPlatformProvider | undefined { + return ibiz.register.get( + `${PLATFORM_PROVIDER_PREFIX}_${key}`, + ) as IPlatformProvider; +} + +/** + * 获取搭载平台适配器 + * @author zk + * @date 2023-11-20 02:11:38 + * @export + * @param {IAppView} model + * @return {*} {Promise} + */ +export function getPlatformProvider(): IPlatformProvider { + // 搭载平台类型 + const platformType = getPlatformType(); + const provider: IPlatformProvider | undefined = getProvider(platformType); + if (!provider) { + // 默认返回浏览器搭载平台适配器 + return getProvider(PlatformType.BROWSER)!; + } + return provider; +} -- Gitee From 5c929c28ae1ddfb9f209106f0b482d96917744e7 Mon Sep 17 00:00:00 2001 From: zhangkang <1752553776@qq.com> Date: Wed, 22 Nov 2023 19:15:21 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E8=A7=86?= =?UTF-8?q?=E5=9B=BEcall=E6=B5=81=E7=A8=8B=E6=92=A4=E5=9B=9E=E6=A0=87?= =?UTF-8?q?=E8=AF=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/runtime/src/constant/view-call-tag.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/runtime/src/constant/view-call-tag.ts b/packages/runtime/src/constant/view-call-tag.ts index a24961170ec..ff74e97377e 100644 --- a/packages/runtime/src/constant/view-call-tag.ts +++ b/packages/runtime/src/constant/view-call-tag.ts @@ -27,4 +27,8 @@ export enum ViewCallTag { * 切换折叠(首页视图才用) */ 'TOGGLE_COLLAPSE' = 'ToggleCollapse', + /** + * 流程撤回 + */ + 'WF_WITHDRAW' = 'WFWithdraw', } -- Gitee From bcab7333a23a4b3623599b2ab04100229cde26f7 Mon Sep 17 00:00:00 2001 From: zhangkang <1752553776@qq.com> Date: Wed, 22 Nov 2023 19:16:02 +0800 Subject: [PATCH 3/3] docs: changeLog --- packages/runtime/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/runtime/CHANGELOG.md b/packages/runtime/CHANGELOG.md index 0fc63309acc..724ad3174e7 100644 --- a/packages/runtime/CHANGELOG.md +++ b/packages/runtime/CHANGELOG.md @@ -10,6 +10,8 @@ ### Added - 日历时间轴相关(前端排序、请求参数不用带开始结束时间) +- 新增视图call流程撤回标识`WF_WITHDRAW` +- 新增搭载平台适配器 ## [0.3.3] - 2023-11-21 -- Gitee