基于uniapp+uview+uni-ui跨平台手机端后台管理系统UniappUAdmin

uniapp-uadmin 基于uni-app+uView+uniUI研发的跨端手机后台管理系统项目。全新的毛玻璃视觉UI界面,内置了图表、自定义表格、表单、瀑布流及图文编辑器等业务模块,动态权限管理,错误页处理,支持编译至H5+小程序+APP端。

如上图:编译到H5+APP+小程序端效果

◆ 技术栈

  • 编码器:HbuilderX3.3.5
  • 框架技术:vue.js+uniapp+vuex+mockjs
  • UI组件库:uView-ui+uni-ui
  • 弹窗组件:ua-popup(基于uni-app跨端弹框组件)
  • 表格组件:ua-table(基于uni-app封装的多功能表格)
  • 自定义组件:uaDock全新的dock风格tabbar组件
  • 图表组件:u-charts图表库
  • 模拟数据:mock.js

◆ 功能特色

全新替代tabbar动态毛玻璃菜单Dock
支持动态权限管理、错误页处理
内置多图表组件、表格、表单、瀑布流列表及富文本编辑器
支持编译h5+APP+小程序端

◆ 目录结构

整个项目采用标准的模糊化结构开发方式,所有表格数据使用mock.js模拟。

◆ 公共模板UAPage

<!-- 公共页面模板 -->
<template>
<view class="ua__pageview flexbox flex-col" :style="{'--SKIN': $store.state.skin, 'background': bgcolor, 'color': color}">
<slot name="header" /> <!-- //主容器 -->
<view class="ua__scrollview flex1">
<slot />
</view> <!-- //底部 -->
<slot name="footer" /> <!-- //dock菜单 -->
<ua-dock v-if="dock && dock != 'false'" @click="handleDockClick" /> <!-- //函数式弹框 -->
<ua-popup ref="uapopup" /> <!-- //换肤弹框模板 -->
<ua-popup v-model="isVisibleSkin" position="right">
<Skin />
</ua-popup>
</view>
</template>

项目中顶部导航条及弹窗组件,使用自定义组件实现,之前有分享过相关的介绍文章。

https://www.cnblogs.com/xiaoyan2017/p/14978408.html

https://www.cnblogs.com/xiaoyan2017/p/14993445.html

◆ uniapp毛玻璃模糊视觉Dock

项目中的底部dock菜单采用了背景模糊化效果,替代了系统tabbar组件。可左右丝滑滚动,图标支持iconfont和图片,另外还支持badge圆点数字提示。选项支持切换tabbar页面,跳转新页面,可定制化选项。

<!-- //底部dock菜单 -->
<template>
<view class="ua__dockbar">
<scroll-view class="ua__dock-scroll ua__filter" :class="platform" scroll-x :style="{'background': bgcolor}">
<view class="ua__dock-wrap">
<!-- Tab菜单项 -->
<block v-for="(item, index) in menu" :key="index">
<view v-if="item.type == 'divider'" class="ua__dock-divider"></view>
<view v-else class="ua__dock-item" :class="currentTabIndex == index ? 'cur' : ''" @click="switchTab(index, item)">
<text v-if="item.icon" class="iconfont nvuefont" :class="item.icon">{{item.icon}}</text>
<image v-if="item.img" :src="item.img" class="iconimg" :style="{'font-size': item.iconSize}" />
<text v-if="item.badge" class="ua__badge ua__dock-badge">{{item.badge}}</text>
<text v-if="item.dot" class="ua__badge-dot ua__dock-badgeDot"></text>
</view>
</block>
</view>
</scroll-view>
</view>
</template>

组件props支持如下参数配置

props: {
// 当前索引
current: { type: [Number, String], default: 0 },
// 背景色
bgcolor: { type: String, default: null },
/**
* [ 菜单选项 ]
type    菜单类型 type: 'tab'支持uni.switchTab切换 type: 'divider'分割线
path    菜单页面地址
icon    菜单图标-iconfont图标
img     菜单图片
color    菜单图标颜色
title    标题
badge    圆点数字
dot 小红点
*/
menu: {
type: Array,
default: () => [
/* Tab菜单 */
{
type: 'tab',
path: '/pages/index/index',
icon: `\ue619`,
color: '#2979ff',
title: '首页',
},
{
type: 'tab',
path: '/pages/component/index',
icon: 'icon-component',
color: '#17c956',
title: '组件',
badge: 5,
},
{
type: 'tab',
path: '/pages/permission/index',
icon: 'icon-auth',
color: '#f44336',
title: '权限管理',
},
{
type: 'tab',
path: '/pages/setting/index',
icon: 'icon-wo',
color: '#8d1cff',
title: '设置',
dot: true,
},
{
path: '/pages/error/404',
img: require('@/static/mac/keychain.png'),
title: '错误页面',
}, { type: 'divider' }, /* Nav菜单 */
{
img: require('@/static/logo.png'),
title: 'github',
},
{
img: 'https://www.uviewui.com/common/logo.png',
title: 'gitee',
},
{
img: require('@/static/mac/colorsync.png'),
title: '皮肤',
},
{
img: require('@/static/mac/info.png'),
title: '关于',
}, { type: 'divider' }, {
img: require('@/static/mac/bin.png'),
title: '回收站',
badge: 12,
},
]
},
},

点击每一个选项切换页面

// Tab切换
switchTab(index, item) {
if(item.path) {
let type = item.type == 'tab' ? 'switchTab' : 'navigateTo'
uni[type]({
url: item.path,
})
}else {
if(item.type == 'tab') {
this.currentTabIndex = index
}
}
this.$emit('click', index)
}

◆ uniapp自定义表格组件

这一次项目一大亮点,uniapp多功能自定义表格组件。网上也有很多uniapp表格组件,比较简陋、功能性并不好。于是就自研了这款ua-table表格组件。

ua-table 一款支持全选、单选,列宽/居中及可左右、上下滑动固定表头及列,支持点击行返回行数据,返回单选及多选行列数据,自定义slot插槽等功能。

使用非常之简单,只需如下方式调用即可。

<ua-table
:columns="columns"
headerBgColor="#eee"
:headerBold="true"
stripe
padding="5px 0"
:data="data.list"
height="450rpx"
>
</ua-table>
<script>
import Mock from 'mockjs' export default {
data() {
return {
columns: [
{type: 'index', align: 'center', width: 100, fixed: true}, // 索引序号
{prop: 'title', label: '标题', align: 'left', width: '350'},
{prop: 'num', label: '搜索量', align: 'center', width: 120},
],
data: Mock.mock({
total: 100,
page: 1,
pagesize: 10,
'list|10': [
{
id: '@id()',
title: '@ctitle(10, 20)',
num: '@integer(1000,10000)'
}
]
}),
}
}
}
</script>

支持自定义插槽,则可通过如下方式使用。

<ua-table
:columns="columns"
headerBgColor="#eee"
:headerBold="true"
:stripe="true"
:data="data.list"
@row-click="handleRowClick"
@select="handleCheck"
height="750rpx"
style="border:1px solid #eee"
>
<template #default="{row, col, index}">
<block v-if="col.slot == 'image'">
<u-image :src="row.image" :lazy-load="true" height="100rpx" width="100rpx" @click="previewImage(row.image)" />
</block>
<block v-if="col.slot == 'switch'">
<u-switch v-model="row.switch" inactive-color="#fff" :size="36"></u-switch>
</block>
<block v-if="col.slot == 'tags'">
<u-tag :text="row.tags" bg-color="#607d8b" color="#fff" mode="dark" size="mini" />
</block>
<block v-if="col.slot == 'progress'">
<u-line-progress active-color="#1fb925" :percent="row.progress" :show-percent="false" :height="16"></u-line-progress>
</block>
<block v-if="col.slot == 'btns'">
<view class="ua__link success" @click.stop="handleFormEdit(row)">编辑</view>
<view class="ua__link error" @click.stop="handleDel(row, index)">删除</view>
</block>
</template>
</ua-table>
<script>
import Mock from 'mockjs' export default {
data() {
return {
columns: [
{type: 'selection', align: 'center', width: 80, fixed: true}, // 多选
{type: 'index', align: 'center', width: 80, fixed: true}, // 索引序号
{prop: 'author', label: '作者', align: 'center', width: 120},
{prop: 'title', label: '标题', align: 'left', width: 350},
{slot: 'image', label: '图片', align: 'center', width: 120},
{slot: 'switch', label: '推荐', align: 'center', width: 100},
{slot: 'tags', label: '标签', align: 'center', width: 100},
{slot: 'progress', label: '热度', align: 'center', width: 150},
{prop: 'date', label: '发布时间', align: 'left', width: 300}, // 时间
{slot: 'btns', label: '操作', align: 'center', width: 150, fixed: 'right'}, // 操作
],
data: Mock.mock({
total: 100,
page: 1,
pagesize: 10,
'list|30': [
{
id: '@id()',
author: '@cname()',
title: '@ctitle(10, 20)',
image: 'https://picsum.photos/400/400?random=' + '@guid()',
switch: '@boolean()',
'tags|1': ['admin', 'test', 'dev'],
progress: '@integer(30, 90)',
date: '@datetime()'
}
]
}),
}
}
}
</script>

注意:自定义插槽,需要将字段属性改为slot: xxx

当初开发这款表格组件遇到最大的一个问题就是,在小程序端slot不支持动态:name,明明这样就可以完美实现动态slot功能

<slot :name="col.slot" :row="row" :col="col" :index="rIndex" />

在小程序端怎么都没反应,还报错一大推。万般无奈,最后只能采用这种兼容写法。

<block v-if="col.slot"><slot :row="row" :col="col" :index="rIndex" /></block>

如果大家有更好的解决方法,欢迎留言一起交流学习。

Okay,以上就是今天的分享,后续还会分享一些最新实例项目,希望可以喜欢哈~~

最后附上一个uniapp短视频直播项目

uni-app+uviewUI仿抖音小视频:https://www.cnblogs.com/xiaoyan2017/p/15312146.html

uni-uadmin后台管理系统|uniapp+uView跨端后台框架实例的更多相关文章

  1. Vite-Admin后台管理系统|vite4+vue3+pinia前端后台框架实例

    基于vite4.x+vue3+pinia前端后台管理系统解决方案ViteAdmin. 前段时间分享了一篇vue3自研pc端UI组件库VEPlus.这次带来最新开发的基于vite4+vue3+pinia ...

  2. ASP.NET MVC5+EF6+EasyUI 后台管理系统(61)-如何使用框架来开发

    系列目录 前言: 有些园友经常问如何正确快速开发,但是我告诉你没有什么帮助文档比自己动手做更加实在,不用代码生成器 这一节专门抽了些时间来非常非常详细演示这个框架的数据流,废话不多说,现在开始!下面看 ...

  3. 我最近做了一个react的后台管理系统,用于快速创建后台项目模板

    react-ant-admin 此框架使用与二次开发,前端框架使用react,UI框架使用ant-design,全局数据状态管理使用redux,ajax使用库为axios.用于快速搭建中后台页面.欢迎 ...

  4. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(持续更新中...)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库  您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB  升级后界面效果如下: 任务调度系统界面 http: ...

  5. LeeCX - 开源后台管理系统简单介绍

    我们在github上开源了一个后台管理系统,使用了前端css框架并且简单的封装了一下,技术的将会不间断更新,详细可以点击原文链接.具体介绍如下: LeeCX 开源后台管理系统,前端基于bootstra ...

  6. ASP.NET MVC5+EF6+EasyUI 后台管理系统(1)-前言与目录(转)

    开发工具:VS2015(2012以上)+SQL2008R2以上数据库 您可以有偿获取一份最新源码联系QQ:729994997 价格 666RMB 升级后界面效果如下: 日程管理   http://ww ...

  7. vue后台管理系统

    1. 项目概述: 根据不同的应用场景,电商系统一般都提供了 PC 端.移动 APP.移动 Web.微信小程序等多种终端访问方式. 2. 电商后台管理系统的功能 电商后台管理系统用于管理用户账号.商品分 ...

  8. 【ThinkPHP框架学习 】(2) --- 后台管理系统如何用iframe点击左边右边局部刷新

    如题:         在写后台管理系统时,需要实现后台界面的局部动态刷新.         左边的导航栏使用a标签进行设置,通过href和target属性的配合,就可以将iframe中的子页实现动态 ...

  9. SSM后台管理系统(Spring SpringMVC Mybatis Mysql EasyUI)

    非常简单的一个后台管理系统,功能不多,框架也不复杂, 源码下载(附数据库)-ssm后台管理系统框架(Spring mvc + mybatis + mysql + easyui ) 实例图片

  10. django后台管理系统(admin)的简单使用

    目录 django后台管理系统的使用 检查配置文件 检查根urls.py文件 启动项目,浏览器输入ip端口/admin 如: 127.0.0.1/8000/admin 回车 注册后台管理系统超级管理 ...

随机推荐

  1. 【调试】ftrace(三)trace-cmd和kernelshark

    之前使用ftrace的时候需要一系列的配置,使用起来有点繁琐,这里推荐一个ftrace的一个前端工具,它就是trace-cmd trace-cmd安装教程 安装trace-cmd及其依赖库 git c ...

  2. HOMER docker版本配置优化

    概述 HOMER是一款100%开源的针对SIP/VOIP/RTC的抓包工具和监控工具. HOMER是一款强大的.运营商级.可扩展的数据包和事件捕获系统,是基于HEP/EEP协议的VoIP/RTC监控应 ...

  3. wav文件头信息

    概述 最近在对接百度TTS的python接口,对接的过程中发现一些问题,记录下解决方案. 百度TTS接口返回的音频数据格式有4种,分别是mp3,pcm-16k,pcm-8k,wav(pcm-16k). ...

  4. C#利用折线图分析产品销售走势

    图形界面 数据 查询效果 代码 private void button1_Click(object sender, EventArgs e) { G++; DrowFont(this.comboBox ...

  5. Kubernetes 网络:Pod 和 container 的那点猫腻

    1. Kubernetes 网络模型 在 Kubernetes 的网络模型中,最小的网络单位是 Pod.Pod 的网络设计原则是 IP-per-Pod,即 Pod 中 container 共享同一套网 ...

  6. Git-历史版本切换-log-reset

  7. [转帖]10.2 Data Collector与MDW

    10.2 Data Collector与MDW Data Collection功能是SQL SERVER 2005版本提供的数据库监控报表的功能,通过定时地对数据库的语句运行情况,服务器各种资源的监控 ...

  8. [转帖]实战演练 | Navicat 数据生成功能

    https://zhuanlan.zhihu.com/p/631823381 数据生成的目的是依据某个数据模型,从原始数据通过计算得到目标系统所需要的符合该模型的数据.数据生成与数据模型是分不开的,数 ...

  9. [转帖]Linux下在文件内部指定行(首行、末尾行等)插入内容

    https://blog.csdn.net/drbing/article/details/52153766 1.在文件的首行插入指定内容: :~$ sed -i "1i#! /bin/sh ...

  10. [转帖]Elasticsearch-索引性能调优

    1:设置合理的索引分片数和副本数 索引分片数建议设置为集群节点的整数倍,初始数据导入时副本数设置为 0,生产环境副本数建议设置为 1(设置 1 个副本,集群任意 1 个节点宕机数据不会丢失:设置更多副 ...