本節內容,使用登錄的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);}}