整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

用DevExpress实现基于HTML&am

用DevExpress实现基于HTML&CSS的桌面应用程序的UI(一)

evExpress WinForm拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForm能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!

注意:目前基于HTML & CSS的控件正在积极研发中,可以作为技术预览提供,如果需要使用请下载最新版组件体验哦~

DevExpress WinForms Subscription官方最新版免费下载试用,历史版本下载,在线文档和帮助文件下载-慧都网

一组控件和组件允许开发人员构建HTML格式的UI,并使用CSS样式自定义UI元素的外观设置、大小、填充和布局选项,不再需要处理自定义绘制事件或更改大量属性来修改控件以匹配UI规范,可以使用HTML和CSS标记的知识为桌面应用程序构建布局。

主要功能包括:

  • 在HTML标记中指定数据绑定表达式,以显示来自底层数据源的值。
  • 使用CSS创建响应式UI——当用户鼠标指针悬停在或单击特定元素上时添加效果。
  • 向UI添加外部控件(例如,文本框)。
  • 处理控件事件来响应UI元素鼠标动作。
  • 启用DirectX硬件加速来获得更好的性能。

HTML-CSS标记

支持HTML和CSS的控件和组件从模板呈现它们的UI,控件模板的HTML标记指定控件的内容(UI元素),而模板的CSS代码指定应用于UI元素的样式、显示和布局设置。

使用控件的HtmlTemplate属性来指定模板,在设计时,开发人员可以在HTML Template Editor(HTML模板编辑器)中创建模板。

该编辑器支持语法高亮显示、智能感知(一种代码完成辅助工具)和预览面板,预览面板允许开发人员检查可视元素——将鼠标悬停在元素上时定位的HTML标记。

示例

下面的示例演示了一个HtmlContentControl从指定的HTML-CSS模板呈现一个UI,该控件被绑定到Employee对象的列表。模板的HTML代码包含数据绑定表达式,用于显示来自数据源的值。

C#

public class Employee {
public string DisplayName { get; set; }
public string FullName { get; set; }
public SvgImage Photo { get; set; }
}
//...
Employee emp=new Employee();
emp.DisplayName="Leah Test Coordinator";
emp.FullName="Leah Simpson";
SvgImageCollection imageCollection=new SvgImageCollection();
imageCollection.Add("photo", "image://svgimages/icon builder/business_businesswoman.svg");
emp.Photo=imageCollection["photo"];
List<Employee> list=new List<Employee>();
list.Add(emp);
htmlContentControl1.DataContext=list;
//...
void OnButtonClick(object sender, DxHtmlElementMouseEventArgs args) {
if(args.ElementId=="uploadBtn") {
//...
}
if (args.ElementId=="removeBtn") {
//...
}
XtraMessageBox.Show("Button " + args.ElementId + " clicked");
}

VB.NET

Public Class Employee
Public Property DisplayName() As String
Public Property FullName() As String
Public Property Photo() As SvgImage
End Class
'...
Dim emp As Employee=New Employee()
emp.DisplayName="Leah Test Coordinator"
emp.FullName="Leah Simpson"
Dim imageCollection As SvgImageCollection=New SvgImageCollection()
imageCollection.Add("photo", "image://svgimages/icon builder/business_businesswoman.svg")
emp.Photo=imageCollection("photo")
Dim list As New List(Of Employee)()
list.Add(emp)
htmlContentControl1.DataContext=list
'...
Private Sub OnButtonClick(ByVal sender As Object, ByVal args As DxHtmlElementMouseEventArgs)
If args.ElementId="uploadBtn" Then
'...
End If
If args.ElementId="removeBtn" Then
'...
End If
XtraMessageBox.Show("Button " & args.ElementId & " clicked")
End Sub

HTML

<div class="container" id="container">
<div class="avatarContainer">
<img src="${Photo}" class="avatar">
<div id="uploadBtn" onclick="OnButtonClick" class="centered button">Upload</div>
<div id="removeBtn" onclick="OnButtonClick" class="centered button">Remove</div>
</div>
<div class="separator"></div>
<div class="avatarContainer ">
<div class="field-container">
<div class="field-header">
<b>Display name</b><b class="hint">Visible to other members</b>
</div>
<p>${DisplayName}</p>
</div>
<div class="field-container with-left-margin">
<div class="field-header">
<b>Full name</b><b class="hint">Not visible to other members</b>
</div>
<p>${FullName}</p>
</div>
</div>
</div>

CSS

言:

之前的文章《从博弈论思考如何给大语言模型生成智能 UI 界面》里只是简单介绍了思路,知行合一,除了思路还需要通过实践来检验。这周的闲暇,我使用 DQN 进行了反复的实验,但是,训练出的模型,预测结果却差强人意。


事实证明,仅用简单的环境、行为和 Reward 定义,是无法让模型真正学会如何优化布局的。因此,我将这件事情分成两个步骤进一步探索:步骤一是重建一个更加完善的环境,强化学习依赖于环境的反馈,环境的设计非常重要;步骤二是重建 DQN 的算法,优化 Reward、Q 的计算规则来促使模型学习到真正有效的策略。


构建实验环境


如何使用 Python、Gradio 和 Tailwind CSS 实现一个动态内容布局系统,特别是为文本和图文混合内容块在一个 800x600 的布局容器中合理分布。我逐步解决了从随机生成内容块到确保每一行都被完全填满的问题。以下是的详细步骤和思路。

1. 初始需求

最初,目标是将任意矩形切割成指定数量的矩形块,并考虑如何用最少的横向切割实现。这需要一个有效的算法来确定每个内容块的大小和位置,使得布局均匀且美观。

2. 使用 Gradio 生成随机内容

我选择了 Gradio 作为主要工具,因其易于集成和展示。在 Gradio 里我编写了一个函数,随机生成 3 到 5 个内容块,类型为纯文本或图文混合。

def generate_random_text(length):
    words="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent vehicula quam id lorem ullamcorper, ut scelerisque mauris fermentum.".split()
    return ' '.join(random.choices(words, k=length))

3. 计算和布局

为了使内容块在 800x600 的容器中均匀分布,先简单预设为两列布局,并计算每个内容块的宽度和高度。使用 CSS Grid 布局,可以轻松地控制每个内容块的列跨度。

4. 动态调整列跨度

根据内容长度动态调整列跨度是关键一步,先设定内容长度的阈值:长度超过600字符的内容块跨越两列,而较短的内容块尽量占用一列。这样可以确保每行都能被完全填满,避免出现空列。

5. 确保每行填满

在布局过程中,使用一个计数器来跟踪当前行已占据的列数。对于最后一个内容块,需要进行特别处理,确保其占满当前行的所有剩余列数,避免留下空白区域。

6. 代码实现

最终的代码如下:

import gradio as gr
import random
import math

def generate_random_text(length):
    words="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent vehicula quam id lorem ullamcorper, ut scelerisque mauris fermentum.".split()
    return ' '.join(random.choices(words, k=length))

def generate_content_blocks():
    num_blocks=random.randint(3, 5)
    content_types=['text', 'image-text']
    
    cols=2
    block_width=800 // cols
    block_height=600 // math.ceil(num_blocks / cols)
    
    html_content=f'<div class="container mx-auto p-6" style="width: 800px; height: 600px;">'
    html_content +=f'<div class="grid gap-2" style="grid-template-columns: repeat({cols}, 1fr); height: 100%;">'
    
    col_count=0
    
    for i in range(num_blocks):
        content_type=random.choice(content_types)
        content_length=random.randint(300, 800)
        content=generate_random_text(content_length // 5)
        
        remaining_cols=cols - col_count
        if content_length > 600:
            colspan=min(remaining_cols, 2)
        else:
            colspan=min(remaining_cols, 1)
        
        col_count +=colspan
        
        if i==num_blocks - 1 and col_count < cols:
            colspan=remaining_cols
            col_count=cols
        
        if col_count >=cols:
            col_count=0
        
        colspan_style=f'grid-column: span {colspan};'
        
        if content_type=='text':
            html_content +=f'''
                <div class="content-block p-4 bg-white shadow rounded-lg flex flex-col justify-center items-center" style="{colspan_style} height: {block_height}px;">
                    <h2 class="text-xl font-bold mb-2">Text Block {i + 1}</h2>
                    <p>{content}</p>
                </div>
            '''
        else:
            html_content +=f'''
                <div class="content-block p-4 bg-white shadow rounded-lg flex flex-col justify-center items-center" style="{colspan_style} height: {block_height}px;">
                    <h2 class="text-xl font-bold mb-2">Image-Text Block {i + 1}</h2>
                    <div class="flex items-center">
                        <img src="https://via.placeholder.com/100" alt="Placeholder Image" class="w-24 h-24 mr-4 rounded-lg">
                        <p>{content}</p>
                    </div>
                </div>
            '''
    
    html_content +='</div></div>'
    
    tailwind_cdn='<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">'
    return tailwind_cdn + html_content

iface=gr.Interface(
    fn=generate_content_blocks,
    inputs=[],
    outputs="html",
    live=True
)

iface.launch(debug=True)


总结一下这次实验的部分:

1. 算法控制的部分:

? 随机内容生成 (generate_random_text(length)):

? 功能: 生成指定长度的随机文本,模拟Lorem Ipsum文本。

? 实现: 使用随机选择单词来构造文本,单词列表存储在固定的字符串中。长度参数length用于控制生成文本的长度。

? 生成内容块 (generate_content_blocks()):

? 随机数生成: 使用random.randint()函数生成随机的内容块数量和列数,从而决定布局的动态性。

? 栅格布局: 根据随机生成的列数和内容块数量,动态计算每个内容块在网格中的位置(跨列数)。

? 文本长度控制: 根据随机数确定文本块的长度,以确保每个内容块都有合适的长度。

? 布局的动态性: 使用条件语句和循环来确保网格布局的正确性,如最后一个内容块填充剩余的列数。

2. 实验背后的数学模型:

? 栅格布局计算:

? 列数计算: 使用random.randint()来生成2至4之间的列数,决定网格布局的列数。

? 块的宽高计算: 根据列数和内容块数量动态计算每个内容块的宽度和高度,确保均匀分布和适当的间距。

? 内容长度分配:

? 文本长度随机化: 使用random.randint()来生成每个文本块的长度,以模拟不同长度的内容块。

? 跨列分配: 根据内容的长度和剩余的列数,决定文本块跨越的列数,以避免过多或过少的空白空间。

3. 代码的实现策略:

? HTML字符串构建:

? Tailwind CSS集成: 在生成的HTML字符串中直接嵌入Tailwind CSS类,实现快速和一致的样式。

? 容器和布局: 使用container, grid, colspan等类来管理布局和样式,确保内容块具有适当的样式和布局。

这次尝试只能生成两列的简单布局算法,当做 DQN 的实验环境肯定不理想,我这里针对上述总结的内容进一步优化,结合栅格化布局,使用 Tailwind CSS 和 Gradio 实现智能布局。

随机内容生成

首先,需要生成随机长度的文本,在实验环境里模拟不同的内容展示场景。这里使用 Python 的随机模块,构造了一段仿“Lorem Ipsum”的文本。优化函数 generate_random_text(length),通过随机选择单词,生成指定长度的文本。

import random

def generate_random_text(length):
    words="Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent vehicula quam id lorem ullamcorper, ut scelerisque mauris fermentum.".split()
    return ' '.join(random.choices(words, k=length))

动态生成内容块

接下来,需要生成包含文本和图像的内容块。每个内容块可以是纯文本或图文混合,并随机分布在栅格系统中。为了方便后期设计师标注,这里使用了Gradio来展示生成的HTML内容。

import math
import gradio as gr

def generate_content_blocks():
    num_blocks=random.randint(4, 8)
    cols=random.randint(2, 4)
    block_width=800 // cols
    block_height=600 // math.ceil(num_blocks / cols)
    
    html_content=f'<div class="container mx-auto p-6" style="width: 800px;">'
    html_content +=f'<div class="grid gap-1" style="grid-template-columns: repeat({cols}, 1fr); height: 100%;">'
    
    col_count=0
    for i in range(num_blocks):
        content_type=random.choice(['text', 'image-text'])
        content_length=random.randint(300, 800)
        content=generate_random_text(content_length // 5)
        
        remaining_cols=cols - col_count
        colspan=min(remaining_cols, 2) if content_length > 600 else min(remaining_cols, 1)
        col_count +=colspan
        if i==num_blocks - 1 and col_count < cols:
            colspan=remaining_cols
            col_count=cols
        if col_count >=cols:
            col_count=0
        
        colspan_style=f'grid-column: span {colspan};'
        
        if content_type=='text':
            html_content +=f'''
                <div class="content-block p-4 bg-gray-800 shadow rounded-lg flex flex-col justify-top items-center overflow-auto" style="{colspan_style} height: {block_height}px;">
                    <h2 class="text-xl font-bold mb-2">Text Block {i + 1}</h2>
                    <p>{content}</p>
                </div>
            '''
        else:
            html_content +=f'''
                <div class="content-block p-4 bg-gray-800 shadow rounded-lg flex flex-col justify-top items-center overflow-auto" style="{colspan_style} height: {block_height}px;">
                    <h2 class="text-xl font-bold mb-2">Image-Text Block {i + 1}</h2>
                    <div class="flex items-center">
                        <img src="https://via.placeholder.com/100" alt="Placeholder Image" class="w-100 h-60 mr-4 rounded-lg">
                        <p class="text-gray-800 leading-relaxed p-2">{content}</p>
                    </div>
                </div>
            '''
    
    html_content +='</div></div>'
    tailwind_cdn='<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">'
    return tailwind_cdn + html_content

iface=gr.Interface(fn=generate_content_blocks, inputs=[], outputs="html", live=True)
iface.launch(debug=True)

数学模型背后的魔法

为了确保布局不仅美观且高效,使用了一些简单的数学模型来动态计算内容块的宽度和位置。

1. 网格布局: 采用了常见的12列栅格系统,以确保布局的灵活性和响应性。

2. 动态宽高计算: 根据生成的内容块数量和列数,动态计算每个内容块的宽度和高度,确保所有内容块均匀分布。

3. 跨列计算: 内容块可以跨越多个列,根据内容长度和剩余列数,决定每个内容块跨越的列数,以优化布局。

响应式设计与Tailwind CSS

最后,为了让布局在各种情况下都能完美展示,使用了Tailwind CSS。通过简单的类名,实现了复杂的布局和样式。由于未来要引入模型算法对样式进行生成,所以这里使用 Tailwind CSS,采用 DesignToken 替换 CSS3 样式属性更方便模型对样式进行语义化理解,而不必在浩如烟海的 CSS3 样式属性定义里迷失。

<link href="https://cdn.jsdelivr.net/npm/tailwindcss@2.2.19/dist/tailwind.min.css" rel="stylesheet">

引入 DQN 进行强化学习

这段时间,我研究了如何使用强化学习技术优化网页布局,尤其是通过 DQN(深度 Q 网络)和 DDQN(双重深度 Q 网络)实现自适应布局,做了很多的实验,等这些工作完成后,我会把代码也分享出来。接下来,一步步回顾一下整个实验过程。

1. 问题定义

网页布局对用户体验至关重要。无论是文字块还是图文混排块,如何在有限的页面空间内合理安排这些内容块,直接影响到页面的美观度和可读性。通过强化学习,我希望训练一个智能体,能在不同的布局需求下,自主学习如何分配空间,使得页面布局既美观又实用。

2. 环境搭建

首先,我定义了一个模拟布局的环境 LayoutEnv。这个环境需要考虑:

? 当前布局块的数量。

? 剩余的列数和行数。

? 滚动高度(Scroll Height),这是衡量页面滚动体验的重要指标。

环境的状态通过这几个变量表示,并在每一步行动后返回新的状态和奖励。尤其是滚动高度,合理布局应该尽量减少滚动高度,避免用户为了阅读内容频繁滚动。

class LayoutEnv:
    def __init__(self, num_blocks, max_cols, max_rows):
        self.num_blocks=num_blocks
        self.max_cols=max_cols
        self.max_rows=max_rows
        self.reset()
    
    def reset(self):
        # 重置环境状态
        pass
    
    def step(self, action):
        # 执行动作,返回新状态、奖励和是否结束
        pass
    
    def _get_state(self):
        # 获取当前状态
        pass

3. 深度 Q 网络

接下来,构建了一个基础的 DQN 模型,用于评估不同状态下的动作价值。模型由几层全连接神经网络组成,用于预测每个动作的 Q 值。

class DQN(nn.Module):
    def __init__(self, state_size, action_size):
        super(DQN, self).__init__()
        self.fc1=nn.Linear(state_size, 24)
        self.fc2=nn.Linear(24, 24)
        self.fc3=nn.Linear(24, action_size)
    
    def forward(self, x):
        x=torch.relu(self.fc1(x))
        x=torch.relu(self.fc2(x))
        return self.fc3(x)

4. 双重深度 Q 网络

为了提升模型的稳定性和性能,引入了 DDQN。DDQN 通过将目标 Q 网络与在线 Q 网络分离,解决了 DQN 中的过度估计问题。

class DDQNAgent:
    def __init__(self, state_size, action_size):
        # 初始化各种参数和网络
        pass
    
    def remember(self, state, action, reward, next_state, done):
        # 记忆经验
        pass
    
    def act(self, state):
        # 选择动作
        pass
    
    def replay(self, batch_size):
        # 训练网络
        pass
    
    def update_target_network(self):
        # 更新目标网络
        pass

5. 训练循环

在训练过程中,让智能体不断与环境互动,从中学习如何优化布局。在每个回合中,智能体根据当前状态选择动作,并根据动作反馈调整策略。

for e in range(num_episodes):
    state=env.reset()
    state=np.reshape(state, [1, state_size])
    for time in range(500):
        action=agent.act(state)
        next_state, reward, done, _=env.step(action)
        agent.remember(state, action, reward, next_state, done)
        state=next_state
        if done:
            break
        if len(agent.memory) > batch_size:
            agent.replay(batch_size)
    agent.update_target_network()
    save_model(agent, model_path)

6. 预测与展示

最后,使用 Streamlit 构建了一个简单的用户界面,允许输入状态参数并预测布局动作,通过动态渲染模型预测的布局动作调整后的布局,可以直观地看到模型的预测效果。

import streamlit as st

st.title('DQN Layout Prediction')

# 输入状态参数
current_block=st.number_input('Current Block', min_value=0, max_value=5, value=0)
remaining_cols=st.number_input('Remaining Columns', min_value=1, max_value=4, value=4)
remaining_rows=st.number_input('Remaining Rows', min_value=1, max_value=4, value=4)
scroll_height=st.number_input('Scroll Height', min_value=0, max_value=1000, value=0)

state=np.array([current_block, remaining_cols, remaining_rows, scroll_height], dtype=np.float32)
state=np.reshape(state, [1, state_size])

if st.button('Predict'):
    action=agent.act(state)
    st.write(f'Predicted Action: {action}')

总结

过去的一周里查阅了强化学习和 GNN 的一些资料,GNN 部分主要是希望找到 UI 元素的合理分布,让 GNN 模型学习元素之间的关系。我刚训练完 DQN 还需要测试,后续除了给 DQN 添加更多的策略空间、环境反馈外,还想引入更多 Action 选择策略,比如用 GNN 判断元素关系、用 NLP 判断内容块和整体内容的关系等。


前一段时间,小编也收集了推荐36种免费React模板和主题「干货」,这次又收集了22种Vue的。希望小伙们喜欢。收集不易,希望点赞+关注。

在Internet上搜索模板和主题时,很难找到免费的Vue资源。

即使您不在乎质量,它们似乎也很难被发现,并出于好奇而感动,我花了数小时在Google和Github上四处挖掘,结果得到了收集22种开源Vue模板和主题框架集合。我不会对此打赌,但是它们也是高质量的资源。

Bootstrap Vue



现场演示:https://bootstrap-vue.org/

githubhttps://github.com/bootstrap-vue/bootstrap-vue

BootstrapVue 拥有85个以上的组件,45个以上的可用插件,多个指令和670+个图标, 它提供了可用于Vue.js v2.6的Bootstrap v4.5组件和网格系统的最全面的实现之一 ,并具有广泛的功能和自动 WAI-ARIA 可访问性标记。

vue & nuxt 博客网站

现场演示:https://surmon.me/
Github: https://github.com/surmon-china/surmon.me

使用vue & nuxt 搭建建立的非常有风味独特的博客网站

Vue后台UI框架 - Buefy


现场演示:https://buefy.org/

Github: https://github.com/buefy/buefy/

Buefy 是基于Bulma框架和设计的Vue.js响应式UI组件的轻量级库

特征

  • 轻松保留当前的布尔玛主题/变量
  • 支持Material Design图标和FontAwesome
  • 非常轻巧,除了Vue&Bulma之外没有任何内部依赖性
  • 大约88KB min + gzip(包括布尔玛)
  • 语义代码输出
  • 遵循布尔玛设计和一些Material Design UX
  • 专注于可用性和性能,而无需过度动画的东西

vue后台UI框架 - ant-design-vue



现场演示:https://vue.ant.design
Github: https://github.com/vueComponent/ant-design-vue

这里是 Ant Design 的 Vue 实现,开发和服务于企业级后台产品。

特性

  • 提炼自企业级中后台产品的交互语言和视觉风格。
  • 开箱即用的高质量 Vue 组件。
  • 共享Ant Design of React设计工具体系。

Vue后台UI框架 - vuetifyjs

现场演示:官网:vuetifyjs.com
Github:https://github.com/vuetifyjs/vuetify

Vuetify 是一个 Vue UI 库,包含手工制作的精美材料组件。不需要设计技能 - 创建令人惊叹的应用程序所需的一切都触手可及。

vue后台UI框架 - iview



iview官网:https://www.iviewui.com/
Github:https://github.com/iview/iview
官方后台示例:iview-admin:https://github.com/iview/iview-admin

iView Admin是一个前端管理后台集成解决方案。它基于Vue.js并使用UI Toolkit iView。

饿了么出品的UI框架 - element-ui

Vue:http://element-cn.eleme.io/2.0/#/zh-CN/component/quickstart
React:https://eleme.github.io/element-react/#/zh-CN/quick-start
Angular:https://element-angular.faas.ele.me/guide/start

基于Vue2.0和bulma0.2的后台管理框架 - vue-admin


Github:https://github.com/vue-bulma/vue-admin

cd vue-admin
npm install
npm run dev

人人开源 / renren-fast-vue

现场演示:http://demo.open.renren.io/renren-fast (账号密码:admin/admin)

Gitee:https://gitee.com/renrenio/renren-fast-vue

renren-fast-vue基于vue、element-ui构建开发,实现renren-fast后台管理前端功能,提供一套更优的前端解决方案

  • 前后端分离,通过token进行数据交互,可独立部署
  • 主题定制,通过scss变量统一一站式定制
  • 动态菜单,通过菜单管理统一管理访问路由
  • 数据切换,通过mock配置对接口数据/mock模拟数据进行切换
  • 发布时,可动态配置CDN静态资源/切换新旧版本
  • 若依 / RuoYi-Vue


    演示地址:http://vue.ruoyi.vip
    文档地址:http://doc.ruoyi.vip

    RuoYi-Vue 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统

  • 前端采用Vue、Element UI。
  • 后端采用Spring Boot、Spring Security、Redis & Jwt。
  • 权限认证使用Jwt,支持多终端认证系统。
  • 支持加载动态权限菜单,多方式轻松权限控制。
  • 高效率开发,使用代码生成器可以一键生成前后端代码。
  • 提供了一个Oracle版本RuoYi-Vue-Oracle,保持同步更新。
  • 感谢Vue-Element-Admin,eladmin-web。
  • 不分离版本,请移步RuoYi,微服务版本,请移步RuoYi-Cloud
  • Vue White Dashboard


    现场演示:https://demos.creative-tim.com/vue-white-dashboard/?ref=devto

    地址:https://www.creative-tim.com/product/vue-white-dashboard?ref=devto

    Vue White Dashboard 是一个免费的开源Bootstrap 4和Vue.js Admin仪表板,其中包含大量的组件,这些组件可以组合在一起并看起来非常漂亮。Vue White仪表板具有16个以上的独立组件,可让您自由选择和组合。这意味着有成千上万种可能的组合。所有组件的颜色都可能不同,您可以使用SASS文件轻松进行修改。

    Vue QRcode Reader


    现场演示:https://gruhn.github.io/vue-qrcode-reader/?rel=nofollow

    github:https://github.com/gruhn/vue-qrcode-reader?rel=nofollow

    Vue QRcode Reader是一组用于检测和解码QR码的VueJS组件。它使您无需离开浏览器即可检测和解码QR码。所有组件都具有响应能力。除此之外,它接近零样式,因此您可以使它们适合您的布局。使用方法简单明了。

    VueJS Expo



    现场演示:https://vuejsexpo.com/?ref=devto

    VueJS Expo 使用Vue.js框架收集了许多精美的网站,应用程序和实验。如果您是VueJS框架的粉丝,那么这里可能是受到启发的地方。展示包括基于VueJS的主题,元素,仪表板等。

    Vue Paper Dashboard PRO


    现场演示:https://demos.creative-tim.com/bs3/vue-paper-dashboard-pro/#/admin/overview?ref=devto

    地址:https://www.creative-tim.com/product/vue-material-dashboard-pro?ref=devto

    Vue Paper Dashboard PRO 是建立在Bootstrap和Vue之上的漂亮资源。它将帮助您立即开始开发仪表板。Vue Paper Dashboard Pro是 Original Paper Dashboard Pro的VueJS移植版本。使用仪表板非常简单,但是需要具备Javascript,Vue和Vue-Router的基础知识。

    Vue-Color


    现场演示:http://vue-color.surge.sh/?rel=nofollow

    Github:https://github.com/xiaokaike/vue-color?rel=nofollow

    Vue-Color 是来自Sketch,Photoshop,Chrome,Github,Twitter,Material Design等众多酷炫色彩选择器的集合。

    Vue-Koel


    现场演示:https://koel.dev/?rel=nofollow

    Github:https://github.com/koel/koel?rel=nofollow

    Koel 是一种简单的基于Web的个人音频流服务,在客户端用Vue编写,在服务器端用Laravel编写。针对Web开发人员,Koel采用了一些更现代的Web技术-CSS网格,音频和拖放API等来完成其工作。

    Vue Argon Dashboard


    现场演示:https://demos.creative-tim.com/vue-argon-dashboard/?ref=devto

    地址:https://www.creative-tim.com/product/vue-argon-dashboard?ref=devto

    Vue Argon Dashboard 是Bootstrap 4和Vue.js的仪表板。它是开源的,免费的,并且具有许多组件,可以帮助您创建出色的网站。Vue Argon仪表板内置了100多个单独的组件,因此您可以选择和组合。由于实现了所有元素,因此从原型制作到功能齐全的代码,您将节省大量时间。该仪表板附带了预先构建的示例,因此开发过程是无缝的,从我们的页面切换到真实的网站非常容易。

    Pagekit

    现场演示:https://pagekit.com/?rel=nofollow

    github:https://github.com/pagekit/pagekit?rel=nofollow

    Pagekit 是使用Symfony组件和VueJS构建的模块化,轻量级CMS。不管是个人博客还是公司网站,使用Pagekit都可以为Web创建功能强大的内容,使其在每种设备上都能完美运行。它具有干净直观的界面。它也有一个很棒的内置市场。

    Vue Material Dashboard PRO


    现场演示:https://demos.creative-tim.com/vue-material-dashboard-pro/?ref=devto#/dashboard

    地址:https://www.creative-tim.com/product/vue-material-dashboard-pro?ref=devto

    Vue Material Dashboard PRO 是基于Vue Material和VueJS构建的超棒高级管理模板。它是通过考虑您在仪表板中实际需要的东西而创建的。Vue Material Dashboard PRO包含精选和优化的VueJS插件。一切都旨在相互配合。使用仪表板非常简单,但是需要具备Javascript,VueJS和Vue Router的基础知识。

    Vue Material Kit


    现场演示:https://demos.creative-tim.com/vue-material-kit/?ref=devto#/

    地址:https://www.creative-tim.com/product/vue-material-kit?ref=devto

    Vue Material Kit 是基于Vue Material和VueJS构建的惊人的免费开源资源。这将帮助您立即开始开发UI Kit。Vue材料工具包是原始材料工具包的官方VueJS版本。使用UI Kit非常简单,但是需要Javascript,VueJS和Vue Router的基础知识。

    Retrospectify

    现场演示:http://pepf.nl/retrospective/?rel=nofollow

    github :https://www.creative-tim.com/product/vue-material-kit?ref=devto

    Retrospectify 是用Vue编写的出色工具,用于数字化敏捷团队回顾。当与远程团队进行回顾时,或者当您希望随时间跟踪回顾结果时,这将很有用。它具有三种注释类型,您可以在注释周围移动或将点添加到各个注释中。

    Code Notes


    现场演示:https://lauthieb.github.io/code-notes/?rel=nofollow

    github :https://github.com/lauthieb/code-notes?rel=nofollow

    最后

    如果您尚未使用VueJS,则应该知道它在Github上拥有超过164k的星星和88.7k的星星。很多!同样,Vue是一种开源产品,这意味着任何人都可以为它做贡献或从贡献者那里学到新东西。

    我希望这个清单可以在您的下一个开发项目中为您提供帮助

    推荐Vue学习资料文章:

    《如何写出优秀后台管理系统?11个经典模版拿去不谢「干货」》