/// <summary> /// 封装顶踩控件 /// </summary> /// <param name="htmlHelper"></param> /// <param name="objectId">被顶踩的对象id</param> /// <param name="userId">被顶踩的对象的UserId,用于限制不能顶踩自己</param> /// <param name="tenantTypeId">租户类型id</param> /// <param name="mode">双向操作还是单向操作</param> /// <param name="style">顶踩的样式</param> /// <param name="onSuccessCallBack">js回调函数</param> /// <returns></returns> public static MvcHtmlString SupportOppose(this HtmlHelper htmlHelper, string tenantTypeId, long objectId, long userId, AttitudeMode mode, AttitudeStyle? style = null, string onSuccessCallBack = null) { IUser CurrentUser = UserContext.CurrentUser; AttitudeService attitudeService = new AttitudeService(tenantTypeId); //查询当前登录用户是否顶踩过该对象 bool? isSupport = null; if (CurrentUser != null) { isSupport = attitudeService.IsSupport(objectId, CurrentUser.UserId); } htmlHelper.ViewData["isSupport"] = isSupport; //查询该对象总的顶踩次数 Attitude attitude = attitudeService.Get(objectId); htmlHelper.ViewData["attitude"] = attitude; //向View传递用户设置参数 htmlHelper.ViewData["tenantTypeId"] = tenantTypeId; htmlHelper.ViewData["objectId"] = objectId; htmlHelper.ViewData["userId"] = userId; htmlHelper.ViewData["mode"] = mode; htmlHelper.ViewData["style"] = style; htmlHelper.ViewData["onSuccessCallBack"] = onSuccessCallBack; //顶踩的全局设置 htmlHelper.ViewData["attitudeSettings"] = DIContainer.Resolve<ISettingsManager<AttitudeSettings>>().Get(); return htmlHelper.DisplayForModel("SupportOppose"); }
public JsonResult _SupportOppose(string tenantTypeId, long objectId, long userId, AttitudeMode mode, bool operation) { IUser currentUser = UserContext.CurrentUser; //未登录用户不能操作 if (currentUser == null) { return Json(new StatusMessageData(StatusMessageType.Error, "未登录用户不能操作!")); } //当前用户不能顶踩自己 if (currentUser.UserId == userId) { return Json(new StatusMessageData(StatusMessageType.Error, "不能顶踩自己!")); } AttitudeService attitudeService = new AttitudeService(tenantTypeId, mode); AttitudeSettings attitudeSettings = attitudeSettingsManager.Get(); //操作结果 bool success = false; bool? isSupport = attitudeService.IsSupport(objectId, currentUser.UserId); if (mode == AttitudeMode.Bidirection) { //对于双向操作,已顶踩过的不能再进行同方向操作 if (isSupport.HasValue && isSupport.Value == operation) { return Json(new StatusMessageData(StatusMessageType.Error, "不能进行重复操作!")); } //对于双向操作,如果不可修改,也不可以进行反方向操作 if (!attitudeSettings.IsModify && isSupport.HasValue && isSupport.Value != operation) { return Json(new StatusMessageData(StatusMessageType.Error, "不能修改原有的操作!")); } if (operation) { success = attitudeService.Support(objectId, currentUser.UserId); } else { success = attitudeService.Oppose(objectId, currentUser.UserId); } } else { //对于单向操作,如果已经操作过,并且不可取消,则直接返回错误提示 if (isSupport.HasValue && !attitudeSettings.EnableCancel) { return Json(new StatusMessageData(StatusMessageType.Error, "不能取消原有的操作!")); } if (!isSupport.HasValue || !isSupport.Value) { success = attitudeService.Support(objectId, currentUser.UserId); } else { success = attitudeService.Oppose(objectId, currentUser.UserId); } } //返回操作结果 if (success) { return Json(new StatusMessageData(StatusMessageType.Success, "操作成功!")); } else { return Json(new StatusMessageData(StatusMessageType.Error, "操作失败,请稍后再试!")); } }