在winform中使用Vue頁面支援,自動化部署,開發個人助手
- 效果圖
- 具體代碼下載下傳源碼檢視
-
- 1.下載下傳碼雲上的代碼架構[個人助手 傳送門](https://gitee.com/jpw_code/cef-sharp-file-manager)
- 使用架構
-
- 1.下載下傳碼雲上的代碼架構[傳送門](https://gitee.com/jpw_code/cef-sharp-vue)
- 2.架構注意事項
-
- 2.1使用準備
- 2.2 從頁面調用後端方法
- 2.4 從頁面控制窗體
- 2.5 雙工通訊的使用
- 2.6 注冊鍵盤跟換焦點
- 2.7 其他内容檢視源代碼[傳送門](https://gitee.com/jpw_code/cef-sharp-vue)
-
- 本項目已托管至碼雲,可下載下傳進行檢視具體代碼。 個人助手
-
- 代碼會經常更新,下載下傳碼雲代碼檢視最新程式
效果圖

具體代碼下載下傳源碼檢視
1.下載下傳碼雲上的代碼架構個人助手 傳送門
使用架構
1.下載下傳碼雲上的代碼架構傳送門
2.架構注意事項
2.1使用準備
- 下載下傳項目
https://gitee.com/jpw_code/cef-sharp-vue
- 找到目錄
目錄,使用cmd指令執行CefSharpVue/ui/vue
初始化vue依賴npm install
- 繼續在
目錄執行指令(使用cmd指令執行)CefSharpVue/ui/vue
npm run dev
- 打開visual studio 2019 啟動項目即可檢視結果
2.2 從頁面調用後端方法
- 在vue項目(
目錄)中找到CefSharpVue/ui/vue
添加如下方法api-method.js
const api = {
//用于控制窗體 最大,最小化,關閉和擷取視窗狀态
windowHander:apiReq.windowHander,
//建立login函數,函數使用post方式,送出參數,并擷取背景傳回結果
login: function(data) {
//這裡設定的第三個參數為 請求類型,目的是為了 無縫切換使用http請求模式
return request('/login/login', data, 'POST');
},
}
- 在winform項目(
目錄)中找到CefSharpVue/
目錄,建立CefSharpVue/Project/Controllers
添加如下方法TestController.cs
using System.Collections.Generic;
using CefSharpVue.Core.Attributes;
using CefSharpVue.Core.Utils.Response;
using CefSharpVue.Project.Entitys;
using CefSharpVue.Services;
namespace CefSharpVue.Project.Controllers
{
[Controller]
[RequestMapping("/login")]
public class TestController
{
/// <summary>
/// 測試指定參數指派
/// </summary>
/// <returns></returns>
[RequestMapping("/login", MethodType.POST)]
public BaseResponse GetLogin(string phone, string password)
{
if (phone == "18888888888" && password == "1234567890")
{
Dictionary<string, string> useInfo = new Dictionary<string, string>{{"phone","18888888888"},{"nickName","超級管理者"},{"sex","1"}};
return new BaseResponse("登入成功!", useInfo);
}
return new BaseResponse(StatusCode.Fail, "使用者名或密碼錯誤!",new object[] { phone,password });
}
}
}
- 在vue頁面中調用
this.$api.login({phone: '18888888888', password: '123456' }).then(res => {
console.log("擷取到結果:",res);
});
- 以上内容就完成了一個簡單的業務請求,支援參數自動注入
2.4 從頁面控制窗體
- 窗體拖拽,為頁面元素添加樣式
或者添加style樣式dom-drag
-webkit-app-region: drag;
- 窗體
拖拽,為頁面元素添加樣式不
或者添加style樣式dom-no-drag
-webkit-app-region: no-drag;
- 窗體最大、最小、關閉、還原、擷取狀态等調用
-
- 在vue項目(
目錄)中找到CefSharpVue/ui/vue
在對象api-method.js
中添加如下代碼api
- 在vue項目(
//用于控制窗體 最大,最小化,關閉和擷取視窗狀态(注意上下文之間保留逗号,)
windowHander:apiReq.windowHander,
-
- 使用如下方法進行操作,他們的傳回值都是
對象Promise
- 使用如下方法進行操作,他們的傳回值都是
-
-
- 擷取窗體狀态:
或this.$api.windowHander("getWindowState")
;window.extend.getWindowState()
- 擷取窗體狀态:
-
-
-
- 最小化:
或this.$api.windowHander("minimized")
;window.extend.minimized()
- 最小化:
-
-
-
- 還原:
或this.$api.windowHander("normal")
;window.extend.normal()
- 還原:
-
-
-
- 最大化:
或this.$api.windowHander("maximized")
;window.extend.maximized()
- 最大化:
-
-
-
- 關閉:
或this.$api.windowHander("close")
;window.extend.close()
- 關閉:
-
2.5 雙工通訊的使用
- 在vue頁面中使用
/**
節點代碼
*/
export default {
data() {
return {
socket:null,
}
},
//...
methods: {
//發送消息
sendMsg(msg){
this.socket.send(msg);
},
getMsg(evt){
console.log("擷取到消息",evt);
},
//...
},
created(){
this.socket=window.socket;
this.socket.connection("ws://socket");
this.socket.open = () => {
//socket連接配接成功,觸發事件
alert("連結雙工通信成功!")
}
//socket連接配接成功,擷取後端發送的消息
this.socket.message = (evt) => {
this.getMsg(evt);
alert("接收到後端發過來的消息!" + JSON.stringify(evt));
}
}
}
- 在winform項目(
目錄)中找到CefSharpVue/
目錄,建立`SocketController.cs添加如下方法CefSharpVue/Project/Controllers
using System;
using CefSharpVue.Core.Attributes;
namespace CefSharpVue.Project.Controllers
{
[Controller]
[RequestMapping("/socket")]
[CSharpSocket(url ="socket")]
public class SocketController
{
private static string url;
/// <summary>
/// 建立連接配接
/// </summary>
/// <param name="obj"></param>
[Open]
public static void Open(string _url)
{
url = _url;
}
/// <summary>
/// 接受消息
/// </summary>
/// <param name="obj"></param>
[Message]
public static void Mesage(object obj)
{
//處理消息
Console.WriteLine("socket處理消息");
}
/// <summary>
/// 發送消息
/// </summary>
/// <param name="obj"></param>
[Send]
public static void Send(object obj)
{
VueStart.socket.WsSend(url, obj);
Console.WriteLine("socket發送消息");
}
/// <summary>
/// 主動關閉消息時,觸發前端通知,
/// </summary>
/// <param name="obj"></param>
[Close]
public static void Close(object obj)
{
//關閉
Console.WriteLine("socket關閉");
}
/// <summary>
/// 發生異常關閉時觸發
/// </summary>
/// <param name="obj"></param>
[Error]
public static void Error(object obj)
{
//異常
Console.WriteLine("socket異常");
}
}
}
2.6 注冊鍵盤跟換焦點
- 找到需要跟換焦點的vue頁面
- 為焦點dom添加屬性
序号為數字并且數字需連續focus="序号"
- 在vue頁面中添加如下代碼
/**
節點代碼
*/
export default {
data() {
return {
//...
}
},
//...
//start-鍵盤回車支援
mounted() {
//這裡的`'[focus]'`直接作為 document.querySelectorAll()的參數,查詢需要注冊回車事件的節點
this.$enterFocus('[focus]');
},
updated() {
//這裡的`'[focus]'`直接作為 document.querySelectorAll()的參數,查詢需要注冊回車事件的節點
this.$enterFocus('[focus]');
},
//end-鍵盤回車支援
methods: {
//...
},
created(){
}
}