CoreShop商城框架开启多租户(2)
上次我们自己添加了一个多租户数据表,结构今天整理数据库发现coreshop已经放置了一个,店铺表格表格结构,SQL代码如下:
CREATE TABLE [dbo].[CoreCmsStore]([id] [int] IDENTITY(1,1) NOT NULL,[storeName] [nvarchar](125) NULL,[mobile] [nvarchar](13) NULL,[linkMan] [nvarchar](32) NULL,[logoImage] [nvarchar](255) NULL,[areaId] [int] NOT NULL,[address] [nvarchar](200) NULL,[coordinate] [nvarchar](50) NULL,[latitude] [nvarchar](40) NULL,[longitude] [nvarchar](40) NULL,[isDefault] [bit] NOT NULL,[createTime] [datetime] NOT NULL,[updateTime] [datetime] NULL,[distance] [decimal](18, 2) NOT NULL,CONSTRAINT [PK__corecms___3213E83F7480ADF3] PRIMARY KEY CLUSTERED
([id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]GOALTER TABLE [dbo].[CoreCmsStore] ADD CONSTRAINT [DF_CoreCmsStore_isDefault] DEFAULT ((0)) FOR [isDefault]
GOALTER TABLE [dbo].[CoreCmsStore] ADD CONSTRAINT [DF_CoreCmsStore_distance] DEFAULT ((0)) FOR [distance]
GOEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'序列' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsStore', @level2type=N'COLUMN',@level2name=N'id'
GOEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'门店名称' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsStore', @level2type=N'COLUMN',@level2name=N'storeName'
GOEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'门店电话/手机号' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsStore', @level2type=N'COLUMN',@level2name=N'mobile'
GOEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'门店联系人' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsStore', @level2type=N'COLUMN',@level2name=N'linkMan'
GOEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'门店logo' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsStore', @level2type=N'COLUMN',@level2name=N'logoImage'
GOEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'门店地区id' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsStore', @level2type=N'COLUMN',@level2name=N'areaId'
GOEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'门店详细地址' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsStore', @level2type=N'COLUMN',@level2name=N'address'
GOEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'坐标位置' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsStore', @level2type=N'COLUMN',@level2name=N'coordinate'
GOEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'纬度' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsStore', @level2type=N'COLUMN',@level2name=N'latitude'
GOEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'经度' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsStore', @level2type=N'COLUMN',@level2name=N'longitude'
GOEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'是否默认' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsStore', @level2type=N'COLUMN',@level2name=N'isDefault'
GOEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsStore', @level2type=N'COLUMN',@level2name=N'createTime'
GOEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'更新时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsStore', @level2type=N'COLUMN',@level2name=N'updateTime'
GOEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'距离' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsStore', @level2type=N'COLUMN',@level2name=N'distance'
GOEXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'门店表' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'CoreCmsStore'
GO
经分析,原作者应该没做了一部分多门店的功能,可能由于某些原因,没有完成。因此我们现在转换思路,在这表张完善门店信息。传入的商品信息表 [CoreCmsGoods](主要是产品的规格等基本信息) 和 [CoreCmsProducts](主要是商品库存信息)。在这两张表里都添加门店ID
[storeId] [int] NULL,
以方便各个门店之间的结算。
即原来添加的 TenantId 字段改为 storeId,还要在用户信息表SysUser中的 TenantId 字段改为 storeId。
做些这些基础操作,我们还要要对产品信息的添加做一个改进。这里我们参照淘宝助手做了一个上传工具,每个店铺都第上千条产品信息,每个在web 输入实在不方便。
一、给每个店铺,添加一个店铺管理员
工作任务:修改一个添加用户界面,添加用户可以选择店铺,超级管理可以给所有店铺添加产品。
1。修改实体类,登录就现错误。
查看错误,原来的修改了列的属生,没有在实类体中同步,现在我们手动改动它。修改CoreCms.Net.Model\Entities\System\SysUser.cs文件中下面几行
/// <summary>/// 修改时间/// </summary>[Display(Name = "修改时间")][SugarColumn(ColumnDescription = "修改时间", IsNullable = true)]public System.DateTime? updateTime { get; set; }/// <summary>/// 租户Id/// </summary>[Display(Name = "店铺Id")]public int ? storeId { get; set; }
修改添后台用户添加原来界面如下:
现要在这个弹出窗口时添加一处选择店铺的下拉列框表框。
根据窗口地址找到文件CoreCms.Net.Web.Admin\wwwroot\views\system\sysuser\create.html 文件,界面代码如下:
<div class="layui-form coreshop-form layui-form-pane" lay-filter="LAY-app-SysUser-createForm" id="LAY-app-SysUser-createForm"><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" lay-reqText="请输入账号" placeholder="请输入账号" /></div></div><div class="layui-form-item"><label for="passWord" class="layui-form-label">密码</label><div class="layui-input-block"><input name="passWord" id="passWord" lay-verType="tips" lay-verify="required|verifypassWord" class="layui-input" lay-reqText="请输入密码" placeholder="请输入密码" /></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" class="layui-input" lay-reqText="请输入昵称" placeholder="请输入昵称" /></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 }}">{{ 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" lay-reqText="请输入手机号" placeholder="请输入手机号" /></div></div><div class="layui-form-item text-right core-hidden"><input type="button" class="layui-btn layui-btn-sm" lay-submit lay-filter="LAY-app-SysUser-createForm-submit" id="LAY-app-SysUser-createForm-submit" value="确认添加"></div>
在输入手机号之下添加一个下拉列表框。
代码如下:
<div class="layui-form-item"><label for="phone" class="layui-form-label">店铺</label><div class="layui-input-inline"><select name="store" lay-verify="required" lay-search><option value="">请选择店铺</option></select></div></div>
打开调试器看一下初始函数 Api/SysUser/GetCreate,找到该函数所在的位置:CoreCms.Net.Web.Admin\Controllers\System\SysUserController.cs 修改GetCreate函数添加店铺信息,以便进行初始化。
// POST: Api/SysUser/GetCreate/// <summary>/// 创建数据/// </summary>/// <returns></returns>[HttpPost][Description("创建数据")]public async Task<AdminUiCallBack> GetCreate(){//返回数据var userSexTypes = EnumHelper.EnumToList<GlobalEnumVars.UserSexTypes>();var roles = await _sysRoleServices.QueryListByClauseAsync(p => p.deleted == false);//获取所有的店铺信息var stores = await _coreCmsStoreServices.QueryListByClauseAsync(p => true); //这一句是添加的var jm = new AdminUiCallBack { code = 0 };jm.data = new { userSexTypes, roles, stores };//添加店铺返回值 return jm;}
这样就可以初始化窗口了。
运行之后界面如下