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

CoreShop商城框架开启多租户(3)

本次任务添加租户用户,
上一次整理发现可以选择多个店铺,每个用户的

一、实体类 SysUser 的storeIds 字段改成这个

  /// <summary>/// 租户Id/// </summary>[Display(Name = "店铺Id")][SugarColumn(ColumnDescription = "店铺ID列表", IsNullable = true)]public System.String   storeIds { get; set; }

数据SysUser 结构 修改如下
在这里插入图片描述
这个列的存储方式类似主 1,3,4 的字串存储。运行程序测试看怎么样
在这里插入图片描述
保存之后看列表,并检测数据库是否已存盘。

2。修改 edit.html

基本上参考 create.html,代码如下:

<script type="text/html" template lay-done="layui.data.sendParams(d);"><div class="layui-form coreshop-form layui-form-pane" lay-filter="LAY-app-SysUser-editForm" id="LAY-app-SysUser-editForm"><input type="hidden" name="id" id="id" value="{{d.params.data.model.id || '' }}" /><div class="layui-form-item"><label for="trueName" class="layui-form-label">角色</label><div class="layui-input-block"><div id="selectBox" class="xm-select-demo"></div></div></div><div class="layui-form-item"><label for="userName" class="layui-form-label">账号</label><div class="layui-input-block"><input name="userName" id="userName" lay-verType="tips" lay-verify="required|verifyuserName" class="layui-input" placeholder="请输入账号" lay-reqText="请输入账号" value="{{d.params.data.model.userName || '' }}" /></div></div><div class="layui-form-item"><label for="nickName" class="layui-form-label">昵称</label><div class="layui-input-block"><input name="nickName" id="nickName" lay-verType="tips" lay-verify="required|verifynickName" lay-verType="tips" class="layui-input" placeholder="请输入昵称" lay-reqText="请输入昵称" value="{{d.params.data.model.nickName || '' }}" /></div></div><div class="layui-form-item"><label for="passWord" class="layui-form-label">密码</label><div class="layui-input-inline" style="width: 100px;"><input name="passWord" id="passWord" lay-verType="tips" class="layui-input" placeholder="请输入密码" lay-reqText="请输入密码" value="" /></div><div class="layui-form-mid layui-word-aux">不修改请留空</div></div><div class="layui-form-item"><label for="sex" class="layui-form-label">性别</label><div class="layui-input-block"><select name="sex" id="sex" lay-verType="tips" lay-verify="required" lay-verType="tips" lay-verify="required|number" lay-reqText="请选择性别"><option value="" selected="selected">请选择</option>{{# layui.each(d.params.data.userSexTypes, function(index, item){ }}<option value="{{ item.value }}" {{ d.params.data.model.sex==item.value ? 'selected="selected"' : '' }}>{{ item.title }}</option>{{# }); }}</select></div></div><div class="layui-form-item"><label for="phone" class="layui-form-label">手机号</label><div class="layui-input-block"><input name="phone" id="phone" lay-verType="tips" lay-verify="required|phone" class="layui-input" placeholder="请输入手机号" lay-reqText="请输入手机号" value="{{d.params.data.model.phone || '' }}" /></div></div><div class="layui-form-item"><label for="phone" class="layui-form-label">店铺</label><div class="layui-input-inline"><div id="selectBox2" class="xm-select-demo"></div></div></div><div class="layui-form-item text-right core-hidden"><input type="button" class="layui-btn" lay-submit lay-filter="LAY-app-SysUser-editForm-submit" id="LAY-app-SysUser-editForm-submit" value="确认编辑"></div></div>
</script>
<script>var debug = layui.setter.debug;layui.data.sendParams = function (d) {//开启调试情况下获取接口赋值数据if (debug) { console.log(d.params.data); }layui.use(['admin', 'form', 'laydate', 'upload', 'coreHelper', 'cropperImg','xmSelect'],function () {var $ = layui.$, form = layui.form, admin = layui.admin, laydate = layui.laydate, upload = layui.upload, cropperImg = layui.cropperImg, xmSelect = layui.xmSelect, coreHelper = layui.coreHelper;var selectBox = xmSelect.render({el: '#selectBox',tips: '请选择角色?',filterable: true,clickClose: true,toolbar: { show: false },name: 'roleIds',//radio: true,prop: {name: 'roleName',value: 'id',},data: d.params.data.roles,initValue: d.params.data.roleIds,})//以下为新增的 选择店铺下框列表框var selectBox2 = xmSelect.render({el: '#selectBox2',tips: '选店铺?',filterable: true,clickClose: true,toolbar: { show: false },name: 'storeIds',//radio: true,prop: {name: 'storeName',value: 'id',},data: d.params.data.stores})//下框列表框 结束form.verify({verifyuserName: [/^[\S]{0,50}$/, '账号最大只允许输入50位字符,且不能出现空格'],verifypassWord: [/^[\S]{0,100}$/, '密码最大只允许输入100位字符,且不能出现空格'],verifynickName: [/^[\S]{0,50}$/, '昵称最大只允许输入50位字符,且不能出现空格'],verifyavatar: [/^[\S]{0,255}$/, '头像最大只允许输入255位字符,且不能出现空格'],verifyphone: [/^[\S]{0,50}$/, '手机号最大只允许输入50位字符,且不能出现空格'],verifyemail: [/^[\S]{0,50}$/, '邮箱最大只允许输入50位字符,且不能出现空格'],verifytrueName: [/^[\S]{0,50}$/, '真实姓名最大只允许输入50位字符,且不能出现空格'],verifyidCard: [/^[\S]{0,50}$/, '身份证号最大只允许输入50位字符,且不能出现空格'],verifyintroduction: [/^[\S]{0,500}$/, '个人简介最大只允许输入500位字符,且不能出现空格'],});//重载formform.render(null, 'LAY-app-SysUser-editForm');})};
</script>

3。修改 Api/SysUser/GetEdit 指向函数返回值 添加上店铺数据。

基本还是参照GetCreate修改,修改之后代码如下:

// POST: Api/SysUser/GetEdit/// <summary>///     编辑数据/// </summary>/// <param name="entity"></param>/// <returns></returns>[HttpPost][Description("编辑数据")]public async Task<AdminUiCallBack> GetEdit([FromBody] FMIntId entity){var jm = new AdminUiCallBack();var model = await _sysUserServices.QueryByIdAsync(entity.id);if (model == null){jm.msg = "不存在此信息";return jm;}var userSexTypes = EnumHelper.EnumToList<GlobalEnumVars.UserSexTypes>();var userRoles = await _sysUserRoleServices.QueryListByClauseAsync(p => p.userId == model.id);var roleIds = userRoles.Select(p => p.roleId).ToList();var roles = await _sysRoleServices.QueryListByClauseAsync(p => p.deleted == false);//获取所有的店铺信息var stores = await _coreCmsStoreServices.QueryListByClauseAsync(p => true); //这一句是添加的jm.code = 0;jm.data = new{model,userSexTypes,roles,roleIds,stores //添加店铺返回值};return jm;}

4。修改edit.Html,显示返回的店铺值

原来的代码有bug。修改之后的代码为:

<script type="text/html" template lay-done="layui.data.sendParams(d);"><div class="layui-form coreshop-form layui-form-pane" lay-filter="LAY-app-SysUser-editForm" id="LAY-app-SysUser-editForm"><input type="hidden" name="id" id="id" value="{{d.params.data.model.id || '' }}" /><div class="layui-form-item"><label for="trueName" class="layui-form-label">角色</label><div class="layui-input-block"><div id="selectBox" class="xm-select-demo"></div></div></div><div class="layui-form-item"><label for="userName" class="layui-form-label">账号</label><div class="layui-input-block"><input name="userName" id="userName" lay-verType="tips" lay-verify="required|verifyuserName" class="layui-input" placeholder="请输入账号" lay-reqText="请输入账号" value="{{d.params.data.model.userName || '' }}" /></div></div><div class="layui-form-item"><label for="nickName" class="layui-form-label">昵称</label><div class="layui-input-block"><input name="nickName" id="nickName" lay-verType="tips" lay-verify="required|verifynickName" lay-verType="tips" class="layui-input" placeholder="请输入昵称" lay-reqText="请输入昵称" value="{{d.params.data.model.nickName || '' }}" /></div></div><div class="layui-form-item"><label for="passWord" class="layui-form-label">密码</label><div class="layui-input-inline" style="width: 100px;"><input name="passWord" id="passWord" lay-verType="tips" class="layui-input" placeholder="请输入密码" lay-reqText="请输入密码" value="" /></div><div class="layui-form-mid layui-word-aux">不修改请留空</div></div><div class="layui-form-item"><label for="sex" class="layui-form-label">性别</label><div class="layui-input-block"><select name="sex" id="sex" lay-verType="tips" lay-verify="required" lay-verType="tips" lay-verify="required|number" lay-reqText="请选择性别"><option value="" selected="selected">请选择</option>{{# layui.each(d.params.data.userSexTypes, function(index, item){ }}<option value="{{ item.value }}" {{ d.params.data.model.sex==item.value ? 'selected="selected"' : '' }}>{{ item.title }}</option>{{# }); }}</select></div></div><div class="layui-form-item"><label for="phone" class="layui-form-label">手机号</label><div class="layui-input-block"><input name="phone" id="phone" lay-verType="tips" lay-verify="required|phone" class="layui-input" placeholder="请输入手机号" lay-reqText="请输入手机号" value="{{d.params.data.model.phone || '' }}" /></div></div><div class="layui-form-item"><label for="phone" class="layui-form-label">店铺</label><div class="layui-input-inline"><div id="selectBox2" class="xm-select-demo"></div></div></div><div class="layui-form-item text-right core-hidden"><input type="button" class="layui-btn" lay-submit lay-filter="LAY-app-SysUser-editForm-submit" id="LAY-app-SysUser-editForm-submit" value="确认编辑"></div></div>
</script>
<script>var debug = layui.setter.debug;layui.data.sendParams = function (d) {//开启调试情况下获取接口赋值数据if (debug) { console.log(d.params.data); }if (debug) { console.log(d.params.data.model.storeIds) }layui.use(['admin', 'form', 'laydate', 'upload', 'coreHelper', 'cropperImg','xmSelect'],function () {var $ = layui.$, form = layui.form, admin = layui.admin, laydate = layui.laydate, upload = layui.upload, cropperImg = layui.cropperImg, xmSelect = layui.xmSelect, coreHelper = layui.coreHelper;var selectBox = xmSelect.render({el: '#selectBox',tips: '请选择角色?',filterable: true,clickClose: true,toolbar: { show: false },name: 'roleIds',//radio: true,prop: {name: 'roleName',value: 'id',},data: d.params.data.roles,initValue: d.params.data.roleIds,})//以下为新增的 选择店铺下框列表框var selectBox2 = xmSelect.render({el: '#selectBox2',name: 'storeIds',prop: { name: 'storeName', value: 'id' },data: d.params.data.stores || [],initValue: Array.isArray(d.params.data.model.storeIds)? d.params.data.model.storeIds: (d.params.data.model.storeIds || "").split(',').map(Number).filter(Boolean)});//下框列表框 结束form.verify({verifyuserName: [/^[\S]{0,50}$/, '账号最大只允许输入50位字符,且不能出现空格'],verifypassWord: [/^[\S]{0,100}$/, '密码最大只允许输入100位字符,且不能出现空格'],verifynickName: [/^[\S]{0,50}$/, '昵称最大只允许输入50位字符,且不能出现空格'],verifyavatar: [/^[\S]{0,255}$/, '头像最大只允许输入255位字符,且不能出现空格'],verifyphone: [/^[\S]{0,50}$/, '手机号最大只允许输入50位字符,且不能出现空格'],verifyemail: [/^[\S]{0,50}$/, '邮箱最大只允许输入50位字符,且不能出现空格'],verifytrueName: [/^[\S]{0,50}$/, '真实姓名最大只允许输入50位字符,且不能出现空格'],verifyidCard: [/^[\S]{0,50}$/, '身份证号最大只允许输入50位字符,且不能出现空格'],verifyintroduction: [/^[\S]{0,500}$/, '个人简介最大只允许输入500位字符,且不能出现空格'],});//重载formform.render(null, 'LAY-app-SysUser-editForm');})};
</script>

修改完成。下一步继续店铺上传产品。

http://www.lryc.cn/news/621337.html

相关文章:

  • PyTorch 2025全解析:从基础到前沿,深度学习框架的技术演进与实战指南
  • ESP32入门开发·通用硬件定时器 (GPTimer)
  • C# 高并发处理方式
  • 算法题Day1
  • torchvision中数据集的使用与DataLoader 小土堆pytorch记录
  • # Vue 列表渲染详解
  • VLMs开发——基于Qwen2.5-VL 实现视觉语言模型在目标检测中的层级结构与实现方法
  • RxJava Android 创建操作符实战:从数据源到Observable
  • 中久数创——笔试题
  • PiscTrace基于YOLO追踪算法的物体速度检测系统详解
  • 2025.8.24复习总结
  • React.memo、useMemo 和 React.PureComponent的区别
  • 基于场景的无人驾驶叉车分类研究:应用场景与技术选型分析
  • springboot myabtis返回list对象集合,对象的一个属性为List对象
  • 飞算 JavaAI 真是 yyds
  • 一周学会Matplotlib3 Python 数据可视化-绘制面积图(Area)
  • [C++] Git 使用教程(从入门到常用操作)
  • TDengine IDMP 基本功能(6. 无问智推)
  • TDengine IDMP 基本功能(7. 智能问数)
  • C++11新特性深度解析
  • 【CF】Day127——杂题 (数论 gcd | 数论 gcd | 博弈论 | 二分图判断 | 贪心 + 暴力 / 二分答案 | 数论 gcd + 动态规划)
  • OSG+Qt —— 笔记1 - Qt窗口加载模型(附源码)
  • Mybatis 源码解读-SqlSession 会话源码和Executor SQL操作执行器源码
  • 《Python函数:从入门到精通,一文掌握函数编程精髓》
  • Transformer网络结构解析
  • 《嵌入式 C 语言编码规范与工程实践个人笔记》参考华为C语言规范标准
  • CNN - 卷积层
  • GaussDB数据库架构师修炼(十六) 如何选择磁盘
  • 《算法导论》第 24 章 - 单源最短路径
  • 20250814 最小生成树总结