WIN-2308041133\Administrator пре 3 недеља
родитељ
комит
19cb1dc659
3 измењених фајлова са 299 додато и 0 уклоњено
  1. 74 0
      app/model/api/UserHonor.php
  2. 194 0
      app/system/controller/Honor.php
  3. 31 0
      app/system/route/honor.php

+ 74 - 0
app/model/api/UserHonor.php

@@ -0,0 +1,74 @@
+<?php
+declare (strict_types = 1);
+
+namespace app\model\api;
+
+use think\Model;
+
+/**
+ * 用户荣誉定义表模型
+ * @mixin \think\Model
+ */
+class UserHonor extends Model
+{
+    /**
+     * 获取荣誉列表
+     * @param array $post
+     * @param string $field
+     * @return array
+     */
+    public function getList($post, $field = "*")
+    {
+        $post["pageSize"] = $post["pageSize"] > 50 ? 50 : (int)$post["pageSize"];
+        $post["page"]     = $post["page"] <= 0 ? 1 : (int)$post["page"];
+        $where = [];
+        if (isset($post["status"]) && in_array((string)$post["status"], ["0", "1"])) {
+            $where[] = ["status", "=", (int)$post["status"]];
+        }
+        if (!empty($post["name"])) {
+            $where[] = ["name", "like", "%{$post["name"]}%"];
+        }
+        $totalCount = $this->where($where)->count();
+        $data = null;
+        if ($totalCount > 0) {
+            $data = $this
+                ->field($field)
+                ->where($where)
+                ->order("sort", "desc")
+                ->order("id", "desc")
+                ->page($post["page"], $post["pageSize"])
+                ->select();
+            if (!empty($data)) {
+                $data = $data->toArray();
+            }
+        }
+        $data = empty($data) ? [] : $data;
+        foreach ($data as $k => $v) {
+            if (!empty($v["create_time"])) {
+                $data[$k]["create_time"] = date("Y-m-d H:i:s", $v["create_time"]);
+            }
+            if (!empty($v["update_time"])) {
+                $data[$k]["update_time"] = date("Y-m-d H:i:s", $v["update_time"]);
+            }
+        }
+        return ["list" => $data, "pageSize" => $post["pageSize"], "page" => $post["page"], "totalCount" => $totalCount];
+    }
+
+    /**
+     * 获取所有启用的荣誉(用于下拉选择)
+     * @return array
+     */
+    public function getAllEnabled()
+    {
+        $data = $this
+            ->field("id,name,icon")
+            ->where("status", 1)
+            ->order("sort", "desc")
+            ->order("id", "desc")
+            ->select();
+        if (!empty($data)) {
+            $data = $data->toArray();
+        }
+        return empty($data) ? [] : $data;
+    }
+}

+ 194 - 0
app/system/controller/Honor.php

@@ -0,0 +1,194 @@
+<?php
+declare (strict_types = 1);
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | [ 用户荣誉管理 ]
+// +----------------------------------------------------------------------
+// | Date: 2026-05-22
+// +----------------------------------------------------------------------
+namespace app\system\controller;
+
+use app\BaseController;
+use app\model\api\UserHonor as HonorModel;
+use app\model\api\User as UserModel;
+use app\Request;
+use library\services\UtilService;
+
+class Honor extends BaseController
+{
+    /**
+     * 荣誉列表
+     * @param Request $request
+     * @return mixed
+     */
+    public function list(Request $request)
+    {
+        $post = UtilService::getMore([
+            ['page', 1],
+            ['pageSize', 50],
+            ['name', ''],
+            ['status', ''],
+        ], $request);
+        $data = (new HonorModel)->getList($post);
+        return app('json')->success([
+            'list'      => $data["list"],
+            'pageCount' => $data["totalCount"],
+            'pageSize'  => $data["pageSize"],
+            'page'      => $data["page"],
+        ]);
+    }
+
+    /**
+     * 荣誉添加/编辑
+     * @param Request $request
+     * @return mixed
+     */
+    public function save(Request $request)
+    {
+        $post = UtilService::getMore([
+            ['id', '0'],
+            ['name', '', 'empty', '请输入荣誉名称'],
+            ['icon', '', 'empty', '请上传荣誉图标'],
+            ['description', ''],
+            ['sort', '0'],
+            ['status', '1'],
+        ], $request);
+        $id = $post["id"];
+        unset($post["id"]);
+        $post["update_time"] = time();
+        $r = 0;
+        if (empty($id) || $id == "0") {
+            $post["create_time"] = time();
+            $r = (new HonorModel)->insert($post);
+        } else {
+            $r = (new HonorModel)->where("id", $id)->update($post);
+        }
+        if ($r) {
+            return app('json')->success("数据保存成功");
+        } else {
+            return app('json')->fail("数据保存失败");
+        }
+    }
+
+    /**
+     * 荣誉删除
+     * @param Request $request
+     * @return mixed
+     */
+    public function del(Request $request)
+    {
+        [$id] = UtilService::getMore([
+            ['id', 0, 'empty', '参数错误']
+        ], $request, true);
+        (new HonorModel)->where("id", $id)->delete();
+        return app('json')->success("荣誉删除成功");
+    }
+
+    /**
+     * 获取所有启用的荣誉列表(用于下拉选择)
+     * @return mixed
+     */
+    public function allEnabled()
+    {
+        $data = (new HonorModel)->getAllEnabled();
+        return app('json')->success($data);
+    }
+
+    /**
+     * 修改用户荣誉标签
+     * @param Request $request
+     * @return mixed
+     */
+    public function userHonorSave(Request $request)
+    {
+        $post = UtilService::getMore([
+            ['uid', '', 'empty', '请输入用户UID'],
+            ['honor', ''],
+        ], $request, true);
+        $uid = (int)$post["uid"];
+        if (empty($uid)) {
+            return app('json')->fail("用户UID不能为空");
+        }
+        // 检查用户是否存在
+        $userData = (new UserModel)->where("uid", $uid)->find();
+        if (empty($userData)) {
+            return app('json')->fail("用户不存在,请输入正确的用户UID");
+        }
+        // 处理荣誉ID字符串
+        $honor = $post["honor"];
+        if ($honor !== '') {
+            // 清理格式:去除空格,过滤非数字和逗号字符
+            $honor = trim($honor);
+            $honorAr = $honor ? explode(',', $honor) : [];
+            $validIds = [];
+            foreach ($honorAr as $hid) {
+                $hid = trim($hid);
+                if (is_numeric($hid) && (int)$hid > 0) {
+                    $validIds[] = (int)$hid;
+                }
+            }
+            // 去重并排序
+            $validIds = array_unique($validIds);
+            sort($validIds);
+            $honor = implode(',', $validIds);
+            // 验证明细Id是否存在
+            if (!empty($validIds)) {
+                $existCount = (new HonorModel)->where("id", "in", $validIds)->where("status", 1)->count();
+                if ($existCount != count($validIds)) {
+                    return app('json')->fail("部分荣誉ID不存在或已禁用,请检查");
+                }
+            }
+        }
+        $r = (new UserModel)->where("uid", $uid)->update([
+            "honor" => $honor
+        ]);
+        if ($r !== false) {
+            return app('json')->success("用户荣誉标签修改成功");
+        } else {
+            return app('json')->fail("用户荣誉标签修改失败");
+        }
+    }
+
+    /**
+     * 获取用户荣誉详情
+     * @param Request $request
+     * @return mixed
+     */
+    public function getUserHonor(Request $request)
+    {
+        $post = UtilService::getMore([
+            ['uid', '', 'empty', '请输入用户UID'],
+        ], $request, true);
+        $uid = (int)$post["uid"];
+        if (empty($uid)) {
+            return app('json')->fail("用户UID不能为空");
+        }
+        $userData = (new UserModel)->where("uid", $uid)->find();
+        if (empty($userData)) {
+            return app('json')->fail("用户不存在");
+        }
+        $honorIds = $userData["honor"] ? explode(',', $userData["honor"]) : [];
+        $honorList = [];
+        if (!empty($honorIds)) {
+            $honorList = (new HonorModel)
+                ->field("id,name,icon,description")
+                ->where("id", "in", $honorIds)
+                ->where("status", 1)
+                ->order("sort", "desc")
+                ->select();
+            if (!empty($honorList)) {
+                $honorList = $honorList->toArray();
+            } else {
+                $honorList = [];
+            }
+        }
+        return app('json')->success([
+            'uid'        => $uid,
+            'honor'      => $userData["honor"],
+            'honor_list' => $honorList,
+        ]);
+    }
+}

+ 31 - 0
app/system/route/honor.php

@@ -0,0 +1,31 @@
+<?php
+// +----------------------------------------------------------------------
+// | [ WE CAN DO IT MORE SIMPLE  ]
+// +----------------------------------------------------------------------
+// | Copyright (c) 2018-2020 rights reserved.
+// +----------------------------------------------------------------------
+// | [ 用户荣誉管理 ]
+// +----------------------------------------------------------------------
+// | Date: 2026-05-22
+// +----------------------------------------------------------------------
+use think\facade\Route;
+
+//@用户荣誉管理
+Route::group('honor', function () {
+    //@荣誉列表
+    Route::rule('list', 'Honor/list');
+    //@荣誉添加编辑
+    Route::rule('save', 'Honor/save');
+    //@荣誉删除
+    Route::rule('del', 'Honor/del');
+    //@获取所有启用荣誉(下拉选择)
+    Route::rule('allEnabled', 'Honor/allEnabled');
+    //@修改用户荣誉标签
+    Route::rule('userHonorSave', 'Honor/userHonorSave');
+    //@获取用户荣誉详情
+    Route::rule('getUserHonor', 'Honor/getUserHonor');
+})->middleware([
+    \app\system\middleware\AllowOriginMiddleware::class,
+    \app\system\middleware\AdminAuthTokenMiddleware::class,
+    \app\system\middleware\AdminCkeckRoleMiddleware::class,
+]);