diff --git a/packages/runtime/CHANGELOG.md b/packages/runtime/CHANGELOG.md index b99838bd54ed93eebb472bdecde94cfdc1cd621a..054e1d68a1dd219bef321a9ab26028ec280ded71 100644 --- a/packages/runtime/CHANGELOG.md +++ b/packages/runtime/CHANGELOG.md @@ -11,6 +11,7 @@ - 新增部件参数batchtoolbarmode、全局参数batchToolbarMode,用于设置批操作工具栏显示模式(default 选数据即显示,multiple 需选 2 条以上),仅限卡片、列表、表格、树表格使用 - 添加部件引擎,支持部件加载与搜索部件加载并搜索 +- 界面行为支持viewoption参数,用于指定导入视图的打开方式与宽高 ### Changed @@ -18,6 +19,10 @@ - 更新移动端多数据部件界面行为组权限计算 - 更新表单按钮组界面行为权限计算 +### Fixed + +- 修复导入请求路径不正确异常 + ## [0.7.41-alpha.23] - 2025-09-04 ### Added diff --git a/packages/runtime/src/controller/common/view/app-data-upload-view.controller.ts b/packages/runtime/src/controller/common/view/app-data-upload-view.controller.ts index 44a2276829af6033f296b942e311fd35ff08d28e..989f45ad9897ff2fdbe612160399b458ec33f33a 100644 --- a/packages/runtime/src/controller/common/view/app-data-upload-view.controller.ts +++ b/packages/runtime/src/controller/common/view/app-data-upload-view.controller.ts @@ -1,4 +1,5 @@ import { IAppView } from '@ibiz/model-core'; +import { SelectFileOpts } from '@ibiz-template/core'; import { IAppDataUploadViewState, IViewController, @@ -56,16 +57,18 @@ export class AppDataUploadViewController< /** * 选中导入文件并导入 + * @param {SelectFileOpts} [fileOpts] * @author lxm * @date 2024-04-16 03:54:19 * @return {*} */ - async selectAndImport(): Promise { + async selectAndImport(fileOpts?: SelectFileOpts): Promise { const result = await selectAndImport({ appDataEntity: this.state.appDataEntity, dataImport: this.state.deDataImport, context: this.context, params: this.params, + fileOpts, }); // 异步导入的时候直接关闭视图 if (result.isAsync === true) { diff --git a/packages/runtime/src/controller/utils/data-file-util/data-file-util.ts b/packages/runtime/src/controller/utils/data-file-util/data-file-util.ts index 7cddd4fb65c8292bd8df8503fa7c91bb5b913894..a6759ec566b9388dcf1163bd0b421d7484444eae 100644 --- a/packages/runtime/src/controller/utils/data-file-util/data-file-util.ts +++ b/packages/runtime/src/controller/utils/data-file-util/data-file-util.ts @@ -3,6 +3,7 @@ import { IPortalAsyncAction, IPortalMessage, RuntimeError, + SelectFileOpts, selectFile, } from '@ibiz-template/core'; import { IAppDEDataImport, IAppDataEntity } from '@ibiz/model-core'; @@ -108,7 +109,8 @@ export async function asyncImportData( const resPath = calcResPath(context, appDataEntity); url = resPath + url; } - const res = await ibiz.net.request(url, { + const app = ibiz.hub.getApp(context?.srfappid); + const res = await app.net.request(url, { method: 'post', data, params: queryParam, @@ -163,7 +165,8 @@ export async function importData( isAsync: false, }; try { - const res = await ibiz.net.request(url, { + const app = ibiz.hub.getApp(context?.srfappid); + const res = await app.net.request(url, { method: 'post', data, params: queryParam, @@ -318,6 +321,7 @@ export async function getDataImportModels(opts: { * dataImportViewId?: string; * context: IContext; * params: IParams; + * viewOption?: IData; * }} opts * @return {*} {Promise} */ @@ -327,6 +331,7 @@ export async function openDataImport(opts: { dataImportViewId?: string; context: IContext; params: IParams; + viewOption?: IData; }): Promise { const { deDataImportId, appDataEntityId, context, params } = opts; const viewId = opts.dataImportViewId || 'AppDataUploadView'; @@ -350,7 +355,7 @@ export async function openDataImport(opts: { view.id, context, params, - { openMode: 'POPUPMODAL' }, + { openMode: 'POPUPMODAL', ...opts.viewOption }, ); } // 走自定义组件的导入 @@ -408,7 +413,8 @@ export async function downloadImportTemplate( const resPath = calcResPath(context, appDataEntity); templateUrl = resPath + templateUrl; } - const res = await ibiz.net.request(templateUrl, { + const app = ibiz.hub.getApp(context?.srfappid); + const res = await app.net.request(templateUrl, { responseType: 'blob', params: queryParam, }); @@ -441,6 +447,7 @@ export async function selectAndImport(opts: { dataImport?: IAppDEDataImport; context?: IContext; params?: IParams; + fileOpts?: SelectFileOpts; }): Promise { return new Promise(resolve => { selectFile({ @@ -459,6 +466,7 @@ export async function selectAndImport(opts: { onCancel: () => { resolve({ cancel: true }); }, + ...opts.fileOpts, }); }); } @@ -501,7 +509,8 @@ export async function asyncImportData2(opts: { if (srfimporttag) { Object.assign(queryData, { srfimporttag }); } - await ibiz.net.request(url, { + const app = ibiz.hub.getApp(opts.context?.srfappid); + await app.net.request(url, { method: 'get', params: queryData, }); @@ -563,6 +572,7 @@ export function calcImportSchemaData(opts: { * appDataEntity?: IAppDataEntity; * dataImport?: IAppDEDataImport; * data: Partial; + * context?: IContext; * }} opts * @return {*} */ @@ -570,10 +580,12 @@ export async function createImportSchema(opts: { appDataEntity?: IAppDataEntity; dataImport?: IAppDEDataImport; data: Partial; + context?: IContext; }): Promise> { const data = calcImportSchemaData(opts); const url = `extension/import_schemas`; - const res = await ibiz.net.request(url, { + const app = ibiz.hub.getApp(opts.context?.srfappid); + const res = await app.net.request(url, { method: 'post', data, }); @@ -589,6 +601,7 @@ export async function createImportSchema(opts: { * appDataEntity?: IAppDataEntity; * dataImport?: IAppDEDataImport; * data: Partial; + * context?: IContext; * }} opts * @return {*} */ @@ -596,10 +609,12 @@ export async function updateImportSchema(opts: { appDataEntity?: IAppDataEntity; dataImport?: IAppDEDataImport; data: Partial; + context?: IContext; }): Promise> { const data = calcImportSchemaData(opts); const url = `extension/import_schemas/${data.id}`; - const res = await ibiz.net.request(url, { + const app = ibiz.hub.getApp(opts.context?.srfappid); + const res = await app.net.request(url, { method: 'put', data, }); @@ -612,13 +627,16 @@ export async function updateImportSchema(opts: { * @date 2024-04-18 04:47:03 * @export * @param {string} id + * @param {IContext} [context] * @return {*} {Promise>} */ export async function getImportSchema( id: string, + context?: IContext, ): Promise> { const url = `extension/import_schemas/${id}`; - const res = await ibiz.net.request(url, { + const app = ibiz.hub.getApp(context?.srfappid); + const res = await app.net.request(url, { method: 'get', }); return res; @@ -630,13 +648,16 @@ export async function getImportSchema( * @date 2024-04-18 04:47:03 * @export * @param {string} id + * @param {IContext} [context] * @return {*} {Promise>} */ export async function deleteImportSchema( id: string, + context?: IContext, ): Promise> { const url = `extension/import_schemas/${id}`; - const res = await ibiz.net.request(url, { + const app = ibiz.hub.getApp(context?.srfappid); + const res = await app.net.request(url, { method: 'delete', }); return res; @@ -650,12 +671,14 @@ export async function deleteImportSchema( * @param {{ * appDataEntity: IAppDataEntity; * dataImport?: IAppDEDataImport; + * context?: IContext; * }} opts * @return {*} {Promise>} */ export async function fetchImportSchemas(opts: { appDataEntity: IAppDataEntity; dataImport?: IAppDEDataImport; + context?: IContext; }): Promise> { const params = { n_import_tag_eq: opts.appDataEntity.defaultAppDEDataImportId, @@ -663,7 +686,8 @@ export async function fetchImportSchemas(opts: { n_data_entity_tag_eq: opts.appDataEntity.codeName, }; const url = `extension/import_schemas/fetch_cur_user`; - const res = await ibiz.net.request(url, { + const app = ibiz.hub.getApp(opts.context?.srfappid); + const res = await app.net.request(url, { method: 'post', data: params, }); diff --git a/packages/runtime/src/ui-action/provider/front-ui-action-provider.ts b/packages/runtime/src/ui-action/provider/front-ui-action-provider.ts index 350163158b59c2f6ebf15be00155a900849ebebc..311cead2cd285a64dd565123e69a1d0587ef72fb 100644 --- a/packages/runtime/src/ui-action/provider/front-ui-action-provider.ts +++ b/packages/runtime/src/ui-action/provider/front-ui-action-provider.ts @@ -249,12 +249,8 @@ export class FrontUIActionProvider extends UIActionProviderBase { args: IUILogicParams, ): Promise { // 处理参数 - const { resultContext, resultParams } = await this.handleParams( - action, - args.context, - args.data, - args.params, - ); + const { resultContext, resultParams, presetParams } = + await this.handleParams(action, args.context, args.data, args.params); const { appDataEntityId, appDEDataImportId, frontAppViewId } = action; if (!appDataEntityId || !appDEDataImportId) { @@ -270,6 +266,7 @@ export class FrontUIActionProvider extends UIActionProviderBase { dataImportViewId: frontAppViewId, context: resultContext, params: resultParams, + viewOption: presetParams.viewoption, }); return { diff --git a/packages/runtime/src/ui-action/provider/ui-action-provider-base.ts b/packages/runtime/src/ui-action/provider/ui-action-provider-base.ts index 47f3e50c17c49c705458b046d21d326f47d944b2..31447e0277f9ea14dc8d94839335c62f2365894e 100644 --- a/packages/runtime/src/ui-action/provider/ui-action-provider-base.ts +++ b/packages/runtime/src/ui-action/provider/ui-action-provider-base.ts @@ -373,6 +373,14 @@ export abstract class UIActionProviderBase implements IUIActionProvider { presetParams.srfasyncaction = resultParams.srfasyncaction; delete resultParams.srfasyncaction; } + + // viewoption(指定导入视图的打开方式与宽高,参数值格式为viewoption={"modalOption":{"width":"80%","height":"80%"},"openMode":"POPUPMODAL"},openMode打开方式的可选值有:INDEXVIEWTAB(顶级容器分页)、INDEXVIEWTAB_POPUP(顶级容器分页(非模态弹出))、INDEXVIEWTAB_POPUPMODAL(顶级容器分页(模态弹出))、POPUP(非模式弹出)、POPUPMODAL(模式弹出)、POPOVER(气泡卡片)、DRAWER_LEFT(模态左侧抽屉弹出)、DRAWER_RIGHT(模态右侧抽屉弹出)、DRAWER_TOP(模态上方抽屉弹出)、DRAWER_BOTTOM(模态下方抽屉弹出)) + if (resultParams.hasOwnProperty('viewoption')) { + if (resultParams.viewoption) { + presetParams.viewoption = JSON.parse(resultParams.viewoption); + } + delete resultParams.viewoption; + } return { resultContext, resultData, resultParams, presetParams }; }