当前位置: 首页 > news >正文

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.dtcms.com/a/344430.html

相关文章:

  • 循环神经网络实战:GRU 对比 LSTM 的中文情感分析(三)
  • UE5关卡蓝图能不能保存副本呀?
  • Pandas 合并数据集:concat 和 append
  • 2025年城市建设与公共管理国际会议(UCPM 2025)
  • Linux之Ubuntu入门:Vmware中虚拟机中的Ubuntu中的shell命令-常用命令
  • C++实现简易线程池:理解 function 与 bind 的妙用
  • CMake进阶:Ninja环境搭建与加速项目构建
  • JVM-(8)JVM启动的常用命令以及参数
  • 期货Level-2五档订单簿每250毫秒高频数据及分时、日度历史行情深度解析
  • 【大模型采样策略(Greedy、Top-k、Top-p、温度调节)三化学习】
  • 旧物新生,交易无界——探索二手交易小程序系统的绿色革命
  • 优考试局域网系统V6.0.0版
  • 谁才是多快好省的数据分析选择:SelectDB vs. ClickHouse vs. Snowflake
  • 关于常用线程池CompletableFuture和Future的介绍
  • 我从零开始学习C语言(13)- 循环语句 PART2
  • QT-左右侧边栏动画
  • 动态代理保姆级别
  • 大模型微调:从理论到实践的全面指南
  • 数据结构与算法之数组篇leetcode704 - 二分查找
  • kubernetes中pod的管理及优化
  • Spring Boot 自动配置全流程深度解析
  • Linux虚拟机安装FTP
  • 「越短越合法」型滑动窗口
  • Seaborn数据可视化实战:Seaborn基础图表绘制入门
  • 分布式日志分析平台(ELFK 与 EFK)理论
  • 【机器学习深度学习】大模型分布式推理概述:从显存困境到高并发挑战的解决方案
  • 技术干货|使用Prometheus+Grafana监控Tomcat实例详解
  • [特殊字符] TTS格局重塑!B站推出Index-TTS,速度、音质、情感表达全维度领先
  • TTC协议(TTS即ORACLE DATA)协议分析
  • 代码随想录刷题Day40