提交 c976694e 编写于 作者: tony001's avatar tony001

update:更新模板

上级 7b60c857
......@@ -102,38 +102,39 @@ public class ModelStorage {
if(!templateData.containsKey(type))
{
CliData rt=new CliData();
if(type.equals(TemplateFileType.api))
{
getSystemModel().getApis().forEach(item->{
CliOption opt=newCliOption(TemplateFileType.api).baseData(item,item.getCodeName().toLowerCase());
rt.addOption(opt);
});
}
else if(type.equals(TemplateFileType.apiEntity))
{
getSystemModel().getApis().forEach(api->{
api.getApiEntities().forEach(item->{
CliOption opt=newCliOption(TemplateFileType.apiEntity).baseData(item,item.getCodeName().toString()).set("apis",api.getCodeName().toLowerCase());
rt.addOption(opt);
});
});
}
else if (type.equals(TemplateFileType.apiDto)) {
getSystemModel().getApis().forEach(api -> {
api.getApiEntities().forEach(item -> {
item.getDtos().forEach(dto -> {
CliOption opt = newCliOption(TemplateFileType.apiDto)
.setCliSubType(dto.getType())
.baseData(dto, dto.getCodeName())
.set("apiDtos",dto.getCodeName()).set("apis",dto.getApi().getCodeName().toLowerCase());
rt.addOption(opt);
});
});
});
}
else if(type.equals(TemplateFileType.app))
// if(type.equals(TemplateFileType.api))
// {
//
// getSystemModel().getApis().forEach(item->{
// CliOption opt=newCliOption(TemplateFileType.api).baseData(item,item.getCodeName().toLowerCase());
// rt.addOption(opt);
// });
//
// }
// else if(type.equals(TemplateFileType.apiEntity))
// {
// getSystemModel().getApis().forEach(api->{
// api.getApiEntities().forEach(item->{
// CliOption opt=newCliOption(TemplateFileType.apiEntity).baseData(item,item.getCodeName().toString()).set("apis",api.getCodeName().toLowerCase());
// rt.addOption(opt);
// });
// });
// }
// else if (type.equals(TemplateFileType.apiDto)) {
// getSystemModel().getApis().forEach(api -> {
// api.getApiEntities().forEach(item -> {
// item.getDtos().forEach(dto -> {
// CliOption opt = newCliOption(TemplateFileType.apiDto)
// .setCliSubType(dto.getType())
// .baseData(dto, dto.getCodeName())
// .set("apiDtos",dto.getCodeName()).set("apis",dto.getApi().getCodeName().toLowerCase());
// rt.addOption(opt);
// });
// });
// });
// }
// else if(type.equals(TemplateFileType.app))
if(type.equals(TemplateFileType.app))
{
getSystemModel().getApps().forEach(item->{
CliOption opt=newCliOption(TemplateFileType.app).baseData(item,item.getCodeName().toLowerCase());
......
{{#*inline "FORM"}}{{>@macro/front-end/views/view-form/view-control-form.hbs}}{{/inline}}
{{#*inline "SEARCHFORM"}}{{>@macro/front-end/views/view-form/view-control-form.hbs}}{{/inline}}
{{#*inline "GRID"}}{{>@macro/front-end/views/view-grid/view-control-grid.hbs}}{{/inline}}
{{#*inline "APPMENU"}}{{>@macro/front-end/views/view-menu/view-control-menu.hbs}}{{/inline}}
{{#*inline "FORM"}}{{>@macro/front-end/views/view-control/view-form/view-control-form.hbs}}{{/inline}}
{{#*inline "SEARCHFORM"}}{{>@macro/front-end/views/view-control/view-form/view-control-form.hbs}}{{/inline}}
{{#*inline "GRID"}}{{>@macro/front-end/views/view-control/view-grid/view-control-grid.hbs}}{{/inline}}
{{#*inline "APPMENU"}}{{>@macro/front-end/views/view-control/view-menu/view-control-menu.hbs}}{{/inline}}
{{> @macro/front-end/views/config/include-view-control}}
{{> @macro/front-end/views/include-view-control}}
viewCodeName: '{{page.codeName}}',
viewName: '{{page.name}}',
viewCaption: '{{page.caption}}',
height: '{{page.height}}',
width: '{{page.width}}',
appEntityName:'{{page.appEntity.codeName}}',
appEntityName: '{{page.appEntity.codeName}}',
isLoadDefault: true,
{{!-- viewMsgGroup: '{{page.psAppViewMsgGroup}}', --}}
{{!-- viewUIActions: '{{page.psAppViewUIActions}}', --}}
viewSysCss: '{{page.psSysCss}}',
......@@ -14,7 +15,7 @@
viewStyle: '{{page.viewStyle}}',
showCaptionBar: '{{page.viewStyle}}',
xDataControlName:'{{page.xDataControlName}}',
openDataViewName:'ExampleEditorEditView',
openDataViewName: 'ExampleEditorEditView',
appViewNavContexts:{{> @macro/front-end/common/navparam.hbs appNavParams=page.psAppViewNavContexts}},
appViewNavParams:{{> @macro/front-end/common/navparam.hbs appNavParams=page.getPSAppViewNavParams}},
toolbar: [
......
{{name}}:{
action:{
loadAction: '{{ctrl.getPSControlAction.psAppDEMethod.codeName}}',
removeAction: '{{ctrl.removePSControlAction.psAppDEMethod.codeName}}',
updateAction: '{{ctrl.updatePSControlAction.psAppDEMethod.codeName}}',
loadDraftAction: '{{ctrl.getDraftPSControlAction.psAppDEMethod.codeName}}',
createAction: '{{ctrl.createPSControlAction.psAppDEMethod.codeName}}'
}
}
\ No newline at end of file
{{name}}:{
loadAction: '{{ctrl.getPSControlAction.psAppDEMethod.codeName}}',
removeAction: '{{ctrl.removePSControlAction.psAppDEMethod.codeName}}',
updateAction: '{{ctrl.updatePSControlAction.psAppDEMethod.codeName}}',
loadDraftAction: '{{ctrl.getDraftPSControlAction.psAppDEMethod.codeName}}',
createAction: '{{ctrl.createPSControlAction.psAppDEMethod.codeName}}'
}
\ No newline at end of file
import { IContext, IParam } from "../common";
/**
* @description 界面行为服务
* @export
* @interface IAppActionService
*/
export interface IAppActionService {
/**
* 执行界面行为
*
* @param uiAction 界面行为信息
* @param params 运行参数 { context: 上下文对象, viewParams: 视图参数, data: 当前激活数据, event: 事件源对象, actionEnvironment:操作环境}
* @memberof IAppActionService
*/
execute(uiAction: IParam, params: { context: IContext, viewParams: IParam, data: IParam, event: MouseEvent, actionEnvironment: IParam }): void;
}
\ No newline at end of file
export * from './i-app-func-service';
export * from './i-app-action-service';
export * from './i-open-view-service';
export * from './i-data-service-register';
export * from './i-ui-service-register';
\ No newline at end of file
import { hasFunction } from "@core";
import { IParam, IContext, IAppActionService } from "@core/interface";
import { AppSysAction } from "../app-ui-action/app-sys-action";
export class AppActionService implements IAppActionService {
/**
* @description 唯一实例
* @private
* @static
* @memberof AppActionService
*/
private static readonly instance = new AppActionService();
/**
* @description 获取唯一实例
* @static
* @return {*} {AppActionService}
* @memberof AppActionService
*/
public static getInstance(): AppActionService {
return AppActionService.instance;
}
/**
* 执行界面行为
*
* @param uiAction 界面行为信息
* @param params 运行参数 { context: 上下文对象, viewParams: 视图参数, data: 当前激活数据, event: 事件源对象, actionEnvironment:操作环境}
*/
public execute(uiAction: IParam, params: { context: IContext, viewParams: IParam, data: IParam, event: MouseEvent, actionEnvironment: IParam }) {
const { uIActionTag } = uiAction;
if (uiAction.uIActionMode == 'SYS') {
AppSysAction.execute(uiAction, params);
} else {
const { actionEnvironment } = params;
if (actionEnvironment && actionEnvironment.appUIService && hasFunction(actionEnvironment.appUIService, uIActionTag)) {
actionEnvironment.appUIService[uIActionTag](uiAction, params);
} else {
console.warn("非(前台界面行为、后台界面行为、系统预置界面行为)暂未支持");
}
}
}
}
\ No newline at end of file
import { IContext, IParam, ViewUtil } from "@core";
/**
* 全局界面行为服务
*
* @export
* @class AppGlobalActionService
*/
export class AppGlobalActionService {
/**
* 单例变量声明
*
* @private
* @static
* @type {AppGlobalActionService}
* @memberof AppGlobalActionService
*/
private static AppGlobalActionService: AppGlobalActionService;
/**
* 获取 AppGlobalActionService 单例对象
*
* @static
* @returns {AppGlobalActionService}
* @memberof AppGlobalActionService
*/
public static getInstance(): AppGlobalActionService {
if (!AppGlobalActionService.AppGlobalActionService) {
AppGlobalActionService.AppGlobalActionService = new AppGlobalActionService();
}
return this.AppGlobalActionService;
}
/**
* 执行全局界面行为
*
* @param {IParam} uiAction
* @param { context: IContext, viewParams: IParam, data: IParam, event: MouseEvent, actionEnvironment: IParam } params
* @memberof AppGlobalActionService
*/
public executeGlobalAction(uiAction: IParam, params: { context: IContext, viewParams: IParam, data: IParam, event: MouseEvent, actionEnvironment: IParam }) {
const tag = uiAction.uIActionTag;
switch (tag) {
case "Edit":
this.Edit(params);
break;
case "New":
this.New(params);
break;
default:
console.log(`未支持${tag}`);
}
}
/**
* 编辑
*
* @param { context: IContext, viewParams: IParam, data: IParam, event: MouseEvent, actionEnvironment: IParam } params
* @return {*}
* @memberof AppGlobalActionService
*/
public Edit(params: { context: IContext, viewParams: IParam, data: IParam, event: MouseEvent, actionEnvironment: IParam }) {
const { actionEnvironment } = params
if (!actionEnvironment?.viewState?.editDataViewName) {
return;
}
const viewName = actionEnvironment?.viewState?.editDataViewName;
const view = App.getViewInfo(viewName);
if (!view) {
return;
}
ViewUtil.openData(view, params);
}
/**
* 新建
*
* @param { context: IContext, viewParams: IParam, data: IParam, event: MouseEvent, actionEnvironment: IParam } params
* @return {*}
* @memberof AppGlobalActionService
*/
public New(params: { context: IContext, viewParams: IParam, data: IParam, event: MouseEvent, actionEnvironment: IParam }) {
const { actionEnvironment } = params
if (!actionEnvironment?.viewState?.openDataViewName) {
return;
}
const viewName = actionEnvironment?.viewState?.openDataViewName;
const view = App.getViewInfo(viewName);
if (!view) {
return;
}
ViewUtil.newData(view, params);
}
}
\ No newline at end of file
export * from './app-func-service';
export * from './app-global-action-service';
\ No newline at end of file
export * from './app-action-service';
\ No newline at end of file
import { IContext, IParam } from "@core";
import { AppUIAction } from ".";
import { AppActionService, IContext, IParam } from "@core";
export interface ActionParams {
/**
......@@ -147,7 +146,7 @@ export class AppActionBase {
return;
}
// 参数合并 todo
AppUIAction.execute(actionModel, params);
AppActionService.getInstance().execute(actionModel, params);
}
/**
......
......@@ -9,8 +9,6 @@ import { ActionParams, AppActionBase, UIActionResult } from "./app-action-base";
*/
export class AppFrontAction extends AppActionBase {
/**
* 打开视图
*
......
import { AppGlobalActionService, IContext, IParam } from "@core";
import { IContext, IParam, ViewUtil } from "@core";
/**
* 系统预置界面行为
......@@ -14,10 +14,59 @@ export class AppSysAction {
* @static
* @param {IParam} uiAction 界面行为对象
* @param { context: IContext, viewParams: IParam, data: IParam, event: MouseEvent, actionEnvironment:IParam} params { context: 上下文对象, viewParams: 视图参数, data: 当前激活数据, event: 事件源对象, actionEnvironment:操作环境}
* @memberof AppBackendAction
* @memberof AppSysAction
*/
public static async execute(uiAction: IParam, params: { context: IContext, viewParams: IParam, data: IParam, event: MouseEvent, actionEnvironment: IParam }) {
console.log(uiAction, params);
AppGlobalActionService.getInstance().executeGlobalAction(uiAction, params)
const tag = uiAction.uIActionTag;
switch (tag) {
case "Edit":
this.Edit(params);
break;
case "New":
this.New(params);
break;
default:
console.log(`未支持${tag}`);
}
}
/**
* 编辑
*
* @param { context: IContext, viewParams: IParam, data: IParam, event: MouseEvent, actionEnvironment: IParam } params
* @return {*}
* @memberof AppSysAction
*/
public static Edit(params: { context: IContext, viewParams: IParam, data: IParam, event: MouseEvent, actionEnvironment: IParam }) {
const { actionEnvironment } = params
if (!actionEnvironment?.viewState?.editDataViewName) {
return;
}
const viewName = actionEnvironment?.viewState?.editDataViewName;
const view = App.getViewInfo(viewName);
if (!view) {
return;
}
ViewUtil.openData(view, params);
}
/**
* 新建
*
* @param { context: IContext, viewParams: IParam, data: IParam, event: MouseEvent, actionEnvironment: IParam } params
* @return {*}
* @memberof AppGlobalActionService
*/
public static New(params: { context: IContext, viewParams: IParam, data: IParam, event: MouseEvent, actionEnvironment: IParam }) {
const { actionEnvironment } = params
if (!actionEnvironment?.viewState?.openDataViewName) {
return;
}
const viewName = actionEnvironment?.viewState?.openDataViewName;
const view = App.getViewInfo(viewName);
if (!view) {
return;
}
ViewUtil.newData(view, params);
}
}
import { IContext, IParam } from '@core';
import { AppBackendAction } from './app-backend-action';
import { AppFrontAction } from './app-front-action';
import { AppSysAction } from './app-sys-action';
/**
* 界面行为功能执行
*
* @export
* @class AppUIAction
*/
export class AppUIAction {
/**
* 执行界面行为
*
* @param uiAction 界面行为信息
* @param params 运行参数 { context: 上下文对象, viewParams: 视图参数, data: 当前激活数据, event: 事件源对象, actionEnvironment:操作环境}
*/
public static execute(uiAction: IParam, params: { context: IContext, viewParams: IParam, data: IParam, event: MouseEvent, actionEnvironment: IParam }){
if(uiAction.uIActionMode == 'FRONT'){
AppFrontAction.execute(uiAction, params);
}else if(uiAction.uIActionMode == 'BACKEND'){
AppBackendAction.execute(uiAction, params);
}else if(uiAction.uIActionMode == 'SYS'){
AppSysAction.execute(uiAction, params);
}else{
console.warn("非(前台界面行为、后台界面行为、系统预置界面行为)暂未支持");
}
}
}
export * from './app-ui-action';
export * from './app-front-action';
export * from './app-backend-action';
\ No newline at end of file
export * from './app-backend-action';
export * from './app-sys-action';
\ No newline at end of file
import { GridViewProps, GridViewState, MDView } from '@core';
import { GridViewProps, GridViewState, IActionParam, IParam, MDView } from '@core';
/**
* @description 表格视图
......@@ -16,15 +16,52 @@ export class GridView extends MDView {
public declare viewState: GridViewState;
/**
* @description 使用加载功能模块
* @param {GridViewProps} props 传入的props
* 当前视图表格部件
*
* @type {IParam}
* @memberof GridView
*/
public useLoad(props: GridViewProps){
const { viewSubject } = this.viewState;
onMounted(()=>{
viewSubject.next({tag: 'grid', action: "load", data: {}})
})
public declare grid: IParam;
/**
* @description 处理视图初始化
*
* @param {GridViewProps} props
* @param {Function} emit
* @memberof GridView
*/
public useViewInit(props: GridViewProps, emit: Function) {
super.useViewInit(props, emit);
// 初始化搜索表格引用
this.grid = ref(null);
}
/**
* 处理部件事件
*
* @param {IActionParam} actionParam
* @memberof MDView
*/
public handleCtrlEvent(actionParam: IActionParam) {
const { tag, action, data } = actionParam;
if (Object.is(tag, 'grid')) {
this.MDCtrlEvent(action, data);
}
super.handleCtrlEvent(actionParam);
}
/**
* 获取多数据部件
*
* @return {*} {*}
* @memberof GridView
*/
public getMDCtrl(): any {
if (this.grid.value) {
return this.grid.value;
} else {
return null;
}
}
/**
......@@ -34,12 +71,11 @@ export class GridView extends MDView {
* @return {*}
* @memberof GridView
*/
public moduleInstall(props: GridViewProps, emit?: Function) {
public moduleInstall(props: GridViewProps, emit: Function) {
const superParams = super.moduleInstall(props, emit);
this.useLoad(props);
return {
...superParams,
state: this.viewState,
grid: this.grid
};
}
}
import { IndexViewProps, IndexViewState, ViewBase } from '@core';
import { onMounted } from 'vue';
/**
* @description 首页视图
......@@ -16,10 +17,10 @@ export class IndexView extends ViewBase {
* 使用加载功能模块
* @param props 传入的props
*/
public useLoad(props: IndexViewProps){
public useLoad(props: IndexViewProps) {
const { viewSubject } = this.viewState;
onMounted(()=>{
viewSubject.next({tag: 'appmenu', action: "load", data: {}})
onMounted(() => {
viewSubject.next({ tag: 'appmenu', action: "load", data: {} })
})
}
......@@ -28,7 +29,7 @@ export class IndexView extends ViewBase {
* @param props 传入的Props
* @param [emit] 事件
*/
public moduleInstall(props: IndexViewProps, emit?: Function) {
public moduleInstall(props: IndexViewProps, emit: Function) {
const superParams = super.moduleInstall(props, emit);
this.useLoad(props);
return {
......
import { ViewBase, MainViewProps, MainViewState, IActionParam, IParam, AppUIAction } from '@core';
import { ViewBase, MainViewProps, MainViewState, IActionParam, IParam, AppActionService } from '@core';
/**
* 实体部件
* 实体视图
* @export
* @class ViewBase
*/
......@@ -20,30 +20,30 @@ export class MainView extends ViewBase {
public declare xDataControl: IParam;
/**
* 根据props调整设置部件state
* @param props 传入的Props
* @description 根据props调整设置视图状态变量
*
* @param {ViewPropsBase} props 传入的Props
* @param {Function} emit 事件
* @memberof MainView
*/
public setState(props: MainViewProps) {
super.setState(props);
this.xDataControl = ref(null);
protected handleState(props: MainViewProps, emit: Function) {
super.handleState(props, emit);
}
/**
* 打开编辑视图功能模块
* @todo
* @param props
*/
public useOpenData(props: MainViewProps) { }
/**
* 打开新建视图功能模块
* @todo
* @param props
* @description 处理视图初始化
*
* @param {MainViewProps} props
* @param {Function} emit
* @memberof MainView
*/
public useNewData(props: MainViewProps) { }
public useViewInit(props: MainViewProps, emit: Function) {
super.useViewInit(props, emit);
}
/**
* @description 处理工具栏事件
*
* @param {IActionParam} actionParam
* @memberof MainView
*/
......@@ -67,29 +67,28 @@ export class MainView extends ViewBase {
actionEnvironment: this
};
// 执行行为
AppUIAction.execute(uIAction, inputParam);
AppActionService.getInstance().execute(uIAction, inputParam);
}
public handleCtrlEvent(actionParam: IActionParam) {
const { tag, action, data } = actionParam;
// TODO
console.log(tag, action, data);
}
/**
* 处理部件事件
*
* @param {IActionParam} actionParam
* @memberof MainView
*/
public handleCtrlEvent(actionParam: IActionParam) { }
/**
* 安装部件所有功能模块的方法
* @param props 传入的Props
* @param [emit] 事件
* @description 安装视图所有功能模块的方法
*
* @param {ViewPropsBase} props 传入的Props
* @param {Function} emit 事件
* @memberof MainView
*/
public moduleInstall(props: MainViewProps, emit?: Function) {
public moduleInstall(props: MainViewProps, emit: Function) {
const superParams = super.moduleInstall(props, emit);
const handleToolbarEvent = this.handleToolbarEvent.bind(this);
this.handleToolbarEvent = (actionParam: IActionParam) => {
handleToolbarEvent(actionParam)
}
return {
...superParams,
state: this.viewState,
xDataControl: this.xDataControl,
handleToolbarEvent: this.handleToolbarEvent.bind(this),
handleCtrlEvent: this.handleCtrlEvent.bind(this),
......
import { MainView, MDViewState } from '@core';
import { IActionParam, IParam, MainView, MDViewProps, MDViewState } from '@core';
/**
* 多数据视图
......@@ -13,4 +13,246 @@ export class MDView extends MainView {
*/
public declare viewState: MDViewState;
/**
* 当前视图搜索表单部件
*
* @type {IParam}
* @memberof MDView
*/
public declare searchForm: IParam;
/**
* 当前视图搜索栏部件
*
* @type {IParam}
* @memberof MDView
*/
public declare searchBar: IParam;
/**
* @description 处理视图初始化
*
* @param {MainViewProps} props
* @param {Function} emit
* @memberof MDView
*/
public useViewInit(props: MDViewProps, emit: Function) {
super.useViewInit(props, emit);
// 初始化搜索表单引用
this.searchForm = ref(null);
// 初始化搜索栏引用
this.searchBar = ref(null);
onMounted(() => {
// 初始化数据能力部件
this.xDataControl = this.getMDCtrl();
const { isLoadDefault } = this.viewState;
if (this.getSearchForm() && isLoadDefault) {
const tag = this.getSearchForm().name;
this.next({ tag: tag, action: 'loaddraft', data: null });
} else if (this.getMDCtrl() && isLoadDefault) {
const tag = this.getMDCtrl().name;
this.next({ tag: tag, action: 'load', data: null });
} else {
this.viewState.isLoadDefault = true;
}
})
}
/**
* 处理部件事件
*
* @param {IActionParam} actionParam
* @memberof MDView
*/
public handleCtrlEvent(actionParam: IActionParam) {
const { tag, action, data } = actionParam;
if (Object.is(tag, 'searchform')) {
this.searchFormEvent(action, data);
}
}
/**
* 搜索表单事件
*
* @param {string} eventName
* @param {*} [args={}]
* @memberof MDView
*/
public searchFormEvent(eventName: string, args: any = {}): void {
if (Object.is(eventName, 'load')) {
this.onSearchFormLoad(args);
}
if (Object.is(eventName, 'search')) {
this.onSearchFormLoad(args);
}
}
/**
* 搜索表单加载完成
*
* @param {*} [args={}]
* @memberof MDView
*/
public onSearchFormLoad(args: any = {}): void {
const { isLoadDefault, viewParams } = this.viewState;
if (this.getMDCtrl() && isLoadDefault) {
const tag = this.getMDCtrl().name;
this.next({ tag: tag, action: 'load', data: viewParams });
}
this.viewState.isLoadDefault = true;
}
/**
* 搜索表单搜索
*
* @param {*} [args={}]
* @memberof MDView
*/
public onSearchFormSearch(args: any = {}): void {
const { isLoadDefault, viewParams } = this.viewState;
if (this.getMDCtrl() && isLoadDefault) {
const tag = this.getMDCtrl().name;
this.next({ tag: tag, action: 'load', data: viewParams });
}
this.viewState.isLoadDefault = true;
}
/**
* 多数据部件事件处理
*
* @param {string} eventName
* @param {any[]} args
* @memberof MDView
*/
public MDCtrlEvent(eventName: string, args: any): void {
if (Object.is(eventName, 'rowclick')) {
this.doEdit(args);
}
if (Object.is(eventName, 'rowdblclick')) {
this.doEdit(args);
}
if (Object.is(eventName, 'selectionchange')) {
this.selectionChange(args);
}
if (Object.is(eventName, 'load')) {
this.MDCtrlLoaded(args);
}
if (Object.is(eventName, 'beforeload')) {
this.MDCtrlBeforeLoad(args)
}
}
/**
* 多数据部件加载之前
*
* @param {*} args
* @memberof MDView
*/
public MDCtrlBeforeLoad(args: any = {}) {
if (this.getSearchForm()) {
Object.assign(args, this.getSearchForm().getData());
}
if (this.getSearchBar()) {
Object.assign(args, this.getSearchBar().getData());
}
// if (this.view && !this.view.isExpandSearchForm) {
// Object.assign(args, { query: this.view.query });
// }
// 快速分组和快速搜索栏
// if (this.view && this.view.quickGroupData) {
// Object.assign(args, this.view.quickGroupData);
// }
// if (this.view && this.view.quickFormData) {
// Object.assign(args, this.view.quickFormData);
// }
// 自定义查询条件
// const mdCtrl: any = this.getMDCtrl();
// if (mdCtrl && mdCtrl.controlInstance && mdCtrl.controlInstance.customCond) {
// Object.assign(args, { srfdsscope: mdCtrl.controlInstance.customCond });
// }
}
/**
* 多数据部件加载完成
*
* @param {*} args
* @memberof MDView
*/
public MDCtrlLoaded(args: any) {
throw new Error('Method not implemented.');
}
/**
* 多数据部件选中数据
*
* @param {*} args
* @memberof MDView
*/
public selectionChange(args: any) {
throw new Error('Method not implemented.');
}
/**
* 执行编辑操作
*
* @param {*} args
* @memberof MDView
*/
public doEdit(args: any) {
throw new Error('Method not implemented.');
}
/**
* @description 安装视图所有功能模块的方法
*
* @param {ViewPropsBase} props 传入的Props
* @param {Function} emit 事件
* @memberof MDView
*/
public moduleInstall(props: MDViewProps, emit: Function) {
const superParams = super.moduleInstall(props, emit);
return {
...superParams,
xDataControl: this.xDataControl,
searchForm: this.searchForm,
searchBar: this.searchBar
};
}
/**
* @description 获取搜索表单部件
*
* @return {*} {*}
* @memberof MDView
*/
public getSearchForm(): any {
if (this.searchForm.value) {
return this.searchForm.value;
} else {
return null;
}
}
/**
* 获取搜索栏部件
*
* @returns {*}
* @memberof MDView
*/
public getSearchBar() {
if (this.searchBar.value) {
return this.searchBar.value;
} else {
return null;
}
}
/**
* 获取多数据部件
*
* @return {*} {*}
* @memberof MDView
*/
public getMDCtrl(): any { }
}
......@@ -16,6 +16,22 @@ export class ViewBase {
*/
public viewState: ViewStateBase;
/**
* 界面行为服务
*
* @type {(IParam | undefined)}
* @memberof ViewBase
*/
public appUIService: IParam | undefined;
/**
* 数据服务
*
* @type {(IParam | undefined)}
* @memberof ViewBase
*/
public appDataService: IParam | undefined;
/**
* Creates an instance of ViewBase.
* @param {*} options 配置参数
......@@ -26,31 +42,35 @@ export class ViewBase {
}
/**
* @description 事件
* @type {*}
* @description 根据props调整视图状态变量
* @param {ViewPropsBase} props 传入的Props
* @param {Function} emit 事件
* @memberof ViewBase
*/
emit: any;
protected handleState(props: ViewPropsBase, emit: Function) {
// 只读属性处理:把props的属性的Ref赋给state,以维持响应性
this.viewState.viewSubject = toRef(props, 'viewSubject') as any;
}
/**
* @description 根据props调整设置部分视图基类
* @param {ViewPropsBase} props 传入参数
* @memberof ViewBase
* 通知状态
*
* @param { tag: string, action: string, data: any } { tag, action, data }
* @memberof ViewEngine
*/
public setState(props: ViewPropsBase) {
// todo 项目级配置入口,优先级大于平台,提供全局的一次性配置
// 只读属性处理:把props的属性的Ref赋给state,以维持响应性。
this.viewState.viewSubject = toRef(props, 'viewSubject') as any;
public next({ tag, action, data }: { tag: string, action: string, data: any }): void {
const { viewSubject } = this.viewState;
viewSubject.next({ tag: tag, action: action, data: data })
}
/**
* @description 处理视图导航参数
*
* @param props 输入属性
* @param context 应用上下文
* @param viewParams 视图参数
*/
public handleViewContextParams(props: ViewPropsBase, context: Ref<IParam | undefined>, viewParams: Ref<IParam | undefined>) {
private handleViewContextParams(props: ViewPropsBase, context: Ref<IParam | undefined>, viewParams: Ref<IParam | undefined>) {
if (!context.value) context.value = {};
if (!viewParams.value) viewParams.value = {};
const { appViewNavContexts, appViewNavParams } = this.viewState;
......@@ -98,11 +118,12 @@ export class ViewBase {
/**
* @description 使用视图上下文参数逻辑块
*
* @param {ViewPropsBase} props 传入的Props
* @return {*}
* @param {Function} emit 事件
* @memberof ViewBase
*/
public useViewContextParams(props: ViewPropsBase) {
public useViewContextParams(props: ViewPropsBase, emit: Function) {
const context = UIBase.toOneWayRef(props, 'context');
const viewParams = UIBase.toOneWayRef(props, 'viewParams');
// 导航视图参数处理
......@@ -117,26 +138,77 @@ export class ViewBase {
}
/**
* @description 使用计数器服务模块
* @param {ViewPropsBase} props 传入参数
*@description 使用UI服务
*
* @param {ViewPropsBase} props
* @param {Function} emit
* @memberof ViewBase
*/
public useUIService(props: ViewPropsBase, emit: Function) {
const { appEntityName, context } = this.viewState;
if (appEntityName) {
App.getUIService(appEntityName.toLowerCase(), context).then((service: IParam) => {
this.appUIService = service;
})
}
}
/**
*@description 使用数据服务
*
* @param {ViewPropsBase} props
* @param {Function} emit
* @memberof ViewBase
*/
public useDataService(props: ViewPropsBase, emit: Function) {
const { appEntityName, context } = this.viewState;
if (appEntityName) {
App.getDataService(appEntityName.toLowerCase(), context).then((service: IParam) => {
this.appDataService = service;
})
}
}
/**
* @description 使用计数器服务
*
* @param {ViewPropsBase} props 传入的Props
* @param {Function} emit 事件
* @memberof ViewBase
*/
public useCounterService(props: ViewPropsBase, emit: Function) { }
/**
* @description 处理视图初始化
*
* @param {ViewPropsBase} props
* @param {Function} emit
* @memberof ViewBase
*/
public useCounterService(props: ViewPropsBase) { }
public useViewInit(props: ViewPropsBase, emit: Function) { }
/**
* @description 安装视图所有功能模块的方法
*
* @param {ViewPropsBase} props 传入的Props
* @param {Function} [emit] [emit] 事件
* @return {*}
* @param {Function} emit 事件
* @memberof ViewBase
*/
public moduleInstall(props: ViewPropsBase, emit?: Function) {
this.emit = emit?.bind(this);
this.setState(props);
this.useViewContextParams(props);
this.useCounterService(props);
public moduleInstall(props: ViewPropsBase, emit: Function) {
// 处理视图状态
this.handleState(props, emit);
// 处理视图导航参数
this.useViewContextParams(props, emit);
// 使用计数器服务
this.useCounterService(props, emit);
// 使用数据服务
this.useDataService(props, emit);
// 使用UI服务
this.useUIService(props, emit);
// 处理视图初始化
this.useViewInit(props, emit);
return {
state: this.viewState,
state: this.viewState
};
}
}
......@@ -8,20 +8,6 @@ import { IActionParam, IParam } from '@core';
*/
export interface ViewStateBase {
/**
* @description 视图名称
* @type {string}
* @memberof ViewStateBase
*/
viewName: string;
/**
* @description 视图代码名称
* @type {string}
* @memberof ViewStateBase
*/
viewCodeName: string;
/**
* @description 上下文参数
* @type {IParam}
......@@ -43,29 +29,6 @@ export interface ViewStateBase {
*/
viewSubject: Subject<IActionParam>;
/**
* @description 视图工具栏模型
* @type {IParam[]}
* @memberof ViewStateBase
*/
viewToolbarModel: IParam[];
/**
* 自定义视图导航上下文
*
* @type {IParam}
* @memberof ViewStateBase
*/
appViewNavContexts: IParam;
/**
* 自定义视图参数
*
* @type {IParam}
* @memberof ViewStateBase
*/
appViewNavParams: IParam;
// 声明任意属性
[propName: string]: any;
}
export const ViewConfig = {
{{> @macro/front-end/views/config/view-base-config.hbs}}
{{> @macro/front-end/views/view-base-config.hbs}}
};
\ No newline at end of file
export const ViewConfig = {
{{> @macro/front-end/views/config/view-base-config.hbs}}
{{> @macro/front-end/views/view-base-config.hbs}}
};
\ No newline at end of file
......@@ -59,7 +59,7 @@ const { state, handleToolbarEvent } = new EditView(ViewConfig).moduleInstall(pro
:showBusyIndicator="true"
:context="state.context"
:viewParams="state.viewParams"
:controlAction="state.controlsAction.{{name}}"
:controlAction="state.{{name}}.action"
:viewSubject="state.viewSubject"
></{{codeName}}Form>
{{/eq}}
......
export const ViewConfig = {
gridRowActiveMode: {{page.gridRowActiveMode}},
rowEditState: {{#if page.enableRowEdit}}{{page.rowEditDefault}}{{else}}false{{/if}},
{{> @macro/front-end/views/config/view-base-config.hbs}}
{{> @macro/front-end/views/view-base-config.hbs}}
};
\ No newline at end of file
......@@ -29,7 +29,7 @@ interface ViewEmit {
const emit = defineEmits<ViewEmit>();
// 安装功能模块,提供状态和能力方法
const { state, handleCtrlEvent, handleToolbarEvent } = new GridView(ViewConfig).moduleInstall(props, emit);
const { state, grid, handleCtrlEvent, handleToolbarEvent } = new GridView(ViewConfig).moduleInstall(props, emit);
</script>
......@@ -50,6 +50,7 @@ const { state, handleCtrlEvent, handleToolbarEvent } = new GridView(ViewConfig).
{{/eq}}
{{#eq controlType "GRID"}}
<{{codeName}}Grid
ref="grid"
:context="state.context"
:rowEditState="state.rowEditState"
:rowActiveMode="state.gridRowActiveMode"
......
export const ViewConfig = {
{{> @macro/front-end/views/config/view-base-config.hbs}}
{{> @macro/front-end/views/view-base-config.hbs}}
};
\ No newline at end of file
export const ViewConfig = {
{{> @macro/front-end/views/config/view-base-config.hbs}}
{{> @macro/front-end/views/view-base-config.hbs}}
};
\ No newline at end of file
......@@ -4,5 +4,5 @@ export const ViewConfig = {
treeExpBarName: '{{ctrl.name}}',
{{/if}}
{{/each}}
{{> @macro/front-end/views/config/view-base-config.hbs}}
{{> @macro/front-end/views/view-base-config.hbs}}
};
\ No newline at end of file
{{>@macro/front-end/widgets/grid-detail/include-grid.hbs}}
<script setup lang="ts">
import { Subject } from 'rxjs';
import { CtrlConfig } from './{{spinalCase ctrl.codeName}}-grid-config';
import { GridControl, IActionParam, IParam, IContext, ControlAction, deepCopy } from '@core';
import { Subject } from 'rxjs';
import { CtrlConfig } from './{{spinalCase ctrl.codeName}}-grid-config';
import { GridControl, IActionParam, IParam, IContext, ControlAction, deepCopy } from '@core';
interface Props {
context: IContext;
multiple: boolean;
rowEditState: boolean;
rowActiveMode: 0 | 1 | 2;
selectedData: IParam[];
selectFirstDefault: boolean;
viewParams?: IParam;
controlAction: ControlAction;
showBusyIndicator?: boolean;
viewSubject: Subject<IActionParam>;
}
const props = withDefaults(defineProps<Props>(), {
viewSubject: () => new Subject<IActionParam>(),
showBusyIndicator: true,
multiple: false,
rowEditState: false,
rowActiveMode: 0,
selectFirstDefault: false,
})
interface Props {
context: IContext;
multiple: boolean;
rowEditState: boolean;
rowActiveMode: 0 | 1 | 2;
selectedData: IParam[];
selectFirstDefault: boolean;
viewParams?: IParam;
controlAction: ControlAction;
showBusyIndicator?: boolean;
viewSubject: Subject<IActionParam>;
}
// emit声明
interface CtrlEmit {
(name: "ctrlEvent", value: IActionParam): void;
}
const emit = defineEmits<CtrlEmit>();
// 安装功能模块,提供状态和能力方法
const { state, load, handleEditorEvent, handleToolbarEvent, custom } = new GridControl(CtrlConfig).moduleInstall(props, emit);
const { scrollOption, rowKey, rowClassName, customRow, rowSelectionOption, resizeColumn, handleGridChange } = custom;
const props = withDefaults(defineProps < Props > (), {
viewSubject: () => new Subject < IActionParam > (),
showBusyIndicator: true,
multiple: false,
rowEditState: false,
rowActiveMode: 0,
selectFirstDefault: false,
})
// emit声明
interface CtrlEmit {
(name: "ctrlEvent", value: IActionParam): void;
}
const emit = defineEmits < CtrlEmit > ();
// 安装功能模块,提供状态和能力
const { state, load, handleEditorEvent, handleToolbarEvent, custom } = new GridControl(CtrlConfig).moduleInstall(props, emit);
const { scrollOption, rowKey, rowClassName, customRow, rowSelectionOption, resizeColumn, handleGridChange } = custom;
// 暴露内部状态及能力
defineExpose({ state, name: '{{ctrl.name}}', load });
</script>
<template>
<a-table
bordered
sticky
class="ibiz-grid{{#if ctrl.psSysCss}} {{ctrl.psSysCss.cssName}}{{/if}}"
:rowKey="rowKey"
:showHeader="{{#if ctrl.hideHeader}}false{{else}}true{{/if}}"
:scroll="scrollOption"
:sortDirections="['ascend', 'descend']"
:data-source="state.data"
:row-selection="rowSelectionOption"
:columns="state.columnsModel"
:pagination="state.gridPaging.pagination"
:customRow="customRow"
:rowClassName="rowClassName"
@change="handleGridChange"
@resizeColumn="resizeColumn">
<a-table bordered sticky class="ibiz-grid{{#if ctrl.psSysCss}} {{ctrl.psSysCss.cssName}}{{/if}}" :rowKey="rowKey"
:showHeader="{{#if ctrl.hideHeader}}false{{else}}true{{/if}}" :scroll="scrollOption"
:sortDirections="['ascend', 'descend']" :data-source="state.data" :row-selection="rowSelectionOption"
:columns="state.columnsModel" :pagination="state.gridPaging.pagination" :customRow="customRow"
:rowClassName="rowClassName" @change="handleGridChange" @resizeColumn="resizeColumn">
<template #emptyText>
<div class="not-data">
<span class="empty-text">
......@@ -85,11 +75,12 @@ const { scrollOption, rowKey, rowClassName, customRow, rowSelectionOption, resiz
</a-table>
</template>
<style lang="scss">
.ibiz-grid {
height: 100%;
padding-top: 8px;
.table-striped {
background-color: #fafafa;
.ibiz-grid {
height: 100%;
padding-top: 8px;
.table-striped {
background-color: #fafafa;
}
}
}
</style>
\ No newline at end of file
......@@ -980,6 +980,11 @@ mlly@^0.2.2:
dependencies:
import-meta-resolve "^1.1.1"
monaco-editor@^0.24.0:
version "0.24.0"
resolved "https://registry.yarnpkg.com/monaco-editor/-/monaco-editor-0.24.0.tgz#990b55096bcc95d08d8d28e55264c6eb17707269"
integrity sha512-o1f0Lz6ABFNTtnEqqqvlY9qzNx24rQZx1RgYNQ8SkWkE+Ka63keHH/RqxQ4QhN4fs/UYOnvAtEUZsPrzccH++A==
ms@2.1.2:
version "2.1.2"
resolved "https://registry.npmmirror.com/ms/download/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
......@@ -1283,6 +1288,11 @@ sourcemap-codec@^1.4.4:
resolved "https://registry.npmmirror.com/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
integrity sha1-6oBL2UhXQC5pktBaOO8a41qatMQ=
tinymce@5.7.1:
version "5.7.1"
resolved "https://registry.yarnpkg.com/tinymce/-/tinymce-5.7.1.tgz#658a6fb4c7d53a8496cc00f8da33f4b8290da06d"
integrity sha512-1gY8RClc734srSlkYwY0MQzmkS1j73PuPC+nYtNtrrQVPY9VNcZ4bOiRwzTbdjPPD8GOtv6BAk8Ww/H2RiqKpA==
to-fast-properties@^2.0.0:
version "2.0.0"
resolved "https://registry.npmmirror.com/to-fast-properties/download/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e"
......@@ -1355,6 +1365,11 @@ upath@^2.0.1:
resolved "https://registry.npmmirror.com/upath/download/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b"
integrity sha1-UMc96mjW9rmQ9R0nnOYIFmXWGos=
vite-plugin-monaco-editor@^1.0.10:
version "1.0.10"
resolved "https://registry.yarnpkg.com/vite-plugin-monaco-editor/-/vite-plugin-monaco-editor-1.0.10.tgz#cd370f68d4121bced6f902c6284649cc8eca4170"
integrity sha512-7yTAFIE0SefjCmfnjrvXOl53wkxeSASc/ZIcB5tZeEK3vAmHhveV8y3f90Vp8b+PYdbUipjqf91mbFbSENkpcw==
vite@^2.7.0:
version "2.7.0"
resolved "https://registry.npmmirror.com/vite/download/vite-2.7.0.tgz#d3d753220d10afb055731cd7feaa8e87b2b779b6"
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册