admin/app/api/model/branch/Activity.php
@@ -26,7 +26,8 @@
     */
    public function getActivityContentAttr($value)
    {
        return htmlspecialchars_decode($value);
        $value = htmlspecialchars_decode($value);
        return html_entity_decode($value, ENT_QUOTES, 'UTF-8');
    }
    /**
@@ -36,6 +37,10 @@
    {
        if (!$model = parent::detail($activity_id)) {
            throw new BaseException(['msg' => '活动不存在']);
        }
        // 检查活动是否已审核通过
        if ($model['audit_status'] != 10) {
            throw new BaseException(['msg' => '活动审核未通过或待审核']);
        }
        $model["reg_num"] = ActivityUserModel::getRegNum($activity_id);
        return $model;
@@ -54,6 +59,7 @@
        $list = $model ->with(['image', 'category'])
            ->where('is_delete', '=', 0)
            ->where('status', '=', 1)
            ->where('audit_status', '=', 10) // 只显示审核通过的活动
            ->order(['sort' => 'asc', 'create_time' => 'desc'])
            ->paginate($params);
        // 检查用户有没有报名
@@ -110,14 +116,24 @@
     */
    public function add($data, $branch_id)
    {
        // 检查走访企业30天限制(编辑时排除当前活动)
        if ($data['is_visit'] == 1) {
            $visitCheck = $this->checkVisitLimit($data['visit_supplier_id'], $data['visit_supplier_name']);
            if ($visitCheck) {
                $this->error = '该企业30天内已被走访,还需等待' . $visitCheck['remaining_days'] . '天才可以重新走访';
                return false;
            }
        }
        $data['app_id'] = self::$app_id;
        $data['branch_id'] = $branch_id;
        //活动时间
        $data['activity_start_time'] = strtotime($data['start_time']);
        $data['activity_end_time'] = strtotime($data['end_time']);
        $data['activity_start_time'] = strtotime($data['activity_start_time']);
        $data['activity_end_time'] = strtotime($data['activity_end_time']);
        //报名时间
        $data['register_start_time'] = time(); // 发布的时间即为报名开始时间(小程序端逻辑)
        $data['register_end_time'] = $data['activity_end_time']; // 活动结束时间即为报名结束时间(小程序端逻辑)
        $data['register_start_time'] = strtotime($data['register_start_time']);
        $data['register_end_time'] = strtotime($data['register_end_time']);
        // 处理emoji表情符号
        $data = $this->filterEmoji($data);
        return $this->save($data);
    }
@@ -127,11 +143,22 @@
    public function edit($data)
    {
        //活动时间
        $data['activity_start_time'] = strtotime($data['start_time']);
        $data['activity_end_time'] = strtotime($data['end_time']);
        $data['activity_start_time'] = strtotime($data['activity_start_time']);
        $data['activity_end_time'] = strtotime($data['activity_end_time']);
        //报名时间
        $data['register_start_time'] = time(); // 发布的时间即为报名开始时间(小程序端逻辑)
        $data['register_end_time'] = $data['activity_end_time']; // 活动结束时间即为报名结束时间(小程序端逻辑)
        $data['register_start_time'] = strtotime($data['register_start_time']);
        $data['register_end_time'] = strtotime($data['register_end_time']);
        // 检查走访企业30天限制(编辑时排除当前活动)
        if ($data['is_visit'] == 1) {
            $visitCheck = $this->checkVisitLimit($data['visit_supplier_id'], $data['visit_supplier_name'], $data['activity_id']);
            if ($visitCheck) {
                $this->error = '该企业30天内已被走访,还需等待' . $visitCheck['remaining_days'] . '天才可以重新走访';
                return false;
            }
        }
        // 处理emoji表情符号
        $data = $this->filterEmoji($data);
        return $this->save($data);
    }
@@ -153,4 +180,43 @@
        return true;
    }
    /**
     * 过滤emoji表情符号,转换为HTML实体
     * @param array $data
     * @return array
     */
    private function filterEmoji($data)
    {
        if (isset($data['content'])) {
            $data['content'] = $this->emojiToHtml($data['content']);
        }
        if (isset($data['name'])) {
            $data['name'] = $this->emojiToHtml($data['name']);
        }
        if (isset($data['describe'])) {
            $data['describe'] = $this->emojiToHtml($data['describe']);
        }
        return $data;
    }
    /**
     * 将emoji表情符号转换为HTML实体
     * @param string $str
     * @return string
     */
    private function emojiToHtml($str)
    {
        if (empty($str)) {
            return $str;
        }
        $str = preg_replace_callback(
            '/[\x{1F600}-\x{1F64F}]|[\x{1F300}-\x{1F5FF}]|[\x{1F680}-\x{1F6FF}]|[\x{2600}-\x{26FF}]|[\x{2700}-\x{27BF}]/u',
            function ($matches) {
                return mb_convert_encoding($matches[0], 'HTML-ENTITIES', 'UTF-8');
            },
            $str
        );
        return $str;
    }
}