提交 8ee76e82 编写于 作者: ibizdev's avatar ibizdev

ShineKOT 发布系统代码 [后台服务,演示应用]

上级 d6f66297
......@@ -314,7 +314,7 @@
{"type":"app",
"appCodeName":"Web",
"appName":"演示应用",
"portletCodeName": "appMenu",
"portletCodeName": "QUICKMENUBAR",
"portletName": "快捷菜单",
"groupCodeName":"Ungroup",
"groupName":"(未分类)",
......
......@@ -179,7 +179,7 @@ function getAppLocale(){
info:"Please configure the data import item"
},
menus: {
appmenu: {
quickmenubar: {
menuitem1: commonLogic.appcommonhandle("应用菜单",null),
menuitem2: commonLogic.appcommonhandle("打开文档",null),
},
......
......@@ -179,7 +179,7 @@ function getAppLocale(){
info:"请配置数据导入项"
},
menus: {
appmenu: {
quickmenubar: {
menuitem1: commonLogic.appcommonhandle("应用菜单",null),
menuitem2: commonLogic.appcommonhandle("打开文档",null),
},
......
import { MockAdapter } from '@/mock/mock-adapter';
const mock = MockAdapter.getInstance();
import Mock from 'mockjs'
const Random = Mock.Random;
// 获取应用数据
mock.onGet('v7/quickmenubarappmenu').reply((config: any) => {
let status = MockAdapter.mockStatus(config);
return [status, {
name: 'db_appmenu1_appmenu',
items: [
{
id: '161CE06C-7FEB-4D3A-908A-EA2756104A50',
name: 'menuitem1',
text: '应用菜单',
type: 'MENUITEM',
counterid: '',
tooltip: '应用菜单',
expanded: false,
separator: false,
hidden: false,
hidesidebar: false,
opendefault: false,
iconcls: '',
icon: '',
textcls: '',
appfunctag: '',
resourcetag: '',
items: [
{
id: '00926656-BCDE-45AF-B381-3B465E80D8EB',
name: 'menuitem2',
text: '打开文档',
type: 'MENUITEM',
counterid: '',
tooltip: '打开文档',
expanded: false,
separator: false,
hidden: false,
hidesidebar: false,
opendefault: false,
iconcls: 'fa fa-twitter',
icon: '',
textcls: '',
appfunctag: 'AppFunc93',
resourcetag: '',
},
],
},
],
}];
});
......@@ -324,7 +324,7 @@ mock.onGet('./assets/json/portlet-data.json').reply((config: any) => {
{"type":"app",
"appCodeName":"Web",
"appName":"演示应用",
"portletCodeName": "appMenu",
"portletCodeName": "QUICKMENUBAR",
"portletName": "快捷菜单",
"groupCodeName":"Ungroup",
"groupName":"(未分类)",
......
<script lang='tsx'>
import { Component } from 'vue-property-decorator';
import AppPortalView2_dbBase from './app-portal-view2-db-dashboard-base.vue';
import view_db_appmenu1 from '@widgets/app/app-menu-portlet/app-menu-portlet.vue';
import view_db_appmenu1 from '@widgets/app/quickmenubar-portlet/quickmenubar-portlet.vue';
@Component({
......
<template>
<div class="app-app-menu">
<el-menu
class="app-menu"
:default-openeds="defaultOpeneds"
:mode="mode"
:menu-trigger="trigger"
:collapse="isCollapse"
@select="select"
:default-active="defaultActive">
<template v-if="Object.is(mode,'horizontal')">
<template v-for="item0 in menus">
<template v-if="item0.items && Array.isArray(item0.items) && item0.items.length > 0">
<el-submenu v-show="!item0.hidden" :index="item0.name" :popper-class="popperClass" :key="item0.id" :class="item0.textcls">
<template slot='title'>
<template v-if="item0.icon && item0.icon != ''">
<img :src="item0.icon" class='app-menu-icon' />
</template>
<template v-else-if="item0.iconcls && item0.iconcls != ''">
<i :class="[item0.iconcls, 'app-menu-icon']"></i>
</template>
<template v-else>
<i class='fa fa-cogs app-menu-icon'></i>
</template>
<span class='text' :title="$t('app.menus.quickmenubar.' + item0.name)">{{$t('app.menus.quickmenubar.' + item0.name)}}</span>
</template>
<template v-for="item1 in item0.items">
<template v-if="item1.items && Array.isArray(item1.items) && item1.items.length > 0">
<el-submenu v-show="!item1.hidden" :index="item1.name" :popper-class="popperClass" :key="item1.id" :class="item1.textcls">
<template slot='title'>
<template v-if="item1.icon && item1.icon != ''">
<img :src="item1.icon" class='app-menu-icon' />
</template>
<template v-else-if="item1.iconcls && item1.iconcls != ''">
<i :class="[item1.iconcls, 'app-menu-icon']"></i>
</template>
<span class='text' :title="$t('app.menus.quickmenubar.' + item1.name)">{{$t('app.menus.quickmenubar.' + item1.name)}}</span>
</template>
<template v-for="item2 in item1.items">
<template v-if="item2.type =='MENUITEM'">
<el-menu-item v-show="!item2.hidden" :index="item2.name" :key="item2.id" :class="item2.textcls">
<template v-if="item2.icon && item2.icon != ''">
<img :src="item2.icon" class='app-menu-icon' />
</template>
<template v-else-if="item2.iconcls && item2.iconcls != ''">
<i :class="[item2.iconcls, 'app-menu-icon']"></i>
</template>
<template slot="title">
<span class="text" :title="$t('app.menus.quickmenubar.' + item2.name)">{{$t('app.menus.quickmenubar.' + item2.name)}}</span>
<template v-if="counterdata && counterdata[item2.counterid] && counterdata[item2.counterid] > 0">
<span class="pull-right">
<badge :count="counterdata[item2.counterid]" :overflow-count="9999"></badge>
</span>
</template>
</template>
</el-menu-item>
</template>
</template>
</el-submenu>
</template>
<template v-else>
<template v-if="item1.type =='MENUITEM'">
<el-menu-item v-show="!item1.hidden" :index="item1.name" :key="item1.id" :class="item1.textcls">
<template v-if="item1.icon && item1.icon != ''">
<img :src="item1.icon" class='app-menu-icon' />
</template>
<template v-else-if="item1.iconcls && item1.iconcls != ''">
<i :class="[item1.iconcls, 'app-menu-icon']"></i>
</template>
<template slot="title">
<span class="text" :title="$t('app.menus.quickmenubar.' + item1.name)">{{$t('app.menus.quickmenubar.' + item1.name)}} </span>
<template v-if="counterdata && counterdata[item1.counterid] && counterdata[item1.counterid] > 0">
<span class="pull-right">
<badge :count="counterdata[item1.counterid]" :overflow-count="9999"></badge>
</span>
</template>
</template>
</el-menu-item>
</template>
</template>
</template>
</el-submenu>
</template>
<template v-else>
<template v-if="item0.type =='MENUITEM'">
<el-menu-item v-show="!item0.hidden" :index="item0.name" :key="item0.id" :class="item0.textcls">
<template v-if="item0.icon && item0.icon != ''">
<img :src="item0.icon" class='app-menu-icon' />
</template>
<template v-else-if="item0.iconcls && item0.iconcls != ''">
<i :class="[item0.iconcls, 'app-menu-icon']"></i>
</template>
<template v-else>
<i class='fa fa-cogs app-menu-icon'></i>
</template>
<template slot="title">
<span class="text" :title="$t('app.menus.quickmenubar.' + item0.name)">{{$t('app.menus.quickmenubar.' + item0.name)}}</span>
<template v-if="counterdata && counterdata[item0.counterid] && counterdata[item0.counterid] > 0">
<span class="pull-right">
<badge :count="counterdata[item0.counterid]" :overflow-count="9999"></badge>
</span>
</template>
</template>
</el-menu-item>
</template>
</template>
</template>
</template>
<app-menu-item v-else :isCollapse="isCollapse" :menus="menus" :ctrlName="'quickmenubar'" :isFirst="true" :counterdata="counterdata" :popper-class="popperClass"></app-menu-item>
</el-menu>
</div>
</template>
<script lang='tsx'>
import { Vue, Component, Prop, Provide, Emit, Watch, Model,Inject } from 'vue-property-decorator';
import { CreateElement } from 'vue';
import { Subject, Subscription } from 'rxjs';
import { ControlInterface } from '@/interface/control';
import { UIActionTool,Util,ViewTool } from '@/utils';
import NavDataService from '@/service/app/navdata-service';
import AppCenterService from "@service/app/app-center-service";
import QUICKMENUBARService from './quickmenubar-appmenu-service';
import QUICKMENUBARModel from './quickmenubar-appmenu-model';
import { Environment } from '@/environments/environment';
import AuthService from '@/authservice/auth-service';
@Component({
components: {
}
})
export default class QUICKMENUBARBase extends Vue implements ControlInterface {
/**
* 名称
*
* @type {string}
* @memberof QUICKMENUBARBase
*/
@Prop() public name?: string;
/**
* 视图通讯对象
*
* @type {Subject<ViewState>}
* @memberof QUICKMENUBARBase
*/
@Prop() public viewState!: Subject<ViewState>;
/**
* 应用上下文
*
* @type {*}
* @memberof QUICKMENUBARBase
*/
@Prop() public context!: any;
/**
* 视图参数
*
* @type {*}
* @memberof QUICKMENUBARBase
*/
@Prop() public viewparams!: any;
/**
* 视图状态事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof QUICKMENUBARBase
*/
public viewStateEvent: Subscription | undefined;
/**
* 获取部件类型
*
* @returns {string}
* @memberof QUICKMENUBARBase
*/
public getControlType(): string {
return 'APPMENU'
}
/**
* 建构部件服务对象
*
* @type {QUICKMENUBARService}
* @memberof QUICKMENUBARBase
*/
public service: QUICKMENUBARService = new QUICKMENUBARService({ $store: this.$store });
/**
* 关闭视图
*
* @param {any} args
* @memberof QUICKMENUBARBase
*/
public closeView(args: any): void {
let _this: any = this;
_this.$emit('closeview', [args]);
}
/**
* 计数器刷新
*
* @memberof QUICKMENUBARBase
*/
public counterRefresh(){
const _this:any =this;
if(_this.counterServiceArray && _this.counterServiceArray.length >0){
_this.counterServiceArray.forEach((item:any) =>{
if(item.refreshData && item.refreshData instanceof Function){
item.refreshData();
}
})
}
}
/**
* 获取多项数据
*
* @returns {any[]}
* @memberof QUICKMENUBARBase
*/
public getDatas(): any[] {
return [];
}
/**
* 获取单项树
*
* @returns {*}
* @memberof QUICKMENUBARBase
*/
public getData(): any {
return null;
}
/**
* 导航模式(route:面包屑模式、tab:分页导航模式)
*
* @type {string}
* @memberof QUICKMENUBARBase
*/
@Prop({default:'tab'}) public navModel?:string;
/**
* 视图标识
*
* @type {string}
* @memberof QUICKMENUBARBase
*/
@Prop() public viewtag!:string;
/**
* 菜单模型
*
* @public
* @type {QUICKMENUBARModel}
* @memberof QUICKMENUBARBase
*/
public menuMode: QUICKMENUBARModel = new QUICKMENUBARModel();
/**
* 显示处理提示
*
* @type {boolean}
* @memberof QUICKMENUBARBase
*/
@Prop({ default: true }) public showBusyIndicator?: boolean;
/**
* 菜单数据
*
* @public
* @type {any[]}
* @memberof QUICKMENUBARBase
*/
@Provide()
public menus: any[] = [];
/**
* 菜单收缩改变
*
* @type {boolean}
* @memberof QUICKMENUBARBase
*/
@Model() public collapsechange?: boolean;
/**
* 监听菜单收缩
*
* @param {*} newVal
* @param {*} oldVal
* @memberof QUICKMENUBARBase
*/
@Watch('collapsechange')
onCollapsechangeChange(newVal: any, oldVal: any) {
if (newVal !== this.isCollapse) {
this.isCollapse = !this.isCollapse;
}
}
/**
* 当前模式,菜单在顶部还是在底部
*
* @type {*}
* @memberof QUICKMENUBARBase
*/
@Prop() mode: any;
/**
* 应用起始页面
*
* @type {boolean}
* @memberof QUICKMENUBARBase
*/
@Prop({ default: false }) isDefaultPage?: boolean;
/**
* 空白视图模式
*
* @type {boolean}
* @memberof QUICKMENUBARBase
*/
@Prop({ default: false }) isBlankMode?:boolean;
/**
* 默认打开视图
*
* @type {*}
* @memberof QUICKMENUBARBase
*/
@Prop() defPSAppView: any;
/**
* 默认激活的index
*
* @type {*}
* @memberof QUICKMENUBARBase
*/
@Provide() defaultActive: any = null;
/**
* 当前选中主题
*
* @type {*}
* @memberof QUICKMENUBARBase
*/
@Prop() selectTheme: any;
/**
* 默认打开的index数组
*
* @type {any[]}
* @memberof QUICKMENUBARBase
*/
@Provide() public defaultOpeneds: any[] = [];
/**
* 是否展开
*
* @type {boolean}
* @memberof QUICKMENUBARBase
*/
@Provide() public isCollapse: boolean = false;
/**
* 触发方式,默认click
*
* @type {string}
* @memberof QUICKMENUBARBase
*/
@Provide() trigger: string = 'click';
/**
* 计数器数据
*
* @type {*}
* @memberof QUICKMENUBARBase
*/
public counterdata: any = {};
/**
* 建构权限服务对象
*
* @type {AuthService}
* @memberof QUICKMENUBARBase
*/
public authService:AuthService = new AuthService({ $store: this.$store });
/**
* vue 生命周期
*
* @memberof QUICKMENUBARBase
*/
public created() {
this.afterCreated();
}
/**
* 执行created后的逻辑
*
* @memberof QUICKMENUBARBase
*/
public afterCreated(){
if (Object.is(this.mode, 'horizontal')) {
this.trigger = 'hover';
}
if (this.viewState) {
this.viewStateEvent = this.viewState.subscribe(({ tag, action, data }) => {
if (!Object.is(tag, this.name)) {
return;
}
this.load(data);
});
}
}
/**
* vue 生命周期
*
* @memberof QUICKMENUBARBase
*/
public destroyed() {
this.afterDestroy();
}
/**
* 执行destroyed后的逻辑
*
* @memberof QUICKMENUBARBase
*/
public afterDestroy() {
if (this.viewStateEvent) {
this.viewStateEvent.unsubscribe();
}
}
/**
* 获取菜单项数据
*
* @public
* @param {any[]} items
* @param {string} name
* @returns
* @memberof QUICKMENUBARBase
*/
public compute(items: any[], name: string) {
const item: any = {};
items.some((_item: any) => {
if (name && Object.is(_item.name, name)) {
Object.assign(item, _item);
this.setHideSideBar(_item);
return true;
}
if (_item.items && Array.isArray(_item.items)) {
const subItem = this.compute(_item.items, name);
if (Object.keys(subItem).length > 0) {
Object.assign(item, subItem);
return true;
}
}
return false;
});
return item;
}
/**
* 设置是否隐藏菜单栏
*
* @public
* @param {*} item
* @memberof QUICKMENUBARBase
*/
public setHideSideBar(item: any): void {
}
/**
* 菜单项选中处理
*
* @param {*} index
* @param {any[]} indexs
* @returns
* @memberof QUICKMENUBARBase
*/
public select(index: any, indexs: any[]) {
let item = this.compute(this.menus, index);
if (Object.keys(item).length === 0) {
return;
}
this.click(item);
}
/**
* 菜单点击
*
* @public
* @param {*} item 菜单数据
* @memberof QUICKMENUBARBase
*/
public click(item: any) {
if (item) {
let navDataService = NavDataService.getInstance(this.$store);
if(Object.is(this.navModel,"route")){
navDataService.removeNavData(this.viewtag);
}
switch (item.appfunctag) {
case 'AppFunc93':
this.clickAppFunc93(item);
return;
default:
console.warn('未指定应用功能');
}
}
}
/**
* 打开文档
*
* @param {*} [item={}]
* @memberof QUICKMENUBAR
*/
public clickAppFunc93(item: any = {}){
const localdata: any = this.$store.getters.getLocalData();
const url = `https://www.yuque.com/ibiz/wuf19n/gybogg`;
window.open(url, '_blank');
}
/**
* 数据加载
*
* @param {*} data
* @memberof QUICKMENUBARBase
*/
public load(data: any) {
this.handleMenusResource(this.menuMode.getAppMenuItems());
}
/**
* 通过统一资源标识计算菜单
*
* @param {*} data
* @memberof QUICKMENUBARBase
*/
public handleMenusResource(inputMenus:Array<any>){
if(this.$store.getters['authresource/getEnablePermissionValid']){
this.computedEffectiveMenus(inputMenus);
this.computeParentMenus(inputMenus);
}
this.dataProcess(inputMenus);
this.menus = inputMenus;
}
/**
* 计算有效菜单项
*
* @param {*} inputMenus
* @memberof QUICKMENUBARBase
*/
public computedEffectiveMenus(inputMenus:Array<any>){
inputMenus.forEach((_item:any) =>{
if(!this.authService.getMenusPermission(_item)){
_item.hidden = true;
if (_item.items && _item.items.length > 0) {
this.computedEffectiveMenus(_item.items);
}
}
})
}
/**
* 计算父项菜单项是否隐藏
*
* @param {*} inputMenus
* @memberof QUICKMENUBARBase
*/
public computeParentMenus(inputMenus:Array<any>){
if(inputMenus && inputMenus.length >0){
inputMenus.forEach((item:any) =>{
if(item.hidden && item.items && item.items.length >0){
item.items.map((singleItem:any) =>{
if(!singleItem.hidden){
item.hidden = false;
}else{
if(singleItem.items && singleItem.items.length >0){
singleItem.items.map((grandsonItem:any) =>{
if(!grandsonItem.hidden){
item.hidden = false;
}
})
}
}
if(item.items && item.items.length >0){
this.computeParentMenus(item.items);
}
})
}
})
}
}
/**
* 数据处理
*
* @public
* @param {any[]} items
* @memberof QUICKMENUBARBase
*/
public dataProcess(items: any[]): void {
items.forEach((_item: any) => {
if (_item.expanded) {
this.defaultOpeneds.push(_item.name);
}
if (_item.items && _item.items.length > 0) {
this.dataProcess(_item.items)
}
});
}
/**
* 提示框主题样式
*
* @readonly
* @type {string}
* @memberof QUICKMENUBARBase
*/
get popperClass(): string {
return 'app-popper-menu ' + this.selectTheme;
}
}
</script>
<style lang='less'>
@import './quickmenubar-appmenu.less';
</style>
\ No newline at end of file
/**
* QUICKMENUBAR 部件模型
*
* @export
* @class QUICKMENUBARModel
*/
export default class QUICKMENUBARModel {
/**
* 菜单项集合
*
* @public
* @type {any[]}
* @memberof QUICKMENUBARModel
*/
public items: any[] = [
{
id: '161CE06C-7FEB-4D3A-908A-EA2756104A50',
name: 'menuitem1',
text: '应用菜单',
type: 'MENUITEM',
counterid: '',
tooltip: '应用菜单',
expanded: false,
separator: false,
hidden: false,
hidesidebar: false,
opendefault: false,
iconcls: '',
icon: '',
textcls: '',
appfunctag: '',
resourcetag: '',
authtag:'Web-QUICKMENUBAR-menuitem1',
items: [
{
id: '00926656-BCDE-45AF-B381-3B465E80D8EB',
name: 'menuitem2',
text: '打开文档',
type: 'MENUITEM',
counterid: '',
tooltip: '打开文档',
expanded: false,
separator: false,
hidden: false,
hidesidebar: false,
opendefault: false,
iconcls: 'fa fa-twitter',
icon: '',
textcls: '',
appfunctag: 'AppFunc93',
resourcetag: '',
authtag:'Web-QUICKMENUBAR-menuitem2',
},
],
},
];
/**
* 应用功能集合
*
* @public
* @type {any[]}
* @memberof QUICKMENUBARModel
*/
public funcs: any[] = [
];
/**
* 获取所有菜单项集合
*
* @returns {any[]}
* @memberof QUICKMENUBARModel
*/
public getAppMenuItems(): any[] {
return this.items;
}
/**
* 获取所有应用功能集合
*
* @returns {any[]}
* @memberof QUICKMENUBARModel
*/
public getAppFuncs(): any[] {
return this.funcs;
}
}
\ No newline at end of file
import { Http,Util,Errorlog } from '@/utils';
import ControlService from '@/widgets/control-service';
import QUICKMENUBARModel from './quickmenubar-appmenu-model';
/**
* QUICKMENUBAR 部件服务对象
*
* @export
* @class QUICKMENUBARService
*/
export default class QUICKMENUBARService extends ControlService {
/**
* 设置从数据模式
*
* @type {boolean}
* @memberof QUICKMENUBARService
*/
public setTempMode(){
this.isTempMode = false;
}
/**
* Creates an instance of QUICKMENUBARService.
*
* @param {*} [opts={}]
* @memberof QUICKMENUBARService
*/
constructor(opts: any = {}) {
super(opts);
this.model = new QUICKMENUBARModel();
}
/**
* 获取数据
*
* @returns {Promise<any>}
* @memberof QUICKMENUBAR
*/
@Errorlog
public get(params: any = {}): Promise<any> {
return Http.getInstance().get('v7/quickmenubarappmenu', params);
}
}
\ No newline at end of file
/*** BRGIN:菜单样式 ***/
.app-app-menu {
overflow-y: auto;
overflow-x: hidden;
height: calc(100% - 58px);
.ivu-divider{
background-color: #b3b3b3;
height: 2px;
}
> .el-menu {
border-right: 0;
.el-menu-item {
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
word-break: break-all;
.ivu-badge {
.ivu-badge-count {
box-shadow: 0 0 0 0px #fff;
}
}
}
.el-submenu__title i, .el-menu-item i {
font-size: 12px;
width: 18px;
}
.el-submenu__title .app-menu-icon,.el-menu-item .app-menu-icon{
width:20px;
font-size: 14px;
}
.el-submenu__title .text {
font-size: 16px;
}
.el-submenu__title .app-menu-circle,.el-menu-item .app-menu-circle {
display: inline-block;
border-radius: 50%;
width: 20px;
height: 20px;
line-height: 36px;
vertical-align:middle;
background: rgb(var(--app-footer-background-color-rgb));
border: 1px solid #fff;
border-color: rgb(var(--app-header-color-rgb));
color: rgb(var(--app-header-color-rgb));;
text-align: center;
font: 12px Arial, sans-serif;
}
.el-submenu__title, .el-menu-item {
height: 50px;
font-size: 14px;
line-height: 50px;
border-left: 4px !important;
}
.el-menu-item .el-tooltip {
padding-left: 12px !important;
}
.isCollpase .el-submenu__title{
padding-left: 12px !important;
}
.isFirst > .text {
font-size: 16px !important;
}
.el-menu-item, .el-submenu, .el-menu {
border-top: 1px solid #fff;
}
> .el-menu-item, > .el-submenu > .el-submenu__title {
height: 56px;
line-height: 56px;
padding-left: 16px !important;
}
.app-menu-icon {
margin: 4px;
text-align: center;
}
> .el-submenu {
> .el-menu {
> .el-menu-item, > .el-submenu > .el-submenu__title {
padding-left: 44px !important;
}
> .el-submenu {
> .el-menu {
> .el-menu-item, > .el-submenu > .el-submenu__title {
padding-left: 68px !important;
}
}
}
}
}
.active-icon {
font-size: 40px !important;
position: absolute;
right: 0;
line-height: 42px;
color: #fff !important;
display: none;
width: 24px !important;
overflow: hidden;
}
}
.el-menu--horizontal{
display: flex;
width: calc(100vw - 1100px);
height: 65px;
flex-wrap: nowrap;
overflow-x:scroll;
padding-top: 3px;
.el-menu-item{
overflow: visible;
}
.el-submenu{
.el-submenu__title{
padding-right: 0px !important;
padding-left: 0px !important;
}
}
}
.ivu-divider-horizontal {
width: 100%;
min-width: 100%;
margin: 4px auto;
margin-bottom: 1px;
}
}
.app-popper-menu {
.el-menu-item, .el-submenu__title {
height: 36px;
font-size: 16px;
line-height: 36px;
}
> .el-menu-item, > .el-submenu > .el-submenu__title {
height: 40px;
line-height: 40px;
}
.el-menu-item {
.ivu-badge {
.ivu-badge-count {
box-shadow: 0 0 0 0px #fff;
}
}
> span{
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
}
.ivu-divider-horizontal {
width: 100%;
min-width: 100%;
margin: 4px auto;
margin-bottom: 1px;
}
}
// this is less
<script lang='tsx'>
import { Component } from 'vue-property-decorator';
import QUICKMENUBARBase from './quickmenubar-appmenu-base.vue';
@Component({
components: {
}
})
export default class QUICKMENUBAR extends QUICKMENUBARBase {
}
</script>
\ No newline at end of file
<template>
<div class='portlet quickmenubar ' :style="{}">
<p class='portlet-title'>
<span>
快捷菜单
</span>
</p>
<el-divider class="divider"></el-divider>
<div class="portlet-with-title">
<view_db_appmenu1_appmenu
:viewState="viewState"
:viewparams="viewparams"
:context="context"
:showBusyIndicator="true"
name="db_appmenu1_appmenu"
ref='db_appmenu1_appmenu'
@closeview="closeView($event)">
</view_db_appmenu1_appmenu>
</div>
</div>
</template>
<script lang='tsx'>
import { Vue, Component, Prop, Provide, Emit, Watch, Model,Inject } from 'vue-property-decorator';
import { CreateElement } from 'vue';
import { Subject, Subscription } from 'rxjs';
import { ControlInterface } from '@/interface/control';
import { UIActionTool,Util, ViewTool } from '@/utils';
import NavDataService from '@/service/app/navdata-service';
import QUICKMENUBARService from './quickmenubar-portlet-service';
import UIService from '@/uiservice/ui-service';
import { Environment } from '@/environments/environment';
@Component({
components: {
}
})
export default class QUICKMENUBARBase extends Vue implements ControlInterface {
/**
* 名称
*
* @type {string}
* @memberof QUICKMENUBARBase
*/
@Prop() public name?: string;
/**
* 视图通讯对象
*
* @type {Subject<ViewState>}
* @memberof QUICKMENUBARBase
*/
@Prop() public viewState!: Subject<ViewState>;
/**
* 应用上下文
*
* @type {*}
* @memberof QUICKMENUBARBase
*/
@Prop() public context!: any;
/**
* 视图参数
*
* @type {*}
* @memberof QUICKMENUBARBase
*/
@Prop() public viewparams!: any;
/**
* 视图状态事件
*
* @public
* @type {(Subscription | undefined)}
* @memberof QUICKMENUBARBase
*/
public viewStateEvent: Subscription | undefined;
/**
* 获取部件类型
*
* @returns {string}
* @memberof QUICKMENUBARBase
*/
public getControlType(): string {
return 'PORTLET'
}
/**
* 计数器服务对象集合
*
* @type {Array<*>}
* @memberof QUICKMENUBARBase
*/
public counterServiceArray:Array<any> = [];
/**
* 建构部件服务对象
*
* @type {QUICKMENUBARService}
* @memberof QUICKMENUBARBase
*/
public service: QUICKMENUBARService = new QUICKMENUBARService({ $store: this.$store });
/**
* 关闭视图
*
* @param {any} args
* @memberof QUICKMENUBARBase
*/
public closeView(args: any): void {
let _this: any = this;
_this.$emit('closeview', [args]);
}
/**
* 计数器刷新
*
* @memberof QUICKMENUBARBase
*/
public counterRefresh(){
const _this:any =this;
if(_this.counterServiceArray && _this.counterServiceArray.length >0){
_this.counterServiceArray.forEach((item:any) =>{
if(item.refreshData && item.refreshData instanceof Function){
item.refreshData();
}
})
}
}
/**
* 长度
*
* @type {number}
* @memberof QUICKMENUBARBase
*/
@Prop() public height?: number;
/**
* 宽度
*
* @type {number}
* @memberof QUICKMENUBARBase
*/
@Prop() public width?: number;
/**
* 门户部件类型
*
* @type {number}
* @memberof QUICKMENUBARBase
*/
public portletType: string = 'appmenu';
/**
* 视图默认使用
*
* @type {string}
* @memberof QUICKMENUBARBase
*/
@Inject({from:'navModel',default: 'tab'})
public navModel!:string;
/**
* 界面行为模型数据
*
* @memberof QUICKMENUBARBase
*/
public uiactionModel: any = {
}
/**
* 是否自适应大小
*
* @returns {boolean}
* @memberof QUICKMENUBARBase
*/
@Prop({default: false})public isAdaptiveSize!: boolean;
/**
* 获取多项数据
*
* @returns {any[]}
* @memberof QUICKMENUBARBase
*/
public getDatas(): any[] {
return [];
}
/**
* 获取单项树
*
* @returns {*}
* @memberof QUICKMENUBARBase
*/
public getData(): any {
return {};
}
/**
* 获取高度
*
* @returns {any[]}
* @memberof QUICKMENUBARBase
*/
get getHeight(){
if(!this.$util.isEmpty(this.height) && !this.$util.isNumberNaN(this.height)){
if(this.height == 0){
return 'auto';
}else{
return this.height+'px';
}
}else{
return 'auto';
}
}
/**
* 刷新
*
* @memberof QUICKMENUBARBase
*/
public refresh(args?: any) {
}
/**
* vue 生命周期
*
* @memberof QUICKMENUBARBase
*/
public created() {
this.afterCreated();
}
/**
* 执行created后的逻辑
*
* @memberof QUICKMENUBARBase
*/
public afterCreated(){
if (this.viewState) {
this.viewStateEvent = this.viewState.subscribe(({ tag, action, data }) => {
if(Object.is(tag, "all-portlet") && Object.is(action,'loadmodel')){
this.calcUIActionAuthState(data);
}
if (!Object.is(tag, this.name)) {
return;
}
const refs: any = this.$refs;
Object.keys(refs).forEach((_name: string) => {
this.viewState.next({ tag: _name, action: action, data: data });
});
});
}
}
/**
* vue 生命周期
*
* @memberof QUICKMENUBARBase
*/
public destroyed() {
this.afterDestroy();
}
/**
* 执行destroyed后的逻辑
*
* @memberof QUICKMENUBARBase
*/
public afterDestroy() {
if (this.viewStateEvent) {
this.viewStateEvent.unsubscribe();
}
}
/**
* 计算界面行为权限
*
* @memberof QUICKMENUBARBase
*/
public calcUIActionAuthState(data:any = {}) {
// 如果是操作栏,不计算权限
if(this.portletType && Object.is('actionbar', this.portletType)) {
return;
}
let _this: any = this;
let uiservice: any = _this.appUIService ? _this.appUIService : new UIService(_this.$store);
if(_this.uiactionModel){
ViewTool.calcActionItemAuthState(data,_this.uiactionModel,uiservice);
}
}
}
</script>
<style lang='less'>
@import './quickmenubar-portlet.less';
</style>
/**
* QUICKMENUBAR 部件模型
*
* @export
* @class QUICKMENUBARModel
*/
export default class QUICKMENUBARModel {
/**
* 获取数据项集合
*
* @returns {any[]}
* @memberof QUICKMENUBARModel
*/
public getDataItems(): any[] {
return [
]
}
}
import { Http } from '@/utils';
import ControlService from '@/widgets/control-service';
/**
* QUICKMENUBAR 部件服务对象
*
* @export
* @class QUICKMENUBARService
*/
export default class QUICKMENUBARService extends ControlService {
}
// this is less
.portlet{
height: 100%;
width: 100%;
> .portlet-title{
padding: 14px 16px;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
height: 52px;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
justify-content: space-between;
width:100%;
line-height: 22px;
font-size: 16px;
font-weight: 500;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
color: #304265;
font-weight: 600;
i{
margin-right: 5px;
}
>.portlet-action{
margin-left: 12px;
font-size: 14px;
>a{
padding: 6px;
}
}
}
> .divider {
margin: 0px 0px 11px 0px;
}
> .portlet-with-title{
width:100%;
height:calc(100% - 58px);
overflow:auto;
padding:0px 12px;
}
> .portlet-without-title{
width:100%;
height:100%;
overflow:auto;
padding:0px 12px;
}
.app-charts{
height: 100%!important;
}
.toolbar-container {
button{
margin: 6px 0px 4px 16px;
}
.ivu-badge{
.ivu-badge-count{
top: 0;
}
}
}
}
<script lang='tsx'>
import { Component } from 'vue-property-decorator';
import QUICKMENUBARBase from './quickmenubar-portlet-base.vue';
import view_db_appmenu1_appmenu from '@widgets/app/quickmenubar-appmenu/quickmenubar-appmenu.vue';
@Component({
components: {
view_db_appmenu1_appmenu,
}
})
export default class QUICKMENUBAR extends QUICKMENUBARBase {
}
</script>
......@@ -358,7 +358,7 @@
{
"appid":"Web",
"appname":"演示应用",
"appmenu":[{"menuid":"appMenu", "menuname":"appMenu", "menuitem":[{ "id":"menuitem1" , "name":"应用菜单" , "items":[{ "id":"menuitem2" , "name":"打开文档" }]}] },{"menuid":"MainMenu", "menuname":"MainMenu", "menuitem":[{ "id":"menuitem1" , "name":"工作台" },{ "id":"menuitem3" , "name":"控件" , "items":[{ "id":"menuitem6" , "name":"默认数据类型" },{ "id":"menuitem7" , "name":"默认编辑器类型" },{ "id":"menuitem72" , "name":"扩展编辑器" },{ "id":"menuitem151" , "name":"编辑器插件示例" },{ "id":"menuitem65" , "name":"微服务组件" }]},{ "id":"menuitem4" , "name":"部件" , "items":[{ "id":"menuitem112" , "name":"应用类" , "items":[{ "id":"menuitem186" , "name":"数据看板" },{ "id":"menuitem129" , "name":"门户部件" }]},{ "id":"menuitem156" , "name":"表单类" , "items":[{ "id":"menuitem12" , "name":"编辑表单" , "items":[{ "id":"menuitem15" , "name":"基础表单项" },{ "id":"menuitem107" , "name":"内置功能" },{ "id":"menuitem47" , "name":"新建默认值" },{ "id":"menuitem99" , "name":"更新默认值" },{ "id":"menuitem48" , "name":"输入提示" },{ "id":"menuitem49" , "name":"辅助输入" },{ "id":"menuitem50" , "name":"自动填充" },{ "id":"menuitem51" , "name":"超链接" },{ "id":"menuitem52" , "name":"表单值重置" },{ "id":"menuitem55" , "name":"动态显示" },{ "id":"menuitem53" , "name":"动态启用" },{ "id":"menuitem54" , "name":"动态空输入" },{ "id":"menuitem56" , "name":"表单项更新" },{ "id":"menuitem108" , "name":"表单值规则" }]},{ "id":"menuitem16" , "name":"搜索表单" }]},{ "id":"menuitem157" , "name":"导航类" , "items":[{ "id":"menuitem120" , "name":"分页导航" },{ "id":"menuitem128" , "name":"表格导航" },{ "id":"menuitem136" , "name":"树导航" },{ "id":"menuitem137" , "name":"卡片导航" },{ "id":"menuitem139" , "name":"时间轴导航" },{ "id":"menuitem114" , "name":"列表导航" },{ "id":"menuitem138" , "name":"日历导航" },{ "id":"menuitem20" , "name":"数据关系分页" , "items":[{ "id":"menuitem117" , "name":"数据关系分页(上下关系)" },{ "id":"menuitem118" , "name":"数据关系分页(分页关系)" }]},{ "id":"menuitem116" , "name":" 数据关系栏" }]},{ "id":"menuitem158" , "name":"面板类" , "items":[{ "id":"menuitem145" , "name":"选择视图面板" },{ "id":"menuitem17" , "name":"向导面板" , "items":[{ "id":"menuitem134" , "name":"基础用法" },{ "id":"menuitem135" , "name":"状态属性" }]},{ "id":"menuitem121" , "name":"多编辑视图面板" , "items":[{ "id":"menuitem115" , "name":"多表单(行记录)" },{ "id":"menuitem123" , "name":"多表单(上分页)" }]}]},{ "id":"menuitem119" , "name":"多数据类" , "items":[{ "id":"menuitem13" , "name":"表格" , "items":[{ "id":"menuitem57" , "name":"禁用排序" },{ "id":"menuitem59" , "name":"行操作" },{ "id":"menuitem58" , "name":"行编辑" },{ "id":"menuitem73" , "name":"内置功能" },{ "id":"menuitem74" , "name":"表格行编辑" },{ "id":"menuitem75" , "name":"新建默认值" },{ "id":"menuitem76" , "name":"更新默认值" },{ "id":"menuitem77" , "name":"表格值规则" },{ "id":"menuitem132" , "name":"表格列更新" },{ "id":"menuitem133" , "name":"表格列重置" },{ "id":"menuitem78" , "name":"自动分组" },{ "id":"menuitem80" , "name":"代码表分组" },{ "id":"menuitem81" , "name":"当前页聚合" },{ "id":"menuitem82" , "name":"远程聚合" }]},{ "id":"menuitem83" , "name":"列表" , "items":[{ "id":"menuitem84" , "name":"内置功能" },{ "id":"menuitem85" , "name":"自动分组" },{ "id":"menuitem86" , "name":"代码表分组" },{ "id":"menuitem91" , "name":"项布局面板" },{ "id":"menuitem143" , "name":"自定义插件" }]},{ "id":"menuitem95" , "name":"日历" , "items":[{ "id":"menuitem96" , "name":"内置功能" },{ "id":"menuitem97" , "name":"时间轴样式" },{ "id":"menuitem109" , "name":"项布局面板" },{ "id":"menuitem64" , "name":"自定义插件" }]},{ "id":"menuitem14" , "name":"树视图" , "items":[{ "id":"menuitem60" , "name":"静态节点" },{ "id":"menuitem61" , "name":"动态节点(代码表)" },{ "id":"menuitem62" , "name":"动态节点(实体)" },{ "id":"menuitem63" , "name":"右键操作" }]},{ "id":"menuitem111" , "name":"甘特图" },{ "id":"menuitem110" , "name":"树表格" },{ "id":"menuitem87" , "name":"数据视图" , "items":[{ "id":"menuitem88" , "name":"内置功能" },{ "id":"menuitem89" , "name":"自动分组" },{ "id":"menuitem90" , "name":"代码表分组" },{ "id":"menuitem94" , "name":"项布局面板" },{ "id":"menuitem152" , "name":"自定义插件" }]},{ "id":"menuitem101" , "name":"看板视图" , "items":[{ "id":"menuitem102" , "name":"内置功能" },{ "id":"menuitem104" , "name":"代码表分组" },{ "id":"menuitem105" , "name":"项布局面板" }]},{ "id":"menuitem37" , "name":"数据图表" , "items":[{ "id":"menuitem38" , "name":"柱状图" },{ "id":"menuitem39" , "name":"折线图" },{ "id":"menuitem40" , "name":"饼图" },{ "id":"menuitem41" , "name":"区域图" },{ "id":"menuitem42" , "name":"雷达图" }]}]},{ "id":"menuitem159" , "name":"其他类" }]},{ "id":"menuitem5" , "name":"视图" , "items":[{ "id":"menuitem140" , "name":"单数据视图" , "items":[{ "id":"menuitem161" , "name":"实体向导视图" },{ "id":"menuitem8" , "name":"实体编辑视图" },{ "id":"menuitem162" , "name":"实体编辑视图(分页关系)" },{ "id":"menuitem163" , "name":"实体编辑视图(上下关系)" },{ "id":"menuitem164" , "name":"实体编辑视图(左右关系)" },{ "id":"menuitem165" , "name":"实体分页导航视图" },{ "id":"menuitem166" , "name":"实体数据看板视图" },{ "id":"menuitem167" , "name":"实体选项操作视图" }]},{ "id":"menuitem141" , "name":"多数据视图" , "items":[{ "id":"menuitem79" , "name":"实体表格视图" },{ "id":"menuitem168" , "name":"实体多表单编辑视图" },{ "id":"menuitem169" , "name":"实体甘特视图" },{ "id":"menuitem9" , "name":"实体列表视图" },{ "id":"menuitem170" , "name":"实体日历视图" },{ "id":"menuitem171" , "name":"实体看板视图" },{ "id":"menuitem172" , "name":"实体树表格视图" },{ "id":"menuitem173" , "name":"实体树视图" },{ "id":"menuitem174" , "name":"实体数据视图" },{ "id":"menuitem175" , "name":"实体图表视图" }]},{ "id":"menuitem10" , "name":"导航视图" , "items":[{ "id":"menuitem176" , "name":"实体表格导航视图" },{ "id":"menuitem177" , "name":"实体列表导航视图" },{ "id":"menuitem178" , "name":"实体卡片导航视图" },{ "id":"menuitem179" , "name":"实体日历导航视图" },{ "id":"menuitem180" , "name":"实体树导航视图" }]},{ "id":"menuitem26" , "name":"选择视图" , "items":[{ "id":"menuitem18" , "name":"数据选择视图" },{ "id":"menuitem27" , "name":"索引选择视图" }]},{ "id":"menuitem69" , "name":"工作流" , "items":[{ "id":"menuitem30" , "name":"工作流动态导航视图" },{ "id":"menuitem31" , "name":"工作流启动" }]},{ "id":"menuitem11" , "name":"其他视图" , "items":[{ "id":"menuitem98" , "name":"自定义视图" }]}]},{ "id":"menuitem153" , "name":"逻辑" , "items":[{ "id":"menuitem154" , "name":"应用功能" , "items":[{ "id":"menuitem127" , "name":"打开应用视图" },{ "id":"menuitem147" , "name":"打开HTML页面" },{ "id":"menuitem160" , "name":"执行JavaScript" }]},{ "id":"menuitem155" , "name":"界面行为" , "items":[{ "id":"menuitem181" , "name":"前台界面行为" },{ "id":"menuitem182" , "name":"后台界面行为" }]},{ "id":"menuitem19" , "name":"临时模式" }]},{ "id":"menuitem2" , "name":"更多" , "items":[{ "id":"menuitem46" , "name":"数据导出导入" },{ "id":"menuitem184" , "name":"主状态" , "items":[{ "id":"menuitem70" , "name":"表格主状态" },{ "id":"menuitem148" , "name":"列表主状态" },{ "id":"menuitem183" , "name":"数据主状态" },{ "id":"menuitem28" , "name":"日历主状态" },{ "id":"menuitem29" , "name":"树主状态" }]}]},{ "id":"menuitem92" , "name":"其他" , "items":[{ "id":"menuitem93" , "name":"示例实体02示例数据补充" },{ "id":"menuitem100" , "name":"订单示例数据补充" },{ "id":"menuitem103" , "name":"产品示例数据补充" },{ "id":"menuitem106" , "name":"示例实体03示例数据补充" },{ "id":"menuitem113" , "name":"订单类型添加" },{ "id":"menuitem124" , "name":"示例实体01数据补充" },{ "id":"menuitem144" , "name":"客户实体示例数据补充" },{ "id":"menuitem146" , "name":"应用视图数据补充" },{ "id":"menuitem149" , "name":"应用部件数据补充" },{ "id":"menuitem150" , "name":"编辑器数据补充" }]}] }]
"appmenu":[{"menuid":"QUICKMENUBAR", "menuname":"appMenu", "menuitem":[{ "id":"menuitem1" , "name":"应用菜单" , "items":[{ "id":"menuitem2" , "name":"打开文档" }]}] },{"menuid":"MainMenu", "menuname":"MainMenu", "menuitem":[{ "id":"menuitem1" , "name":"工作台" },{ "id":"menuitem3" , "name":"控件" , "items":[{ "id":"menuitem6" , "name":"默认数据类型" },{ "id":"menuitem7" , "name":"默认编辑器类型" },{ "id":"menuitem72" , "name":"扩展编辑器" },{ "id":"menuitem151" , "name":"编辑器插件示例" },{ "id":"menuitem65" , "name":"微服务组件" }]},{ "id":"menuitem4" , "name":"部件" , "items":[{ "id":"menuitem112" , "name":"应用类" , "items":[{ "id":"menuitem186" , "name":"数据看板" },{ "id":"menuitem129" , "name":"门户部件" }]},{ "id":"menuitem156" , "name":"表单类" , "items":[{ "id":"menuitem12" , "name":"编辑表单" , "items":[{ "id":"menuitem15" , "name":"基础表单项" },{ "id":"menuitem107" , "name":"内置功能" },{ "id":"menuitem47" , "name":"新建默认值" },{ "id":"menuitem99" , "name":"更新默认值" },{ "id":"menuitem48" , "name":"输入提示" },{ "id":"menuitem49" , "name":"辅助输入" },{ "id":"menuitem50" , "name":"自动填充" },{ "id":"menuitem51" , "name":"超链接" },{ "id":"menuitem52" , "name":"表单值重置" },{ "id":"menuitem55" , "name":"动态显示" },{ "id":"menuitem53" , "name":"动态启用" },{ "id":"menuitem54" , "name":"动态空输入" },{ "id":"menuitem56" , "name":"表单项更新" },{ "id":"menuitem108" , "name":"表单值规则" }]},{ "id":"menuitem16" , "name":"搜索表单" }]},{ "id":"menuitem157" , "name":"导航类" , "items":[{ "id":"menuitem120" , "name":"分页导航" },{ "id":"menuitem128" , "name":"表格导航" },{ "id":"menuitem136" , "name":"树导航" },{ "id":"menuitem137" , "name":"卡片导航" },{ "id":"menuitem139" , "name":"时间轴导航" },{ "id":"menuitem114" , "name":"列表导航" },{ "id":"menuitem138" , "name":"日历导航" },{ "id":"menuitem20" , "name":"数据关系分页" , "items":[{ "id":"menuitem117" , "name":"数据关系分页(上下关系)" },{ "id":"menuitem118" , "name":"数据关系分页(分页关系)" }]},{ "id":"menuitem116" , "name":" 数据关系栏" }]},{ "id":"menuitem158" , "name":"面板类" , "items":[{ "id":"menuitem145" , "name":"选择视图面板" },{ "id":"menuitem17" , "name":"向导面板" , "items":[{ "id":"menuitem134" , "name":"基础用法" },{ "id":"menuitem135" , "name":"状态属性" }]},{ "id":"menuitem121" , "name":"多编辑视图面板" , "items":[{ "id":"menuitem115" , "name":"多表单(行记录)" },{ "id":"menuitem123" , "name":"多表单(上分页)" }]}]},{ "id":"menuitem119" , "name":"多数据类" , "items":[{ "id":"menuitem13" , "name":"表格" , "items":[{ "id":"menuitem57" , "name":"禁用排序" },{ "id":"menuitem59" , "name":"行操作" },{ "id":"menuitem58" , "name":"行编辑" },{ "id":"menuitem73" , "name":"内置功能" },{ "id":"menuitem74" , "name":"表格行编辑" },{ "id":"menuitem75" , "name":"新建默认值" },{ "id":"menuitem76" , "name":"更新默认值" },{ "id":"menuitem77" , "name":"表格值规则" },{ "id":"menuitem132" , "name":"表格列更新" },{ "id":"menuitem133" , "name":"表格列重置" },{ "id":"menuitem78" , "name":"自动分组" },{ "id":"menuitem80" , "name":"代码表分组" },{ "id":"menuitem81" , "name":"当前页聚合" },{ "id":"menuitem82" , "name":"远程聚合" }]},{ "id":"menuitem83" , "name":"列表" , "items":[{ "id":"menuitem84" , "name":"内置功能" },{ "id":"menuitem85" , "name":"自动分组" },{ "id":"menuitem86" , "name":"代码表分组" },{ "id":"menuitem91" , "name":"项布局面板" },{ "id":"menuitem143" , "name":"自定义插件" }]},{ "id":"menuitem95" , "name":"日历" , "items":[{ "id":"menuitem96" , "name":"内置功能" },{ "id":"menuitem97" , "name":"时间轴样式" },{ "id":"menuitem109" , "name":"项布局面板" },{ "id":"menuitem64" , "name":"自定义插件" }]},{ "id":"menuitem14" , "name":"树视图" , "items":[{ "id":"menuitem60" , "name":"静态节点" },{ "id":"menuitem61" , "name":"动态节点(代码表)" },{ "id":"menuitem62" , "name":"动态节点(实体)" },{ "id":"menuitem63" , "name":"右键操作" }]},{ "id":"menuitem111" , "name":"甘特图" },{ "id":"menuitem110" , "name":"树表格" },{ "id":"menuitem87" , "name":"数据视图" , "items":[{ "id":"menuitem88" , "name":"内置功能" },{ "id":"menuitem89" , "name":"自动分组" },{ "id":"menuitem90" , "name":"代码表分组" },{ "id":"menuitem94" , "name":"项布局面板" },{ "id":"menuitem152" , "name":"自定义插件" }]},{ "id":"menuitem101" , "name":"看板视图" , "items":[{ "id":"menuitem102" , "name":"内置功能" },{ "id":"menuitem104" , "name":"代码表分组" },{ "id":"menuitem105" , "name":"项布局面板" }]},{ "id":"menuitem37" , "name":"数据图表" , "items":[{ "id":"menuitem38" , "name":"柱状图" },{ "id":"menuitem39" , "name":"折线图" },{ "id":"menuitem40" , "name":"饼图" },{ "id":"menuitem41" , "name":"区域图" },{ "id":"menuitem42" , "name":"雷达图" }]}]},{ "id":"menuitem159" , "name":"其他类" }]},{ "id":"menuitem5" , "name":"视图" , "items":[{ "id":"menuitem140" , "name":"单数据视图" , "items":[{ "id":"menuitem161" , "name":"实体向导视图" },{ "id":"menuitem8" , "name":"实体编辑视图" },{ "id":"menuitem162" , "name":"实体编辑视图(分页关系)" },{ "id":"menuitem163" , "name":"实体编辑视图(上下关系)" },{ "id":"menuitem164" , "name":"实体编辑视图(左右关系)" },{ "id":"menuitem165" , "name":"实体分页导航视图" },{ "id":"menuitem166" , "name":"实体数据看板视图" },{ "id":"menuitem167" , "name":"实体选项操作视图" }]},{ "id":"menuitem141" , "name":"多数据视图" , "items":[{ "id":"menuitem79" , "name":"实体表格视图" },{ "id":"menuitem168" , "name":"实体多表单编辑视图" },{ "id":"menuitem169" , "name":"实体甘特视图" },{ "id":"menuitem9" , "name":"实体列表视图" },{ "id":"menuitem170" , "name":"实体日历视图" },{ "id":"menuitem171" , "name":"实体看板视图" },{ "id":"menuitem172" , "name":"实体树表格视图" },{ "id":"menuitem173" , "name":"实体树视图" },{ "id":"menuitem174" , "name":"实体数据视图" },{ "id":"menuitem175" , "name":"实体图表视图" }]},{ "id":"menuitem10" , "name":"导航视图" , "items":[{ "id":"menuitem176" , "name":"实体表格导航视图" },{ "id":"menuitem177" , "name":"实体列表导航视图" },{ "id":"menuitem178" , "name":"实体卡片导航视图" },{ "id":"menuitem179" , "name":"实体日历导航视图" },{ "id":"menuitem180" , "name":"实体树导航视图" }]},{ "id":"menuitem26" , "name":"选择视图" , "items":[{ "id":"menuitem18" , "name":"数据选择视图" },{ "id":"menuitem27" , "name":"索引选择视图" }]},{ "id":"menuitem69" , "name":"工作流" , "items":[{ "id":"menuitem30" , "name":"工作流动态导航视图" },{ "id":"menuitem31" , "name":"工作流启动" }]},{ "id":"menuitem11" , "name":"其他视图" , "items":[{ "id":"menuitem98" , "name":"自定义视图" }]}]},{ "id":"menuitem153" , "name":"逻辑" , "items":[{ "id":"menuitem154" , "name":"应用功能" , "items":[{ "id":"menuitem127" , "name":"打开应用视图" },{ "id":"menuitem147" , "name":"打开HTML页面" },{ "id":"menuitem160" , "name":"执行JavaScript" }]},{ "id":"menuitem155" , "name":"界面行为" , "items":[{ "id":"menuitem181" , "name":"前台界面行为" },{ "id":"menuitem182" , "name":"后台界面行为" }]},{ "id":"menuitem19" , "name":"临时模式" }]},{ "id":"menuitem2" , "name":"更多" , "items":[{ "id":"menuitem46" , "name":"数据导出导入" },{ "id":"menuitem184" , "name":"主状态" , "items":[{ "id":"menuitem70" , "name":"表格主状态" },{ "id":"menuitem148" , "name":"列表主状态" },{ "id":"menuitem183" , "name":"数据主状态" },{ "id":"menuitem28" , "name":"日历主状态" },{ "id":"menuitem29" , "name":"树主状态" }]}]},{ "id":"menuitem92" , "name":"其他" , "items":[{ "id":"menuitem93" , "name":"示例实体02示例数据补充" },{ "id":"menuitem100" , "name":"订单示例数据补充" },{ "id":"menuitem103" , "name":"产品示例数据补充" },{ "id":"menuitem106" , "name":"示例实体03示例数据补充" },{ "id":"menuitem113" , "name":"订单类型添加" },{ "id":"menuitem124" , "name":"示例实体01数据补充" },{ "id":"menuitem144" , "name":"客户实体示例数据补充" },{ "id":"menuitem146" , "name":"应用视图数据补充" },{ "id":"menuitem149" , "name":"应用部件数据补充" },{ "id":"menuitem150" , "name":"编辑器数据补充" }]}] }]
}
]
}
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册