CoreShop微信小程序商城框架開啟多租戶-添加一個WPF客戶端以便進行本地操作--讀取店鋪信息(6)

本節內容,使用登錄的token進行店鋪信息讀取,順利的話,進行EXCEL上傳測試。

1。在后臺編寫 讀取店鋪信息代碼

1.1 查看原來鋪店信息在什么位置,店鋪的表格為CoreCmsStore

   #region 獲取列表============================================================// POST: Api/CoreCmsStore/GetPageList/// <summary>///     獲取列表/// </summary>/// <returns></returns>[HttpPost][Description("獲取列表")]public async Task<AdminUiCallBack> GetPageList(){var jm = new AdminUiCallBack();var pageCurrent = Request.Form["page"].FirstOrDefault().ObjectToInt(1);var pageSize = Request.Form["limit"].FirstOrDefault().ObjectToInt(30);var where = PredicateBuilder.True<CoreCmsStore>();//獲取排序字段var orderField = Request.Form["orderField"].FirstOrDefault();Expression<Func<CoreCmsStore, object>> orderEx;switch (orderField){case "id":orderEx = p => p.id;break;case "storeName":orderEx = p => p.storeName;break;case "mobile":orderEx = p => p.mobile;break;case "linkMan":orderEx = p => p.linkMan;break;case "logoImage":orderEx = p => p.logoImage;break;case "areaId":orderEx = p => p.areaId;break;case "address":orderEx = p => p.address;break;case "coordinate":orderEx = p => p.coordinate;break;case "latitude":orderEx = p => p.latitude;break;case "longitude":orderEx = p => p.longitude;break;case "createTime":orderEx = p => p.createTime;break;case "updateTime":orderEx = p => p.updateTime;break;default:orderEx = p => p.isDefault;break;}//設置排序方式var orderDirection = Request.Form["orderDirection"].FirstOrDefault();var orderBy = orderDirection switch{"asc" => OrderByType.Asc,"desc" => OrderByType.Desc,_ => OrderByType.Desc};//查詢篩選//序列 intvar id = Request.Form["id"].FirstOrDefault().ObjectToInt(0);if (id > 0) @where = @where.And(p => p.id == id);//門店名稱 nvarcharvar storeName = Request.Form["storeName"].FirstOrDefault();if (!string.IsNullOrEmpty(storeName)) @where = @where.And(p => p.storeName.Contains(storeName));//門店電話/手機號 nvarcharvar mobile = Request.Form["mobile"].FirstOrDefault();if (!string.IsNullOrEmpty(mobile)) @where = @where.And(p => p.mobile.Contains(mobile));//門店聯系人 nvarcharvar linkMan = Request.Form["linkMan"].FirstOrDefault();if (!string.IsNullOrEmpty(linkMan)) @where = @where.And(p => p.linkMan.Contains(linkMan));//門店logo nvarcharvar logoImage = Request.Form["logoImage"].FirstOrDefault();if (!string.IsNullOrEmpty(logoImage)) @where = @where.And(p => p.logoImage.Contains(logoImage));//門店地區id intvar areaId = Request.Form["areaId"].FirstOrDefault().ObjectToInt(0);if (areaId > 0) @where = @where.And(p => p.areaId == areaId);//門店詳細地址 nvarcharvar address = Request.Form["address"].FirstOrDefault();if (!string.IsNullOrEmpty(address)) @where = @where.And(p => p.address.Contains(address));//坐標位置 nvarcharvar coordinate = Request.Form["coordinate"].FirstOrDefault();if (!string.IsNullOrEmpty(coordinate)) @where = @where.And(p => p.coordinate.Contains(coordinate));//緯度 nvarcharvar latitude = Request.Form["latitude"].FirstOrDefault();if (!string.IsNullOrEmpty(latitude)) @where = @where.And(p => p.latitude.Contains(latitude));//經度 nvarcharvar longitude = Request.Form["longitude"].FirstOrDefault();if (!string.IsNullOrEmpty(longitude)) @where = @where.And(p => p.longitude.Contains(longitude));//創建時間 datetimevar createTime = Request.Form["createTime"].FirstOrDefault();if (!string.IsNullOrEmpty(createTime)){if (createTime.Contains("到")){var dts = createTime.Split("到");var dtStart = dts[0].Trim().ObjectToDate();where = where.And(p => p.createTime > dtStart);var dtEnd = dts[1].Trim().ObjectToDate();where = where.And(p => p.createTime < dtEnd);}else{var dt = createTime.ObjectToDate();where = where.And(p => p.createTime > dt);}}//更新時間 datetimevar updateTime = Request.Form["updateTime"].FirstOrDefault();if (!string.IsNullOrEmpty(updateTime)){if (updateTime.Contains("到")){var dts = updateTime.Split("到");var dtStart = dts[0].Trim().ObjectToDate();where = where.And(p => p.updateTime > dtStart);var dtEnd = dts[1].Trim().ObjectToDate();where = where.And(p => p.updateTime < dtEnd);}else{var dt = updateTime.ObjectToDate();where = where.And(p => p.updateTime > dt);}}//獲取數據var list = await _coreCmsStoreServices.QueryPageAsync(where, orderEx, orderBy, pageCurrent, pageSize);//返回數據jm.data = list;jm.code = 0;jm.count = list.TotalCount;jm.msg = "數據調用成功!";return jm;}#endregion

1.2 測試取得所有店鋪信息 -WPF端的代碼部分

代碼如下:
1.定義所需要分析返回json的類

public class StoreInfo
{public int Id { get; set; }public string StoreName { get; set; }public string Mobile { get; set; }public string LinkMan { get; set; }public string LogoImage { get; set; }public int AreaId { get; set; }public string Address { get; set; }public string Coordinate { get; set; }public string Latitude { get; set; }public string Longitude { get; set; }public bool IsDefault { get; set; }public DateTime CreateTime { get; set; }public DateTime UpdateTime { get; set; }public double Distance { get; set; }public object AllAddress { get; set; }public object DistanceStr { get; set; }// 用于下拉框顯示的內容public override string ToString(){return StoreName;}
}
public class ApiResponse2
{public int Code { get; set; }public string Msg { get; set; }public List<StoreInfo> Data { get; set; }public object OtherData { get; set; }public int Count { get; set; }
}

2。將返回數據顯示到下拉列表框的代碼

    /// <summary>/// 登錄處理/// </summary>/// <returns></returns>private async Task PerformLogin(){var username = txtUseName.Text.Trim();var password = txtPassword.Password;string url = txtWebhost.Text.Trim();if (string.IsNullOrEmpty(url)){System.Windows.MessageBox.Show("請輸入網址", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);return;}Settings.ApiUrl = url; // 設置全局API URL// 創建數據字典Dictionary<string, string> data = new Dictionary<string, string>
{{ "username", username },{ "password", password }
};string loginUrl =  "api/login/getJwtToken";var response = await CoreHelper.PostAsync(loginUrl, data,false);            if (response.Code == HttpStatusCode.OK){             string Content = response.Content;             var result = AnalysisLoginData.Analysis(Content);Properties.Settings.Default[Settings.TokenName] = "Bearer " + result.data.token.token;//過期時間Properties.Settings.Default["TokenExpire"] =DateTime.Now.AddSeconds(result.data.token.expires_in);//截入店鋪信息//Api/CoreCmsStore/GetPageListDictionary<string, string> data2 = new Dictionary<string, string>
{{ "page", "1" },{ "limit", "1000" }
};var dianpuInfo = await CoreHelper.PostAsync("Api/CoreCmsStore/GetPageList", data2,true);if (dianpuInfo.Code == HttpStatusCode.OK){//初始化店鋪顯示InitializeStoreComboBox(dianpuInfo.Content);}}}/// <summary>/// 將返回的json 數據轉換為店鋪列表/// </summary>/// <param name="json"></param>private void InitializeStoreComboBox(string json){try{var response = JsonConvert.DeserializeObject<ApiResponse2>(json);if (response.Code == 0 && response.Data != null){cmbStore.ItemsSource = response.Data;cmbStore.DisplayMemberPath = "StoreName";cmbStore.SelectedValuePath = "Id";// 設置默認選中項 var defaultStore = response.Data.FirstOrDefault(s => s.IsDefault);if (defaultStore != null){cmbStore.SelectedItem = defaultStore;//將數據綁定到下拉列表框}}}catch (Exception ex){System.Windows.MessageBox.Show("初始化店鋪列表失敗:" + ex.Message);}}

1.3 改造上面1.1的代碼,返回的店鋪信息只能是登錄者自己有權限操作的店鋪

1.3.1 建一個新的函數,將放到菜單,以便授權

在CoreCms.Net.Web.Admin\Controllers\Shop\CoreCmsSettingController.cs中添加一個函數

#region 獲取自己的店鋪列表============================================================// POST: Api/CoreCmsStore/GetMyPageList/// <summary>///     獲取列表/// </summary>/// <returns></returns>[HttpPost][Description("獲取列表")][AllowAnonymous]public async Task<AdminUiCallBack> GetMyPageList(){var jm = new AdminUiCallBack();//取得自己的 用戶名}

進入管理后臺 http://localhost:1987/#/system/sysmenu/
在“后臺管理"->"菜單管理”選中店鋪管理的添加按鈕
菜單如下
在這里插入圖片描述

1.3.2 取得當前用戶名

獲取當前用戶名和權限 代碼如下:

  //1。取得自己的 用戶名// 直接獲取用戶名(ClaimTypes.Name即user.userName)string userName = User.Identity?.Name;//2。根據 用戶名查詢店鋪//2.1 如如用戶超級管理 員,則查詢所有店鋪var whereUser = PredicateBuilder.True<CoreCmsUser>();whereUser = whereUser.And(p => p.userName == userName);var UserObject = await _coreCmsUserServices.QueryPageAsync(whereUser, null, 1, 1);if (UserObject == null || UserObject.TotalCount == 0) {jm.code = 0;jm.msg="用戶不存在";return jm;}//2.2 如如用戶不是超級管理員,則查詢自己店鋪int userid = UserObject[0].id;var userRole = await _sysUserRoleServices.QueryPageAsync(p => p.userId == userid && p.roleId ==1);if(userRole == null || userRole.Count ==0 ) //不是管理員{//判斷當前用戶ID 之下是否有店鋪      }

1.3.3 根據用戶信息找到自己的店鋪

關鍵代碼如下:

    //根據用戶信息找到自己的店鋪string storeIDs = UserObject[0].storeIds;if (string.IsNullOrEmpty(storeIDs)){jm.code = 0;jm.msg = "用戶沒有店鋪";return jm;}//取得店鋪ID的列表 string[] storeIds = storeIDs.Split(',');//將上面店鋪ID的列表轉成整型的System.Collections.Generic.List<int> storeIdList = new System.Collections.Generic.List<int>();// List<int>();foreach (string storeId in storeIds){storeIdList.Add(Convert.ToInt32(storeId));}//查詢 店鋪主鍵id在 storeIdList中的值 list = await _coreCmsStoreServices.QueryPageAsync(p => storeIdList.Contains(p.id));

總結上面的全部代碼如下:

 // POST: Api/CoreCmsStore/GetMyPageList/// <summary>///     獲取自己的店鋪列表/// </summary>/// <returns></returns>[HttpPost][Description("獲取自己的店鋪列表")][AllowAnonymous]public async Task<AdminUiCallBack> GetMyPageList(){var jm = new AdminUiCallBack();//1。取得自己的 用戶名// 直接獲取用戶名(ClaimTypes.Name即user.userName)string userName = User.Identity?.Name;//2。根據 用戶名查詢店鋪//2.1 如如用戶超級管理 員,則查詢所有店鋪var UserObject = await _sysUserServices.QueryPageAsync(p => p.userName == userName);if (UserObject == null || UserObject.TotalCount == 0){jm.code = 0;jm.msg="用戶不存在";return jm;}//2.2 如如用戶不是超級管理員,則查詢自己店鋪int userid = UserObject[0].id;var userRole = await _sysUserRoleServices.QueryPageAsync(p => p.userId == userid && p.roleId ==1);IPageList<CoreCmsStore> list;if (userRole == null){jm.code = 0;jm.msg = "讀取用權限 role調用失敗!";return jm;}else if (userRole.Count == 0) //不是管理員{//根據用戶信息找到自己的店鋪string storeIDs = UserObject[0].storeIds;if (string.IsNullOrEmpty(storeIDs)){jm.code = 0;jm.msg = "用戶沒有店鋪";return jm;}//取得店鋪ID的列表 string[] storeIds = storeIDs.Split(',');//將上面店鋪ID的列表轉成整型的System.Collections.Generic.List<int> storeIdList = new System.Collections.Generic.List<int>();// List<int>();foreach (string storeId in storeIds){storeIdList.Add(Convert.ToInt32(storeId));}//查詢 店鋪主鍵id在 storeIdList中的值 list = await _coreCmsStoreServices.QueryPageAsync(p => storeIdList.Contains(p.id));//返回數據jm.data = list;jm.code = 0;jm.count = list.TotalCount;jm.msg = "數據調用成功!";return jm;}else if (userRole.Count > 0) //不是管理員{list = await _coreCmsStoreServices.QueryPageAsync(p => true);jm.data = list;jm.code = 0;jm.count = list.TotalCount;jm.msg = "數據調用成功!";return jm;}else{jm.code = 0;jm.msg = "函數調用失敗!";return jm;}            }

2. WPF客戶端將收到的店鋪信息顯示到界面上

代碼如下:

    /// <summary>/// 登錄處理/// </summary>/// <returns></returns>private async Task PerformLogin(){var username = txtUseName.Text.Trim();var password = txtPassword.Password;string url = txtWebhost.Text.Trim();if (string.IsNullOrEmpty(url)){System.Windows.MessageBox.Show("請輸入網址", "提示", MessageBoxButton.OK, MessageBoxImage.Warning);return;}Settings.ApiUrl = url; // 設置全局API URL// 創建數據字典Dictionary<string, string> data = new Dictionary<string, string>
{{ "username", username },{ "password", password }
};string loginUrl =  "api/login/getJwtToken";var response = await CoreHelper.PostAsync(loginUrl, data,false);            if (response.Code == HttpStatusCode.OK){             string Content = response.Content;             var result = AnalysisLoginData.Analysis(Content);Properties.Settings.Default[Settings.TokenName] = "Bearer " + result.data.token.token;//過期時間Properties.Settings.Default["TokenExpire"] =DateTime.Now.AddSeconds(result.data.token.expires_in);//截入店鋪信息//Api/CoreCmsStore/GetPageListDictionary<string, string> data2 = new Dictionary<string, string>
{{ "page", "1" },{ "limit", "1000" }
};var dianpuInfo = await CoreHelper.PostAsync("Api/CoreCmsStore/GetMyPageList", data2,true);if (dianpuInfo.Code == HttpStatusCode.OK){//初始化店鋪顯示InitializeStoreComboBox(dianpuInfo.Content);}}}/// <summary>/// 將返回的json 數據轉換為店鋪列表/// </summary>/// <param name="json"></param>private void InitializeStoreComboBox(string json){try{var response = JsonConvert.DeserializeObject<ApiResponse2>(json);if (response.Code == 0 && response.Data != null){cmbStore.ItemsSource = response.Data;cmbStore.DisplayMemberPath = "StoreName";cmbStore.SelectedValuePath = "Id";// 設置默認選中項 var defaultStore = response.Data.FirstOrDefault(s => s.IsDefault);if (defaultStore != null){cmbStore.SelectedItem = defaultStore;//將數據綁定到下拉列表框}}}catch (Exception ex){System.Windows.MessageBox.Show("初始化店鋪列表失敗:" + ex.Message);}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/919717.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919717.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919717.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

UE5關卡藍圖能不能保存副本呀?

提問 關卡藍圖能不能保存副本呀&#xff1f; 回答 在 UE 里&#xff0c;“關卡藍圖&#xff08;Level Blueprint&#xff09;”本身其實是不能直接復制/保存成獨立資源的&#xff0c;因為它和具體的 **Level&#xff08;.umap 文件&#xff09;**是綁定的——相當于一個“場景腳…

機器學習數據預處理學習報告

一、學習背景與目的在機器學習流程中&#xff0c;數據預處理是保障模型訓練效果的關鍵環節。原始數據常存在缺失值、量綱不一致、特征格式不匹配等問題&#xff0c;直接影響模型對數據規律的學習。本次學習圍繞 Pandas 與 Scikit-learn&#xff08;sklearn&#xff09;工具庫&a…

git舊倉庫遷移到新倉庫

git舊倉庫遷移到新倉庫 A倉庫(舊倉庫)&#xff1a;git172.16.21.21:xxxx_software/Ni-Handler-Mgr.git B倉庫(新倉庫)&#xff1a;git172.16.11.11:yyyy/hostpc/ni-handler-mgr.git Step1 新建新倉庫 創建新 GitHub 倉庫? 在 GitHub 頁面點擊 “New repository”&#xff0c;命…

YOLO --- YOLOv5模型以及項目詳解

YOLO — YOLOv5模型以及項目詳解 文章目錄YOLO --- YOLOv5模型以及項目詳解一&#xff0c;開源地址二&#xff0c;改進點Focus 模塊三&#xff0c;網絡結構3.1 CSP1_X 與 CSP2_X3.2 自適應Anchor的計算3.3 激活函數3.3.1 SiLU3.3.2 Swish3.4 Bottleneck3.5 C33.5.1 BottleneckC…

Linux文本三劍客的使用及常見重點操作

文本三劍客指 Linux環境下的 grep&#xff08;搜索&#xff09;、sed&#xff08;編輯&#xff09;、awk&#xff08;分析&#xff09;三款用于文本處理的核心命令&#xff0c;三者分工明確、功能互補&#xff0c;是處理日志、配置文件、結構化數據等場景的 “剛需工具”。一、…

??《開源字幕神器VideoCaptioner實戰:基于Whisper+LLM的全鏈路方案,免費平替剪映會員》??

&#x1f4cc; 大家好&#xff0c;我是智界工具庫&#xff0c;每天分享好用實用且智能的開源項目&#xff0c;以及在JAVA語言開發中遇到的問題&#xff0c;如果本篇文章對您有所幫助&#xff0c;請幫我點個小贊小收藏小關注吧&#xff0c;謝謝喲&#xff01;&#x1f618; 博主…

redisIO模型

??1. 總述核心??“Redis采用了??單線程的Reactor模型??來處理網絡IO和命令請求。其核心在于&#xff0c;??它使用一個主線程通過IO多路復用機制來并發地處理大量的客戶端連接&#xff0c;而實際的命令解析和執行則是單線程的??。”這句話非常重要&#xff0c;它直接…

視覺采集模塊的用法

一、圖像源模塊用法采集模塊中最基礎的單元就是圖像源模塊&#xff0c;其中圖像的輸入方式包括相機輸入、本地圖像、SDK三種。添加圖像源后&#xff0c;需要對內部的參數進行對應的配置&#xff0c;正常我們連接相機后圖像源選擇我們對應的連接相機。配置所需要的相機參數&…

Linux下基于Electron的程序ibus輸入法問題

Linux下基于Electron的程序ibus輸入法問題 最近想體驗一下KDE Plasma桌面&#xff0c;遇到一個問題&#xff0c;就是瀏覽器輸入不了中文&#xff0c;Edge、Chrome都一樣&#xff0c;當然它們都是基于Chromium的&#xff0c;出同樣的問題很正常。后面發現Visual Code也有同樣的問…

Ubuntu20系統上離線安裝MongoDB

Ubuntu20系統上離線安裝MongoDB 準備工作&#xff1a;下載安裝包及依賴? 下載MongoDB二進制包? 在聯網環境中訪問MongoDB官網&#xff0c;選擇以下配置&#xff1a; 下載地址&#xff1a;https://www.mongodb.com/try/download/community ?Version?&#xff1a;需與目標系統…

K-Means 聚類算法如何選擇初始點

n_clusters 參數是告訴 K-Means 算法對 整個數據集 (X_scaled) 進行分簇。讓我們分解一下這個過程的邏輯&#xff1a;目標&#xff1a;我們的目標不是要對數據進行分類&#xff0c;而是要從成百上千個數據點中&#xff0c;智能地挑選出大約30個點作為貝葉斯優化的“起點”。這些…

聚銘安全管家平臺2.0實戰解碼 | 安服篇(四):重構威脅追溯體系

在企業安全運營中&#xff0c;兩類問題常常讓團隊陷入被動 1、“看得見威脅&#xff0c;卻追不到源頭” 明明檢測到多臺內網設備遭攻擊&#xff0c;卻遲遲找不到攻擊源頭&#xff0c;更說不清攻擊者用了什么手法&#xff0c;導致無法及時封禁或隔離。 2、“找到了源頭&#xff…

【Microi吾碼】:低代碼加速業務和技術深度融合

目錄 一.低代碼優勢&#xff1a; 1.1低代碼平臺和傳統代碼開發&#xff1a; 1.2低代碼和0代碼平臺&#xff1a; 1.3低代碼平臺&#xff1a;Microi吾碼 二.關于開源低代碼平臺&#xff1a;Microi吾碼 2.1Mircroi吾碼介紹&#xff1a; 2.2產品特點&#xff1a; 2.3產品團…

Mongodb操作指南

一、數據庫操作1. 展示所有非空數據庫show dbs該命令會列出所有包含數據的數據庫。2. 顯示當前數據庫db此命令用于查看當前正在使用的數據庫。3. 切換或創建數據庫use 數據庫名如果指定的數據庫不存在&#xff0c;MongoDB 會在首次插入數據時自動創建它。如果已存在&#xff0c…

線性回歸計算

一、理論&#xff1a;明確線性回歸的核心邏輯模型本質&#xff1a;線性回歸是通過屬性的線性組合實現預測的模型&#xff0c;核心目標是找到最優的直線&#xff08;單變量&#xff09;、平面&#xff08;雙變量&#xff09;或超平面&#xff08;多變量&#xff09;&#xff0c;…

pnpm : 無法加載文件 C:\Program Files\nodejs\pnpm.ps1,因為在此系統上禁止運行腳本。

解決辦法 1、以管理員身份運行window powershell 2、執行Get-ExecutionPolicy&#xff0c;顯示Restricted 3、執行set-ExecutionPolicy&#xff0c;會提示輸入參數&#xff0c;此時輸入RemoteSigned回車 4、執行y回車

[特殊字符] TTS格局重塑!B站推出Index-TTS,速度、音質、情感表達全維度領先

B站維度之言&#xff1a;B 站 2025 新聲計劃&#xff1a;IndexTTS 全維度拆解 ——從開源血統到中文特調的架構復盤1&#xff1a;打破邊界&#xff1a;Index-TTS 的技術動因場景野心&#xff1a;直播實時口播、無障礙字幕、AI 虛擬 UP 主……B 站需要一把“聲音瑞士軍刀”&…

第5.3節:awk數據類型

1 第5.3節&#xff1a;awk數據類型 awk并沒有非常嚴格的數據類型&#xff0c;但在編寫代碼的過程中&#xff0c;大致可以分為以下數據類型&#xff1a; 1.1 數字型 #普通表示法 a 123 b 123.333 #科學表示法 c 1.33e13 d 1.05e-5代碼示例&#xff1a; $ echo |awk { >…

基于coco和kitti數據集訓練YOLOX

原文發表在知乎&#xff0c;辛苦移步&#xff5e;&#xff5e; 《基于coco和kitti數據集訓練YOLOX》 yolox官方的指標數據是在coco數據集上訓練出來的&#xff0c;yolox-s模型在11萬coco數據集上訓練后&#xff0c;mAP(0.5-0.95)40.5。手頭有kitti的數據集&#xff0c;所以在…

聲網AI語音體驗太絲滑,支持隨時打斷提問

我們教培團隊近期測試了一款整合聲網語音引擎的對話式 AI 教學工具&#xff0c;體驗遠超預期。原本以為它僅適用于 1v1 口語練習&#xff0c;沒想到已能支持小班課 —— 實測 3 人課堂中&#xff0c;學生輪流發言、提問、插話&#xff0c;AI 都能緊跟節奏&#xff0c;不打斷討論…