npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@ahcui/vue3-multiplex

v1.0.0-rc7

Published

这是一个基于[email protected][email protected]的前端UI框架核心库

Downloads

14

Readme

@ahcui/vue3-multiplex框架核心组件文档

组织:ahcui

当前版本: @ahcui/[email protected]

使用时,请明确使用的版本号,请勿使用^1.0.0或~1.0.0之类模糊的版本!

演示地址:

http://www.ahcui.com

效果图如下:

查看框架核心组件项目模板

服务支持

进群获取更详细文档

请扫码或点击图片进群获取更详细文档,密码为群名称。

1:版本演化

V1.0.0-rc7新特性

特性继承自rc5版本,仅修改部分已知问题

V1.0.0-rc7升级内容

处理多页面模式下页面加载与切换时导致的url变成小写的问题

优化多页面模式的按需加载过程与props传参方式

依赖升级

定制说明

如果此前端框架提供的配置项无法实现您的需求时,您可以选择:

1:入群联系开发者,由开发者甄别是否在不影响框架复杂配置与切换机制的前提下,能够融入您的界面需求;

2:通过扩展坞机制或vue3的teleport实现

3:最终用户对界面布局与风格没有配置要求,且界面元素与客户要求无差别,仅在配色上存在差别,您首先通过配置实现界面布局,然后通过注入css样式实现之;

4:其他未尽事宜请联系框架开发者

本组件免费使用,但定制开发与技术支持可能会产生费。

2:开发说明

2.1:如何获取一个开发环境

框架以NPM组件的方式提供,并且提供项目开发模板,这使得项目开发模板的目录结构极其简单,开发模板中有如何启用/引入框架的基本代码,您只需要关注您的业务页面得开发。

框架核心组件无法直接运行,您需要一个vue工程。点击查看或下载在gitee上的示例工程,以源码方式,手把手教你如何引入、使用框架。您也可以自己搭建一个工程,仿照示例工程引入框架核心库。

3:组件开放对象

3.1:组件内核公开点

export {
	vue, app, cuiapi, router, store, mixin, elementPlus, axios, auth, NameSpace, namespace, eventDefine, eventBus, version ,runtimeCfg
}

使用框架核心组件,意味着您需要使核心组件提供的导出组件,创建过程由框架核心库完成并导出到项目中,开发者通过调用API来完成项目内的扩展需要。

3.1.1:app

app公开了核心组件内部通过vue的API接口createApp构建的应用对象,此对象没有安装任何VUE插件,您仍需要在项目中调用use安装插件,例如:

import { app, router, store , elementPlus } from "@ahcui/vue3-multiplex";

 app
 .use(router)
 .use(store)
 .use(elementPlus, { size: 'small', zIndex: 3000 })
 .mount('#app');
 

tips:具体代码请查看示例工程

3.1.2:vue

这里完整导出vue,伪代码如下:

export * from 'vue';

您可以在工程中引入该组件使用vue,如:

//引入框架导出的vue
import{vue} from '@ahcui/vue3-multiplex';

const index=vue.ref(0);

也可以 使用

//引入vue
import{ref} from 'vue';

const index=ref(0);

tips:使用@ahcui/vue3-multiplex公开的vue对象可以借助开发工具的接口发现可以自动提示,原生引入vue需要您自行查找定义与API接口

3.1.3:api

API接口请参照3.4:cuiapi节的单独介绍

3.1.4:router

核心组件内构建router,注册内置拦截器,并完整导出vue-router,供外部扩展与使用伪代码如下:

const router = new createRouter({})

内置路由默认注册了4个默认路由地址:

  • 核心库UI的挂载点,请参考3.2:UI界面挂载点

  • 默认首页面dashboard;

  • 403页面;

  • 404页面;

项目中注册router时,请通过VUE-Router的API接口addRoute进行扩展

3.1.5:store

核心组件内构建vuex,用于存储核心组件的内置状态,并完整导出vuex,供外部扩展与使用,

项目中注册存储模块时,请通过VUEX的API接口registerModule进行扩展

3.1.6:mixin

非vue2中的混入,此库将常用对象进行封装,可以直接在组件中导入使用:

import { mixin} from '@ahcui/vue3-multiplex';
setup(){
	const {
		/**
		* 前端运行的虚拟目录,取值自runtimeCfg.app_public_path,引入资源时需要将此作为前缀
		*/
		basePath,
		/**
		* 当前路由信息 = useRoute()
		*/
		cuiRoute,
		/**
		* 路由定义信息,@ahcui/vue3-multiplex导出的router对象
		*/
		cuiRouter,
		/*
		* 核心组件认证对象
		*/
		cuiAuth,
		/**
		* 状态定义信息,@ahcui/vue3-multiplex导出的vuex对象
		*/
		cuiStore,
		/**
		* Axios实例
		*/
		cuiAxios,
		/**
		* 全局事件总线,@ahcui/vue3-multiplex导出的eventBus对象
		*/
		cuiEventbus
	} = mixin();
}

3.1.7:elementPlus

核心组件默认引入Element-Plus的主题样式,语言、以及核心库对组件的主题自动适配。

开发者无需手动操作,这是内置能力。

3.1.8:axios

核心库导出一个默认的axios操作实例。

3.1.9:console

核心库对控制台输出的控制,可以通过外置配置文件__app_log_open__设置日志开关,外置配置文件请参考组件外置配置

3.1.10:auth

核心组件提供的用户认证信息的初始化入口,auth对象提供一个createAuth初始化函数,函数接受一个配置,配置结构如下:

{
	/**
	 * 必须实现
	 * 当前登录用户名字符串
	 * 数据示例:"admin",
	 * @return 返回用户名字符串
	 */
	getUserName:function(){
		return ""
	},
    /**
     * 必须实现
     * 当前登录用户名字符串
     * 数据示例:"zerostyle",
	 * @return 返回用户真实名称字符串
     */
    getRealName () {
		return "";
	  },
	/**
	 * 非必须实现
	 * 用户的权限完整信息,JSON对象,结构自定义,框架中仅做保存,未使用,以备业务需要
	 * 数据示例:{权限JSON对象,结构自定义,框架中仅做保存,未使用,以备业务需要}
	 * @return 返回用户权限信息原示数据
	 */
	getPermission(){
		//数据转换操作
		return Object;
	},
	/**
	 *
	 * 必须实现
	 * 用户资源菜单为树状结构
	 * 结构如下:
	 *      [{
	 *           resId:"菜单唯一识别符,必选",
	 *           iconColor:"#000,代表菜单图标字体颜色,可选",
	 *           iconClass:"fa fa-bus 字体字库名称,代表菜单图标,可选",
	 *           resPath:"菜单url路径,第一级非必选,二级及以下菜单必选",
	 *           resName:"菜单名称文字",
	 *           children:[{
	 *				 resId:"菜单唯一识别符,必选",
	 *               iconColor:"#000,代表菜单图标字体颜色,可选",
	 *               iconClass:"fa fa-bus 字体字库名称,代表菜单图标,可选",
	 *               resPath:"菜单url路径,第一级非必选,二级及以下菜单必选",
	 *               resName:"菜单名称文字"},
	 *               {...},
	 *               {...}]
	 *          }],
	 * @return 模块树状菜单
	 */
	getModulesTree(){ 
		//数据转换操作
		return Array;
	},
	/**
	 * 非必须
	 * 为使用jwt等模式的登陆时预留
	 * 在REST无会话模式下使用的票据信息
	 * @return token
	 */
	getToken(){
		return "";
	},
}

tips 1:函数体return之前您可以转换您的数据格式为@ahcui/vue3-multiplex使用的数据;

3.1.11:NameSpace

核心组件增加对命名空间的支持。命名空间用于隔离应用公开的变量,避免多个应用在集成时存在同名变量而丢失变量的问题,该库来源自@ahcui/lib-jsext组件。

3.1.12:namespace

核心组件注册的命名空间,可以在window下直接访问,格式大致如:window.ahcui.software.frame,这是核心库的命名空间,请区别项目的命名空间。

3.1.13:eventDefine

事件是核心库的重要组成部分,也是组件化后需要考虑的对外消息通知点,优秀的事件定义描述将有效的帮助开发人员鉴别消息,此内容将另外展开描述,点击查看详情

3.1.14:eventBus

事件是核心库的重要组成部分,也是组件化后需要考虑的对外消息通知点,全面的事件触发机制将是开发者可以灵活订阅消息,充分利用观察者模式来处理相应操作。 此内容将另外展开描述,点击查看详情

全局事件总线。为了便于开发者进行二次开发,框架存在诸多的事件通知,eventBus是事件通知的一种,这种方式请见eventDefine对事件的订阅方式

3.1.15:version

@ahcui/vue3-multiplex组件的版本信息描述。其描述信息如下:

{
    name:"@ahcui/vue3-multiplex",
    release:"发布版本",
    developer:"开发者",
    email:"开发者邮箱",
}

3.1.16:runtimeCfg

运行时配置作为@ahcui/vue3-multiplex核心库的重点特色,将另外展开描述,点击查看详情

3.2:UI界面挂载点

框架核心库的界面UI默认挂在路由名为"@ahcui/vue3-multiplex",路径为"/"的节点上,UI的路由定义伪代码如下:

   {
     path: '/',
     name: "@ahcui/vue3-multiplex",
     component: @ahcui/vue3-multiplex UI组件,
   },

tips 1:您可以在工程中通过VUE-Router的API接口addRoute(route: RouteRecordRaw): () => void进行调整,

tips 2:模板工程中,通过使用VUE-Router的API接口addRoute(parentName: string | symbol, route: RouteRecordRaw): () => void将使用框架的路由页面注册到框架路由下

3.3:组件内核事件

组件事件通知分为事件定义与事件通知两部分

3.3.1 事件定义

核心组件(rc4版本调整了事件定义)开放的事件定义信息,所有事件定义如下:

{
 
     header:{
        menuItemClicked:"头部菜单点击事件,此时路由地址已变化,函数签名:({module:菜单对应的模块信息})",
    },
    sidebar:{
        main:{
          menuItemClicked:"侧边栏无子菜单项的主菜单项被点击后所触发的事件,框架对此事件进行了路由切换的操作,外部还可以监听进行其他处理,函数签名:({module:菜单对应的模块信息})",
          subMenuOpen:"侧边栏有子菜单项的主菜单项被展开时触发的事件,框架不响应此事件,仅传出事件,外部可以监听进行其他处理,函数签名:({module:菜单对应的模块信息,state:扩展信息})",
          subMenuClose:"侧边栏有子菜单项的主菜单项被关闭时触发的事件,框架不响应此事件,仅传出事件,外部可以监听进行其他处理,函数签名:({module:菜单对应的模块信息,state:扩展信息})",
        },
        sub:{
          menuItemClicked:"侧栏双菜单模式时,副菜单的最终极菜单项被点击后所触发的事件,框架对此事件进行了路由切换的操作,外部还可以监听进行其他处理",
          subMenuOpen:"侧边双菜单模式时,有子菜单项的副菜单项被展开时触发的事件,框架不响应此事件,仅传出事件,外部可以监听进行其他处理,函数签名:({module:菜单对应的模块信息})",
          subMenuClose:"侧边双菜单模式时,有子菜单项的副菜单项被关闭时触发的事件,框架不响应此事件,仅传出事件,外部可以监听进行其他处理,函数签名:({module:菜单对应的模块信息})",
        }  
    },
    content:{
        multipage:{
            changeCurrentTab:"当多页面模式时,切换多页面的选项卡时触发本事件,函数签名:({oldValue:原选项卡名称,newValue:新选项卡名称,allowChange:允许切换})",
        },
        singlepage:{

        },
        refreshcurrentroute:"刷新当前工作区",
    },
 
     "changedSideBarCollapse":"修改侧边栏区域展开合并设置,函数签名:(旧状态布尔值,新状态布尔值);如启用,则自动增加样式名:cui-style-layout-sidebar-collapse",
     "changedSideBarClassName":"设置侧边栏风格样式,函数签名:(旧模式字符串,新模式字符串);取值:cui-style-theme-sidebar-dark,cui-style-theme-sidebar-light,切换风格则自动设置为相应状态的样式名",
     "changedHeaderBarClassName":"设置头部风格样式,函数签名:(旧模式字符串,新模式字符串);取值:cui-style-theme-header-dark,cui-style-theme-header-light,cui-style-theme-header-color,切换风格则自动设置为相应状态的样式名",
     "changedControlClassName":`修改界面风格(主题)设置,函数签名:(旧模式字符串,新模式字符串);取值:cui-style-theme-color-1[-8],切换风格则自动设置为相应状态的样式名,`,
     "changedControlCustomColor":`当changedControlClassName为cui-style-theme-color-custom时,由用户指定的主色调,`,
     "changedDarkMode":"修改黑暗模式设置,函数签名:(旧状态布尔值,新状态布尔值);bool值:是/否,如启用,则自动增加样式名:cui-style-theme-dark",
     "changedNavigationMode":"修改导航模式,函数签名:(旧模式字符串,新模式字符串);取值:cui-style-layout-nav-mode-side:左侧菜单布局(所有级别,侧边显示,向下展开),cui-style-layout-nav-mode-header:顶部菜单布局(所有级别,头部显示,向下展开),cui-style-layout-nav-mode-mixture:混合菜单布局(顶部显示一级菜单,侧边为二级及以下),切换模式则自动设置为相应状态的样式名",
     "changedDoubleSidebar":"侧栏双排菜单模式,函数签名:(旧状态布尔值,新状态布尔值);如启用,则自动增加样式名:cui-style-layout-doublesidebar",
     "changedBodyBespread":"修改内容区域铺满设置,函数签名:(旧状态布尔值,新状态布尔值);如启用,则自动增加样式名:cui-style-layout-bodybespread",
     "changedFixedHeader":"修改固定顶栏区域设置,函数签名:(旧状态布尔值,新状态布尔值);如启用,则自动增加样式名:cui-style-layout-fixedheader",
     "changedFixedSidebar":"修改固定侧边栏区域设置,函数签名:(旧状态布尔值,新状态布尔值);如启用,则自动增加样式名:cui-style-layout-fixedsidebar",
     "changedFixedBody":"修改固定主题区域设置,函数签名:(旧状态布尔值,新状态布尔值);如启用,则自动增加样式名:cui-style-layout-fixedbody",
     
     "changedLogoAuto":"",
     "changeSidebarIconColorful":"修改侧边栏图标为彩色,函数签名:(旧状态布尔值,新状态布尔值);",
     "changeShowFooter":"修改显示全局页脚,函数签名:(旧状态布尔值,新状态布尔值);如启用,则自动增加样式名:cui-style-layout-showfooter",
     "changeColorWeakMode":"修改色弱模式,函数签名:(旧状态布尔值,新状态布尔值);如启用,则自动增加样式名:",
     "changeMultiPageMode":"修改多页面模式,函数签名:(旧状态布尔值,新状态布尔值);无论是否启用,页面都不含影响此模式的样式名称",
     "changeTabsStyle":"修改(多页面模式时)选项卡的样式,函数签名:(旧样式名,新样式名);",
     "changeMenuIconBGColorMode":"更改菜单栏按钮背景色为彩色/默认时触发:(旧样式名,新样式名);",
     "changeLogoAreaAutoWidth":"更改左上角Logo区域宽度布局模式时触发,只在导航为cui-style-layout-nav-mode-header模式时有效",
     "changeLoadingAnimation":"更改页面加载动画时触发",

     "changeSideBarMainMenuDefaultWidth":"当修改侧边栏主菜单默认状态下的宽度时触发",
 
     "changeSideBarMainMenuCollapseWidth":"侧边栏在cui-style-layout-nav-mode-side/cui-style-layout-nav-mode-mixture状态+主菜单收缩模式,调整主菜单项的宽度时触发",
     "changeSideBarMainMenuDoubleWidth":"侧边栏在cui-style-layout-nav-mode-side/cui-style-layout-nav-mode-mixture状态+双菜单栏模式下,调整主菜单项的宽度时触发",
     "changeSideBarMainMenuDoubleHeight":"侧边栏在cui-style-layout-nav-mode-side/cui-style-layout-nav-mode-mixture状态+双菜单栏模式,调整主菜单项的高度时触发",
     "changeSideBarMainMenuDoubleIconSize":"侧边栏在cui-style-layout-nav-mode-side/cui-style-layout-nav-mode-mixture状态+双菜单栏模式,调整主菜单项的图标大小时触发",
     "changeSideBarMainMenuItemHeight":"当修改侧边栏主菜单菜单项高度时触发",
     "changeSideBarMainMenuItemIconTextMargin":"当修改侧边栏主菜单菜单项图标与文字间距时触发",
     "changeSideBarMainMenuItemIconSize":"当修改侧边栏主菜单菜单项图标大小时触发",
     "changeSideBarMainMenuItemFontSize":"当修改侧边栏主菜单菜单项文字大小时触发",

     "changeHeaderHeight":"当修改头部高度时触发",
     "changeHeaderMenuItemPadding":"当修改头部菜单的菜单项间距时触发",
 
     "haSubModulesWhenChangeToDoubleSidebar":"当界面修改为双菜单模式时,当前页面的显示存在双菜单并会显示时触发本事件,函数签名(当前页面的父模块对象)",
     "changedDoubleSidebarData":"当界面为双菜单模式时,父模块选中状态改变时,会导致子菜单数据变更,函数签名(父模块对象,子菜单的数据列表)",
     "closeCuiSetting":"当关闭框架设置对话框时触发,函数签名:(配置信息的JSON对象);",
  
 }

3.3.2 事件通知

事件会以两种方式传出,一种是以原生window.CustomEvent自定义事件的方式传出,订阅事件代码如下:

	//这是某个js文件
	import {eventDefine} from "@ahcui/vue3-multiplex";
	
	1:通过浏览器自定义事件机制,适用于原生js:
	window.addEventListener(eventDefine.事件定义,function(eventArgs){
		let args=eventArgs.detail;//这里是事件参数
		///something
	});
	
 

,一种是借助全局事件总线eventBus在vue组件中使用,使用代码如下:

	//这是某个vue文件
	import { vue, eventBus, eventDefine } from "@ahcui/vue3-multiplex";
	export default {
		setup(){
			vue.onMounted(()=>{
				eventBus.on(eventDefine.事件定义,(eventArgObj)=>{
					console.log("接收到事件");
					let args1=eventArgObj[xxx];//这里是事件参数1
					let args2=eventArgObj[xxx];//这里是事件参数2
					//...
					///something
				 })
			});
		}
	}

两种事件通知机制的使用,可兼顾原生js文件与当前框架使用的vue技术栈。

3.4:cuiapi

API是UI框架提供的接口,API接口基于界面组件,如多页面模式的添加选项卡接口,必须是在多页面模式下才有此接口,否则调用后会抛出"页面中不存在相应此事件的组件Content.MultiPage,此调用无效"的错误

3.4.1:头部API

openSetting:打开核心库UI界面设置抽屉框

closeSetting:关闭核心库UI界面设置抽屉框

调用API的代码示例如下:

import{cuiapi} from '@ahcui/vue3-multiplex';

export default {
    name:"dashboard",

    setup(){

        const click1 = ()=>{
            cuiapi.header.openSetting();
        }
        const click2 = ()=>{
            cuiapi.header.closeSetting();
        }

        return {
            click1,
            click2,
        }
    }
}

3.4.2:工作区API

  • 公共API:

      /**
       * 刷新当前工作区的api,不区分单页面还是多页面,两者共用
       */
      refreshCurrent()
    	

调用公共API的代码示例如下:

import{cuiapi} from '@ahcui/vue3-multiplex';

export default {
    name:"dashboard",

    setup(){

        const refresh = ()=>{
            cuiapi.content.refreshCurrent();
        }
		return{
			refresh,
		}
	}
}
  • 多页面模式API:
	
	    /**
         * !!!Deprecated 
         * 弃用,请见下方的rc4版本升级内容
         * 添加一个新的tab页面,新页面会首先判断name是否是路由地址,如果是路由地址,则会跳入路由地址,面包屑会使用路由定义的title
         * @param {*} title 页面标题
         * @param {*} name 页面唯一字符串,通过框架UI菜单操作默认传入的是路径(路由地址)
         * @param {*} componentInfo 组件对象
         * @param {*} componentProps 组件默认参数
         * @param {*} data 扩展数据,通过框架UI菜单操作默认传入的是菜单模块信息
         */
        addTab(title,name,componentInfo,componentProps,data)
		
        /**
         * !!!New
         * 新增,rc4版本新增api
         * 添加一个新的tab页面,因此API用于用户自定义操作,该API只做增加选项卡的动作,不做跳转、激活等动作,如有其他动作,请结合其他API进行组合使用
         * @param {string} title 页面标题
         * @param {string} name 页面唯一字符串,用户自定义唯一识别符,如希望使用路由地址对应的组件,请使用addTabByRoutePath
         * @param {vue} componentInfo 组件对象
         * @param {object} componentProps 组件默认参数
         * @param {object} data 扩展数据,通过框架UI菜单操作默认传入的是菜单模块信息
         */
         addTabByCustomName : (title,name,componentInfo,componentProps,data)
        
        /**
         * !!!New
         * 新增,rc4版本新增api
         * 添加一个新的tab页面,因添加的选项卡与路由定义由匹配关系,所以会影响title和面包屑,不做跳转、激活等动作,如有其他动作,请结合其他API进行组合使用
         * @param {string} title 页面标题
         * @param {string} routePath 路由地址(必须是路由中存在的地址),如希望使用非路由中的组件,请使用addTabByCustomName
         * @param {object} componentProps 组件默认参数(此参数为undefined的情况下,会使用路由定义中的默认参数)
         * @param {object} data 扩展数据,通过框架UI菜单操作默认传入的是菜单模块信息
         */
         addTabByRoutePath : (title,routePath,componentProps,data)
		
	    /*
         * 获取当前选中项的信息
         * @returns {index:索引,tabItem:调用addTab时传入的信息}
         */
        getCurrentTabInfo()
		
	    /**
         * 通过索引设置当前选中项
         * @param {*} index 
         */
        setCurrentTabByIndex(index)

	    /**
        * !!!Changed 
        * 修改,请见下方的rc4版本升级内容
        * 通过名称(默认是路由地址,如果是自己创建的tab,则传入自定义的名称)设置当前选中项
        * @param {*} path 通过框架UI操作默认是路由地址,如果是自己创建的tab,则传入自定义的名称
        */
        setCurrentTabByPath(path)

	    /**
         * 通过索引关闭指定的tab
         * @param {*} index 
         */
        closeTabByIndex(index)

        /**
         * 通过名称(默认是路由地址,如果是自己创建的tab,则传入自定义的名称)关闭指定的tab
         * @param {*} path 通过框架UI操作默认是路由地址,如果是自己创建的tab,则传入自定义的名称
         */
        closeTabByPath(path)

        /**
         * 获取tab的数量
         */
        getTabsLength:()


		

调用多页面模式API的代码示例如下:

import{cuiapi} from '@ahcui/vue3-multiplex';

export default {
    name:"dashboard",

    setup(){

        const openNewTab1 = ()=>{
            cuiapi.content.multipage.addTab("你好","dasfdfd",example,{name:"world"},{});
        }
		return {
            openNewTab1,
		}
	}
}
  • 单页面模式API:
暂无API

4:组件外置配置

运行时配置为编译后的项目提供了可配置与调整的能力。

运行时配置信息,具体内容请复制如下内容项目文件中,并使前端程序在运行时能够加载此文件内容。

前端模板工程对本组件的配置进行了扩展,并提供项目完整配置文件:static\js\runtime\config.js,无需创建。





     {

         /**
        * 前端程序发布路径,该配置项仅在生产模式(build)启作用
        * example:"/cui/vue/" 
        * default:"/"
        * 此配置项是为了配合在容器环境的虚拟路径下发布程序使用,如不想把程序放入容器根路径下,则需要配置此项为需要的目录
        * 如想把程序发布到"http://ip:port/cui/"下("cui"为创建的虚拟路径或站点下cui目录)
        * 配置了此项后,项目资源路径会指向该目录下(dist目录下的结构不变),同时在生产环境下在nginx的根目录创建此目录并作目录映射,
        * */
        __app_public_path__ : "/",

        __app_logo_url__ :'/static/img/logo.png',

        __app_project_name__ :'ahcui',

        __app_page_title__ : "@ahcui框架",

        __app_page_keyWords__ : "请输入您想设置的应用关键字",
        
        __app_page_description__ : "请输入您想设置的应用说明",

        /**
        * RestApi后端接口基地址,该配置项在开发与生产模式下均有效
        * 该基地址用于配置代理使用,因此必须是当前应用地址的子路径,末尾不加'/'
        * example1:"/restful/api" 
        * example2:"http://localhost:8080/restful/api"
        * 
        * 
        */
        __rest_base_path__ : "/restful/api",
        
        
        __page_hid_topbottom__ : false,
        
        __page_hid_sidebar__ : false,

        __multiplex_console__:{
            debug:{
                open: true,
            },
            error:{
                open: true,
            },
            info:{
                ope_: true,
            },
            log:{
                open: true,
            },
            warn:{
                open: true,
            },
        },

        __multiplex_style__:
        {
            /**
             * 是否收缩侧边栏,boolean
             * 如启用,则自动增加样式名:cui-style-layout-sidebar-collapse
             * 
             */
            sideBarCollapse:false,
            /**
             * 侧边栏样式名称
             * 取值:
             * cui-style-theme-sidebar-dark
             * cui-style-theme-sidebar-light
             */
            sideBarClassName: 'cui-style-theme-sidebar-dark',

            /**
             * 顶栏设置
             * 取值:
             * cui-style-theme-header-dark
             * cui-style-theme-header-light
             * cui-style-theme-header-color
             * 
             */
            headerBarClassName: 'cui-style-theme-header-dark',

            /**
             * 界面风格名称
             */
            controlClassName: 'cui-style-theme-color-2',

            /**
             * 当界面风格名称为自定义:cui-style-theme-color-custom 时,由用户指定的颜色
             */
            controlCustomColor:'#000',
            /**
             * 黑暗模式
             */
            darkMode: false,

            /**
             * 导航模式
             * 取值:
             * cui-style-layout-nav-mode-side:左侧菜单布局(所有级别,向下展开)
             * cui-style-layout-nav-mode-header:顶部菜单布局(所有级别,向下展开)
             * cui-style-layout-nav-mode-mixture:混合菜单布局(顶部为一级,测边为二级及以下)
             */
            navigationMode: 'cui-style-layout-nav-mode-mixture',

            /**
             * 侧栏双排菜单模式
             * 如启用,则自动增加样式名:cui-style-layout-doublesidebar
             */
            doubleSidebar: false,

            /**
             * 内容区域铺满模式
             * 如启用,则自动增加样式名:cui-style-layout-bodybespread
             */
            bodyBespread: false,

            /**
                * 是否固定顶栏区域
                * 如启用,则自动增加样式名:cui-style-layout-fixedheader
                */
            fixedHeader: false,

            /**
                * 是否固定侧边栏区域
                * 如启用,则自动增加样式名:cui-style-layout-fixedsidebar
                */
            fixedSidebar: false,

            /**
                * 是否固定主体区域
                * 如启用,则自动增加样式名:cui-style-layout-fixedbody
                */
            fixedBody: false,

            /**
                * logo宽度自动
                */
            logoAuto: false,

            /**
                * 侧栏彩色图标
                */
            sidebarIconColorful: false,

            /**
                * 显示页脚,则自动增加样式名:cui-style-layout-showfooter
                */
            showFooter: false,

            /**
                * 色弱模式
                */
            colorWeakMode: false,

            /**
                * 使用多页面模式
                */
            multiPageMode: true,

            /**
                 * 多标签页样式
                 */
            tabsStyle: '',

            /**
             * 启用菜单栏图标背景的彩色模式
             */
            menuIconBGColorMode: false,

            /**
             * logo区域宽度自动
             */
            logoAreaAutoWidth:true,

            /**
             * 加载动画
             */
            loadingAnimation:1,

            detail:{
                sidebar:{
                    sideBarMainMenuDefaultWidth:200,
                    sideBarMainMenuCollapseWidth:50,
                    sideBarMainMenuDoubleWidth:70,
                    sideBarMainMenuDoubleHeight:50,
                    sideBarMainMenuDoubleIconSize:18,
                    sideBarMainMenuItemHeight:50,
                    sideBarMainMenuItemIconTextMargin:4,
                    sideBarMainMenuItemIconSize:14,
                    sideBarMainMenuItemFontSize:14
                },
                header:{
                    headerUserInfoMenus:[
                        /*
						右上角用户下拉菜单内容项
						icon:图标,label:文字,event:点击后的事件名,会通过全局事件触发,请注意接收处理
						/*
						/*{icon:"",label:"修改密码",event:"changePasswd"},*/
                        {icon:"fa fa-user-o",label:"个人信息",event:"showuserinfo"},
                        {icon:"fa fa-cog",label:"主题设置",event:"styleSetting",divided:false},
                        {icon:"fa fa-sign-out",label:"退出登录",event:"logout",divided:true}
                    ],
                    headerHeight:48,
                    headerMenuItemPadding:20,
                }
            }
        },

        __multiplex_config__:{
            show:true,
            /**
             * 第一列配置项
             */
            "10000":{
                show:true
            },
            /**
             * 第二列配置
             */
            "20000":{
                show:false
            },
            "30000":{
                show:false
            },
            "40000":{
                show:false
            },
        },

        __multiplex_animate__:{
			/**工作区切入时的动画样式*/
            router_view_enter_active_class:"",
			/**工作区切出时的动画样式*/
            router_view_leave_active_class:""
        },
    
    
        /***************************************配置项均在此配置项之上,配置文件结束标记,以下配置项请勿删除***********************************************/
        ______finished______:""
    }

你也可以在项目中抽离配置信息放入本文件中,例如项目中提取一个配置项

	customConfig:{
		a:1,
		b:'123',
		c:{
			c1:"s",
		}
	}

您可以在配置中增加相应代码,如下:

window.__cui_runtime_config__ = {
	...其他配置项
	
	/*******************************************************自定义配置项请添加到下方****************************************************************/
	__customConfig__:{
		a:1,
		b:'123',
		c:{
			c1:"s",
		}
	},
	/***************************************配置项均在此配置项之上,配置文件结束标记,以下配置项请勿删除***********************************************/
	______finished______:""
}

tips 1:配置内容您可以部分或者整体保存入数据库,通过接口返回来实现不同用户、机构、岗位配置不同;

5:二次开发

5.1:订阅框架事件来进行自定义处理

3.3:组件内核事件中已经对事件定义与使用进行了介绍,此处不再复述,请查看文档相应章节

5.2:通过调用框架API函数

3.4:api中已经对API接口进行了介绍,此处不再复述,请查看文档相应章节

5.3:对界面UI进行扩展

自@ahcui/[email protected] 版本增加了扩展坞定义,开发者可以根据自己的需要对扩展坞进行自定义

扩展坞位置为红框所示如下:

查看框架核心组件项目模板

扩展方案可参考web components与vue3 teleport两种,前者基于原生web标准,后者使用vue3新功能,具体使用请见模板工程.

5.4 黑暗模式的开发

5.4.1:黑暗模式的识别

5.4.1.1:按需获取

一种用于JS代码中,可以通过判断运行时配置信息实现:

import {runtimeCfg} from '../../../assets/core';
export default {
    components:{},
    props:{},
    setup() {
        let isDarkMode=vue.ref(runtimeCfg.multiplex_style.darkMode);
        return {
            isDarkMode,
        }
    }
}

一种用于css代码中,开启黑暗模式会在body标签中增加独立的class名称"cui-style-theme-dark",您可以使用选择器对页面进行独立控制或处理

<body class="cui-style-theme-dark">
		<div id="app" class="cui-multiplex">
			<div class="cui-layout cui-theme cui-style-layout-nav-mode-side cui-style-theme-dark cui-style-theme-header-light cui-style-theme-sidebar-dark cui-style-theme-color-2 cui-style-layout-sidebar-collapse cui-style-layout-doublesidebar cui-style-layout-fixedbody" >
			....
			</div>
		</div>	
</body>

您可以使用以下类似代码实现黑暗模式下的某元素样式控制

.cui-style-theme-dark .cui-multiplex .cui-theme ....到您的dom元素
{
	background:var(--element-ui-color-dark-mode-bg1) #这里使用了一个变量来设置背景色,您也可以使用明确的颜色值
}
5.4.1.2:实时监听

这种方式通过@ahcui/vue3-multiplex事件机制实时将变更动作传出,您可以监听changedDarkMode的事件定义,举一种代码实现如下:

//这是某个vue文件
import { vue, eventBus, eventDefine } from '../../../assets/core';
export default {
		setup(){
			vue.onMounted(()=>{
				eventBus.on(eventDefine.changedDarkMode,(eventArgObj)=>{
					console.log("接收到事件");
					let args1=eventArgObj[xxx];//这里是事件参数1
					let args2=eventArgObj[xxx];//这里是事件参数2
					//...
					///something
				 })
			});
		}
	}

事件使用请见3.3.2

5.4.2:如何开发支持黑暗模式切换的项目

  • 推荐使用原生dom编写与布局有关的结构,如左右结构的工作区,上下结构的工作区,此内容不应设置背景色,文字颜色等,否则会影响主题色与黑暗模式的切换效果

  • 使用Element-Plus进行内容区元素填充,如工作区中左侧内容为菜单、树、列表等,可使用Element-Plus对应组件填充,

  • 框架以element-plus为UI控件库,黑暗模式与主题色切换是对Element-Plus的样式进行特殊适配得来,即这种模式适配是需要单独处理的,而非不劳而获

  • 三方组件想要获得此能力,可能需要适配,适配的方案是通过css选择器判断是否是黑暗模式从而开启另一套适配样式来实现

5.4.3:如何自定义黑暗模式的颜色

颜色适配、颜色变量数量、颜色防干扰、颜色反差等诸多因素的平衡是困难的,好在强大的@ahcui/vue3-multiplex框架核心库考虑到了这一点,提供了简单适配模式与专业适配模式两种模式

5.4.3.1:简单适配模式:

@ahcui/vue3-multiplex框架核心库为黑暗模式定义了一套简单的配色,涉及背景色、文字颜色、边框颜色等,您可以通过声明一套新的定义覆盖之

body.cui-style-theme-dark {
    color-scheme:dark;
    --element-ui-color-dark-mode-bg0: #000000;
    --element-ui-color-dark-mode-bg1: #141414;
    --element-ui-color-dark-mode-bg3: #1f1f1f;
    --element-ui-color-dark-mode-font0:#ffffff;
    --element-ui-color-dark-mode-font1:rgba(255, 255, 255, .85);;
    --element-ui-color-dark-mode-font2:rgba(255,255,255,.65);
    --element-ui-color-dark-mode-border0:#000000;
    --element-ui-color-dark-mode-border1:#141414;
}
5.4.3.2:专业适配模式:

除了简单适配使用到的变量外,@ahcui/vue3-multiplex框架核心库为黑暗模式维持了一套与Element-plus适配色,涉及诸多细节,乃至每个Element-plus组件的dom控件,您可以通过声明一套新的定义覆盖之

body.cui-style-theme-dark {
    color-scheme:dark;
    --el-color-primary:var(--element-ui-color-main,#409eff);
    --el-color-primary-light-3:var(--element-ui-color-assist-3,#79bbff);
    --el-color-primary-light-5:var(--element-ui-color-assist-5,#a0cfff);
    --el-color-primary-light-7:var(--element-ui-color-assist-7,#c6e2ff);
    --el-color-primary-light-8:var(--element-ui-color-assist-8,#d9ecff);
    --el-color-primary-light-9:var(--element-ui-color-assist-9,#ecf5ff);

    --el-color-primary-dark-2:var(--element-ui-color-main,#337ecc);
    --el-color-success:#67c23a;
    --el-color-success-light-3:#4e8e2f;
    --el-color-success-light-5:#3e6b27;
    --el-color-success-light-7:#2d481f;
    --el-color-success-light-8:#25371c;
    --el-color-success-light-9:#1c2518;
    --el-color-success-dark-2:#85ce61;
    --el-color-warning:#e6a23c;
    --el-color-warning-light-3:#a77730;
    --el-color-warning-light-5:#7d5b28;
    --el-color-warning-light-7:#533f20;
    --el-color-warning-light-8:#3e301c;
    --el-color-warning-light-9:#292218;
    --el-color-warning-dark-2:#ebb563;
    --el-color-danger:#f56c6c;
    --el-color-danger-light-3:#b25252;
    --el-color-danger-light-5:#854040;
    --el-color-danger-light-7:#582e2e;
    --el-color-danger-light-8:#412626;
    --el-color-danger-light-9:#2b1d1d;
    --el-color-danger-dark-2:#f78989;
    --el-color-error:#f56c6c;
    --el-color-error-light-3:#b25252;
    --el-color-error-light-5:#854040;
    --el-color-error-light-7:#582e2e;
    --el-color-error-light-8:#412626;
    --el-color-error-light-9:#2b1d1d;
    --el-color-error-dark-2:#f78989;
    --el-color-info:var(--element-ui-color-main,#909399);
    --el-color-info-light-3:var(--element-ui-color-assist-3,#b1b3b8);
    --el-color-info-light-5:var(--element-ui-color-assist-5,#c8c9cc);
    --el-color-info-light-7:var(--element-ui-color-assist-7,#dedfe0);
    --el-color-info-light-8:var(--element-ui-color-assist-8,#e9e9eb);
    --el-color-info-light-9:var(--element-ui-color-assist-9,#f4f4f5);
    --el-color-info-dark-2:var(--element-ui-color-main,#73767a);
    --el-box-shadow:0px 12px 32px 4px rgba(0, 0, 0, 0.36), 0px 8px 20px rgba(0, 0, 0, 0.72);
    --el-box-shadow-light:0px 0px 12px rgba(0, 0, 0, 0.72);
    --el-box-shadow-lighter:0px 0px 6px rgba(0, 0, 0, 0.72);
    --el-box-shadow-dark:0px 16px 48px 16px rgba(0, 0, 0, 0.72), 0px 12px 32px #000000, 0px 8px 16px -8px #000000;
    --el-bg-color-page:#0a0a0a;
    --el-bg-color:var(--element-ui-color-dark-mode-bg1);
    --el-bg-color-overlay:#1d1e1f;
    --el-text-color-primary:#E5EAF3;
    --el-text-color-regular:#CFD3DC;
    --el-text-color-secondary:var(--element-ui-color-assist-5,#909399);
    --el-text-color-placeholder:#8D9095;
    --el-text-color-disabled:#6C6E72;
    --el-border-color-darker:#636466;
    --el-border-color-dark:#58585B;
    --el-border-color: var(--element-ui-color-assist-5,#dcdfe6);
    --el-border-color-light:var(--element-ui-color-dark-mode-border0,#414243);
    --el-border-color-lighter:#363637;
    --el-border-color-extra-light:#2B2B2C;
    --el-fill-color-darker:#424243;
    --el-fill-color-dark:#39393A;
    --el-fill-color:#303030;
    --el-fill-color-light:#262727;
    --el-fill-color-lighter:#1D1D1D;
    --el-fill-color-extra-light:#191919;
    --el-fill-color-blank:var(--element-ui-color-dark-mode-bg1,transparent);
    --el-mask-color:rgba(0, 0, 0, 0.8);
    --el-mask-color-extra-light:rgba(0, 0, 0, 0.3)
}

专业级适配不仅包含以上信息,还包括在Element-plus样式定义文件对每个空间的定义信息,您如果有很强的css能力,可以试一下从入门到放弃的感觉。

5.4.4:黑暗模式免责声明

注黑暗模式是自@ahcui/[email protected]增加的对[email protected]控件库的适配,未特殊说明仍是对[email protected]控件库的适配,如果在项目中使用其他版本的Element-plus可能会因为未做适配而出现问题,项目技术负责人等相关人员应对技术选型、版本区别有一定认识,该行为属于使用者的自主行为,且框架开发者对于这一问题提前尽到了告知义务,因此不承担任何责任。

@ahcui/vue3-multiplex未最终定版,文档持续完善中