/// <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");
        }
Example #2
0
        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, "操作失败,请稍后再试!"));
            }
        }