shihang 6 lat temu
rodzic
commit
b3d277a04c

+ 52 - 7
README.md

@@ -1,14 +1,59 @@
-#切换git库的目录地址
-
-git remote remove origin
-git remote add origin http://code.dashoo.cn/dashoo/labsop_base.git
-git push --set-upstream origin master
+#切换git库的目录地址
 
+	git remote remove origin
+	git remote add origin http://code.dashoo.cn/dashoo/labsop_base.git
+	git push --set-upstream origin master
+	
+	
+--  ------------------------
 
 #fork 出来的子项目,如何更新
 
-git fetch upstream
-git rebase remotes/upstream/master
+	git remote add upstream http://code.dashoo.cn/dashoo/labsop_base.git
+	git fetch upstream
+	git merge upstream/master
+	---- git rebase remotes/upstream/master
+	
+	
+--  ------------------------
 
 
 #系统不同布局、样式的调整,修改说明:
+
+	# Variables.scss
+	
+	$main: #2b3b49;
+	$main-darker: #24313c;
+	// $main: #001529;
+	// $main-darker: #002140;
+
+	$sidebar-width: 10rem;
+	$sidebar-min-width: 2.25rem;
+	// $sidebar-width: 12.5rem; //大港
+	// $sidebar-min-width: 3.5rem;
+
+	# Header.scss
+	
+	padding: 0.5rem;
+	// padding: 0 0;
+	background-color:#2b3b49;
+	// background-color:white;
+
+
+	# Headbar.vue
+	
+	//大港油田标题
+	<imgsrc="../assets/img/标题2.png"style="height:35px;padding-top:5px;"/>
+
+	# Login.vue
+	
+	首页标题
+	<imgsrc="../assets/img/title_dagang2.png"style="height:50px; margin-top: 20px;margin-left: 100px;">
+
+	# Sidebar.vue
+
+	.menudiv {
+	position:absolute;background:#2B3B49;font-size: 13px;z-index: 999;color:#F0F0F0
+	}
+
+-- -----------------------

+ 11 - 4
src/dashoo.cn/backend/api/conf/auth_model.conf

@@ -1,14 +1,21 @@
 [request_definition]
-r = sub, obj, act
+r = sub, dom, obj, act
 
 [policy_definition]
-p = sub, obj, act
+p = sub, dom, obj, act
 
 [role_definition]
-g = _, _
+#角色
+g = _, _, _
+#菜单
+g2 = _, _, _
+#部门
+g3 = _, _, _
+#区域
+g4 = _, _, _
 
 [policy_effect]
 e = some(where (p.eft == allow))
 
 [matchers]
-m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act
+m = g(r.sub, p.sub, r.dom) && g2(r.sub, p.sub, r.dom) && g3(r.sub, p.sub, r.dom) && g4(r.sub, p.sub, r.dom) && r.dom == p.dom && r.obj == p.obj && r.act == p.act

+ 14 - 6
src/dashoo.cn/backend/api/controllers/casbin/role.go

@@ -130,6 +130,7 @@ func (this *RoleController) RoleOperationPowerPost() {
 				_operationid := []byte(operationids[i])[5:]
 				operationid, _ := utils.StrTo(_operationid).Int()
 				//err := svc.GrantRoleRolePermission(roleid, roleid, operationid, userRole.Base_User{Id: uid, Realname: this.User.Realname})
+				utils.RBAC.DeletePermissionForUser("rid_"+roleid, "pid_"+strconv.Itoa(operationid))
 				ret := utils.RBAC.AddPermissionForUser("rid_"+roleid, "pid_"+strconv.Itoa(operationid))
 				if ret == false {
 					beego.Debug("insert error:", ret)
@@ -137,6 +138,7 @@ func (this *RoleController) RoleOperationPowerPost() {
 				}
 			} else {
 				operationid, _ := utils.StrTo(operationids[i]).Int()
+				utils.RBAC.DeletePermissionForUser("rid_"+roleid, "pid_"+strconv.Itoa(operationid))
 				ret := utils.RBAC.AddPermissionForUser("rid_"+roleid, "pid_"+strconv.Itoa(operationid))
 				if ret == false {
 					beego.Debug("insert error:", ret)
@@ -171,14 +173,16 @@ func (this *RoleController) OrganizePost() {
 			if strings.HasPrefix(organizeids[i], "self_") {
 				_organizeids := []byte(organizeids[i])[5:]
 				organizeids, _ := utils.StrTo(_organizeids).Int()
-				ret := utils.RBAC.AddPermissionForUser("rid_"+roleid, "oid_"+strconv.Itoa(organizeids))
+				ret := utils.RBAC.AddNamedGroupingPolicy("g3", "rid_"+roleid, "oid_"+strconv.Itoa(organizeids), utils.DOMAIN)
+				//utils.RBAC.DeletePermissionForUser("rid_"+roleid, "oid_"+strconv.Itoa(organizeids))
+				//ret := utils.RBAC.AddPermissionForUser("rid_"+roleid, "oid_"+strconv.Itoa(organizeids))
 				if ret == false {
 					beego.Debug("insert error:", ret)
 					continue
 				}
 			} else {
 				organizeids, _ := utils.StrTo(organizeids[i]).Int()
-				ret := utils.RBAC.AddPermissionForUser("rid_"+roleid, "oid_"+strconv.Itoa(organizeids))
+				ret := utils.RBAC.AddNamedGroupingPolicy("g3", "rid_"+roleid, "oid_"+strconv.Itoa(organizeids), utils.DOMAIN)
 				if ret == false {
 					beego.Debug("insert error:", ret)
 					continue
@@ -212,14 +216,16 @@ func (this *RoleController) DistrictPost() {
 			if strings.HasPrefix(districtids[i], "self_") {
 				_districtids := []byte(districtids[i])[5:]
 				districtids, _ := utils.StrTo(_districtids).Int()
-				ret := utils.RBAC.AddPermissionForUser("rid_"+roleid, "did_"+strconv.Itoa(districtids))
+				ret := utils.RBAC.AddNamedGroupingPolicy("g4", "rid_"+roleid,"did_"+strconv.Itoa(districtids), utils.DOMAIN)
+				//utils.RBAC.DeletePermissionForUser("rid_"+roleid,"did_"+strconv.Itoa(districtids))
+				//ret := utils.RBAC.AddPermissionForUser("rid_"+roleid, "did_"+strconv.Itoa(districtids))
 				if ret == false {
 					beego.Debug("insert error:", ret)
 					continue
 				}
 			} else {
 				districtids, _ := utils.StrTo(districtids[i]).Int()
-				ret := utils.RBAC.AddPermissionForUser("rid_"+roleid, "did_"+strconv.Itoa(districtids))
+				ret := utils.RBAC.AddNamedGroupingPolicy("g4", "rid_"+roleid,"did_"+strconv.Itoa(districtids), utils.DOMAIN)
 				if ret == false {
 					beego.Debug("insert error:", ret)
 					continue
@@ -279,7 +285,9 @@ func (this *RoleController) RolePowerPost() {
 	if this.GetString("moduleids") != "" {
 		for j := 0; j < len(moduleids); j++ {
 			moduleid := utils.ToStr(moduleids[j])
-			utils.RBAC.AddPermissionForUser("rid_"+roleid, "mid_"+moduleid)
+			//utils.RBAC.DeletePermissionForUser("rid_"+roleid, "mid_"+moduleid)
+			utils.RBAC.AddNamedGroupingPolicy("g2", "rid_"+roleid, "mid_"+moduleid, utils.DOMAIN)
+			//utils.RBAC.AddPermissionForUser("rid_"+roleid, "mid_"+moduleid)
 			//svc.GrantRoleModulePermission(roleid, moduleid, userRole.Base_User{Id: uid, Realname: this.User.Realname})
 		}
 	}
@@ -329,7 +337,7 @@ func (this *RoleController) UserRoleAddUser() {
 		if userids[i] != "0" && userids[i] != "" {
 			//err = svc.AddUserToRole(userid, roleids[i], entity[0])
 			utils.RBAC.DeleteRolesForUser("uid_" + userids[i])
-			utils.RBAC.AddRoleForUser("uid_"+userids[i], "rid_"+roleid)
+			utils.RBAC.AddRoleForUserInDomain("uid_"+userids[i], "rid_"+roleid, utils.DOMAIN)
 		}
 	}
 	if err == nil {

+ 219 - 1
src/dashoo.cn/backend/api/controllers/casbin/user.go

@@ -1,9 +1,11 @@
 package casbin
 
 import (
+	"dashoo.cn/backend/api/business/organize"
 	"dashoo.cn/business2/userRole"
 	"dashoo.cn/business2/permission"
 	"dashoo.cn/backend/api/models"
+	"encoding/json"
 	"strings"
 
 	. "dashoo.cn/backend/api/controllers"
@@ -16,6 +18,22 @@ type UserController struct {
 	BaseController
 }
 
+type UserModel struct {
+	Username       string `json:"username"`
+	Realname       string `json:"realname"`
+	Telephone      string `json:"telephone"`
+	Mobile         string `json:"mobile"`
+	Description    string `json:"description"`
+	Photo          string `json:"photo"`
+	Role           string `json:"role"`
+	Id             int    `json:"id"`
+	ChannelIds     string `json:"channelids"`
+	Password       string `json:"password"`
+	DepartmentId   string `json:"departmentid"`
+	DepartmentName string `json:"departmentname"`
+	Sign           string `json:"sign"`
+}
+
 // @Title get
 // @Description get user by token
 // @Param	uid		path 	string	true		"The key for staticblock"
@@ -48,6 +66,19 @@ func (this *UserController) Get() {
 	this.ServeJSON()
 }
 
+// @Title 获取用户菜单权限
+// @Description 获取用户菜单权限
+// @Success	200	{object} controllers.Request
+// @router /getusermodule [get]
+func (this *UserController) GetUserModule() {
+	//svc := permission.GetPermissionService(utils.DBE)
+	//var model UserModuleModel
+	//model.A1list = svc.GetModuleAllNamesByCode(this.User.Id, "A1")
+	//model.A2list = svc.GetModuleAllNamesByCode(this.User.Id, "A2")
+	//this.Data["json"] = model
+	//this.ServeJSON()
+}
+
 // @Title 获取用户菜单权限
 // @Description 获取用户菜单权限
 // @Success	200	{object} controllers.Request
@@ -118,7 +149,7 @@ func (this *UserController) UserPowerPostRole() {
 	for i := 0; i < len(roleids); i++ {
 		if roleids[i] != "0" && roleids[i] != "" {
 			//err = svc.AddUserToRole(userid, roleids[i], entity[0])
-			utils.RBAC.AddRoleForUserInDomain("uid_"+userid, "rid_"+roleids[i], "lims")
+			utils.RBAC.AddRoleForUserInDomain("uid_"+userid, "rid_"+roleids[i], utils.DOMAIN)
 		}
 	}
 	if err == nil {
@@ -133,3 +164,190 @@ func (this *UserController) UserPowerPostRole() {
 		this.ServeJSON()
 	}
 }
+// @Title 创建用户
+// @Description 创建用户
+// @Param	body	body	business.device.DeviceChannels	"传感器信息"
+// @Success	200	{object} controllers.Request
+// @router / [post]
+func (this *UserController) AddUser() {
+	/*var model UserModel
+	var jsonblob = this.Ctx.Input.RequestBody
+	json.Unmarshal(jsonblob, &model)
+	var errinfo ErrorDataInfo
+	departidint, _ := utils.StrTo(model.DepartmentId).Int()
+	if departidint < 1 {
+		errinfo.Message = "请选择所属组织!"
+		errinfo.Code = -3
+		this.Data["json"] = &errinfo
+		this.ServeJSON()
+		return
+	}
+	//获取组织名称
+	svcorg := organize.GetOrganizeService(utils.DBE)
+	model.DepartmentName = svcorg.GetNameById(model.DepartmentId)
+
+	var userentity userRole.Base_User
+	userentity.Roleid, _ = utils.StrTo(model.Role).Int()
+	if userentity.Roleid == 0 {
+		//userentity.Roleid = 10000123 //普通用户
+	}
+	userentity.Username = model.Username
+	userentity.Realname = model.Realname
+	userentity.Telephone = model.Telephone
+	userentity.Mobile = model.Mobile
+	if model.Sign == "" {
+		userentity.Description = model.Description
+	} else {
+		userentity.Description = model.Sign
+	}
+	userentity.Photo = model.Photo
+
+	currentuser := this.User
+	userentity.Createuserid, _ = utils.StrTo(currentuser.Id).Int()
+	userentity.Createby = currentuser.Realname
+	userentity.AccCode = this.GetAccode()
+
+	userentity.QRCode = utils.GetGuid()
+	userentity.Departmentid = model.DepartmentId
+	userentity.Departmentname = model.DepartmentName
+
+	//salt := utils.GetRandomString(5)
+	//userentity.Userpassword = fmt.Sprintf("%s$%s", salt, utils.EncodePassword("123456", salt))
+	//更改密码算法2014-11-21
+	pwd, key, errrk := utils.TripleDesEncrypt("123456")
+	if errrk != nil {
+		errinfo.Message = "添加失败!" + utils.AlertProcess(errrk.Error())
+		errinfo.Code = -2
+		this.Data["json"] = &errinfo
+		this.ServeJSON()
+		return
+	}
+	userentity.Userpassword = pwd
+	userentity.Publickey = key
+	userentity.Auditstatus = 1
+	userentity.Email = userentity.Username
+	svc := userRole.GetUserService(utils.DBE)
+	err := svc.AddUser(&userentity)
+
+	if err == nil {
+		errinfo.Message = "添加用户成功,初始密码为123456!"
+		errinfo.Code = 0
+		errinfo.Item = userentity.Id
+		this.Data["json"] = &errinfo
+		this.ServeJSON()
+		return
+	} else {
+		errinfo.Message = "添加失败!" + utils.AlertProcess(err.Error())
+		errinfo.Code = -1
+		this.Data["json"] = &errinfo
+		this.ServeJSON()
+		return
+	}*/
+}
+
+// @Title 编辑用户
+// @Description 编辑用户
+// @Param	id	path	string	true		"需要修改的传感器编号"
+// @Param	body	body	business.device.DeviceChannels	"传感器信息"
+// @Success	200	{object} controllers.Request
+// @router /:id [put]
+func (this *UserController) EditUser() {
+	id := this.Ctx.Input.Param(":id")
+	var errinfo ErrorInfo
+	if id == "" {
+		errinfo.Message = "操作失败!请求信息不完整"
+		errinfo.Code = -2
+		this.Data["json"] = &errinfo
+		this.ServeJSON()
+		return
+	}
+	var model UserModel
+	var jsonblob = this.Ctx.Input.RequestBody
+	json.Unmarshal(jsonblob, &model)
+
+	var userentity userRole.Base_User
+	var userentityempty userRole.Base_User
+	svc := userRole.GetUserService(utils.DBE)
+	has := svc.GetEntityById(id, &userentity)
+	if has {
+		//获取组织名称
+		svcorg := organize.GetOrganizeService(utils.DBE)
+		model.DepartmentName = svcorg.GetNameById(model.DepartmentId)
+		//		roleid, _ := utils.StrTo(model.Role).Int()
+		//		if userentity.Roleid != roleid {
+		//			svc.ClearUserRole(id)
+		//			svc.AddUserToRole(id, model.Role, userentity)
+		//		}
+		userentity.Realname = model.Realname
+		userentity.Telephone = model.Telephone
+		userentity.Mobile = model.Mobile
+		if model.Sign == "" {
+			userentity.Description = model.Description
+		} else {
+			userentity.Description = model.Sign
+		}
+		userentity.Photo = model.Photo
+		//		userentity.Roleid = roleid
+		userentity.Modifieduserid, _ = utils.StrTo(this.User.Id).Int()
+		userentity.Modifiedby = this.User.Realname
+		userentity.Departmentid = model.DepartmentId
+		userentity.Departmentname = model.DepartmentName
+
+		var cols []string = []string{"Realname", "DepartmentId", "DepartmentName", "Telephone", "Mobile", "Description", "Photo", "Modifieduserid", "Modifiedby"}
+
+		err := svc.UpdateEntityAndBackupByCols(id, &userentity, &userentityempty, cols, utils.ToStr(this.User.Id), this.User.Realname)
+
+		if err == nil {
+			errinfo.Message = "保存成功!"
+			errinfo.Code = 0
+			this.Data["json"] = &errinfo
+			this.ServeJSON()
+		} else {
+			errinfo.Message = "操作失败!" + utils.AlertProcess(err.Error())
+			errinfo.Code = -1
+			this.Data["json"] = &errinfo
+			this.ServeJSON()
+		}
+	} else {
+		errinfo.Message = "操作失败!操作数据不存在"
+		errinfo.Code = -3
+		this.Data["json"] = &errinfo
+		this.ServeJSON()
+		return
+	}
+
+}
+
+// @Title 删除用户
+// @Description 删除用户
+// @Param	id		path 	string	true		"需要删除的用户编号"
+// @Success 200 {object} ErrorInfo
+// @Failure 403 :id 为空
+// @router /:id [delete]
+func (this *UserController) Delete() {
+	id := this.Ctx.Input.Param(":id")
+	var errinfo ErrorInfo
+	if id == "" {
+		errinfo.Message = "操作失败!请求信息不完整"
+		errinfo.Code = -2
+		this.Data["json"] = &errinfo
+		this.ServeJSON()
+		return
+	}
+	var entity userRole.Base_User
+	var entityempty userRole.Base_User
+	svc := userRole.GetUserService(utils.DBE)
+	err := svc.DeleteEntityAndBackup(id, &entity, &entityempty, utils.ToStr(this.User.Id), this.User.Username)
+	if err == nil {
+		svc.ClearUserRole(id) //清除角色
+		errinfo.Message = "删除成功"
+		errinfo.Code = 0
+		this.Data["json"] = &errinfo
+		this.ServeJSON()
+	} else {
+		errinfo.Message = "删除失败!" + utils.AlertProcess(err.Error())
+		errinfo.Code = -1
+		this.Data["json"] = &errinfo
+		this.ServeJSON()
+	}
+}

+ 18 - 161
src/dashoo.cn/backend/api/routers/router.go

@@ -5,17 +5,12 @@ package routers
 
 import (
 	"dashoo.cn/backend/api/controllers"
-	"dashoo.cn/backend/api/controllers/biobank"
 	"dashoo.cn/backend/api/controllers/casbin"
 	"dashoo.cn/backend/api/controllers/document"
 	"dashoo.cn/backend/api/controllers/equipment"
-	"dashoo.cn/backend/api/controllers/extends"
-	"dashoo.cn/backend/api/controllers/family"
-	"dashoo.cn/backend/api/controllers/flupplan"
 	"dashoo.cn/backend/api/controllers/instrument"
 	"dashoo.cn/backend/api/controllers/logs"
 	"dashoo.cn/backend/api/controllers/material"
-	"dashoo.cn/backend/api/controllers/samplesinfo"
 	"dashoo.cn/backend/api/controllers/setting"
 	"dashoo.cn/backend/api/controllers/system"
 	"dashoo.cn/backend/api/controllers/trigger"
@@ -48,37 +43,34 @@ func init() {
 				&controllers.TokenController{},
 			),
 		),
-		//报表统计
-		beego.NSNamespace("/reports",
+		beego.NSNamespace("/users",
 			beego.NSInclude(
-				&controllers.ReportsController{},
+				&casbin.UserController{},
 			),
 		),
-		//图片,文件上传
-		beego.NSNamespace("/uploads",
+		beego.NSNamespace("/role",
 			beego.NSInclude(
-				&controllers.UploadController{},
+				&casbin.RoleController{},
 			),
 		),
-
-		beego.NSNamespace("/casbin/users",
+		beego.NSNamespace("/permission",
 			beego.NSInclude(
-				&casbin.UserController{},
+				&casbin.PermissionController{},
 			),
 		),
-		beego.NSNamespace("/casbin/role",
+		beego.NSNamespace("/organizes",
 			beego.NSInclude(
-				&casbin.RoleController{},
+				&casbin.OrganizesController{},
 			),
 		),
-		beego.NSNamespace("/casbin/permission",
+		beego.NSNamespace("/module",
 			beego.NSInclude(
-				&casbin.PermissionController{},
+				&casbin.ModuleController{},
 			),
 		),
-		beego.NSNamespace("/casbin/organizes",
+		beego.NSNamespace("/district",
 			beego.NSInclude(
-				&casbin.OrganizesController{},
+				&casbin.DistrictController{},
 			),
 		),
 
@@ -100,7 +92,6 @@ func init() {
 				&system.DataExportsController{},
 			),
 		),
-
 		//数据字典
 		beego.NSNamespace("/items",
 			beego.NSInclude(
@@ -139,7 +130,6 @@ func init() {
 				&setting.ParamSetController{},
 			),
 		),
-
 		//报警设置
 		beego.NSNamespace("/triggers",
 			beego.NSInclude(
@@ -166,7 +156,6 @@ func init() {
 				&trigger.AbnormalsController{},
 			),
 		),
-
 		//设备管理
 		beego.NSNamespace("/equipment",
 			beego.NSInclude(
@@ -183,8 +172,7 @@ func init() {
 				&equipment.EquipmentModelController{},
 			),
 		),
-
-		//物料管理
+		//仓库管理
 		beego.NSNamespace("/material",
 			beego.NSInclude(
 				&material.MaterialController{},
@@ -200,45 +188,18 @@ func init() {
 				&material.MonthReportsController{},
 			),
 		),
-
 		//设备管理
 		beego.NSNamespace("/instrument",
 			beego.NSInclude(
 				&instrument.InstrumentController{},
 			),
 		),
-
 		//文件管理
 		beego.NSNamespace("/document",
 			beego.NSInclude(
 				&document.DocumentController{},
 			),
 		),
-
-		//家系管理
-		beego.NSNamespace("/familyman",
-			beego.NSInclude(
-				&family.FamilymanController{},
-			),
-		),
-		beego.NSNamespace("/familydetail",
-			beego.NSInclude(
-				&family.FamilydetailController{},
-			),
-		),
-
-		//随访管理
-		beego.NSNamespace("/flupplan",
-			beego.NSInclude(
-				&flupplan.FlupplanController{},
-			),
-		),
-		beego.NSNamespace("/willfluprecord",
-			beego.NSInclude(
-				&flupplan.WillfluprecordController{},
-			),
-		),
-
 		//日志管理
 		beego.NSNamespace("/loginlog",
 			beego.NSInclude(
@@ -265,123 +226,19 @@ func init() {
 				&logs.LoginfosController{},
 			),
 		),
-
-		//样本采集
-		beego.NSNamespace("/samplessource",
-			beego.NSInclude(
-				&biobank.SamplesSourceController{},
-			),
-		),
-		//客服服务
-		beego.NSNamespace("/samplescustomor",
-			beego.NSInclude(
-				&biobank.SamplesCustomorController{},
-			),
-		),
-		//协议管理
-		beego.NSNamespace("/samplesprotocol",
-			beego.NSInclude(
-				&biobank.SamplesProtocolController{},
-			),
-		),
-		//样本采集
-		beego.NSNamespace("/samplesbook",
-			beego.NSInclude(
-				&biobank.SamplesBookController{},
-			),
-		),
-		//样本检测
-		beego.NSNamespace("/samplestest",
-			beego.NSInclude(
-				&biobank.SampleTestController{},
-			),
-		),
-		beego.NSNamespace("/samplestest_v",
-			beego.NSInclude(
-				&biobank.SampleTest_vController{},
-			),
-		),
-		//样本采集
-		beego.NSNamespace("/samplesgroup",
+		beego.NSNamespace("/reports",
 			beego.NSInclude(
-				&biobank.SamplesGroupController{},
+				&controllers.ReportsController{},
 			),
 		),
-		//出入库申请
-		beego.NSNamespace("/samplesapply",
+		//图片,文件上传
+		beego.NSNamespace("/uploads",
 			beego.NSInclude(
-				&biobank.SamplesApplyController{},
+				&controllers.UploadController{},
 			),
 		),
 
-		//扩展信息
-		beego.NSNamespace("/extends",
-			beego.NSInclude(
-				&extends.ExtendsController{},
-			),
-		),
-		beego.NSNamespace("/samplenoteitem",
-			beego.NSInclude(
-				&extends.SamplenoteitemController{},
-			),
-		),
-		beego.NSNamespace("/stypenoteitem",
-			beego.NSInclude(
-				&extends.StypenoteitemController{},
-			),
-		),
-		beego.NSNamespace("/samplesite",
-			beego.NSInclude(
-				&extends.SampleSiteController{},
-			),
-		),
 
-		//样本信息
-		beego.NSNamespace("/sampleimporttemplate",
-			beego.NSInclude(
-				&samplesinfo.SampleimporttemplateController{},
-			),
-		),
-		beego.NSNamespace("/sampleoperation",
-			beego.NSInclude(
-				&samplesinfo.SampleOperationController{},
-			),
-		),
-		beego.NSNamespace("/sampleorgan",
-			beego.NSInclude(
-				&samplesinfo.SampleorganController{},
-			),
-		),
-		beego.NSNamespace("/samplesfiles",
-			beego.NSInclude(
-				&samplesinfo.SamplesfilesController{},
-			),
-		),
-		beego.NSNamespace("/samplesinput",
-			beego.NSInclude(
-				&samplesinfo.SamplesinputController{},
-			),
-		),
-		beego.NSNamespace("/samplespreinput",
-			beego.NSInclude(
-				&samplesinfo.SamplespreinputController{},
-			),
-		),
-		beego.NSNamespace("/samplesubpackage",
-			beego.NSInclude(
-				&samplesinfo.SampleSubpackageController{},
-			),
-		),
-		beego.NSNamespace("/samplesunsave",
-			beego.NSInclude(
-				&samplesinfo.SamplesunsaveController{},
-			),
-		),
-		beego.NSNamespace("/sampletype",
-			beego.NSInclude(
-				&samplesinfo.SampleTypeController{},
-			),
-		),
 	)
 	beego.AddNamespace(ns)
 }

+ 1 - 1
src/dashoo.cn/backend/api/swagger/swagger.json

@@ -7139,7 +7139,7 @@
                 }
             }
         },
-        "/casbin/users/me": {
+        "/users/me": {
             "get": {
                 "tags": [
                     "users"

+ 1 - 1
src/dashoo.cn/backend/api/swagger/swagger.yml

@@ -4531,7 +4531,7 @@ paths:
         "200":
           schema:
             $ref: '#/definitions/models.User'
-  /casbin/users/me:
+  /users/me:
     get:
       tags:
       - users

+ 1 - 1
src/dashoo.cn/frontend_web/nuxt.config.ignore.js

@@ -106,7 +106,7 @@ module.exports = {
   ],
   auth: {
     user: {
-     endpoint: 'casbin/users/me',
+     endpoint: 'users/me',
      propertyName: '',
      resetOnFail: true
    },

+ 1 - 1
src/dashoo.cn/frontend_web/nuxt.config.js

@@ -133,7 +133,7 @@ module.exports = {
   ],
   auth: {
     user: {
-      endpoint: 'casbin/users/me',
+      endpoint: 'users/me',
       propertyName: '',
       resetOnFail: true
     },

+ 2 - 2
src/dashoo.cn/frontend_web/src/components/Headbar.vue

@@ -6,12 +6,12 @@
       </router-link>
     </h1> -->
     <div v-if="!isMenuHidden" class="brand" style="background-color:#002140;padding-top:7px;padding-left:20px;width:180px;">
-      <router-link to="/indexlims">
+      <router-link to="/">
         <img src="../assets/img/logo_dagang2.png" style="height:35px;" />
       </router-link>
     </div>
     <div v-if="isMenuHidden" class="brand" style="background-color:#002140;padding-top:7px;padding-left:20px;width:36px;">
-      <router-link to="/indexlims">
+      <router-link to="/">
         <img src="../assets/img/title.png" style="height:35px;" />
       </router-link>
     </div>

+ 1 - 1
src/dashoo.cn/frontend_web/src/components/Headbar1.vue

@@ -6,7 +6,7 @@
       </router-link>
     </h1>
     <!-- <h1 class="brand" style="text-align:center;margin-left:10px;margin-right:1px;margin-top:10px;">
-      <router-link to="/indexlims">
+      <router-link to="/">
         <img src="/img/logo_dagang.png" style="height:26px;">
       </router-link>
     </h1> -->

+ 2 - 2
src/dashoo.cn/frontend_web/src/components/sidebar.vue

@@ -18,7 +18,7 @@
       :collapse="isCollapse"
       class="el-menu-vertical-demo"
       :router="true"
-      default-active="/indexlims"
+      default-active="/"
       background-color="#001529"
       text-color="#fff"
       active-text-color="#1890FF"
@@ -157,7 +157,7 @@ export default class Sidebar extends Vue {
 
   async beforeMount () {
     // 暂时从本地取菜单
-    let {data: menus1} = await this.$axios.get('casbin/users/getusermoduletree')
+    let {data: menus1} = await this.$axios.get('users/getusermoduletree')
     let menus = this.toolfun_gettreejson(menus1, 'id', 'pId', 'id,name,url,icon')
     if (menus[0].id == '30000000') {
       menus = menus[0].children

+ 1 - 1
src/dashoo.cn/frontend_web/src/components/sidebar1.vue

@@ -89,7 +89,7 @@ export default class Sidebar extends Vue {
 
   async beforeMount () {
     // 暂时从本地取菜单
-    let {data: menus1} = await this.$axios.get('casbin/users/getusermoduletree')
+    let {data: menus1} = await this.$axios.get('users/getusermoduletree')
     let menus = this.toolfun_gettreejson(menus1, 'id', 'pId', 'id,name,url,icon')
     if (menus[0].id == '30000000') {
       menus = menus[0].children

+ 187 - 136
src/dashoo.cn/frontend_web/src/pages/login.vue

@@ -1,173 +1,224 @@
 <template>
-<div class="login-body">
-  <section class="login">
-    <header class="login-header">
-      <h1 style="text-align:center;margin-top:70px;margin-bottom:40px;"><router-link to="/"><img src="../assets/img/logo.png" style="height:80px;"></router-link></h1>
-      <el-alert v-if="error" :title="error.title" type="warning" :description="error.message" show-icon/>
-    </header>
-    <el-form class="login-form" auto-complete="off" :model="model" :rules="rules" ref="user" label-position="top">
-      <h2 class="heading">登录</h2>
-      <el-form-item label="用户名" prop="username">
-        <el-input type="text" v-model="model.username" placeholder="请输入用户名" />
-      </el-form-item>
-      <el-form-item label="密码" prop="password">
-        <el-input type="password" v-model="model.password" placeholder="请输入密码"  @keyup.enter.native="login()"/>
-      </el-form-item>
-      <el-button type="primary" :loading="loading" @click="login()">{{ loading ? '登录中...' : '登录' }}</el-button>
-    </el-form>
-    <footer class="login-footer">
-      Copyright © 2018 labsop.
-    </footer>
-  </section>
-</div>
+
+  <div style="height: calc(100vh); width: 100%; background-color:#FFFFFF" >
+    <img src="../assets/img/title_gongfang.png" style="height:50px; margin-top: 20px;margin-left: 100px;"  >
+    <div class="back-width">
+      <div class="login-body">
+        <section class="login">
+          <!--<header class="login-header">
+            <h1 style="text-align:center;margin-top:70px;margin-bottom:40px;"><router-link to="/"><img src="../assets/img/logo.png" style="height:80px;"></router-link></h1>
+            <el-alert v-if="error" :title="error.title" type="warning" :description="error.message" show-icon/>
+          </header>-->
+          <el-form class="login-form" auto-complete="off" :model="model" :rules="rules" ref="user" label-position="top">
+            <h2 class="heading">登录</h2>
+            <el-form-item label="用户名" prop="username">
+              <el-input type="text" v-model="model.username" placeholder="请输入用户名">
+                <el-select v-model="loginMode" slot="append" placeholder="登录类型" style="width: 110px;">
+                  <el-option label="普通账户" :value="1"></el-option>
+                  <el-option label="PTR认证" :value="2"></el-option>
+                </el-select>
+              </el-input>
+            </el-form-item>
+            <el-form-item label="密码" prop="password">
+              <el-input type="password" v-model="model.password" placeholder="请输入密码" @keyup.enter.native="login()" />
+            </el-form-item>
+            <el-button type="primary" :loading="loading" @click="login()">{{ loading ? '登录中...' : '登录' }}</el-button>
+          </el-form>
+
+
+        </section>
+      </div>
+    </div>
+    <div >
+      <footer class="login-footer" style="color:#A9A9A9">
+        ©大港油田信息中心 版权所有
+      </footer>
+    </div>
+  </div>
 </template>
 
 <script>
-import Vue from 'vue'
-import Component from 'class-component'
-@Component({
-  data() {
-    // form model
-    // TODO: remove default values
-    const model = {
-      username: '',
-      password: ''
-    }
+  import Vue from 'vue'
+  import Component from 'class-component'
+  @Component({
+    data() {
+      // form model
+      // TODO: remove default values
+      const model = {
+        username: '',
+        password: ''
+      }
 
-    // form validate rules
-    const rules = {
-      username: [{
-        required: true,
-        message: '请输入用户名'
-      }],
-      password: [{
-        required: true,
-        message: '请输入密码'
-      }]
-    }
+      // form validate rules
+      const rules = {
+        username: [{
+          required: true,
+          message: '请输入用户名'
+        }],
+        password: [{
+          required: true,
+          message: '请输入密码'
+        }]
+      }
 
-    return {
-      model: model,
-      rules: rules,
-      error: null,
-      loading: false
+      return {
+        loginMode: 1,
+        model: model,
+        rules: rules,
+        error: null,
+        loading: false
+      }
     }
-  }
-})
-export default class Login extends Vue {
-  layout () {
-    return 'empty'
-  }
-  login () {
-    this.logging = true
-    this.$refs.user.validate(async (valid) => {
-      try {
-        if (valid) {
-          await this.$store.dispatch('auth/login', {
-            fields: {
-              username: this.model.username.replace(/(^\s*)|(\s*$)/g, ""),
-              password: this.model.password.replace(/(^\s*)|(\s*$)/g, "")
+  })
+  export default class Login extends Vue {
+    layout() {
+      return 'empty'
+    }
+    login() {
+      this.logging = true
+      this.$refs.user.validate(async (valid) => {
+        try {
+          if (valid) {
+            await this.$store.dispatch('auth/login', {
+              fields: {
+                username: this.model.username.replace(/(^\s*)|(\s*$)/g, ""),
+                password: this.model.password.replace(/(^\s*)|(\s*$)/g, "")
               }
-          })
-          if (process.env.appclient == 'lims') {
-            this.$router.push(this.$route.query.page || '/indexlims')
-          } else if (process.env.appclient == 'cellbank') {
-            this.$router.push(this.$route.query.page || '/indexdqm')
-          } else {
-            this.$router.push(this.$route.query.page || '/')
+            })
+            if (process.env.appclient == 'lims') {
+              this.$router.push(this.$route.query.page || '/')
+            } else if (process.env.appclient == 'cellbank') {
+              this.$router.push(this.$route.query.page || '/indexdqm')
+            } else {
+              this.$router.push(this.$route.query.page || '/')
+            }
           }
+        } catch (e) {
+          // this.$message.warning(e.message)
+          this.$message.warning('账号或密码错误')
+        } finally {
+          this.logging = false
         }
-      } catch (e) {
-        // this.$message.warning(e.message)
-        this.$message.warning('账号或密码错误')
-      } finally {
-        this.logging = false
-      }
-    })
-  }
-  logout () {
-    this.$store.dispatch('logout')
+      })
+    }
+    logout() {
+      this.$store.dispatch('logout')
+    }
   }
-}
+
 </script>
 
 <style lang="scss">
-@import '../assets/styles/base/variables';
-.login-body {
-    background: url("../assets/img/login_bg1.jpg") no-repeat 0 0;
+  @import '../assets/styles/base/variables';
+
+  .back-width {
+    background-color: #2F79F6;
+    position: fixed;
+    margin: auto;
+    left: 0;
+    right: 0;
+    top: 70px;
+    width: 100%;
+    height: 550px;
+  }
+
+  .login-body {
+
+    background: url("../assets/img/tian.png") no-repeat left 50%;
     font-family: 'Open Sans', sans-serif;
+    background-color: #2469E8;
     background-size: cover;
+
+    /*background-size: cover;
     -webkit-background-size: cover;
     -moz-background-size: cover;
-    -o-background-size: cover;
-    min-height: 1050px;
-    height: 500px;
-    background-size: cover;
+    -o-background-size: cover;*/
+    /*min-height: 1050px;*/
+
     position: absolute;
+
+    margin: auto;
+    left: -400px;
+    right: 0;
+    bottom: 0;
+    width: 899px;
+    height: 550px;
+    /*
     top: 0;
     right: 0;
     bottom: 0;
-    left: 0;
-}
+    left: 0;*/
+  }
 
-.login {
-    flex: 1;
+  .login-footer {
+    font-size: 10px;
+    clear: both;
+    display: block;
+    text-align: center;
+    margin: 0px auto;
+    position: absolute;
+    bottom: 10px;
     width: 100%;
+
+    a {
+      color: $brand-color;
+    }
+  }
+
+  .login {
+    /*flex: 1;
+    width: 100%;*/
+    position: relative;
     max-width: 22rem;
-    margin: 0 auto;
+    top: 60px;
+    left: 850px;
     font-size: 0.875rem;
+    opacity: 0.9;
 
     &-header {
-        margin-bottom: 1rem;
-
-        .brand {
-            margin: 4.5rem 0 3.5rem;
-            text-align: center;
-            letter-spacing: 0.125rem;
-
-            a {
-                margin: 0;
-                color: $brand-color;
-                font: 300 3rem sans-serif;
-                &:hover {
-                    color: $brand-hover-color;
-                    text-shadow: 0 0 1rem $brand-hover-color;
-                }
-            }
+      margin-bottom: 1rem;
+
+      .brand {
+        margin: 4.5rem 0 3.5rem;
+        text-align: center;
+        letter-spacing: 0.125rem;
+
+        a {
+          margin: 0;
+          color: $brand-color;
+          font: 300 3rem sans-serif;
+
+          &:hover {
+            color: $brand-hover-color;
+            text-shadow: 0 0 1rem $brand-hover-color;
+          }
         }
+      }
     }
 
     &-form {
-        margin-bottom: 2.5rem;
-        padding: 1.875rem 1.25rem;
-        background: $login-form-background;
-        color: $login-form-color;
-
-        .heading {
-            margin: 0 0 1rem;
-            font-weight: 400;
-            font-size: 1.5rem;
-        }
+      margin-bottom: 2.5rem;
+      padding: 1.875rem 1.25rem;
+      background: $login-form-background;
+      color: $login-form-color;
 
-        .el-button {
-            margin-top: 0.5rem;
-            width: 100%;
-        }
+      .heading {
+        margin: 0 0 1rem;
+        font-weight: 400;
+        font-size: 1.5rem;
+      }
+
+      .el-button {
+        margin-top: 0.5rem;
+        width: 100%;
+      }
     }
 
-    &-footer {
-        margin-bottom: 1rem;
-        padding: 0.625rem;
-        // border: 0.0625rem solid $brand-color;
-        font-size: 0.75rem;
-        text-align: center;
 
-        a {
-            color: $brand-color;
-        }
-    }
-}
-.nuxt-progress{
-  display:none;
-}
+  }
+
+  .nuxt-progress {
+    display: none;
+  }
+
 </style>

+ 2 - 2
src/dashoo.cn/frontend_web/src/pages/system/district.vue

@@ -50,11 +50,11 @@
             <el-table-column prop="Fullname" align="center" label="区域名称" show-overflow-tooltip></el-table-column>
             <el-table-column prop="Parentname" align="center" label="上级区域" show-overflow-tooltip></el-table-column>
             <el-table-column prop="Description" align="center" label="备注" show-overflow-tooltip></el-table-column>
-            <el-table-column label="操作时间" align="center" prop="CreateOn">
+            <!-- <el-table-column label="操作时间" align="center" prop="CreateOn">
               <template slot-scope="scope">
                 <p>{{jstimehandle(scope.row.CreateOn)}}</p>
               </template>
-            </el-table-column>
+            </el-table-column> -->
           </el-table>
         </el-col>
       </el-row>

+ 480 - 0
src/dashoo.cn/frontend_web/src/pages/system/module.vue

@@ -0,0 +1,480 @@
+<template>
+<div>
+    <el-card class="box-card" style="height: calc(100vh - 92px);">
+      <div slot="header" style="height: 20px;">
+        <span style="float: left;">
+          <i class="icon icon-table2"></i>
+        </span>
+        <el-breadcrumb class="heading" style="float: left; margin-left: 5px">
+          <el-breadcrumb-item :to="{ path: '/' }">平台首页</el-breadcrumb-item>
+          <el-breadcrumb-item :to="{ path: '/system/module' }">菜单管理</el-breadcrumb-item>
+        </el-breadcrumb>
+        <span style="float: right;">
+          <el-button size="mini" type="primary" style="margin-left:10px; margin-top: -4px;" @click="opendatadialog(1,null,-1);resetForm('moduleform')">新增菜单</el-button>
+        </span>
+        <el-form ref="form" :inline="true" style="float: right; margin-top: -10px">
+          <el-form-item label="菜单名称">
+            <el-input size="mini" style="width: 165px;" v-model="keyword" placeholder="请输入菜单名称"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-dropdown split-button type="primary" size="mini" @click="seachdata" @command="searchCommand">
+              查询
+              <el-dropdown-menu slot="dropdown">
+                <!-- <el-dropdown-item command="search">高级查询</el-dropdown-item> -->
+                <el-dropdown-item command="clear">查询重置</el-dropdown-item>
+              </el-dropdown-menu>
+            </el-dropdown>
+          </el-form-item>
+        </el-form>
+      </div>
+      <el-row :gutter="20">
+        <el-col :span="6">
+          <el-tree highlight-current="true" :expand-on-click-node="true" node-key="id" :data="moduletreelist" :props="orgtreeprops" :default-expanded-keys="userdepartment"
+            @node-click="orgtreeNodeClick" ref="orgmanagetree">
+          </el-tree>
+        </el-col>
+        <el-col :span="18">
+          <el-table :data="tablelist" border>
+            <el-table-column label="操作" width="70" align="center">
+              <template slot-scope="scope">
+                <template v-if="scope.row.Parentid !== 0">
+                  <el-button size="small" type="text" @click="opendatadialog(2,scope.row,scope.$index);resetForm('moduleform')" icon="el-icon-edit"
+                    title="编辑"></el-button>
+                  <el-button size="small" type="text" @click="deletedata(scope.row)" icon="el-icon-delete" title="删除" style="margin-left: 3px"></el-button>
+                  <!--暂时隐藏-->
+                  <el-button v-if="1==2" size="small" type="success" @click="permission(scope.row)">权限</el-button>
+                </template>
+              </template>
+            </el-table-column>
+            <el-table-column prop="Fullname" align="center" label="菜单名称" show-overflow-tooltip></el-table-column>
+            <el-table-column prop="Parentname" align="center" label="上级菜单" show-overflow-tooltip></el-table-column>
+            <el-table-column prop="NavigateUrl" align="center" label="菜单地址" show-overflow-tooltip></el-table-column>
+            <el-table-column prop="ImageIndex" align="center" label="菜单图标" show-overflow-tooltip></el-table-column>
+          </el-table>
+        </el-col>
+      </el-row>
+      <!--分页-->
+      <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage" :page-sizes="[10, 15, 20, 25]"
+        :page-size="size" layout="total, sizes, prev, pager, next, jumper" :total="currentItemCount">
+      </el-pagination>
+    </el-card>
+    <!--新增、编辑组织信息-->
+    <el-dialog :title="dialogtitle" :visible.sync="datadialogVisible" top="5vh">
+      <el-form :model="moduleform" :rules="rulesorganize" ref="moduleform">
+        <el-form-item label="上级菜单" label-width="120px" required>
+          <el-cascader :options="moduletreelist" :props="orgtreeprops" change-on-select :show-all-levels="false" v-model="selectedorg"
+            placeholder="请选择菜单"></el-cascader>
+        </el-form-item>
+        <el-form-item label="菜单名称" prop="fullname" label-width="120px">
+          <el-input v-model="moduleform.fullname" auto-complete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="菜单地址" prop="NavigateUrl" label-width="120px">
+          <el-input v-model="moduleform.NavigateUrl" auto-complete="off"></el-input>
+        </el-form-item>
+        <el-form-item label="菜单图标" prop="ImageIndex" label-width="120px">
+          <el-input v-model="moduleform.ImageIndex" auto-complete="off"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="datadialogVisible = false">取 消</el-button>
+        <el-button type="primary" @click="savedata('moduleform')">确 定</el-button>
+      </div>
+    </el-dialog>
+
+    <el-dialog :title="permissiondialogtitle" :visible.sync="permissiondatadialogVisible" top="5vh">
+      <el-form ref="alertform">
+        <el-form-item>
+          <div style="margin-left:1px;border:1px #CCCCCC solid;overflow:auto;height:300px;">
+            <el-checkbox-group v-model="binddevices">
+              <el-checkbox v-for="item in devices" :label="item.Id" :key="item.Id" style="margin-left:15px;">{{item.Code}}</el-checkbox>
+            </el-checkbox-group>
+          </div>
+          <el-checkbox :indeterminate="isIndeterminate" v-model="checkAll" style="margin-left:15px;">全选</el-checkbox>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer" style="margin-top:-35px;">
+        <el-button @click="permissiondatadialogVisible = false">取 消</el-button>
+        <el-button type="primary" @click="savepermission()">确 定</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+  import {
+    mapGetters
+  } from 'vuex'
+  export default {
+    name: 'organize',
+
+    data() {
+      return {
+        downloading: true,
+        selectedNode: 0,
+        currentItemCount: 0,
+        currentPage: 1,
+        size: 10,
+        tablelist: [], // 处理分页用
+        keyword: '',
+        parentid: '',
+        datadialogVisible: false,
+        dialogtitle: '',
+        moduleform: {
+          parentid: 0,
+          fullname: '',
+          description: '',
+          NavigateUrl:'',
+          ImageIndex:'',
+          id: 0
+        },
+        rulesorganize: {
+          fullname: [{
+            required: true,
+            message: '请输入菜单名称',
+            trigger: 'blur'
+          }]
+        },
+        operatingitem: 0,
+        permissiondialogtitle: '',
+        permissiondatadialogVisible: false,
+        binddevices: [],
+        devices: [],
+        devicesallid: [],
+        isIndeterminate: true,
+        checkAll: false,
+        update: true,
+        childArr: [],
+        parentArr: [],
+        // 级联选项
+        options: [],
+        currentOrgan: '请选择菜单',
+        havechild: false,
+        // 数据传输
+        currId: 0,
+        currOrganName: '',
+        moduletreelist: [],
+        orgtreeprops: {
+          value: 'id',
+          label: 'Fullname',
+          children: 'children'
+        },
+        selectedorg: [],
+        userdepartment: []
+      }
+    },
+
+    created() {
+      // initial data
+      this.initData()
+      this.getmoduletreelist()
+    },
+    updated() {},
+    watch: {},
+    computed: mapGetters({
+      authUser: 'authUser'
+    }),
+    methods: {
+      initData() {
+        let _this = this
+        // paginate
+        let params = {
+          _currentPage: this.currentPage,
+          _size: this.size,
+          keyword: this.keyword,
+          parentid: this.parentid,
+        }
+        // request
+        this.$axios.get('/module/listbandparentname', {
+            params
+          })
+          .then(res => {
+            console.log("======res.data.items1=====",res.data.items)
+            // response
+            _this.tablelist = res.data.items
+            _this.currentItemCount = res.data.currentItemCount
+            _this.downloading = false
+          })
+          .catch(err => {
+            // handle error
+            console.error(err)
+          })
+      },
+      getmoduletreelist() {
+        let _this = this
+        // request
+        _this.$axios.get('/module/list', {
+          })
+          .then(res => {
+            console.log("======res.data.items2=====",res.data.items)
+            _this.moduletreelist = window.toolfun_gettreejson(res.data.items, 'Id', 'Parentid', 'Id,Fullname')
+          })
+          .catch(err => {
+            // handle error
+            console.error(err)
+          })
+      },
+      orgtreeNodeClick(data) {
+        this.parentid = data.id + ''
+        this.currentPage = 1
+        this.initData()
+      },
+      seachdata() {
+        this.currentPage = 1
+        this.initData()
+      },
+      permission(v) {
+        this.binddevices = []
+        this.permissiondialogtitle = '权限设置'
+        this.permissiondatadialogVisible = true
+        this.currId = v.Id
+        this.currOrganName = v.Fullname
+        this.$axios.get('/equipment/bindequipment/' + this.currId, null)
+          .then(res => {
+            // response
+            for (var i = 0; i < res.data.items.length; i++) {
+              this.binddevices.push(res.data.items[i].Id)
+            }
+          })
+          .catch(err => {
+            // handle error
+            console.error(err)
+          })
+      },
+      savepermission() {
+        let _this = this
+        _this.$axios.put('/equipment/permission/' + this.currId, {
+            EquipmentIds: this.binddevices + '',
+            OrganizeName: this.currOrganName
+          })
+          .then(res => {
+            // response
+            if (res.data.code === 0) {
+              _this.$message({
+                type: 'success',
+                message: res.data.message
+              })
+              _this.permissiondatadialogVisible = false
+            } else {
+              _this.$message({
+                type: 'warning',
+                message: res.data.message
+              })
+            }
+          })
+          .catch(() => {})
+      },
+      handleSizeChange(value) {
+        this.size = value
+        this.currentPage = 1
+        this.initData()
+      },
+      handleCurrentChange(value) {
+        this.currentPage = value
+        this.initData()
+      },
+      jstimehandle(val) {
+        val = val.replace('T', ' ')
+        return val.substring(0, 19)
+      },
+      opendatadialog(item, v, index) {
+        this.operatingitem = item
+        this.datadialogVisible = true
+        this.clearorganizeform()
+        let _this = this
+        if (item === 1) {
+          _this.dialogtitle = `新增菜单`
+          if (this.parentid !== '') {
+            this.$axios.get('/module/parentlist/' + this.parentid, {})
+              .then(res => {
+                if (res.data.code === 0) {
+                  // 选中状态
+                  _this.selectedorg = []
+                  let pidarr = res.data.message.split(',')
+                  for (var i = pidarr.length - 1; i >= 0; i--) {
+                    if (pidarr[i] !== '0') {
+                      _this.selectedorg.push(parseInt(pidarr[i]))
+                    }
+                  }
+                } else {
+                  _this.$message({
+                    type: 'warning',
+                    message: '出现错误!'
+                  })
+                  this.datadialogVisible = false
+                }
+              })
+              .catch(err => {
+                // handle error
+                console.error(err)
+              })
+          }
+        } else if (item === 2) {
+          this.$axios.get('/module/parentlist/' + v.Parentid, {})
+            .then(res => {
+              if (res.data.code === 0) {
+                _this.dialogtitle = `编辑菜单信息(${v.Fullname})`
+                _this.moduleform.parentid = v.Parentid
+                _this.moduleform.fullname = v.Fullname
+                _this.moduleform.description = v.Description
+                _this.moduleform.id = v.Id
+                _this.moduleform.NavigateUrl = v.NavigateUrl
+                _this.moduleform.ImageIndex =v.ImageIndex
+                _this.selectedorg.push(parseInt(v.Parentid))
+              } else {
+                _this.$message({
+                  type: 'warning',
+                  message: '出现错误!'
+                })
+                this.datadialogVisible = false
+              }
+            })
+            .catch(err => {
+              // handle error
+              console.error(err)
+            })
+        }
+      },
+      savedata(formName) {
+        let _this = this
+        this.$refs[formName].validate((valid) => {
+          if (valid) {
+            _this.moduleform.parentid = parseInt(_this.selectedorg[_this.selectedorg.length - 1])
+            if (_this.moduleform.parentid === 0) {
+              _this.$message({
+                type: 'warning',
+                message: '请选择上一级组织!'
+              })
+              return
+            }
+            if (_this.moduleform.parentid === _this.moduleform.id) {
+              _this.$message({
+                type: 'warning',
+                message: '上一级组织不能为自身数据!'
+              })
+              return
+            }
+            if (_this.operatingitem === 1) {
+              _this.$axios.post('module/', _this.moduleform)
+                .then(res => {
+                  // response
+                  if (res.data.code === 0) {
+                    _this.$message({
+                      type: 'success',
+                      message: res.data.message
+                    })
+                    _this.datadialogVisible = false
+                    this.initData()
+                    // 重新加载tree数据
+                    _this.getmoduletreelist()
+                  } else {
+                    _this.$message({
+                      type: 'warning',
+                      message: res.data.message
+                    })
+                  }
+                })
+                .catch(err => {
+                  // handle error
+                  console.error(err)
+                })
+            } else if (_this.operatingitem === 2) {
+              _this.$axios.put('module/' + _this.moduleform.id, _this.moduleform)
+                .then(res => {
+                  // response
+                  if (res.data.code === 0) {
+                    _this.$message({
+                      type: 'success',
+                      message: res.data.message
+                    })
+                    _this.datadialogVisible = false
+                    // 更新界面
+                    _this.initData()
+                    // 重新加载tree数据
+                    _this.getmoduletreelist()
+                  } else {
+                    _this.$message({
+                      type: 'warning',
+                      message: res.data.message
+                    })
+                  }
+                })
+                .catch(() => {})
+            }
+          } else {
+            return false
+          }
+        })
+      },
+      deletedata(val) {
+        let _this = this
+        _this.$confirm('此操作将永久删除该数据, 是否继续?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          _this.$axios.delete('module/' + val.Id, null)
+            .then(res => {
+              // response
+              if (res.data.code === 0) {
+                _this.$message({
+                  type: 'success',
+                  message: res.data.message
+                })
+                // 更新界面
+                _this.initData()
+                // 重新加载tree数据
+                _this.getmoduletreelist()
+              } else {
+                _this.$message({
+                  type: 'warning',
+                  message: res.data.message
+                })
+              }
+            })
+            .catch(() => {})
+        }).catch(() => {})
+      },
+      resetForm(formName) {
+        //this.$refs[formName].resetFields()
+      },
+      clearorganizeform() {
+        this.moduleform = {
+          parentid: 0,
+          fullname: '',
+          description: '',
+          NavigateUrl:'',
+          ImageIndex:'',
+          id: 0
+        }
+      },
+      searchCommand(command) {
+        if (command == 'clear') {
+          this.clearSearch()
+        }
+      },
+      clearSearch() {
+        this.keyword = ''
+        this.initData()
+      }
+    }
+  }
+
+</script>
+
+<style lang="scss">
+  .el-pagination {
+    margin: 1rem 0 2rem;
+    text-align: right;
+  }
+
+  .triggerone {
+    font-size: 13px;
+    margin-left: 80px;
+  }
+
+  .plab {
+    font-size: 13px;
+    color: #999;
+  }
+
+</style>

+ 7 - 7
src/dashoo.cn/frontend_web/src/pages/system/organize.vue

@@ -187,7 +187,7 @@
           IsInnerOrganize: this.organizeform.IsInnerOrganize
         }
         // request
-        this.$axios.get('casbin/organizes/listbandparentname', {
+        this.$axios.get('organizes/listbandparentname', {
             params
           })
           .then(res => {
@@ -215,7 +215,7 @@
         let params = {
           IsInnerOrganize: this.organizeform.IsInnerOrganize
         }
-        _this.$axios.get('casbin/organizes/list', {
+        _this.$axios.get('organizes/list', {
             params
           })
           .then(res => {
@@ -296,7 +296,7 @@
         let _this = this
         if (item === 1) {
           if (this.parentid !== '') {
-            this.$axios.get('casbin/organizes/parentlist/' + this.parentid, {})
+            this.$axios.get('organizes/parentlist/' + this.parentid, {})
               .then(res => {
                 if (res.data.code === 0) {
                   _this.dialogtitle = `新增组织`
@@ -322,7 +322,7 @@
               })
           }
         } else if (item === 2) {
-          this.$axios.get('casbin/organizes/parentlist/' + v.Parentid, {})
+          this.$axios.get('organizes/parentlist/' + v.Parentid, {})
             .then(res => {
               if (res.data.code === 0) {
                 _this.dialogtitle = `编辑组织信息(${v.Fullname})`
@@ -373,7 +373,7 @@
             }
             if (_this.operatingitem === 1) {
               _this.organizeform.IsInnerOrganize = 1
-              _this.$axios.post('casbin/organizes/', _this.organizeform)
+              _this.$axios.post('organizes/', _this.organizeform)
                 .then(res => {
                   // response
                   if (res.data.code === 0) {
@@ -398,7 +398,7 @@
                 })
             } else if (_this.operatingitem === 2) {
               _this.organizeform.IsInnerOrganize = 1
-              _this.$axios.put('casbin/organizes/' + _this.organizeform.id, _this.organizeform)
+              _this.$axios.put('organizes/' + _this.organizeform.id, _this.organizeform)
                 .then(res => {
                   // response
                   if (res.data.code === 0) {
@@ -432,7 +432,7 @@
           cancelButtonText: '取消',
           type: 'warning'
         }).then(() => {
-          _this.$axios.delete('casbin/organizes/' + val.Id, null)
+          _this.$axios.delete('organizes/' + val.Id, null)
             .then(res => {
               // response
               if (res.data.code === 0) {

+ 16 - 16
src/dashoo.cn/frontend_web/src/pages/system/userrole.vue

@@ -292,7 +292,7 @@
         // paginate
         const params = { _currentPage: this.currentPage, _size: this.size, keyword: this.searchform.name }
         // request
-        this.$axios.get('casbin/role/list', { params })
+        this.$axios.get('role/list', { params })
           .then(res => {
             // response
             _this.list = res.data.items
@@ -307,7 +307,7 @@
       },
        getpartuserlist() {
          let _this =this
-        this.$axios.get('casbin/users/list', {})
+        this.$axios.get('users/list', {})
           .then(res => {
             // response
             _this.partuserlist = res.data.items
@@ -364,7 +364,7 @@
         let useridlist = tempOfficers.join(',');
         let useridliststring = useridlist.toString()
         // request
-        this.$axios.put('casbin/role/setuserrole/' + useridliststring + '_' + this.selectRoleId, {})
+        this.$axios.put('role/setuserrole/' + useridliststring + '_' + this.selectRoleId, {})
           .then(res => {
             // response
             if (res.data.code === 0) {
@@ -396,7 +396,7 @@
           _size: this.userSize
         }
         // request
-        this.$axios.get('/casbin/role/getusersforrole/'+rid, {
+        this.$axios.get('role/getusersforrole/'+rid, {
           params
         })
           .then(res => {
@@ -437,7 +437,7 @@
       setpower(val) {
         let _this = this
         _this.operationid = val.Id
-        _this.$axios.get('/casbin/role/getpower?id=' + _this.operationid, null)
+        _this.$axios.get('role/getpower?id=' + _this.operationid, null)
           .then(res => {
             // response
             _this.modulepowerdata = window.toolfun_gettreejson(res.data.Module, 'id', 'pId', 'id,name')
@@ -470,7 +470,7 @@
         console.log(val)
         let _this = this
         _this.operationid = val.Id
-        _this.$axios.get('/casbin/role/getItemPower?id=' + _this.operationid, null)
+        _this.$axios.get('role/getItemPower?id=' + _this.operationid, null)
           .then(res => {
             console.log(res.data)
             // response
@@ -491,7 +491,7 @@
         console.log(val)
         let _this = this
         _this.operationid = val.Id
-        _this.$axios.get('/casbin/role/getItemPower?id=' + _this.operationid, null)
+        _this.$axios.get('role/getItemPower?id=' + _this.operationid, null)
           .then(res => {
             console.log(res.data)
             // response
@@ -518,7 +518,7 @@
           cancelButtonText: '取消',
           type: 'warning'
         }).then(() => {
-          _this.$axios.delete('/casbin/role/deleteuser/'+val.Id+ '_' +this.selectRoleId, null)
+          _this.$axios.delete('role/deleteuser/'+val.Id+ '_' +this.selectRoleId, null)
             .then(res => {
               // response
               if (res.data.code === 0) {
@@ -546,7 +546,7 @@
           cancelButtonText: '取消',
           type: 'warning'
         }).then(() => {
-          _this.$axios.delete('/casbin/role/deletealluser/'+this.selectRoleId + '', null)
+          _this.$axios.delete('role/deletealluser/'+this.selectRoleId + '', null)
             .then(res => {
               // response
               if (res.data.code === 0) {
@@ -573,7 +573,7 @@
           cancelButtonText: '取消',
           type: 'warning'
         }).then(() => {
-          _this.$axios.delete('/casbin/role/deleterole/'+val.Id + '', null)
+          _this.$axios.delete('role/deleterole/'+val.Id + '', null)
             .then(res => {
               // response
               if (res.data.code === 0) {
@@ -653,7 +653,7 @@
           orgids.push(row.id)
         })
         let _this = this
-        _this.$axios.put('/casbin/role/savepower?id=' + _this.operationid + '&moduleids=' + orgids, {})
+        _this.$axios.put('role/savepower?id=' + _this.operationid + '&moduleids=' + orgids, {})
           .then(res => {
             // response
             if (res.data.code === 0) {
@@ -681,7 +681,7 @@
           organizeids.push(row.id)
         })
         // request
-        this.$axios.put('casbin/role/savedepartmentmessageview?id=' + this.selectedroleid + '&organizeids=' + organizeids, {})
+        this.$axios.put('role/savedepartmentmessageview?id=' + this.selectedroleid + '&organizeids=' + organizeids, {})
           .then(res => {
             // response
             if (res.data.code === 0) {
@@ -709,7 +709,7 @@
         this.selectedroleid = val.Id
         let _this = this
         // request
-        this.$axios.get('/casbin/role/getdepartment?id=' + this.selectedroleid, {})
+        this.$axios.get('role/getdepartment?id=' + this.selectedroleid, {})
           .then(res => {
            // response
             _this.operationOrganizeData = window.toolfun_gettreejson(res.data.Organize, 'id', 'pId', 'id,name,scope')
@@ -731,7 +731,7 @@
         this.selectedroleid = val.Id
         let _this = this
         // request
-        this.$axios.get('/casbin/role/getdistrict?id=' + this.selectedroleid, {})
+        this.$axios.get('role/getdistrict?id=' + this.selectedroleid, {})
           .then(res => {
            // response
             _this.operationdistrictData = window.toolfun_gettreejson(res.data.District, 'id', 'pId', 'id,name,scope')
@@ -756,7 +756,7 @@
           districtids.push(row.id)
         })
         // request
-        this.$axios.put('casbin/role/savedistrict?id=' + this.selectedroleid + '&districtids=' + districtids, {})
+        this.$axios.put('role/savedistrict?id=' + this.selectedroleid + '&districtids=' + districtids, {})
           .then(res => {
             // response
             if (res.data.code === 0) {
@@ -794,7 +794,7 @@
           orgids.push(row.id)
         })
         let _this = this
-        _this.$axios.put('/casbin/role/saveOperationPower?id=' + this.operationid + '&operids=' + orgids, {})
+        _this.$axios.put('role/saveOperationPower?id=' + this.operationid + '&operids=' + orgids, {})
           .then(res => {
             // response
             if (res.data.code === 0) {

+ 5 - 5
src/dashoo.cn/frontend_web/src/pages/system/users.vue

@@ -45,7 +45,7 @@
           <el-table-column prop="Username" align="center" label="账号" show-overflow-tooltip></el-table-column>
           <el-table-column prop="Realname" align="center" label="用户名"></el-table-column>
           <el-table-column prop="Departmentname" align="center" label="所属组织"></el-table-column>
-          <el-table-column prop="RealnameRole" align="center" label="角色"></el-table-column>
+          <!-- <el-table-column prop="RealnameRole" align="center" label="角色"></el-table-column> -->
           <el-table-column prop="Telephone" align="center" label="手机" show-overflow-tooltip></el-table-column>
           <el-table-column label="座机" align="center" prop="Mobile" show-overflow-tooltip></el-table-column>
           <el-table-column v-if="this.appclient != 'lims'" prop="Description" align="center" label="备注"
@@ -265,7 +265,7 @@
           keyword: this.keyword
         }
         // request
-        this.$axios.get('casbin/users/list', {
+        this.$axios.get('users/list', {
             params
           })
           .then(res => {
@@ -277,7 +277,7 @@
             // handle error
             console.error(err)
           })
-        this.$axios.get('casbin/role/list', {})
+        this.$axios.get('role/list', {})
           .then(res => {
             // response
             _this.rolelist = res.data.items
@@ -316,7 +316,7 @@
         this.selectedrole = []
         let _this = this
         // request
-        this.$axios.get('casbin/users/getuserrole/' + this.selecteduserid, {})
+        this.$axios.get('casb/users/getuserrole/' + this.selecteduserid, {})
           .then(res => {
             _this.mustrolelist = []
             // response
@@ -357,7 +357,7 @@
         }
         let rolestring = this.selectedrole.join(',')
         // request
-        this.$axios.put('casbin/users/setuserrole/' + this.selecteduserid + '_' + rolestring, {})
+        this.$axios.put('users/setuserrole/' + this.selecteduserid + '_' + rolestring, {})
           .then(res => {
             // response
             if (res.data.code === 0) {