{
  "name" : "演示应用",
  "simple" : "true",
  "getAllPSAppPFPluginRefs" : [ {
    "name" : "vue3树插件测试",
    "getPSSysPFPlugin" : {
      "pluginType" : "CUSTOM",
      "pluginCode" : "treePlugin"
    },
    "pluginCode" : "treePlugin",
    "pluginType" : "CUSTOM",
    "refMode" : "CONTROL",
    "refTag" : "TREEVIEW",
    "templCode" : "<div>树插件</div>"
  }, {
    "name" : "列表插件测试",
    "getPSSysPFPlugin" : {
      "pluginType" : "LIST_RENDER",
      "pluginCode" : "listplugintest"
    },
    "pluginCode" : "listplugintest",
    "pluginType" : "LIST_RENDER",
    "refMode" : "CONTROL",
    "refTag" : "LIST",
    "templCode" : "\t<div>\n\t\t<span style=\"color: red\"> 列表插件自定义内容 </span>\n\t\t<AppList\n\t\t\t:id=\"controlID\"\n\t\t\t:class=\"classNames\"\n\t\t\t:items=\"store.data\"\n\t\t\t:selections=\"store.selections\"\n\t\t\t:totalRecord=\"store.totalRecord\"\n\t\t\t@item-click=\"handleItemClick\"\n\t\t\t@item-db-click=\"handleItemDbClick\"\n\t\t\t@selection-change=\"handleSelectionChange\"\n\t\t\t@load-more=\"handleLoadMore\"\n\t\t\t@item-action-click=\"(logic: any, data: IParam, event: MouseEvent) => handleActionClick(controller, logic, data, event)\"\n\t\t>\n\t\t</AppList>\n\t</div>",
    "templCode2" : "import { AppList } from '@components/widgets/list';\nimport {\n\tICtrlDataAction,\n\tIContext,\n\tIParam,\n\tListActionType,\n\tIListAbility,\n\tListController,\n\tcreateUUID,\n\tILoadingHelper,\n\tIViewCtx,\n} from '@/core';\nimport {\n\tgetCtrlClassNames,\n\tuseEventBind,\n\thandleActionClick,\n} from '@/hooks/use-ctrl';\ninterface Props {\n\tname?: string;\n\tcontext: IContext;\n\tviewParams: IParam;\n\tlocalContext?: IParam;\n\tlocalViewParams?: IParam;\n\tcloseView?: Function;\n\tpLoadingHelper?: ILoadingHelper;\n\tpViewCtx?: IViewCtx;\n\topenView?: Function;\n\tnewView?: Function;\n\tactions: ICtrlDataAction;\n\tsingleSelect?: boolean;\n\trowActiveMode?: 0 | 1 | 2;\n\tselectFirstDefault?: boolean;\n\tcontroller: ListController;\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n\tsingleSelect: false,\n\trowActiveMode: 2,\n});\nconst emit = defineEmits<{\n\t(\n\t\tevent: 'ctrl-action',\n\t\tname: string,\n\t\taction: ListActionType,\n\t\tdata: IParam[]\n\t): void;\n\t(event: 'ctrl-init', name: string, data: IListAbility): void;\n\t(event: 'ctrl-destroy', name: string, data: IParam): void;\n}>();\n\nconst evt = useEventBind<ListActionType, IListAbility>(emit);\n//  部件样式名\nconst classNames = computed(() => {\n\treturn getCtrlClassNames(model, props);\n});\n\nconst controlID = createUUID();\n\nconst model: IParam = props.controller.getModel();\nconst handleItemClick = (row: IParam, event: MouseEvent) => {\n\tprops.controller.handleItemClick(row, event);\n};\nconst store = props.controller.getStore();\n\nconst handleItemDbClick = (row: IParam, event: MouseEvent) => {\n\tprops.controller.handleItemDbClick(row, event);\n};\n\nconst handleSelectionChange = (selections: IParam[]) => {\n\tprops.controller.handleSelectionChange(selections);\n};\n\nconst handleLoadMore = () => {\n\tprops.controller.loadMore();\n};"
  }, {
    "name" : "列表视图斑马纹",
    "getPSSysPFPlugin" : {
      "pluginType" : "VIEW_CUSTOM",
      "pluginCode" : "listViewStripe"
    },
    "pluginCode" : "listViewStripe",
    "pluginType" : "VIEW_CUSTOM",
    "refMode" : "APPVIEW",
    "refTag" : "DELISTVIEW",
    "templCode" : "<AppViewLayout :class=\"classNames\">\r\n        <template #viewHeaderLeft>\r\n            <div v-if=\"model.showCaption && !noViewCaption\" class=\"view-header__left__caption\">\r\n                <AppCaptionBar :caption=\"model.caption\" :title=\"model.title\" :capPSLanguageRes=\"model.capPSLanguageRes\" :titlePSLanguageRes=\"model.titlePSLanguageRes\"></AppCaptionBar>\r\n            </div>\r\n        </template>\r\n        <template #viewHeaderRight>\r\n            <div class=\"view-header__right__quicksearch\" v-show=\"!store.expandSearchForm\">\r\n                <AppQuickSearch @search=\"(searchValue:string) => handleQuickSearch(controller, searchValue)\" />\r\n            </div>\r\n            <div class=\"view-header__right__toolbar\">\r\n                <AppToolbar\r\n                    name=\"toolbar\"\r\n                    mode=\"listViewStripe\"\r\n                    :items=\"store.toolbarItems\"\r\n                    :loading=\"store.loadingHelper.isLoading\"\r\n                    @item-click=\"(name: string, event: MouseEvent, logic: any) => { handleToolbarItemClick(controller, name, event, logic) }\">\r\n                </AppToolbar>\r\n            </div>\r\n        </template>\r\n        <template #viewContentTop>\r\n        </template>\r\n        <template #default>\r\n            <LnternalFuncListList\r\n                :rowActiveMode='model.rowActiveMode'\r\n                :actions=\"{\r\n                    loadDraftAction: 'GetDraft',\r\n                    createAction: 'Create',\r\n                    fetchAction: 'FetchDefault',\r\n                    removeAction: 'Remove',\r\n                    updateAction: 'Update'\r\n                }\"\r\n                :openView=\"store.openView\"\r\n                :newView=\"store.newView\"\r\n                name=\"list\"\r\n                :context=\"store.context\"\r\n                :viewParams=\"store.viewParams\"\r\n                :closeView=\"store.closeView\"\r\n                :pLoadingHelper=\"store.loadingHelper\"\r\n                :pViewCtx=\"store.viewCtx\"\r\n                @ctrl-init=\"(name:string, ability:any) => { handleCtrlInit(controller, name, ability) }\"\r\n                @ctrl-action=\"(name:string, action:any, data:any) => { handleCtrlAction(controller, name, action, data) }\"\r\n                @ctrl-destroy=\"(name:string, data:any) => { handleCtrlDestroy(controller, name, data) }\"></LnternalFuncListList>\r\n        </template>\r\n    </AppViewLayout>",
    "templCode2" : "import { AppViewLayout } from \"@components/layout/view-layout\";\r\nimport { AppToolbar } from '@components/widgets/toolbar';\r\nimport QUICKSEARCHFORMSearchForm from '@widgets/ibizbook/quicksearchform-searchform/quicksearchform-searchform.vue';\r\nimport LnternalFuncListList from '@widgets/ibizbook/lnternal-func-list-list/lnternal-func-list-list.vue';\r\nimport {\r\n    useNavParamsBind,\r\n    useEventBind,\r\n    getViewClassNames,\r\n    handleQuickSearch,\r\n    handleToolbarItemClick,\r\n    handleCtrlAction,\r\n    handleCtrlInit,\r\n    handleCtrlDestroy,\r\n} from \"@/hooks/use-view\";\r\nimport { ListViewActionType, ListViewController, IListViewAbility, IListViewController, IListViewControllerParams, IListViewStore, IParam, IContext, ILoadingHelper, LoadingHelper, IEvent } from \"@/core\";\r\ninterface Props {\r\n    name?: string,\r\n    noViewCaption?: boolean,\r\n    openType?: 'ROUTE' | 'EMBED' | 'MODAL',\r\n    context?: IContext,\r\n    viewParams?: IParam,\r\n    pLoadingHelper?: ILoadingHelper,\r\n    isLoadDefault?: boolean,\r\n    controller: IListViewController<IListViewStore, IListViewAbility>\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n    noViewCaption: false,\r\n    openType: 'ROUTE',\r\n    isLoadDefault: true,\r\n});\r\nconst model: IParam = props.controller.getModel();\r\nconst store: IListViewStore = props.controller.getStore();\r\nconst classNames = computed(() => {\r\n  \tconst classNames = getViewClassNames(model, props);\r\n    Object.assign(classNames, {\"list-view-stripe\": true});\r\n    return classNames;\r\n});",
    "templCode3" : ".list-view-stripe {\r\n    .ant-list-items {\r\n        .ant-list-item:nth-child(even) {\r\n            background-color: #fafafa;\r\n        }\r\n    }\r\n}"
  }, {
    "name" : "列表面板自定义插件",
    "getPSSysPFPlugin" : {
      "pluginType" : "CUSTOM",
      "pluginCode" : "PFPlugin12"
    },
    "pluginCode" : "PFPlugin12",
    "pluginType" : "CUSTOM",
    "refMode" : "CONTROLITEM",
    "refTag" : "VIEWLAYOUTPANEL",
    "refTag2" : "USERCONTROL",
    "templCode" : "<app-list-itemlayoutpanel :inputData=\"inputData\" :actionModel=\"actionModel\" @uiAction=\"(inputData, action, event)=>{this.$emit('uiAction',inputData, action, event)}\"></app-list-itemlayoutpanel>"
  }, {
    "name" : "列表面板自定义插件",
    "getPSSysPFPlugin" : {
      "pluginType" : "CUSTOM",
      "pluginCode" : "PFPlugin12"
    },
    "pluginCode" : "PFPlugin12",
    "pluginType" : "CUSTOM",
    "refMode" : "CONTROLITEM",
    "refTag" : "PANEL",
    "refTag2" : "CONTAINER",
    "templCode" : "<app-list-itemlayoutpanel :inputData=\"inputData\" :actionModel=\"actionModel\" @uiAction=\"(inputData, action, event)=>{this.$emit('uiAction',inputData, action, event)}\"></app-list-itemlayoutpanel>"
  }, {
    "name" : "单选项自定义插件",
    "getPSSysPFPlugin" : {
      "pluginType" : "CUSTOM",
      "pluginCode" : "PFPlugin14"
    },
    "pluginCode" : "PFPlugin14",
    "pluginType" : "CUSTOM",
    "refMode" : "CONTROLITEM",
    "refTag" : "FORM",
    "refTag2" : "FORMITEM",
    "templCode" : "<app-form-item name='${item.name}' :itemRules=\"this.rules().${item.name}\" class='<#if item.getPSSysCss?? && item.getPSSysCss()??>${item.getPSSysCss().getCssName()}</#if>'<#if item.getLabelPSSysCss?? && item.getLabelPSSysCss()??> labelStyle=\"${item.getLabelPSSysCss().getCssName()}\"</#if> :caption=\"<#if langbase??>$t('${langbase}.details.${item.name}')<#else>'${item.getCaption()}'</#if>\" uiStyle=\"${item.getDetailStyle()}\" :labelWidth=\"${item.getLabelWidth()?c}\" :isShowCaption=\"${item.isShowCaption()?c}\" :error=\"detailsModel.${item.name}.error\" :isEmptyCaption=\"${item.isEmptyCaption()?c}\" labelPos=\"${item.getLabelPos()}\">\n<app-radio-button \n  v-model=\"data.${item.name}\"\n  :data=\"data\" \n  :context=\"context\"\n  :viewparams=\"viewparams\"   \n  :disabled=\"detailsModel.${item.name}.disabled\"  \n  name=\"${item.name}\" \n  <#if item.getPSCodeList()??>\n  <#assign codelist=item.getPSCodeList()>\n  tag='${codelist.codeName}' \n  codelistType='${codelist.getCodeListType()}' \n  </#if> \n  style=\"${item.getEditorCssStyle()}\">\n</app-radio-button>\n</app-form-item>"
  }, {
    "name" : "工具栏测试插件",
    "getPSSysPFPlugin" : {
      "pluginType" : "TOOLBAR_RENDER",
      "pluginCode" : "toolbarTestPlugin"
    },
    "pluginCode" : "toolbarTestPlugin",
    "pluginType" : "TOOLBAR_RENDER",
    "refMode" : "CONTROL",
    "refTag" : "TOOLBAR"
  }, {
    "name" : "扩展编辑器数量",
    "getPSSysPFPlugin" : {
      "pluginType" : "LIST_RENDER",
      "pluginCode" : "PFPlugin6"
    },
    "pluginCode" : "PFPlugin6",
    "pluginType" : "LIST_RENDER",
    "refMode" : "CONTROL",
    "refTag" : "LIST",
    "templCode" : "<div style=\"display: flex;justify-content: space-between;align-items: center;height: 100%;\">\r\n    <div style=\"height: 80px;width: 80px;display: flex;align-items: center;justify-content: center;\">\r\n        <i class=\"el-icon-s-operation\" style=\"font-size: 50px;color: #34bfa3\"/>\r\n    </div>\r\n    <div style=\"height: 80px;width: 165px;display: flex;flex-direction: column;justify-content: center;text-align: center;\">\r\n        <div style=\"margin-bottom: 8px;color: rgba(0,0,0,.45);font-size: 18px;font-weight: 700;\">\r\n            <span> 支持扩展编辑器总数 </span>\r\n        </div>\r\n        <div style=\"color: #666;font-size: 24px;font-weight: 700;\">\r\n            <span> 10 </span>\r\n        </div>\r\n    </div>\r\n</div>"
  }, {
    "name" : "数据视图面板自定义插件",
    "getPSSysPFPlugin" : {
      "pluginType" : "CUSTOM",
      "pluginCode" : "PFPlugin13"
    },
    "pluginCode" : "PFPlugin13",
    "pluginType" : "CUSTOM",
    "refMode" : "CONTROLITEM",
    "refTag" : "PANEL",
    "refTag2" : "CONTAINER"
  }, {
    "name" : "文本框插件示例",
    "getPSSysPFPlugin" : {
      "pluginType" : "EDITOR_CUSTOMSTYLE",
      "pluginCode" : "ExampleTextBox"
    },
    "pluginCode" : "ExampleTextBox",
    "pluginType" : "EDITOR_CUSTOMSTYLE",
    "refMode" : "EDITORSTYPE",
    "templCode" : "<div class=\"example-text-box\">文本框插件示例</div>",
    "templCode2" : "const props = defineProps({\n    value: {\n        type: [String, Number]\n    }\n})",
    "templCode3" : ".example-text-box {\n    color: red;\n    font-weight: 600;\n}"
  }, {
    "name" : "无头部，点击显示主键",
    "getPSSysPFPlugin" : {
      "pluginType" : "GRID_RENDER",
      "pluginCode" : "NoHeaderShowKey"
    },
    "pluginCode" : "NoHeaderShowKey",
    "pluginType" : "GRID_RENDER",
    "refMode" : "CONTROL",
    "refTag" : "GRID"
  }, {
    "name" : "日历面板自定义插件",
    "getPSSysPFPlugin" : {
      "pluginType" : "CUSTOM",
      "pluginCode" : "PFPlugin11"
    },
    "pluginCode" : "PFPlugin11",
    "pluginType" : "CUSTOM",
    "refMode" : "CONTROLITEM",
    "refTag" : "PANEL",
    "refTag2" : "CONTAINER"
  }, {
    "name" : "更新出版社",
    "getPSSysPFPlugin" : {
      "pluginType" : "DEMETHOD",
      "pluginCode" : "PFPlugin2"
    },
    "pluginCode" : "PFPlugin2",
    "pluginType" : "DEMETHOD",
    "refMode" : "DEMETHOD",
    "refTag" : "DEACTION"
  }, {
    "name" : "树视图右对齐",
    "getPSSysPFPlugin" : {
      "pluginType" : "VIEW_CUSTOM",
      "pluginCode" : "treeViewRightAlign"
    },
    "pluginCode" : "treeViewRightAlign",
    "pluginType" : "VIEW_CUSTOM",
    "refMode" : "APPVIEW",
    "refTag" : "DETREEVIEW",
    "templCode" : "<AppViewLayout :class=\"classNames\">\r\n        <template v-if=\"!noViewCaption && model.showCaption\" #viewHeaderLeft>\r\n            <div class=\"view-header__left__caption\">\r\n                <AppCaptionBar :caption=\"model.caption\" :title=\"model.title\" :capPSLanguageRes=\"model.capPSLanguageRes\" :titlePSLanguageRes=\"model.titlePSLanguageRes\"></AppCaptionBar>\r\n            </div>\r\n        </template>\r\n        <template #viewHeaderRight>\r\n        </template>\r\n        <template #viewContentTop>\r\n        </template>\r\n        <template #default>\r\n            <TreeViewTree\r\n                :openView=\"store.openView\"\r\n                :newView=\"store.newView\"\r\n                \r\n                name=\"tree\"\r\n                :context=\"store.context\"\r\n                :viewParams=\"store.viewParams\"\r\n                :closeView=\"store.closeView\"\r\n                :pLoadingHelper=\"store.loadingHelper\"\r\n                :pViewCtx=\"store.viewCtx\"\r\n                @ctrl-init=\"(name:string, ability:any) => { handleCtrlInit(controller, name, ability) }\"\r\n                @ctrl-action=\"(name:string, action:any, data:any) => { handleCtrlAction(controller, name, action, data) }\"\r\n                @ctrl-destroy=\"(name:string, data:any) => { handleCtrlDestroy(controller, name, data) }\"/>\r\n        </template>          \r\n    </AppViewLayout>",
    "templCode2" : "import TreeViewRightAlign from \"@plugins/view/tree-view-right-align/tree-view-right-align.vue\";\r\nimport { AppViewLayout } from \"@components/layout/view-layout\";\r\nimport TreeViewTree from '@widgets/ibizbook/tree-view-tree/tree-view-tree.vue';\r\nimport { \r\n    useNavParamsBind, \r\n    useEventBind, \r\n    handleCtrlAction, \r\n    handleCtrlInit, \r\n    handleCtrlDestroy, \r\n    getViewClassNames,\r\n} from \"@/hooks/use-view\";\r\nimport { TreeViewActionType, IContext, IParam, ITreeViewAbility, ITreeViewControllerParams, ITreeViewStore, TreeViewController, ITreeViewController, ILoadingHelper, IEvent } from '@/core';\r\n\r\ninterface Props {\r\n    name?: string,\r\n    noViewCaption?: boolean,\r\n    openType?: 'ROUTE' | 'EMBED' | 'MODAL',\r\n    context?: IContext,\r\n    viewParams?: IParam,\r\n    pLoadingHelper?: ILoadingHelper,\r\n    isLoadDefault?: boolean,\r\n    controller: ITreeViewController<ITreeViewStore, ITreeViewAbility>\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n    noViewCaption: false,\r\n    openType: 'ROUTE',\r\n    isLoadDefault: true,\r\n});\r\nconst model: IParam = props.controller.getModel();\r\nconst store: ITreeViewStore = props.controller.getStore();\r\nconst classNames = computed(() => {\r\n    const classNames = getViewClassNames(model, props);\r\n    Object.assign(classNames, {\"tree-view-right-align\": true});\r\n    return classNames;\r\n});",
    "templCode3" : ".tree-view-right-align {\r\n    .ant-tree-treenode {\r\n        justify-content: flex-end;\r\n        .ant-tree-node-content-wrapper {\r\n            flex: none !important;\r\n        }\r\n    }\r\n}"
  }, {
    "name" : "模拟获取动态轮播图数据",
    "getPSSysPFPlugin" : {
      "pluginType" : "DEMETHOD",
      "pluginCode" : "getDynaCarousel"
    },
    "pluginCode" : "getDynaCarousel",
    "pluginType" : "DEMETHOD",
    "refMode" : "DEMETHOD",
    "refTag" : "DEACTION"
  }, {
    "name" : "红色加粗表格列插件",
    "getPSSysPFPlugin" : {
      "pluginType" : "GRID_COLRENDER",
      "pluginCode" : "RedBoldTextGridColumn"
    },
    "pluginCode" : "RedBoldTextGridColumn",
    "pluginType" : "GRID_COLRENDER",
    "refMode" : "CONTROLITEM",
    "refTag" : "GRID",
    "refTag2" : "DEFGRIDCOLUMN",
    "templCode" : "<span style=\"color: red; font-weight: 600;\">表格列数据</span>"
  }, {
    "name" : "红色字体表格列",
    "getPSSysPFPlugin" : {
      "pluginType" : "GRID_COLRENDER",
      "pluginCode" : "redCol"
    },
    "pluginCode" : "redCol",
    "pluginType" : "GRID_COLRENDER",
    "refMode" : "CONTROLITEM",
    "refTag" : "GRID",
    "refTag2" : "DEFGRIDCOLUMN",
    "templCode" : "<div :style=\"{ color: 'red' }\">{{ rowData.text }}</div>",
    "templCode2" : "import { GridController, IParam } from \"@/core\";\r\ninterface Props {\r\n    rowData: IParam;\r\n    controller: GridController;\r\n}\r\nconst props = defineProps<Props>();"
  }, {
    "name" : "红色底线",
    "getPSSysPFPlugin" : {
      "pluginType" : "FORM_USERCONTROL",
      "pluginCode" : "redSolid"
    },
    "pluginCode" : "redSolid",
    "pluginType" : "FORM_USERCONTROL",
    "refMode" : "CONTROLITEM",
    "refTag" : "FORM",
    "refTag2" : "FORMITEM",
    "templCode" : "<AppCol\r\n        noRoot\r\n        class=\"red-solid\"\r\n        :visible=\"store.detailModel.formitem2.visible\"\r\n        :layoutOpts=\"{parentLayout: 'TABLE_24COL',colMD: 24,}\">\r\n        <template v-slot:default=\"{ slotStyle, slotClass }\">\r\n            <AppFormItem \r\n                name=\"formitem2\"\r\n                :slotStyle=\"slotStyle\"\r\n                :slotClass=\"slotClass\" \r\n                label=\"\"\r\n                labelPos=\"LEFT\" \r\n                :labelWidth=\"130\" \r\n                :showLabel=\"true\"\r\n                :enableAnchor=\"false\" \r\n                :rules=\"store.valueRule.formitem2\"\r\n                :emptyCaption=\"false\">\r\n                <div class=\"form-editor-container\">\r\n                    <AppSwitch\r\n                        name=\"formitem2\"\r\n                        :disabled=\"store.detailModel.formitem2.disabled\"\r\n                        style=\"\"\r\n                        :value=\"store.data.formitem2\"\r\n                        @component-action=\"(actionParam: IEvent<string>) => { handleComponentAction(controller, actionParam) }\"\r\n                    />\r\n                </div>\r\n            </AppFormItem>\r\n        </template>\r\n    </AppCol>",
    "templCode2" : "import { AppCol } from '@/components/common/col';\r\nimport { AppFormItem } from '@components/widgets/form';\r\nimport { IEditFormAbility, IEditFormController, IEditFormStore, IParam } from \"@/core\";\r\ninterface Props {\r\n    rowData: IParam;\r\n    controller: IEditFormController<IEditFormStore, IEditFormAbility>;\r\n}\r\nconst props = defineProps<Props>();\r\nconst model: IParam = props.controller.getModel();\r\nconst store: IEditFormStore = props.controller.getStore();",
    "templCode3" : ".red-solid {\r\n    .app-switch {\r\n            padding-bottom: 8px;\r\n            border-bottom: 1px solid red;\r\n    }\r\n}"
  }, {
    "name" : "红色滑动条",
    "getPSSysPFPlugin" : {
      "pluginType" : "EDITOR_CUSTOMSTYLE",
      "pluginCode" : "redSilder"
    },
    "pluginCode" : "redSilder",
    "pluginType" : "EDITOR_CUSTOMSTYLE",
    "refMode" : "EDITORSTYPE",
    "templCode" : "<div>红色滑动条1263</div>"
  }, {
    "name" : "红色背景项",
    "getPSSysPFPlugin" : {
      "pluginType" : "TOOLBAR_ITEM",
      "pluginCode" : "redItem"
    },
    "pluginCode" : "redItem",
    "pluginType" : "TOOLBAR_ITEM",
    "refMode" : "CONTROLITEM",
    "refTag" : "TOOLBAR",
    "refTag2" : "DEUIACTION",
    "templCode" : "<AppButton @click=\"handleClick\" :loading=\"rowData.loading\" :disabled=\"rowData.item.disabled\" class=\"red-item toolbar-item__btn\">\r\n        <AppIconText :imgPath=\"rowData.item.imagePath\" :iconClass=\"rowData.item.iconCls\" :text=\"rowData.item.captionLanResTag ? $t(rowData.item.captionLanResTag, rowData.item.caption) : rowData.item.caption\" :tooltip=\"rowData.item.tooltipLanResTag ? $t(rowData.item.tooltipLanResTag, rowData.item.tooltip) : rowData.item.tooltip\" ></AppIconText>\r\n    </AppButton>",
    "templCode2" : "import { IParam } from \"@/core\";\r\ninterface Props {\r\n    rowData: IParam;\r\n}\r\nconst props = defineProps<Props>();\r\nconst emit = defineEmits([\"itemClick\"]);\r\nconst handleClick = (event: MouseEvent) => {\r\n    emit(\"itemClick\", props.rowData.item.name, event, props.rowData.item.logic);\r\n};",
    "templCode3" : ".red-item {\r\n    background-color: red !important;\r\n}"
  }, {
    "name" : "红色表格头",
    "getPSSysPFPlugin" : {
      "pluginType" : "GRID_RENDER",
      "pluginCode" : "redGridHeader"
    },
    "pluginCode" : "redGridHeader",
    "pluginType" : "GRID_RENDER",
    "refMode" : "CONTROL",
    "refTag" : "GRID",
    "templCode" : "<div :class=\"classNames\" :id=\"controlID\" style=\"\" >\r\n        <a-form class=\"control-content\">\r\n        <AppGrid\r\n            :columns=\"model.columns\"\r\n            :items=\"store.data\"\r\n            :singleSelect=\"singleSelect\"\r\n            :selections=\"store.selections\"\r\n            :showHeader=\"model.showHeader\"\r\n            :current=\"store.curPage\"\r\n            :limit=\"store.limit\"\r\n            :totalRecord=\"store.totalRecord\"\r\n            :context=\"store.context\"\r\n            :viewParams=\"store.viewParams\"\r\n            :enableRowEdit=\"model.enableRowEdit\"\r\n            :paging=\"model.paging\"\r\n            @row-click=\"handleRowClick\"\r\n            @row-db-click=\"handleRowDbClick\"\r\n            @selection-change=\"handleSelectionChange\"\r\n            @sort-change=\"(field: string, dir: '' | 'asc' | 'desc') => handleSortChange(controller, field, dir)\"\r\n            @page-change=\"(currentPage: number) => handlePageChange(controller, currentPage)\"\r\n            @page-size-change=\"(pageSize: number) => handlePageSizeChange(controller, pageSize)\"\r\n            @action-click=\"(logic: any, data: IParam, event: MouseEvent) => handleActionClick(controller, logic as IViewLogicInput, data, event)\"\r\n        >\r\n        </AppGrid>\r\n        </a-form>\r\n    </div>",
    "templCode2" : "import { AppGrid } from \"@components/widgets/grid\";\r\nimport { IContext, IParam, IViewLogicInput } from \"@/core\";\r\nimport { GridActionType, ICtrlDataAction, IGridAbility, IGridControllerParams, IGridStore, GridController, ILoadingHelper, LoadingHelper, createUUID, IViewCtx } from \"@/core\";\r\nimport { handlePageChange, handlePageSizeChange, handleSortChange, handleComponentAction } from '@/hooks/use-ctrl';\r\nimport { useNavParamsBind, useEventBind, handleActionClick, getCtrlClassNames } from '@/hooks/use-ctrl';\r\nimport GridService from \"@/core/modules/ctrl-service/grid-service\";\r\ninterface Props {\r\n    name?: string;\r\n    context: IContext;\r\n    viewParams: IParam;\r\n    localContext?: IParam,\r\n    localViewParams?: IParam,\r\n    closeView?: Function;\r\n    pLoadingHelper?: ILoadingHelper;\r\n    pViewCtx?: IViewCtx;\r\n    openView?: Function;\r\n    newView?: Function;\r\n    actions: ICtrlDataAction;\r\n    singleSelect?: boolean;\r\n    selectFirstDefault?: boolean;\r\n    rowActiveMode?: 0 | 1 | 2;\r\n    defaultEnableRowEdit?: boolean;\r\n    controller: GridController\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n    singleSelect: false,\r\n    rowActiveMode: 2\r\n});\r\nconst model: IParam = props.controller.getModel();\r\nconst store = props.controller.getStore();\r\nconst classNames = computed(() => {\r\n  const names = getCtrlClassNames(model, props);\r\n  Object.assign(names, {\r\n    \"app-control-grid--no-paging-bar\": model.enablePagingBar,\r\n    \"red-grid-header\": true\r\n  });\r\n  return names;\r\n});",
    "templCode3" : ".red-grid-header {\r\n    .ant-table-container .ant-table-header {\r\n        .ant-table-cell {\r\n            background-color: red;\r\n        }\r\n    }\r\n}"
  }, {
    "name" : "编辑器数量",
    "getPSSysPFPlugin" : {
      "pluginType" : "LIST_RENDER",
      "pluginCode" : "PFPlugin10"
    },
    "pluginCode" : "PFPlugin10",
    "pluginType" : "LIST_RENDER",
    "refMode" : "CONTROL",
    "refTag" : "LIST",
    "templCode" : "<div style=\"display: flex;justify-content: space-between;align-items: center;height: 100%;\">\r\n    <div style=\"height: 80px;width: 80px;display: flex;align-items: center;justify-content: center;\">\r\n        <i class=\"el-icon-s-operation\" style=\"font-size: 50px;color: #34bfa3\"/>\r\n    </div>\r\n    <div style=\"height: 80px;width: 165px;display: flex;flex-direction: column;justify-content: center;text-align: center;\">\r\n        <div style=\"margin-bottom: 8px;color: rgba(0,0,0,.45);font-size: 18px;font-weight: 700;\">\r\n            <span> 支持编辑器总数 </span>\r\n        </div>\r\n        <div style=\"color: #666;font-size: 24px;font-weight: 700;\">\r\n            <span> 10 </span>\r\n        </div>\r\n    </div>\r\n</div>"
  }, {
    "name" : "获取模拟动态图片数据",
    "getPSSysPFPlugin" : {
      "pluginType" : "DEMETHOD",
      "pluginCode" : "getDynaImg"
    },
    "pluginCode" : "getDynaImg",
    "pluginType" : "DEMETHOD",
    "refMode" : "DEMETHOD",
    "refTag" : "DEACTION"
  }, {
    "name" : "获取随机数",
    "getPSSysPFPlugin" : {
      "pluginType" : "DEMETHOD",
      "pluginCode" : "getRandom"
    },
    "pluginCode" : "getRandom",
    "pluginType" : "DEMETHOD",
    "refMode" : "DEMETHOD",
    "refTag" : "DEACTION",
    "templCode" : "alert(Math.random());\r\n        return { ok: true, data: [] };"
  }, {
    "name" : "菜单右对齐",
    "getPSSysPFPlugin" : {
      "pluginType" : "VIEW_CUSTOM",
      "pluginCode" : "menuRightAlign"
    },
    "pluginCode" : "menuRightAlign",
    "pluginType" : "VIEW_CUSTOM",
    "refMode" : "APPVIEW",
    "refTag" : "APPINDEXVIEW",
    "templCode" : "<AppIndexViewLayoutCenter :mainMenuAlign=\"model.mainMenuAlign\" :class=\"classNames\">\r\n        <template #appHeaderLeft>\r\n        </template>\r\n        <template #appHeaderRight>\r\n            <template v-if=\"store.showLang\">\r\n                <AppLang></AppLang>\r\n            </template>\r\n            <template v-if=\"store.showTheme\">\r\n                <AppTheme></AppTheme>\r\n            </template>\r\n            <template v-if=\"store.showOrg\">\r\n                <span>组织选择</span>\r\n            </template>\r\n            <AppUser></AppUser>\r\n            <template v-if=\"store.showMsgPopover\">\r\n                <AppMessagePopover></AppMessagePopover>\r\n            </template>\r\n        </template>\r\n        <template #default>\r\n          <Usr1207222915MenuMenu\r\n              viewStyle='menuRightAlign'\r\n              :isDefaultPage=\"model.defaultPage\"\r\n              :isBlankMode=\"model.blankMode\"\r\n              :defPSAppView=\"model.defPSAppView\"\r\n              :mode='model.mainMenuAlign'\r\n              :counterData=\"store.counterData\"\r\n              name=\"appmenu\"\r\n              :context=\"store.context\"\r\n              :viewParams=\"store.viewParams\"\r\n              :closeView=\"store.closeView\"\r\n              :pLoadingHelper=\"store.loadingHelper\"\r\n              :pViewCtx=\"store.viewCtx\"\r\n              @ctrl-init=\"(name:string, ability:any) => { handleCtrlInit(controller, name, ability) }\"\r\n              @ctrl-action=\"(name:string, action:any, data:any) => { handleCtrlAction(controller, name, action, data) }\"\r\n              @ctrl-destroy=\"(name:string, data:any) => { handleCtrlDestroy(controller, name, data) }\"></Usr1207222915MenuMenu>\r\n        </template>\r\n        <template #tabPageExp>\r\n            <TabPageExp></TabPageExp>\r\n        </template>\r\n        <template #navPos>\r\n            <AppNavPos></AppNavPos>\r\n        </template>\r\n    </AppIndexViewLayoutCenter>",
    "templCode2" : "import { AppIndexViewLayoutCenter } from \"@components/layout/index-view-layout\";\r\nimport Usr1207222915MenuMenu from '@widgets/app/usr-1207222915-menu-menu/usr-1207222915-menu-menu.vue';\r\n\r\nimport { \r\n    getIndexViewClassNames, \r\n    handleCtrlInit, \r\n    handleCtrlAction, \r\n    handleCtrlDestroy, \r\n    useNavParamsBind, \r\n    useEventBind,\r\n} from '@/hooks/use-view';\r\nimport { IIndexViewAbility, IIndexViewController, IIndexViewControllerParams, IIndexViewStore, IndexViewActionType, IndexViewController, IParam, ILoadingHelper, IContext, IEvent } from \"@/core\";\r\n\r\ninterface Props {\r\n    name?: string,\r\n    noViewCaption?: boolean,\r\n    openType?: 'ROUTE' | 'EMBED' | 'MODAL',\r\n    context?: IContext,\r\n    viewParams?: IParam,\r\n    pLoadingHelper?: ILoadingHelper,\r\n    isLoadDefault?: boolean,\r\n    appIconPath?: string,\r\n    controller: IIndexViewController<IIndexViewStore, IIndexViewAbility>\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n    noViewCaption: false,\r\n    openType: 'ROUTE',\r\n    isLoadDefault: true,\r\n});\r\nconst model: IParam = props.controller.getModel();\r\nconst store: IIndexViewStore = props.controller.getStore();\r\n\r\nconst classNames = computed(() => {\r\n    const classNames = getIndexViewClassNames(model, props);\r\n    Object.assign(classNames, {\r\n        \"menu-right-align\": true\r\n    })\r\n  \treturn classNames;\r\n});",
    "templCode3" : ".menu-right-align {\r\n    .app-control-menu--center .app-control-menu__group__content {\r\n        justify-content: flex-end;\r\n    }\r\n}"
  }, {
    "name" : "表单iframe",
    "getPSSysPFPlugin" : {
      "pluginType" : "CUSTOM",
      "pluginCode" : "formIframe"
    },
    "pluginCode" : "formIframe",
    "pluginType" : "CUSTOM",
    "refMode" : "CONTROL",
    "refTag" : "FORM",
    "templCode" : "<div class=\"form-iframe\">\r\n        <iframe width=\"100%\" height=\"100%\" src=\"https://www.baidu.com//\" />\r\n    </div>",
    "templCode3" : ".form-iframe {\r\n    height: 100%;\r\n    width: 100%;\r\n    iframe {\r\n        border: 0;\r\n    }\r\n}"
  }, {
    "name" : "表单测试插件",
    "getPSSysPFPlugin" : {
      "pluginType" : "EDITFORM_RENDER",
      "pluginCode" : "formTestPlugin"
    },
    "pluginCode" : "formTestPlugin",
    "pluginType" : "EDITFORM_RENDER",
    "refMode" : "CONTROL",
    "refTag" : "FORM",
    "templCode" : "<div>\n  这是表单插件\n </div>"
  }, {
    "name" : "表格视图底部工具栏",
    "getPSSysPFPlugin" : {
      "pluginType" : "VIEW_CUSTOM",
      "pluginCode" : "gridViewBottomToolbar"
    },
    "pluginCode" : "gridViewBottomToolbar",
    "pluginType" : "VIEW_CUSTOM",
    "refMode" : "APPVIEW",
    "refTag" : "DEGRIDVIEW",
    "templCode" : "<AppViewLayout class=\"menu-right-align\" :class=\"classNames\">\r\n        <template #viewHeaderLeft>\r\n            <div v-if=\"model.showCaption && !noViewCaption\" class=\"view-header__left__caption\">\r\n                <AppCaptionBar :caption=\"model.caption\" :title=\"model.title\" :capPSLanguageRes=\"model.capPSLanguageRes\" :titlePSLanguageRes=\"model.titlePSLanguageRes\"></AppCaptionBar>\r\n            </div>\r\n        </template>\r\n        <template #viewHeaderRight>\r\n            <div class=\"view-header__right__quicksearch\" v-show=\"!store.expandSearchForm\">\r\n                <AppQuickSearch @search=\"(searchValue:string) => handleQuickSearch(controller, searchValue)\" />\r\n            </div>\r\n        </template>\r\n        <template #viewFooter>\r\n            <div class=\"view-footer__toolbar\">\r\n                <AppToolbar\r\n                    name=\"toolbar\"\r\n                    mode=\"gridViewBottomToolbar\"\r\n                    :items=\"store.toolbarItems\"\r\n                    :loading=\"store.loadingHelper.isLoading\"\r\n                    @item-click=\"(name: string, event: MouseEvent, logic: any) => { handleToolbarItemClick(controller, name, event, logic) }\">\r\n                </AppToolbar>\r\n            </div>\r\n        </template>\r\n        <template #viewContentTop>\r\n        </template>\r\n        <template #default>\r\n            <MainGrid\r\n                :actions=\"{\r\n                    loadDraftAction: 'GetDraft',\r\n                    createAction: 'Create',\r\n                    fetchAction: 'FetchDefault',\r\n                    removeAction: 'Remove',\r\n                    updateAction: 'Update'\r\n                }\"\r\n                :defaultEnableRowEdit=\"model.enableRowEdit\"\r\n                :openView=\"store.openView\"\r\n                :newView=\"store.newView\"\r\n                :rowActiveMode='model.rowActiveMode'\r\n                name=\"grid\"\r\n                :context=\"store.context\"\r\n                :viewParams=\"store.viewParams\"\r\n                :closeView=\"store.closeView\"\r\n                :pLoadingHelper=\"store.loadingHelper\"\r\n                :pViewCtx=\"store.viewCtx\"\r\n                @ctrl-init=\"(name:string, ability:any) => { handleCtrlInit(controller, name, ability) }\"\r\n                @ctrl-action=\"(name:string, action:any, data:any) => { handleCtrlAction(controller, name, action, data) }\"\r\n                @ctrl-destroy=\"(name:string, data:any) => { handleCtrlDestroy(controller, name, data) }\"></MainGrid>\r\n        </template>\r\n    </AppViewLayout>",
    "templCode2" : "import { AppViewLayout } from \"@components/layout/view-layout\";\r\nimport { AppToolbar } from '@components/widgets/toolbar';\r\nimport MainGrid from '@widgets/ibizbook/main-grid/main-grid.vue';\r\nimport QUICKSEARCHFORMSearchForm from '@widgets/ibizbook/quicksearchform-searchform/quicksearchform-searchform.vue';\r\nimport {\r\n\tuseNavParamsBind,\r\n\tuseEventBind,\r\n\tgetViewClassNames,\r\n  \thandleQuickSearch,\r\n  \thandleToolbarItemClick,\r\n\thandleCtrlAction,\r\n\thandleCtrlInit,\r\n\thandleCtrlDestroy,\r\n} from \"@/hooks/use-view\";\r\nimport { GridViewActionType, GridViewController, IGridViewAbility, IGridViewController, IGridViewControllerParams, IGridViewStore, IParam, IContext, ILoadingHelper, LoadingHelper, IEvent } from \"@/core\";\r\ninterface Props {\r\n    name?: string,\r\n    noViewCaption?: boolean,\r\n    openType?: 'ROUTE' | 'EMBED' | 'MODAL',\r\n    context?: IContext,\r\n    viewParams?: IParam,\r\n    pLoadingHelper?: ILoadingHelper,\r\n    isLoadDefault?: boolean,\r\n    controller: IGridViewController<IGridViewStore, IGridViewAbility>\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n    noViewCaption: false,\r\n    openType: 'ROUTE',\r\n    isLoadDefault: true,\r\n});\r\n\r\nconst model: IParam = props.controller.getModel();\r\nconst store: IGridViewStore = props.controller.getStore();\r\n\r\nconst classNames = computed(() => {\r\n  \treturn getViewClassNames(model, props);\r\n});"
  }, {
    "name" : "表格（透视表）",
    "getPSSysPFPlugin" : {
      "pluginType" : "GRID_RENDER",
      "pluginCode" : "PivotTable"
    },
    "pluginCode" : "PivotTable",
    "pluginType" : "GRID_RENDER",
    "refMode" : "CONTROL",
    "refTag" : "GRID"
  }, {
    "name" : "视图数量",
    "getPSSysPFPlugin" : {
      "pluginType" : "LIST_RENDER",
      "pluginCode" : "PFPlugin8"
    },
    "pluginCode" : "PFPlugin8",
    "pluginType" : "LIST_RENDER",
    "refMode" : "CONTROL",
    "refTag" : "LIST",
    "templCode" : "<div style=\"display: flex;justify-content: space-between;align-items: center;height: 100%;\">\r\n    <div style=\"height: 80px;width: 80px;display: flex;align-items: center;justify-content: center;\">\r\n        <Icon type=\"md-analytics\" size=\"50\" color=\"#40c9c6\"/>\r\n    </div>\r\n    <div style=\"height: 80px;width: 165px;display: flex;flex-direction: column;justify-content: center;text-align: center;\">\r\n        <div style=\"margin-bottom: 8px;color: rgba(0,0,0,.45);font-size: 18px;font-weight: 700;\">\r\n            <span> 支持视图总数 </span>\r\n        </div>\r\n        <div style=\"color: #666;font-size: 24px;font-weight: 700;\">\r\n            <span> 10 </span>\r\n        </div>\r\n    </div>\r\n</div>"
  }, {
    "name" : "订单明细产品类型",
    "getPSSysPFPlugin" : {
      "pluginType" : "LIST_RENDER",
      "pluginCode" : "PFPlugin5"
    },
    "pluginCode" : "PFPlugin5",
    "pluginType" : "LIST_RENDER",
    "refMode" : "CONTROL",
    "refTag" : "LIST",
    "templCode" : "<div>\r\n    <p style=\"font-size: 23px;color: #fff;\">产品类型</p>\r\n    <div style=\"text-align: center;font-size: 41px;color: #fff;\">\r\n        <span>10</span>\r\n    </div>\r\n</div>"
  }, {
    "name" : "订单明细合计金额",
    "getPSSysPFPlugin" : {
      "pluginType" : "LIST_RENDER",
      "pluginCode" : "PFPlugin4"
    },
    "pluginCode" : "PFPlugin4",
    "pluginType" : "LIST_RENDER",
    "refMode" : "CONTROL",
    "refTag" : "LIST",
    "templCode" : "    <div>\r\n        <p style=\"font-size: 23px;color: #fff;\">订单明细合计金额</p>\r\n        <div style=\"text-align: center;font-size: 41px;color: #fff;\">\r\n            <span>10</span>\r\n        </div>\r\n    </div>"
  }, {
    "name" : "订单明细总数",
    "getPSSysPFPlugin" : {
      "pluginType" : "LIST_RENDER",
      "pluginCode" : "PFPlugin3"
    },
    "pluginCode" : "PFPlugin3",
    "pluginType" : "LIST_RENDER",
    "refMode" : "CONTROL",
    "refTag" : "LIST",
    "templCode" : "    <div>\r\n        <p style=\"font-size: 23px;color: #fff;\">订单明细总数</p>\r\n        <div style=\"text-align: center;font-size: 41px;color: #fff;\">\r\n            <span>10</span>\r\n        </div>\r\n    </div>"
  }, {
    "name" : "选择视图自定义",
    "getPSSysPFPlugin" : {
      "pluginType" : "VIEW_CUSTOM",
      "pluginCode" : "pickerViewCustom"
    },
    "pluginCode" : "pickerViewCustom",
    "pluginType" : "VIEW_CUSTOM",
    "refMode" : "APPVIEW",
    "refTag" : "DEPICKUPVIEW",
    "templCode" : "<AppViewLayout :class=\"classNames\">\r\n        <template #default>\r\n            <UsrPickupView_pluginpickupviewpanelPickupViewPanel\r\n                :openView=\"store.openView\"\r\n                :newView=\"store.newView\"\r\n                :singleSelect='true'\r\n                name=\"pickupviewpanel\"\r\n                :context=\"store.context\"\r\n                :viewParams=\"store.viewParams\"\r\n                :closeView=\"store.closeView\"\r\n                :pLoadingHelper=\"store.loadingHelper\"\r\n                :pViewCtx=\"store.viewCtx\"\r\n                @ctrl-init=\"(name:string, ability:any) => { handleCtrlInit(controller, name, ability) }\"\r\n                @ctrl-action=\"(name:string, action:any, data:any) => { handleCtrlAction(controller, name, action, data) }\"\r\n                @ctrl-destroy=\"(name:string, data:any) => { handleCtrlDestroy(controller, name, data) }\"/>\r\n        </template>\r\n        <template #viewFooter>\r\n            <div class=\"view-footer__buttons\">\r\n            <AppButton type=\"primary\" :disabled=\"store.selections.length === 0\" @click=\"handlePickupViewButtonAction(controller, 'confirm')\">确认</AppButton>\r\n            <AppButton @click=\"handlePickupViewButtonAction(controller, 'cancel')\">取消</AppButton>\r\n            </div>\r\n        </template>\r\n    </AppViewLayout>",
    "templCode2" : "import { AppViewLayout } from \"@components/layout/view-layout\";\r\nimport UsrPickupView_pluginpickupviewpanelPickupViewPanel from '@widgets/ibizbook/usr-pickup-view-pluginpickupviewpanel-pickup-view-panel/usr-pickup-view-pluginpickupviewpanel-pickup-view-panel.vue';\r\nimport { \r\n    useNavParamsBind, \r\n    useEventBind, \r\n    getViewClassNames, \r\n    handlePickupViewButtonAction, \r\n    handleCtrlAction, \r\n    handleCtrlInit, \r\n    handleCtrlDestroy,\r\n} from \"@/hooks/use-view\";\r\nimport { PickupViewActionType, PickupViewController, IPickupViewAbility, IPickupViewControllerParams, IPickupViewStore, IPickupViewController, IParam, IContext, ILoadingHelper, IEvent } from \"@/core\";\r\ninterface Props {\r\n    name?: string,\r\n    noViewCaption?: boolean,\r\n    openType?: 'ROUTE' | 'EMBED' | 'MODAL',\r\n    context?: IContext,\r\n    viewParams?: IParam,\r\n    pLoadingHelper?: ILoadingHelper,\r\n    isLoadDefault?: boolean,\r\n    controller: IPickupViewController<IPickupViewStore, IPickupViewAbility>\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n    noViewCaption: false,\r\n    openType: 'ROUTE',\r\n    isLoadDefault: true,\r\n});\r\nconst model: IParam = props.controller.getModel();\r\nconst store: IPickupViewStore = props.controller.getStore();\r\nconst classNames = computed(() => {\r\n    const classNames = getViewClassNames(model, props);\r\n    Object.assign(classNames, {\"picker-view-custom\": true});\r\n    return classNames;\r\n});",
    "templCode3" : ".picker-view-custom {\r\n    .view-footer__buttons {\r\n        text-align: left;\r\n    }\r\n}"
  }, {
    "name" : "选项操作视图按钮左对齐",
    "getPSSysPFPlugin" : {
      "pluginType" : "VIEW_CUSTOM",
      "pluginCode" : "optionViewLeftAlign"
    },
    "pluginCode" : "optionViewLeftAlign",
    "pluginType" : "VIEW_CUSTOM",
    "refMode" : "APPVIEW",
    "refTag" : "DEOPTVIEW",
    "templCode" : "<AppViewLayout :class=\"classNames\">\r\n        <template v-if=\"!noViewCaption && model.showCaption\" #viewHeaderLeft>\r\n            <div class=\"view-header__left__caption\">\r\n                <AppCaptionBar :caption=\"model.caption\" :title=\"model.title\" :capPSLanguageRes=\"model.capPSLanguageRes\" :titlePSLanguageRes=\"model.titlePSLanguageRes\"></AppCaptionBar>\r\n                <AppDataInfoBar v-if=\"model.showDataInfoBar\" :dataInfo=\"store.dataInfo\"></AppDataInfoBar>\r\n            </div>\r\n        </template>\r\n        <template #viewHeaderRight>\r\n        </template>\r\n        <template #default>\r\n            <MainForm\r\n                :actions=\"{\r\n                    loadAction: 'Get',\r\n                    loadDraftAction: 'GetDraft',\r\n                    updateAction: 'Update',\r\n                    createAction: 'Create',\r\n                    removeAction: 'Remove',\r\n                    wfSubmitAction: '',\r\n                    wfStartAction: '',\r\n                }\"\r\n                :openView=\"store.openView\"\r\n                :newView=\"store.newView\"\r\n                \r\n                name=\"form\"\r\n                :context=\"store.context\"\r\n                :viewParams=\"store.viewParams\"\r\n                :closeView=\"store.closeView\"\r\n                :pLoadingHelper=\"store.loadingHelper\"\r\n                :pViewCtx=\"store.viewCtx\"\r\n                @ctrl-init=\"(name:string, ability:any) => { handleCtrlInit(controller, name, ability) }\"\r\n                @ctrl-action=\"(name:string, action:any, data:any) => { handleCtrlAction(controller, name, action, data) }\"\r\n                @ctrl-destroy=\"(name:string, data:any) => { handleCtrlDestroy(controller, name, data) }\"/>\r\n        </template>\r\n        <template #viewFooter>\r\n            <div class=\"view-footer__buttons\">\r\n                <AppButton type=\"primary\" @click=\"handleConfirm\">\r\n                    {{$t('app.common.confirm', '确认')}}\r\n                </AppButton>\r\n                <AppButton @click=\"handleCancel\">\r\n                    {{$t('app.common.cancel', '取消')}}\r\n                </AppButton>\r\n            </div>\r\n        </template>\r\n    </AppViewLayout>",
    "templCode2" : "import OptionViewLeftAlign from \"@plugins/view/option-view-left-align/option-view-left-align.vue\";\r\nimport { AppViewLayout } from \"@components/layout/view-layout\";\r\nimport MainForm from '@widgets/ibizbook/main-form/main-form.vue';\r\nimport { \r\n    useNavParamsBind, \r\n    useEventBind, \r\n    handleOptViewButtonAction, \r\n    handleCtrlAction, \r\n    handleCtrlInit, \r\n    handleCtrlDestroy, \r\n    getViewClassNames,\r\n} from \"@/hooks/use-view\";\r\nimport { OptViewActionType, IContext, IParam, IOptViewAbility, IOptViewControllerParams, IOptViewStore, OptViewController, IOptViewController,ILoadingHelper, IEvent } from '@/core';\r\ninterface Props {\r\n    name?: string,\r\n    noViewCaption?: boolean,\r\n    openType?: 'ROUTE' | 'EMBED' | 'MODAL',\r\n    context?: IContext,\r\n    viewParams?: IParam,\r\n    pLoadingHelper?: ILoadingHelper,\r\n    isLoadDefault?: boolean,\r\n    controller: IOptViewController<IOptViewStore, IOptViewAbility>\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n    noViewCaption: false,\r\n    openType: 'ROUTE',\r\n    isLoadDefault: true,\r\n});\r\nconst model: IParam = props.controller.getModel();\r\nconst store: IOptViewStore = props.controller.getStore();\r\nconst classNames = computed(() => {\r\n    const classNames = getViewClassNames(model, props);\r\n    Object.assign(classNames, {\"option-view-left-align\": true});\r\n    return classNames;\r\n});",
    "templCode3" : ".option-view-left-align {\r\n    .view-footer__buttons {\r\n        text-align: left;\r\n    }\r\n}"
  }, {
    "name" : "部件数量",
    "getPSSysPFPlugin" : {
      "pluginType" : "LIST_RENDER",
      "pluginCode" : "PFPlugin9"
    },
    "pluginCode" : "PFPlugin9",
    "pluginType" : "LIST_RENDER",
    "refMode" : "CONTROL",
    "refTag" : "LIST",
    "templCode" : "<div style=\"display: flex;justify-content: space-between;align-items: center;height: 100%;\">\r\n    <div style=\"height: 80px;width: 80px;display: flex;align-items: center;justify-content: center;\">\r\n        <i class=\"el-icon-share\" style=\"font-size: 50px;color: #36a3f7\"/>\r\n    </div>\r\n    <div style=\"height: 80px;width: 165px;display: flex;flex-direction: column;justify-content: center;text-align: center;\">\r\n        <div style=\"margin-bottom: 8px;color: rgba(0,0,0,.45);font-size: 18px;font-weight: 700;\">\r\n            <span> 支持部件总数 </span>\r\n        </div>\r\n        <div style=\"color: #666;font-size: 24px;font-weight: 700;\">\r\n            <span>10</span>\r\n        </div>\r\n    </div>\r\n</div>"
  }, {
    "name" : "部件数量",
    "getPSSysPFPlugin" : {
      "pluginType" : "LIST_RENDER",
      "pluginCode" : "PFPlugin9"
    },
    "pluginCode" : "PFPlugin9",
    "pluginType" : "LIST_RENDER",
    "refMode" : "CONTROL",
    "refTag" : "PORTLET",
    "templCode" : "<div style=\"display: flex;justify-content: space-between;align-items: center;height: 100%;\">\r\n    <div style=\"height: 80px;width: 80px;display: flex;align-items: center;justify-content: center;\">\r\n        <i class=\"el-icon-share\" style=\"font-size: 50px;color: #36a3f7\"/>\r\n    </div>\r\n    <div style=\"height: 80px;width: 165px;display: flex;flex-direction: column;justify-content: center;text-align: center;\">\r\n        <div style=\"margin-bottom: 8px;color: rgba(0,0,0,.45);font-size: 18px;font-weight: 700;\">\r\n            <span> 支持部件总数 </span>\r\n        </div>\r\n        <div style=\"color: #666;font-size: 24px;font-weight: 700;\">\r\n            <span>10</span>\r\n        </div>\r\n    </div>\r\n</div>"
  } ],
  "cache" : {
    "getPSAppViews" : [ {
      "accUserMode" : 0,
      "caption" : "应用登录视图",
      "codeName" : "AppLoginView",
      "dynaModelFilePath" : "PSSYSAPPS/Web/PSAPPUTILVIEWS/AppLoginView.json",
      "mOSFilePath" : "pssysapps/Web/psapputilviews/AppLoginView",
      "name" : "AppLoginView",
      "getPSAppModule" : {
        "modelref" : true,
        "path" : "PSSYSAPPS/Web/PSAPPMODULES/Ungroup.json"
      },
      "getPSViewLayoutPanel" : {
        "getAllPSPanelFields" : [ {
          "id" : "app_apptitle"
        }, {
          "id" : "auth_orgpick"
        }, {
          "id" : "auth_userid"
        }, {
          "id" : "auth_password"
        }, {
          "id" : "auth_loginmsg"
        }, {
          "id" : "auth_verificationcode"
        } ],
        "codeName" : "Usr1215816866",
        "controlType" : "VIEWLAYOUTPANEL",
        "layoutMode" : "FLEX",
        "logicName" : "AppLoginView",
        "mOSFilePath" : "pssysviewlayoutpanels/Usr1215816866",
        "memo" : "应用登录视图",
        "name" : "layoutpanel",
        "getPSAppViewLogics" : [ {
          "logicTrigger" : "CUSTOM",
          "logicType" : "APPVIEWUIACTION",
          "name" : "layoutpanel_auth_loginbutton1_click",
          "getPSAppViewUIAction" : {
            "modelref" : true,
            "id" : "layoutpanel_auth_loginbutton1"
          }
        }, {
          "logicTrigger" : "CUSTOM",
          "logicType" : "APPVIEWUIACTION",
          "name" : "layoutpanel_auth_resetinput1_click",
          "getPSAppViewUIAction" : {
            "modelref" : true,
            "id" : "layoutpanel_auth_resetinput1"
          }
        } ],
        "getPSAppViewUIActions" : [ {
          "name" : "layoutpanel_auth_loginbutton1",
          "getPSUIAction" : {
            "modelref" : true,
            "id" : "panel_Usr1215816866_auth_loginbutton1_click"
          },
          "xDataControlName" : "layoutpanel"
        }, {
          "name" : "layoutpanel_auth_resetinput1",
          "getPSUIAction" : {
            "modelref" : true,
            "id" : "panel_Usr1215816866_auth_resetinput1_click"
          },
          "xDataControlName" : "layoutpanel"
        } ],
        "getPSControlParam" : { },
        "getPSLayout" : {
          "layout" : "FLEX"
        },
        "rTMOSFilePath" : "pssysapps/Web/psapputilviews/AppLoginView/psappviewctrls/layoutpanel",
        "getRootPSPanelItems" : [ {
          "caption" : "图片背景容器",
          "itemStyle" : "DEFAULT",
          "itemType" : "CONTAINER",
          "name" : "page_container",
          "getPSLayout" : {
            "layout" : "FLEX"
          },
          "getPSLayoutPos" : {
            "grow" : -1,
            "heightMode" : "FULL",
            "layout" : "FLEX",
            "widthMode" : "FULL"
          },
          "getPSPanelItems" : [ {
            "caption" : "容器",
            "contentWidth" : 450.0,
            "itemStyle" : "DEFAULT",
            "itemType" : "CONTAINER",
            "name" : "container1",
            "getPSLayout" : {
              "layout" : "FLEX"
            },
            "getPSLayoutPos" : {
              "grow" : -1,
              "hAlignSelf" : "CENTER",
              "layout" : "FLEX",
              "vAlignSelf" : "MIDDLE",
              "width" : 450,
              "widthMode" : "PX"
            },
            "getPSPanelItems" : [ {
              "caption" : "应用标题",
              "itemStyle" : "DEFAULT",
              "itemType" : "FIELD",
              "name" : "app_apptitle",
              "getPSEditor" : {
                "editorType" : "SPAN",
                "name" : "app_apptitle",
                "predefinedType" : "APP_APPTITLE",
                "renderMode" : "HEADING1",
                "enableLinkView" : false
              },
              "getPSLayoutPos" : {
                "grow" : -1,
                "hAlignSelf" : "CENTER",
                "layout" : "FLEX"
              },
              "hidden" : false,
              "showCaption" : false
            }, {
              "caption" : "组织",
              "itemStyle" : "DEFAULT",
              "itemType" : "FIELD",
              "name" : "auth_orgpick",
              "getPSEditor" : {
                "editorParams" : {
                  "AC" : "TRUE",
                  "PICKUPVIEW" : "TRUE"
                },
                "editorType" : "PICKER",
                "name" : "auth_orgpick",
                "predefinedType" : "AUTH_ORGPICK",
                "enableAC" : true,
                "enablePickupView" : true,
                "forceSelection" : true,
                "showTrigger" : true,
                "singleSelect" : true
              },
              "getPSLayoutPos" : {
                "grow" : -1,
                "layout" : "FLEX",
                "spacingBottom" : "OUTERMEDIUM"
              },
              "hidden" : false,
              "showCaption" : false
            }, {
              "caption" : "用户名",
              "itemStyle" : "DEFAULT",
              "itemType" : "FIELD",
              "name" : "auth_userid",
              "getPSEditor" : {
                "editorType" : "TEXTBOX",
                "name" : "auth_userid",
                "predefinedType" : "AUTH_USERID"
              },
              "getPSLayoutPos" : {
                "grow" : -1,
                "layout" : "FLEX",
                "spacingBottom" : "OUTERMEDIUM"
              },
              "hidden" : false,
              "showCaption" : false
            }, {
              "caption" : "密码",
              "itemStyle" : "DEFAULT",
              "itemType" : "FIELD",
              "name" : "auth_password",
              "getPSEditor" : {
                "editorType" : "PASSWORD",
                "name" : "auth_password",
                "predefinedType" : "AUTH_PASSWORD"
              },
              "getPSLayoutPos" : {
                "grow" : -1,
                "heightMode" : "FULL",
                "layout" : "FLEX"
              },
              "hidden" : false,
              "showCaption" : false
            }, {
              "caption" : "登陆校验信息",
              "itemStyle" : "DEFAULT",
              "itemType" : "FIELD",
              "name" : "auth_loginmsg",
              "getPSEditor" : {
                "editorType" : "SPAN",
                "name" : "auth_loginmsg",
                "predefinedType" : "AUTH_LOGINMSG",
                "enableLinkView" : false
              },
              "getPSLayoutPos" : {
                "grow" : -1,
                "layout" : "FLEX"
              },
              "hidden" : false,
              "showCaption" : false
            }, {
              "caption" : "容器",
              "itemStyle" : "DEFAULT",
              "itemType" : "CONTAINER",
              "name" : "container2",
              "getPSLayout" : {
                "align" : "space-between",
                "dir" : "row",
                "layout" : "FLEX",
                "vAlign" : "center"
              },
              "getPSLayoutPos" : {
                "grow" : -1,
                "layout" : "FLEX",
                "spacingBottom" : "OUTERMEDIUM"
              },
              "getPSPanelItems" : [ {
                "actionType" : "UIACTION",
                "buttonStyle" : "DEFAULT",
                "caption" : "登陆",
                "itemStyle" : "DEFAULT",
                "itemType" : "BUTTON",
                "name" : "auth_loginbutton1",
                "getPSAppViewUIAction" : {
                  "modelref" : true,
                  "id" : "layoutpanel_auth_loginbutton1"
                },
                "getPSLayoutPos" : {
                  "grow" : -1,
                  "heightMode" : "FULL",
                  "layout" : "FLEX"
                },
                "getPSUIAction" : {
                  "caption" : "登陆",
                  "codeName" : "panel_Usr1215816866_auth_loginbutton1_click",
                  "fullCodeName" : "panel_Usr1215816866_auth_loginbutton1_click",
                  "name" : "登陆",
                  "predefinedType" : "APP_LOGIN",
                  "rTMOSFilePath" : "pssysapps/Web/pssysappdeuiactions/panel_Usr1215816866_auth_loginbutton1_click",
                  "timeout" : 60000,
                  "uIActionMode" : "SYS",
                  "uIActionTag" : "panel_Usr1215816866_auth_loginbutton1_click",
                  "uIActionType" : "DEUIACTION"
                },
                "tooltip" : "登陆",
                "showCaption" : true
              }, {
                "actionType" : "UIACTION",
                "buttonStyle" : "DEFAULT",
                "caption" : "重置",
                "itemStyle" : "DEFAULT",
                "itemType" : "BUTTON",
                "name" : "auth_resetinput1",
                "getPSAppViewUIAction" : {
                  "modelref" : true,
                  "id" : "layoutpanel_auth_resetinput1"
                },
                "getPSLayoutPos" : {
                  "grow" : -1,
                  "heightMode" : "FULL",
                  "layout" : "FLEX"
                },
                "getPSUIAction" : {
                  "caption" : "重置",
                  "codeName" : "panel_Usr1215816866_auth_resetinput1_click",
                  "fullCodeName" : "panel_Usr1215816866_auth_resetinput1_click",
                  "name" : "重置",
                  "predefinedType" : "DATA_CANCELCHANGES",
                  "rTMOSFilePath" : "pssysapps/Web/pssysappdeuiactions/panel_Usr1215816866_auth_resetinput1_click",
                  "timeout" : 60000,
                  "uIActionMode" : "SYS",
                  "uIActionTag" : "panel_Usr1215816866_auth_resetinput1_click",
                  "uIActionType" : "DEUIACTION"
                },
                "tooltip" : "重置",
                "showCaption" : true
              } ]
            }, {
              "caption" : "人机识别",
              "itemStyle" : "DEFAULT",
              "itemType" : "USERCONTROL",
              "name" : "auth_captcha1",
              "getPSLayoutPos" : {
                "grow" : -1,
                "layout" : "FLEX",
                "spacingBottom" : "OUTERMEDIUM"
              },
              "predefinedType" : "AUTH_CAPTCHA",
              "showCaption" : true
            }, {
              "caption" : "短信验证码",
              "itemStyle" : "DEFAULT",
              "itemType" : "FIELD",
              "name" : "auth_verificationcode",
              "getPSEditor" : {
                "editorType" : "TEXTBOX",
                "name" : "auth_verificationcode",
                "predefinedType" : "AUTH_VERIFICATIONCODE"
              },
              "getPSLayoutPos" : {
                "grow" : -1,
                "layout" : "FLEX",
                "spacingBottom" : "OUTERMEDIUM"
              },
              "hidden" : false,
              "showCaption" : false
            }, {
              "caption" : "容器",
              "itemStyle" : "DEFAULT",
              "itemType" : "CONTAINER",
              "name" : "container3",
              "getPSLayout" : {
                "layout" : "FLEX"
              },
              "getPSLayoutPos" : {
                "grow" : -1,
                "heightMode" : "FULL",
                "layout" : "FLEX"
              },
              "getPSPanelItems" : [ {
                "caption" : "第三方登陆",
                "itemStyle" : "DEFAULT",
                "itemType" : "USERCONTROL",
                "name" : "auth_sso1",
                "getPSLayoutPos" : {
                  "grow" : -1,
                  "heightMode" : "FULL",
                  "layout" : "FLEX"
                },
                "predefinedType" : "AUTH_SSO",
                "showCaption" : true
              } ]
            } ],
            "width" : 450.0
          } ],
          "getPSSysImage" : {
            "imagePath" : "/assets/img/login_bg.png"
          }
        } ],
        "layoutBodyOnly" : false,
        "layoutPanel" : true,
        "useDefaultLayout" : false,
        "viewProxyMode" : true,
        "modelid" : "32AC3FD9-40B3-4848-9AAE-A65D5BA86145",
        "modeltype" : "PSSYSVIEWLAYOUTPANEL"
      },
      "rTMOSFilePath" : "pssysapps/Web/psapputilviews/AppLoginView",
      "title" : "应用登录视图",
      "viewStyle" : "DEFAULT",
      "viewType" : "APPLOGINVIEW",
      "enableDP" : false,
      "modelid" : "DDD1152C-0A9F-44C5-82FA-7F6A469C5569",
      "modeltype" : "PSAPPUTILVIEW"
    } ]
  },
  "id" : "PSSYSAPPS/Web/PSSYSAPP.json"
}