醉梦人间三千年 7 月之前
父节点
当前提交
5fcd05d631

+ 71 - 0
app/Http/Controllers/Backend/Server/Service/CategoryController.php

@@ -0,0 +1,71 @@
+<?php
+/**
+ * @Name
+ * @Description
+ * @Author 刘学玺
+ * @Date 2024/8/26 11:48
+ */
+
+namespace App\Http\Controllers\Backend\Server\Service;
+
+use App\Http\Controllers\Controller;
+use App\Http\Requests\Request;
+use App\Http\Services\Backend\Server\Service\CategoryService;
+use App\Http\Services\Backend\Server\System\DeptService;
+use App\Http\Services\Backend\Server\System\DictDataService;
+use App\Http\Services\Backend\Server\System\DictTypeService;
+use App\Models\System\DictData;
+use App\Models\System\DictType;
+use Illuminate\Http\JsonResponse;
+
+class CategoryController extends Controller
+{
+    private CategoryService $categoryService;
+
+    public function __construct(CategoryService $categoryService)
+    {
+        $this->categoryService = $categoryService;
+    }
+
+    public function index(Request $request): JsonResponse
+    {
+        $params = $request->all();
+        $res = $this->categoryService->getCategoryList($params);
+        return self::success($res);
+    }
+
+    public function store(Request $request): JsonResponse
+    {
+        $params = $request->all();
+        $res = $this->categoryService->createCategory($params);
+        return self::success($res);
+    }
+
+    public function show(int $id): JsonResponse
+    {
+        $res = $this->categoryService->getCategory($id);
+        return self::success($res);
+    }
+
+    public function update(Request $request, int $id): JsonResponse
+    {
+        $data = $request->all();
+        $this->categoryService->updateCategory($data, $id);
+        return self::success(true);
+    }
+
+    public function destroy(int $id): JsonResponse
+    {
+        $res = $this->categoryService->deleteCategory($id);
+        return self::success($res);
+
+//        $res = $this->dictDataService->deleteDictData($id);
+//        return self::success($res);
+    }
+
+    public function simple(): JsonResponse
+    {
+        $result = $this->deptService->getDeptSimpleList();
+        return self::success($result);
+    }
+}

+ 63 - 0
app/Http/Controllers/Backend/Server/Service/ProjectController.php

@@ -0,0 +1,63 @@
+<?php
+/**
+ * @Name
+ * @Description
+ * @Author 刘学玺
+ * @Date 2024/8/26 11:48
+ */
+
+namespace App\Http\Controllers\Backend\Server\Service;
+
+use App\Http\Controllers\Controller;
+use App\Http\Requests\Request;
+use App\Http\Services\Backend\Server\Service\CategoryService;
+use App\Http\Services\Backend\Server\Service\ProjectService;
+use App\Http\Services\Backend\Server\System\DeptService;
+use App\Http\Services\Backend\Server\System\DictDataService;
+use App\Http\Services\Backend\Server\System\DictTypeService;
+use App\Models\System\DictData;
+use App\Models\System\DictType;
+use Illuminate\Http\JsonResponse;
+
+class ProjectController extends Controller
+{
+    private ProjectService $projectService;
+
+    public function __construct(ProjectService $projectService)
+    {
+        $this->projectService = $projectService;
+    }
+
+    public function index(Request $request): JsonResponse
+    {
+        $params = $request->all();
+        $res = $this->projectService->getProjectList($params);
+        return self::success($res);
+    }
+
+    public function store(Request $request): JsonResponse
+    {
+        $params = $request->all();
+        $res = $this->projectService->createProject($params);
+        return self::success($res);
+    }
+
+    public function show(int $id): JsonResponse
+    {
+        $res = $this->projectService->getProject($id);
+        return self::success($res);
+    }
+
+    public function update(Request $request, int $id): JsonResponse
+    {
+        $data = $request->all();
+        $this->projectService->updateProject($data, $id);
+        return self::success(true);
+    }
+
+    public function destroy(int $id): JsonResponse
+    {
+        $res = $this->categoryService->deleteProject($id);
+        return self::success($res);
+    }
+}

+ 55 - 0
app/Http/Services/Backend/Server/Service/CategoryService.php

@@ -0,0 +1,55 @@
+<?php
+/**
+ * @Name
+ * @Description
+ * @Author 刘学玺
+ * @Date 2024/8/27 10:52
+ */
+
+namespace App\Http\Services\Backend\Server\Service;
+
+use App\Http\Services\Service;
+use App\Models\Service\Category;
+use App\Models\System\Dept;
+use App\Models\System\DictData;
+use App\Models\System\DictType;
+use Symfony\Component\HttpFoundation\Response;
+
+class CategoryService extends Service
+{
+    protected array $simpleColumn = ['id', 'title', 'cover'];
+    protected array $selectColumn = ['sort', 'status'];
+    protected array $appendColumn = ['created_at as createTime'];
+
+    public function getCategoryList($params)
+    {
+        $category = Category::query();
+        isset($params['title']) && filled($params['title']) && $category->where('title', "%{$params['title']}%");
+        isset($params['status']) && filled($params['status']) && $category->where('status', $params['status']);
+        $categoryPage = $category->paginate($params['pageSize'], [...$this->simpleColumn, ...$this->selectColumn, ...$this->appendColumn], 'page', $params['pageNo']);
+        return ['list' => $categoryPage->items(), 'total' => $categoryPage->total()];
+    }
+
+    public function createCategory(array $data)
+    {
+        $category = self::toModel($data, Category::class);
+        return $category->create($category->getAttributes())->id;
+    }
+
+    public function getCategory(int $id)
+    {
+        return Category::query()->select([...$this->simpleColumn, ...$this->selectColumn])->find($id);
+    }
+
+    public function updateCategory(array $data, int $id): void
+    {
+        $category = self::toModel($data, Category::class);
+        $category->where('id',$id)->update($category->getAttributes());
+    }
+
+    public function deleteCategory(int $id)
+    {
+        $category = self::toModel(['id' => $id], Category::class);
+        return $category->delete();
+    }
+}

+ 59 - 0
app/Http/Services/Backend/Server/Service/ProjectService.php

@@ -0,0 +1,59 @@
+<?php
+/**
+ * @Name
+ * @Description
+ * @Author 刘学玺
+ * @Date 2024/8/27 10:52
+ */
+
+namespace App\Http\Services\Backend\Server\Service;
+
+use App\Http\Services\Service;
+use App\Models\Service\Category;
+use App\Models\Service\Project;
+use App\Models\System\Dept;
+use App\Models\System\DictData;
+use App\Models\System\DictType;
+use Symfony\Component\HttpFoundation\Response;
+
+class ProjectService extends Service
+{
+    protected array $simpleColumn = ['id', 'title', 'cover'];
+    protected array $selectColumn = ['price', 'init_price as initPrice', 'material_price as materialPrice', 'time_long as timeLong', 'sort', 'status'];
+    protected array $appendColumn = ['created_at as createTime'];
+
+    public function getProjectList($params)
+    {
+        $project = Project::query();
+        isset($params['title']) && filled($params['title']) && $project->whereLike('title', "%{$params['title']}%");
+        isset($params['status']) && filled($params['status']) && $project->where('status', $params['status']);
+        !empty($params['createTime']) && $project->whereIn('created_at', $params['createTime']);
+        $projectPage = $project->paginate($params['pageSize'], [...$this->simpleColumn, ...$this->selectColumn, ...$this->appendColumn], 'page', $params['pageNo']);
+        return ['list' => $projectPage->items(), 'total' => $projectPage->total()];
+    }
+
+    public function createProject(array $data)
+    {
+        $collection = collect($data);
+        $category = $collection->forget('category');
+        $project = self::toModel($collection, Project::class);
+        return $project->create($project->getAttributes())->id;
+    }
+
+    public function getProject(int $id)
+    {
+        return Project::query()->select([...$this->simpleColumn, ...$this->selectColumn])->find($id);
+    }
+
+    public function updateProject(array $data, int $id): void
+    {
+        $project = self::toModel($data, Project::class);
+        $project->where('id', $id)->update($project->getAttributes());
+    }
+
+    public function deleteProject(int $id)
+    {
+        $project = self::toModel(['id' => $id], Project::class);
+        return $project->delete();
+    }
+}

+ 1 - 1
app/Http/Services/Backend/Server/System/DeptService.php

@@ -28,7 +28,7 @@ class DeptService extends Service
     public function getDeptList($params)
     {
         $dept = Dept::query();
-        isset($params['name']) && filled($params['name']) && $dept->where('name', "%{$params['name']}%");
+        isset($params['name']) && filled($params['name']) && $dept->whereLike('name', "%{$params['name']}%");
         isset($params['status']) && filled($params['status']) && $dept->where('status', $params['status']);
         $deptPage = $dept->paginate($params['pageSize'], [...$this->selectColumn, ...$this->selectAppendColumn], 'page', $params['pageNo']);
         return ['list' => $deptPage->items(), 'total' => $deptPage->total()];

+ 1 - 1
app/Http/Services/Backend/Server/System/DictDataService.php

@@ -21,7 +21,7 @@ class DictDataService extends Service
     public function getDictDataList($params)
     {
         $dictData = DictData::query();
-        !empty($params['label']) && $dictData->whereLike('label', $params['label']);
+        !empty($params['label']) && $dictData->whereLike('label', "%{$params['label']}%");
         isset($params['status']) && filled($params['status']) && $dictData->where('status', $params['status']);
         $dictDataPage = $dictData->where('dict_type', $params['dictType'])->paginate($params['pageSize'], [...$this->selectColumn, ...$this->selectAppendColumn], 'page', $params['pageNo']);
         return ['list' => $dictDataPage->items(), 'total' => $dictDataPage->total()];

+ 15 - 0
app/Models/Service/Category.php

@@ -0,0 +1,15 @@
+<?php
+
+namespace App\Models\Service;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class Category extends Model
+{
+    use HasFactory;
+
+    protected $table = 'service_category';
+
+    protected $guarded = [];
+}

+ 21 - 0
app/Models/Service/Project.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace App\Models\Service;
+
+use Illuminate\Database\Eloquent\Factories\HasFactory;
+use Illuminate\Database\Eloquent\Model;
+
+class Project extends Model
+{
+    use HasFactory;
+
+    protected $table = 'service_project';
+
+    protected $guarded = [];
+
+    protected $casts = [
+        'isAdd' => 'bool',
+        'isStore' => 'bool',
+        'isDoor' => 'bool'
+    ];
+}

+ 33 - 0
database/migrations/2024_09_06_015004_create_service_category_table.php

@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration {
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('service_category', function (Blueprint $table) {
+            $table->comment('服务分类表');
+            $table->id();
+            $table->string('title')->comment('分类名称');
+            $table->string('cover')->nullable()->comment('分类封面');
+            $table->string('sort')->default(0)->comment('分类排序');
+            $table->tinyInteger('status')->default(0)->comment('账户状态 (0正常 1停用)');
+            $table->string('creator', 64)->nullable()->comment('创建者');
+            $table->string('updater', 64)->nullable()->comment('更新者');
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('service_category');
+    }
+};

+ 48 - 0
database/migrations/2024_09_06_061734_create_service_project_table.php

@@ -0,0 +1,48 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('service_project', function (Blueprint $table) {
+            $table->comment('服务项目表');
+            $table->id();
+            $table->string('title')->comment('标题');
+            $table->string('sub_title')->comment('副标题');
+            $table->string('cover')->nullable()->comment('封面图');
+            $table->double('price')->default(0.00)->nullable()->comment('价格');
+            $table->double('init_price')->default(0.00)->nullable()->comment('原价');
+            $table->integer('sale')->default(0)->nullable()->comment('销量');
+            $table->integer('true_sale')->default(0)->nullable()->comment('实际销量');
+            $table->integer('total_sale')->default(0)->nullable()->comment('总销量');
+            $table->integer('time_long')->default(0)->nullable()->comment('服务时长');
+            $table->integer('max_time')->default(0)->nullable()->comment('最长预约');
+            $table->text('introduce')->nullable()->comment('介绍');
+            $table->text('explain')->nullable()->comment('说明');
+            $table->text('notice')->nullable()->comment('须知');
+            $table->string('sort')->default(0)->comment('分类排序');
+            $table->tinyInteger('status')->default(0)->comment('账户状态 (0正常 1停用)');
+            $table->tinyInteger('com_balance')->default(0)->comment('分佣比例');
+            $table->tinyInteger('is_add')->default(0)->comment('是否加钟服务');
+            $table->double('material_price')->default(0.00)->nullable()->comment('物料费');
+            $table->tinyInteger('is_store')->default(0)->comment('是否支持到店');
+            $table->tinyInteger('is_door')->default(1)->comment('是否支持上门');
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('service_project');
+    }
+};

+ 29 - 0
database/migrations/2024_09_06_071747_create_service_project_has_category_table.php

@@ -0,0 +1,29 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+return new class extends Migration
+{
+    /**
+     * Run the migrations.
+     */
+    public function up(): void
+    {
+        Schema::create('service_project_has_category', function (Blueprint $table) {
+            $table->id();
+            $table->bigInteger('project_id')->comment('服务项目ID');
+            $table->bigInteger('category_id')->comment('服务分类ID');
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     */
+    public function down(): void
+    {
+        Schema::dropIfExists('service_project_has_category');
+    }
+};

+ 4 - 4
database/seeders/SystemMenusTableSeeder.php

@@ -17,7 +17,7 @@ class SystemMenusTableSeeder extends Seeder
         // 目录
         DB::table('system_menus')->insert(['id' => 1, 'name' => '系统管理', 'type' => 1, 'path' => '/system', 'icon' => 'ep:tools', 'sort' => 99, 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
         DB::table('system_menus')->insert(['id' => 2, 'name' => '会员中心', 'type' => 1, 'path' => '/member', 'icon' => 'ep:bicycle', 'sort' => 10, 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
-        DB::table('system_menus')->insert(['id' => 3, 'name' => '技工中心', 'type' => 1, 'path' => '/techer', 'icon' => 'fa:automobile', 'sort' => 11, 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
+        DB::table('system_menus')->insert(['id' => 3, 'name' => '技工中心', 'type' => 1, 'path' => '/coach', 'icon' => 'fa:automobile', 'sort' => 11, 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
         DB::table('system_menus')->insert(['id' => 4, 'name' => '服务中心', 'type' => 1, 'path' => '/service', 'icon' => 'fa:american-sign-language-interpreting', 'sort' => 12, 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
 
         // 菜单
@@ -32,11 +32,11 @@ class SystemMenusTableSeeder extends Seeder
         DB::table('system_menus')->insert(['id' => 200, 'name' => '会员管理', 'type' => 2, 'parent_id' => 2, 'path' => 'user', 'icon' => 'ep:avatar', 'component' => 'member/user/index', 'component_name' => 'MemberUser', 'sort' => 0, 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
         DB::table('system_menus')->insert(['id' => 210, 'name' => '会员配置', 'type' => 2, 'parent_id' => 2, 'path' => 'config', 'icon' => 'fa:archive', 'component' => 'member/config/index', 'component_name' => 'MemberConfig', 'sort' => 10, 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
         // 技工中心
-        DB::table('system_menus')->insert(['id' => 300, 'name' => '技工管理', 'type' => 2, 'parent_id' => 3, 'path' => 'user', 'icon' => 'ep:avatar', 'component' => 'member/user/index', 'component_name' => 'MemberUser', 'sort' => 0, 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
+        DB::table('system_menus')->insert(['id' => 300, 'name' => '技工管理', 'type' => 2, 'parent_id' => 3, 'path' => 'user', 'icon' => 'ep:avatar', 'component' => 'coach/user/index', 'component_name' => 'CoachUser', 'sort' => 0, 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
         DB::table('system_menus')->insert(['id' => 310, 'name' => '技工配置', 'type' => 2, 'parent_id' => 3, 'path' => 'config', 'icon' => 'ep:setting', 'component' => 'member/config/index', 'component_name' => 'MemberConfig', 'sort' => 10, 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
         // 服务中心
-        DB::table('system_menus')->insert(['id' => 400, 'name' => '服务管理', 'type' => 2, 'parent_id' => 4, 'path' => 'config', 'icon' => 'ep:bell-filled', 'component' => 'member/config/index', 'component_name' => 'MemberConfig', 'sort' => 0, 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
-        DB::table('system_menus')->insert(['id' => 410, 'name' => '服务分类', 'type' => 2, 'parent_id' => 4, 'path' => 'config', 'icon' => 'ep:bell-filled', 'component' => 'member/config/index', 'component_name' => 'MemberConfig', 'sort' => 1, 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
+        DB::table('system_menus')->insert(['id' => 400, 'name' => '服务管理', 'type' => 2, 'parent_id' => 4, 'path' => 'project', 'icon' => 'ep:bell-filled', 'component' => 'service/project/index', 'component_name' => 'ServiceProject', 'sort' => 0, 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
+        DB::table('system_menus')->insert(['id' => 410, 'name' => '服务分类', 'type' => 2, 'parent_id' => 4, 'path' => 'category', 'icon' => 'ep:box', 'component' => 'service/category/index', 'component_name' => 'ServiceCategory', 'sort' => 1, 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
         DB::table('system_menus')->insert(['id' => 420, 'name' => '服务审核', 'type' => 2, 'parent_id' => 4, 'path' => 'config', 'icon' => 'fa:500px', 'component' => 'member/config/index', 'component_name' => 'MemberConfig', 'sort' => 2, 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
         DB::table('system_menus')->insert(['id' => 490, 'name' => '服务配置', 'type' => 2, 'parent_id' => 4, 'path' => 'config', 'icon' => 'fa:archive', 'component' => 'member/config/index', 'component_name' => 'MemberConfig', 'sort' => 9, 'creator' => '系统', 'created_at' => now(), 'updated_at' => now()]);
 

+ 11 - 0
routes/web.php

@@ -13,6 +13,9 @@ use App\Http\Controllers\Backend\Server\System\RoleController;
 use App\Http\Controllers\Backend\Server\System\UserController;
 use App\Http\Controllers\Backend\Server\Member\UserController as MemberUserController;
 use App\Http\Controllers\Backend\Server\Member\ConfigController as MemberConfigController;
+use App\Http\Controllers\Backend\Server\Service\CategoryController as ServiceCategoryController;
+use App\Http\Controllers\Backend\Server\Service\ProjectController as ServiceProjectController;
+
 use Illuminate\Support\Facades\Route;
 
 Route::get('/', function () {
@@ -32,6 +35,14 @@ Route::prefix('client')->group(function () {
 //        ->middleware('guest')
 //        ->name('register');
 
+# 服务中心
+Route::prefix('service')->group(function () {
+    # 服务分类
+    Route::resource('category', ServiceCategoryController::class);
+    # 服务项目
+    Route::resource('project', ServiceProjectController::class);
+
+});
 # 会员中心
 Route::prefix('member')->group(function () {
     # 会员管理