From a4b3ee325c7354579d495bc74a777e494e5ec38c Mon Sep 17 00:00:00 2001
From: quanwei <419654421@qq.com>
Date: Fri, 06 Feb 2026 18:18:44 +0800
Subject: [PATCH] 商品可以价格面议 选择走访时显示输入走访企业名 分会添加活动时要总会审核 分类添加人数限制,添加活动选择了填写人数限制的分类时活动名额下显示该分类人数限制为15 同一个企业30天内只能走访一次,在30天内走访同一个企业时提示该企业已被走访xx天后才可以从新走访

---
 admin/app/api/model/branch/Activity.php |   68 +++++++++++++++++++++++++++++++++
 1 files changed, 67 insertions(+), 1 deletions(-)

diff --git a/admin/app/api/model/branch/Activity.php b/admin/app/api/model/branch/Activity.php
index d2d5afc..2ecb2e3 100644
--- a/admin/app/api/model/branch/Activity.php
+++ b/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,6 +116,14 @@
      */
     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;
         //活动时间
@@ -118,6 +132,8 @@
         //报名时间
         $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);
     }
 
@@ -132,6 +148,17 @@
         //报名时间
         $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;
+    }
+
 }
\ No newline at end of file

--
Gitblit v1.9.2