evExpress WinForm擁有180+組件和UI庫,能為Windows Forms平臺創建具有影響力的業務解決方案。DevExpress WinForm能完美構建流暢、美觀且易于使用的應用程序,無論是Office風格的界面,還是分析處理大批量的業務數據,它都能輕松勝任!
注意:目前基于HTML & CSS的控件正在積極研發中,可以作為技術預覽提供,如果需要使用請下載最新版組件體驗哦~
DevExpress WinForms Subscription官方最新版免費下載試用,歷史版本下載,在線文檔和幫助文件下載-慧都網
一組控件和組件允許開發人員構建HTML格式的UI,并使用CSS樣式自定義UI元素的外觀設置、大小、填充和布局選項,不再需要處理自定義繪制事件或更改大量屬性來修改控件以匹配UI規范,可以使用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(深度 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模板和主題框架集合。我不會對此打賭,但是它們也是高質量的資源。
現場演示:https://bootstrap-vue.org/
github:https://github.com/bootstrap-vue/bootstrap-vue
BootstrapVue 擁有85個以上的組件,45個以上的可用插件,多個指令和670+個圖標, 它提供了可用于Vue.js v2.6的Bootstrap v4.5組件和網格系統的最全面的實現之一 ,并具有廣泛的功能和自動 WAI-ARIA 可訪問性標記。
現場演示:https://surmon.me/
Github: https://github.com/surmon-china/surmon.me
使用vue & nuxt 搭建建立的非常有風味獨特的博客網站。
現場演示:https://buefy.org/
Github: https://github.com/buefy/buefy/
Buefy 是基于Bulma框架和設計的Vue.js響應式UI組件的輕量級庫
特征
現場演示:https://vue.ant.design
Github: https://github.com/vueComponent/ant-design-vue
這里是 Ant Design 的 Vue 實現,開發和服務于企業級后臺產品。
特性
現場演示:官網:vuetifyjs.com
Github:https://github.com/vuetifyjs/vuetify
Vuetify 是一個 Vue UI 庫,包含手工制作的精美材料組件。不需要設計技能 - 創建令人驚嘆的應用程序所需的一切都觸手可及。
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。
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
Github:https://github.com/vue-bulma/vue-admin
cd vue-admin
npm install
npm run dev
現場演示: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后臺管理前端功能,提供一套更優的前端解決方案
演示地址:http://vue.ruoyi.vip
文檔地址:http://doc.ruoyi.vip
RuoYi-Vue 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分離權限管理系統
現場演示: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文件輕松進行修改。
現場演示: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碼。所有組件都具有響應能力。除此之外,它接近零樣式,因此您可以使它們適合您的布局。使用方法簡單明了。
現場演示:https://vuejsexpo.com/?ref=devto
VueJS Expo 使用Vue.js框架收集了許多精美的網站,應用程序和實驗。如果您是VueJS框架的粉絲,那么這里可能是受到啟發的地方。展示包括基于VueJS的主題,元素,儀表板等。
現場演示: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的基礎知識。
現場演示: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等眾多酷炫色彩選擇器的集合。
現場演示:https://koel.dev/?rel=nofollow
Github:https://github.com/koel/koel?rel=nofollow
Koel 是一種簡單的基于Web的個人音頻流服務,在客戶端用Vue編寫,在服務器端用Laravel編寫。針對Web開發人員,Koel采用了一些更現代的Web技術-CSS網格,音頻和拖放API等來完成其工作。
現場演示: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多個單獨的組件,因此您可以選擇和組合。由于實現了所有元素,因此從原型制作到功能齊全的代碼,您將節省大量時間。該儀表板附帶了預先構建的示例,因此開發過程是無縫的,從我們的頁面切換到真實的網站非常容易。
現場演示:https://pagekit.com/?rel=nofollow
github:https://github.com/pagekit/pagekit?rel=nofollow
Pagekit 是使用Symfony組件和VueJS構建的模塊化,輕量級CMS。不管是個人博客還是公司網站,使用Pagekit都可以為Web創建功能強大的內容,使其在每種設備上都能完美運行。它具有干凈直觀的界面。它也有一個很棒的內置市場。
現場演示: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的基礎知識。
現場演示: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的基礎知識。
現場演示:http://pepf.nl/retrospective/?rel=nofollow
github :https://www.creative-tim.com/product/vue-material-kit?ref=devto
Retrospectify 是用Vue編寫的出色工具,用于數字化敏捷團隊回顧。當與遠程團隊進行回顧時,或者當您希望隨時間跟蹤回顧結果時,這將很有用。它具有三種注釋類型,您可以在注釋周圍移動或將點添加到各個注釋中。
現場演示:https://lauthieb.github.io/code-notes/?rel=nofollow
github :https://github.com/lauthieb/code-notes?rel=nofollow
如果您尚未使用VueJS,則應該知道它在Github上擁有超過164k的星星和88.7k的星星。很多!同樣,Vue是一種開源產品,這意味著任何人都可以為它做貢獻或從貢獻者那里學到新東西。
我希望這個清單可以在您的下一個開發項目中為您提供幫助
《如何寫出優秀后臺管理系統?11個經典模版拿去不謝「干貨」》
*請認真填寫需求信息,我們會在24小時內與您取得聯系。