zory 2 долоо хоног өмнө
parent
commit
80570d1641

+ 161 - 0
app/controller/admin/Agent.php

@@ -0,0 +1,161 @@
+<?php
+
+namespace app\controller\admin;
+
+use app\extra\basic\Base;
+use app\extra\service\saas\AgentService;
+use app\extra\tools\CodeExtend;
+use app\middleware\AuthMiddleware;
+use app\model\saas\SaasAgent;
+use app\model\system\SystemUser;
+use app\validate\saas\AgentValidate;
+use DI\Attribute\Inject;
+use LinFly\Annotation\Route\Controller;
+use LinFly\Annotation\Route\Route;
+use support\Request;
+use support\Response;
+use Webman\Annotation\Middleware;
+
+
+#[Controller(prefix: "/api/agent"),Middleware(AuthMiddleware::class)]
+class Agent extends Base
+{
+
+    #[Inject]
+    protected AgentService $service;
+
+    #[Inject]
+    protected SaasAgent $model;
+
+    #[Inject]
+    protected AgentValidate $validate;
+
+    protected string $scene = "edit";
+
+    #[Route(path: "list",methods: "get")]
+    public function getStoreList(Request $request): Response
+    {
+        try {
+            $param = $request->get();
+            $list = $this->service->getList($param);
+            return successTrans("success.data",pageFormat($list),200);
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+
+    /**
+     * 新增/编辑代理
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "save",methods: "post")]
+    public function save(Request $request): Response
+    {
+        try {
+            $param = $request->post();
+            if (!isset($param['id'])) {
+                $this->scene = "add";
+                $param['user_id'] = $param['agent_id'] = CodeExtend::random(16,1,date("md"));
+                if (!empty($param['username'])) {
+                    $userName = (new SystemUser)->where("username",$param['username'])->findOrEmpty();
+                    if (!$userName->isEmpty()) return errorTrans("error.user-exist");
+                }
+            }
+            if (!$this->validate->check($param)) return error($this->validate->getError());
+            $state = $this->model->setAutoData($param);
+            if (!$state) return errorTrans("error.data");
+            $this->sceneUser($param,2,"id");
+            return successTrans("success.data");
+        } catch (\Throwable $throwable) {
+            echo $throwable->getMessage()."\n";
+            echo $throwable->getFile()."\n";
+            echo $throwable->getLine()."\n";
+            return error($throwable->getMessage());
+        }
+    }
+
+
+    /**
+     * 新增/编辑代理
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "edit",methods: "post")]
+    public function edit(Request $request): Response
+    {
+        try {
+            $param = $request->post();
+            if (!$this->validate->check($request->post())) return error($this->validate->getError());
+            $state = $this->model->setAutoData($param);
+            if (!$state) return errorTrans("error.data");
+            return successTrans("success.data");
+        } catch (\Throwable $throwable) {
+            echo $throwable->getMessage()."\n";
+            echo $throwable->getFile()."\n";
+            echo $throwable->getLine()."\n";
+            return error($throwable->getMessage());
+        }
+    }
+
+
+    /**
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "batch",methods: "post")]
+    public function setBatchData(Request $request): Response
+    {
+        try {
+            $param = $this->_valid([
+                "id.require"        => trans("empty.require"),
+                "value.require"     => trans("empty.require"),
+                "field.require"     => trans("empty.require"),
+                "type.require"      => trans("empty.require"),
+            ],"post");
+            if (!is_array($param)) return error($param);
+            if ($param['type'] == "batch") {
+                $state = $this->model->where("id","in",$param['id'])->save([$param['field'] => $param['value']]);
+            } else {
+                $state = $this->model->where("id",$param['id'])->save([$param['field'] => $param['value']]);
+            }
+            if (!$state) return errorTrans("error.data");
+            return successTrans("success.data");
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+
+    /**
+     * 删除
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "del",methods: "post")]
+    public function delUser(Request $request): Response
+    {
+        try {
+            $param = $this->_valid([
+                "id.require"    => trans("empty.require"),
+                "type.default"  => "one",
+            ],"post");
+            if (!is_array($param)) return error($param);
+            if ($param['type'] == "batch") {
+                $state = $this->model->where("id","in",$param['id'])->delete();
+            } else {
+                $data = $this->model->where("id",$param['id'])->findOrEmpty();
+                if ($data->isEmpty()) return errorTrans("empty.data");
+                // 删除其他相关数据
+                $state = $data->delete();
+            }
+            if (!$state) return errorTrans("error.data");
+            return successTrans("success.data");
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+
+}

+ 137 - 0
app/controller/admin/Express.php

@@ -0,0 +1,137 @@
+<?php
+
+namespace app\controller\admin;
+
+use app\extra\basic\Base;
+use app\extra\service\saas\ExpressService;
+use app\middleware\AuthMiddleware;
+use app\model\saas\SaasExpressType;
+use app\validate\saas\ExpressValidate;
+use DI\Attribute\Inject;
+use LinFly\Annotation\Route\Controller;
+use LinFly\Annotation\Route\Route;
+use support\Request;
+use support\Response;
+use Webman\Annotation\Middleware;
+
+
+#[Controller(prefix: "/api/express"),Middleware(AuthMiddleware::class)]
+class Express extends Base
+{
+
+    #[Inject]
+    protected ExpressService $service;
+
+    #[Inject]
+    protected ExpressValidate $validate;
+
+    #[Inject]
+    protected SaasExpressType $model;
+
+    #[Route(path: "list",methods: "get")]
+    public function getStoreList(Request $request): Response
+    {
+        try {
+            $param = $request->get();
+            $list = $this->service->getList($param);
+            return successTrans("success.data",pageFormat($list),200);
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+
+    #[Route(path: "page",methods: "get")]
+    public function getStorePage(Request $request): Response
+    {
+        try {
+            $param = $request->get();
+            $list = $this->model->where("status",1)->select();
+            return successTrans("success.data",$list->toArray(),200);
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+
+    /**
+     * 新增/编辑代理
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "save",methods: "post")]
+    public function save(Request $request): Response
+    {
+        try {
+            $param = $request->post();
+            if (!$this->validate->check($request->post())) return error($this->validate->getError());
+            $state = $this->model->setAutoData($param);
+            if (!$state) return errorTrans("error.data");
+            return successTrans("success.data");
+        } catch (\Throwable $throwable) {
+            echo $throwable->getMessage()."\n";
+            echo $throwable->getFile()."\n";
+            echo $throwable->getLine()."\n";
+            return error($throwable->getMessage());
+        }
+    }
+
+
+    /**
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "batch",methods: "post")]
+    public function setBatchData(Request $request): Response
+    {
+        try {
+            $param = $this->_valid([
+                "id.require"        => trans("empty.require"),
+                "value.require"     => trans("empty.require"),
+                "field.require"     => trans("empty.require"),
+                "type.require"      => trans("empty.require"),
+            ],"post");
+            if (!is_array($param)) return error($param);
+            if ($param['type'] == "batch") {
+                $state = $this->model->where("id","in",$param['id'])->save([$param['field'] => $param['value']]);
+            } else {
+                $state = $this->model->where("id",$param['id'])->save([$param['field'] => $param['value']]);
+            }
+            if (!$state) return errorTrans("error.data");
+            return successTrans("success.data");
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+
+    /**
+     * 删除
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "del",methods: "post")]
+    public function delUser(Request $request): Response
+    {
+        try {
+            $param = $this->_valid([
+                "id.require"    => trans("empty.require"),
+                "type.default"  => "one",
+            ],"post");
+            if (!is_array($param)) return error($param);
+            if ($param['type'] == "batch") {
+                $state = $this->model->where("id","in",$param['id'])->delete();
+            } else {
+                $data = $this->model->where("id",$param['id'])->findOrEmpty();
+                if ($data->isEmpty()) return errorTrans("empty.data");
+                // 删除其他相关数据
+                $state = $data->delete();
+            }
+            if (!$state) return errorTrans("error.data");
+            return successTrans("success.data");
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+}

+ 160 - 0
app/controller/admin/Store.php

@@ -0,0 +1,160 @@
+<?php
+
+namespace app\controller\admin;
+
+use app\extra\basic\Base;
+use app\extra\service\saas\StoreService;
+use app\extra\tools\CodeExtend;
+use app\middleware\AuthMiddleware;
+use app\model\saas\SaasStore;
+use app\model\system\SystemUser;
+use app\validate\saas\StoreValidate;
+use DI\Attribute\Inject;
+use LinFly\Annotation\Route\Controller;
+use LinFly\Annotation\Route\Route;
+use support\Request;
+use support\Response;
+use Webman\Annotation\Middleware;
+
+
+#[Controller(prefix: "/api/store"),Middleware(AuthMiddleware::class)]
+class Store extends Base
+{
+
+    #[Inject]
+    protected StoreService $service;
+
+    #[Inject]
+    protected SaasStore $model;
+
+    #[Inject]
+    protected StoreValidate $validate;
+
+    protected string $scene = "edit";
+
+    #[Route(path: "list",methods: "get")]
+    public function getStoreList(Request $request): Response
+    {
+        try {
+            $param = $request->get();
+            $list = $this->service->getList($param);
+            return successTrans("success.data",pageFormat($list),200);
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+
+    /**
+     * 新增/编辑代理
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "save",methods: "post")]
+    public function save(Request $request): Response
+    {
+        try {
+            $param = $request->post();
+            if (!isset($param['id'])) {
+                $this->scene = "add";
+                $param['user_id'] = CodeExtend::random(16,1,date("md"));
+                if (!empty($param['username'])) {
+                    $userName = (new SystemUser)->where("username",$param['username'])->findOrEmpty();
+                    if (!$userName->isEmpty()) return errorTrans("error.user-exist");
+                }
+            }
+            if (!$this->validate->check($param)) return error($this->validate->getError());
+            $state = $this->model->setAutoData($param);
+            if (!$state) return errorTrans("error.data");
+            $this->sceneUser($param,3,"id");
+            return successTrans("success.data");
+        } catch (\Throwable $throwable) {
+            echo $throwable->getMessage()."\n";
+            echo $throwable->getFile()."\n";
+            echo $throwable->getLine()."\n";
+            return error($throwable->getMessage());
+        }
+    }
+
+
+    /**
+     * 新增/编辑代理
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "edit",methods: "post")]
+    public function edit(Request $request): Response
+    {
+        try {
+            $param = $request->post();
+            if (!$this->validate->check($request->post())) return error($this->validate->getError());
+            $state = $this->model->setAutoData($param);
+            if (!$state) return errorTrans("error.data");
+            return successTrans("success.data");
+        } catch (\Throwable $throwable) {
+            echo $throwable->getMessage()."\n";
+            echo $throwable->getFile()."\n";
+            echo $throwable->getLine()."\n";
+            return error($throwable->getMessage());
+        }
+    }
+
+
+    /**
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "batch",methods: "post")]
+    public function setBatchData(Request $request): Response
+    {
+        try {
+            $param = $this->_valid([
+                "id.require"        => trans("empty.require"),
+                "value.require"     => trans("empty.require"),
+                "field.require"     => trans("empty.require"),
+                "type.require"      => trans("empty.require"),
+            ],"post");
+            if (!is_array($param)) return error($param);
+            if ($param['type'] == "batch") {
+                $state = $this->model->where("id","in",$param['id'])->save([$param['field'] => $param['value']]);
+            } else {
+                $state = $this->model->where("id",$param['id'])->save([$param['field'] => $param['value']]);
+            }
+            if (!$state) return errorTrans("error.data");
+            return successTrans("success.data");
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+
+    /**
+     * 删除
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "del",methods: "post")]
+    public function delUser(Request $request): Response
+    {
+        try {
+            $param = $this->_valid([
+                "id.require"    => trans("empty.require"),
+                "type.default"  => "one",
+            ],"post");
+            if (!is_array($param)) return error($param);
+            if ($param['type'] == "batch") {
+                $state = $this->model->where("id","in",$param['id'])->delete();
+            } else {
+                $data = $this->model->where("id",$param['id'])->findOrEmpty();
+                if ($data->isEmpty()) return errorTrans("empty.data");
+                // 删除其他相关数据
+                $state = $data->delete();
+            }
+            if (!$state) return errorTrans("error.data");
+            return successTrans("success.data");
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+}

+ 99 - 0
app/controller/admin/User.php

@@ -0,0 +1,99 @@
+<?php
+
+namespace app\controller\admin;
+
+use app\extra\basic\Base;
+use app\extra\service\system\UserService;
+use app\middleware\AuthMiddleware;
+use app\model\system\SystemUser;
+use DI\Attribute\Inject;
+use LinFly\Annotation\Route\Controller;
+use LinFly\Annotation\Route\Route;
+use support\Request;
+use support\Response;
+use Webman\Annotation\Middleware;
+
+
+#[Controller(prefix: "/api/user"),Middleware(AuthMiddleware::class)]
+class User extends Base
+{
+
+    #[Inject]
+    protected UserService $service;
+
+    #[Inject]
+    protected SystemUser $model;
+
+    protected string $scene = "edit";
+
+    #[Route(path: "list",methods: "get")]
+    public function getStoreList(Request $request): Response
+    {
+        try {
+            $param = $request->get();
+            $list = $this->service->getList($param);
+            return successTrans("success.data",pageFormat($list),200);
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+
+
+    /**
+     * 修改密码
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "passwd",methods: "post")]
+    public function setUserPasswd(Request $request): Response
+    {
+        try {
+            $param = $this->_valid([
+                "id.require"        => trans(20010),
+                "password.require"  => trans(20010)
+            ],"post");
+            if (!is_array($param)) return error($param);
+            $user = $this->model->where("id",$param['id'])->findOrEmpty();
+            if ($user->isEmpty()) return errorTrans("empty.error");
+            $user->password = md5($param['password'].$user['salt']);
+            $state = $user->save();
+            if (!$state) return errorTrans("error.data");
+            return successTrans("success.data");
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+    /**
+     * 修改密码
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "state",methods: "post")]
+    public function setUserState(Request $request): Response
+    {
+        try {
+            $param = $this->_valid([
+                "id.require"        => trans(20010)
+            ],"post");
+            if (!is_array($param)) return error($param);
+            $user = $this->model->where("id",$param['id'])->findOrEmpty();
+            if ($user->isEmpty()) return errorTrans("empty.error");
+            if ($user['status'] == 1) {
+                $user->status = 0;
+            } else {
+                $user->status = 1;
+            }
+            $user->updated_at = getDateFull();
+            $state = $user->save();
+            if (!$state) return errorTrans("error.data");
+            return successTrans("success.data");
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+
+
+}

+ 37 - 0
app/extra/service/saas/AgentService.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace app\extra\service\saas;
+
+use app\extra\basic\Service;
+use app\model\saas\SaasAgent;
+
+class AgentService extends Service
+{
+
+    /**
+     * 列表
+     * @param array $param
+     */
+    public function getList(array $param = [])
+    {
+        $this->mode = new SaasAgent();
+        return $this->searchVal($param,$this->searchFilter($param))->paginate([
+            "list_rows" => $param['pageSize'],
+            "page"      => $param['page']
+        ]);
+    }
+
+
+
+    protected function searchFilter(array $param = []): array
+    {
+        $filter = [];
+        !empty($param['agent']) && $filter[] = ["agent_id", '=', $param['agent']];
+        !empty($param['store']) && $filter[] = ["store_id", '=', $param['store']];
+        !empty($param['status']) && $filter[] = ["status", '=', ($param['status']-1)];
+        !empty($param['type']) && $filter[] = ["store_type", '=', $param['type']];
+        !empty($param['name']) && $filter[] = ["name", 'like', "%{$param['name']}%"];
+        return $filter;
+    }
+
+}

+ 37 - 0
app/extra/service/saas/ExpressService.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace app\extra\service\saas;
+
+use app\extra\basic\Service;
+use app\model\saas\SaasExpressType;
+
+class ExpressService extends Service
+{
+
+    /**
+     * 列表
+     * @param array $param
+     */
+    public function getList(array $param = [])
+    {
+        $this->mode = new SaasExpressType();
+        return $this->searchVal($param,$this->searchFilter($param))->paginate([
+            "list_rows" => $param['pageSize'],
+            "page"      => $param['page']
+        ]);
+    }
+
+
+
+    protected function searchFilter(array $param = []): array
+    {
+        $filter = [];
+        !empty($param['agent']) && $filter[] = ["agent_id", '=', $param['agent']];
+        !empty($param['store']) && $filter[] = ["store_id", '=', $param['store']];
+        !empty($param['status']) && $filter[] = ["status", '=', ($param['status']-1)];
+        !empty($param['type']) && $filter[] = ["store_type", '=', $param['type']];
+        !empty($param['name']) && $filter[] = ["name", 'like', "%{$param['name']}%"];
+        return $filter;
+    }
+
+}

+ 39 - 0
app/extra/service/saas/StoreService.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace app\extra\service\saas;
+
+use app\extra\basic\Service;
+use app\model\saas\SaasStore;
+
+class StoreService extends Service
+{
+
+    /**
+     * 列表
+     * @param array $param
+     */
+    public function getList(array $param = [])
+    {
+        $this->mode = new SaasStore();
+        return $this->searchVal($param,$this->searchFilter($param))->with(['agent' => function($query){
+            $query->field("agent_id,name");
+        }])->paginate([
+            "list_rows" => $param['pageSize'],
+            "page"      => $param['page']
+        ]);
+    }
+
+
+
+    protected function searchFilter(array $param = []): array
+    {
+        $filter = [];
+        !empty($param['agent']) && $filter[] = ["agent_id", '=', $param['agent']];
+        !empty($param['store']) && $filter[] = ["store_id", '=', $param['store']];
+        !empty($param['status']) && $filter[] = ["status", '=', ($param['status']-1)];
+        !empty($param['type']) && $filter[] = ["store_type", '=', $param['type']];
+        !empty($param['name']) && $filter[] = ["name", 'like', "%{$param['name']}%"];
+        return $filter;
+    }
+
+}

+ 46 - 0
app/model/saas/SaasExpressType.php

@@ -0,0 +1,46 @@
+<?php
+
+namespace app\model\saas;
+
+use app\extra\basic\Model;
+
+
+/**
+ * @property integer $id (主键)
+ * @property integer $code 
+ * @property string $name 
+ * @property integer $status 
+ * @property mixed $create_at
+ */
+class SaasExpressType extends Model
+{
+    /**
+     * The connection name for the model.
+     *
+     * @var string|null
+     */
+    protected $connection = 'mysql';
+    
+    /**
+     * The table associated with the model.
+     *
+     * @var string
+     */
+    protected string $table = "saas_express_type";
+    
+    /**
+     * The primary key associated with the table.
+     *
+     * @var string
+     */
+    protected string $primaryKey = "id";
+    
+    /**
+     * Indicates if the model should be timestamped.
+     *
+     * @var bool
+     */
+    public bool $timestamps = false;
+
+
+}

+ 53 - 0
app/model/saas/SaasGoods.php

@@ -0,0 +1,53 @@
+<?php
+
+namespace app\model\saas;
+
+use app\extra\basic\Model;
+
+
+/**
+ * @property integer $id (主键)
+ * @property integer $store_id 来客账户id
+ * @property integer $agent_id 代理id
+ * @property integer $product_id 
+ * @property string $product_name 
+ * @property string $express_name 面单打印名称
+ * @property string $product_img 
+ * @property integer $product_price 
+ * @property integer $product_orgin 划线价
+ * @property integer $out_id 来客商品ID
+ * @property integer $status 
+ * @property mixed $create_at
+ */
+class SaasGoods extends Model
+{
+    /**
+     * The connection name for the model.
+     *
+     * @var string|null
+     */
+    protected $connection = 'mysql';
+    
+    /**
+     * The table associated with the model.
+     *
+     * @var string
+     */
+    protected string $table = "saas_goods";
+    
+    /**
+     * The primary key associated with the table.
+     *
+     * @var string
+     */
+    protected string $primaryKey = "id";
+    
+    /**
+     * Indicates if the model should be timestamped.
+     *
+     * @var bool
+     */
+    public bool $timestamps = false;
+
+
+}

+ 63 - 0
app/model/saas/SaasStore.php

@@ -0,0 +1,63 @@
+<?php
+
+namespace app\model\saas;
+
+use app\extra\basic\Model;
+use think\model\relation\HasOne;
+
+
+/**
+ * @property integer $id (主键)
+ * @property integer $agent_id 代理id
+ * @property integer $store_id 来客账户id
+ * @property string $store_name 
+ * @property string $express_name 
+ * @property string $express_mobile 
+ * @property string $express_goods 
+ * @property string $express_unit 
+ * @property string $express_address 
+ * @property integer $express_time 
+ * @property integer $express_type 快递类型
+ * @property integer $order_end 核销时机1小程序提交2快递取件3快递签收
+ * @property integer $is_auto 1开启自动呼叫
+ * @property integer $is_reback 1开启自动拦截
+ * @property integer $status 
+ * @property mixed $create_at
+ */
+class SaasStore extends Model
+{
+    /**
+     * The connection name for the model.
+     *
+     * @var string|null
+     */
+    protected $connection = 'mysql';
+    
+    /**
+     * The table associated with the model.
+     *
+     * @var string
+     */
+    protected string $table = "saas_store";
+    
+    /**
+     * The primary key associated with the table.
+     *
+     * @var string
+     */
+    protected string $primaryKey = "id";
+    
+    /**
+     * Indicates if the model should be timestamped.
+     *
+     * @var bool
+     */
+    public bool $timestamps = false;
+
+
+    public function agent(): HasOne
+    {
+        return $this->hasOne("app\model\saas\SaasAgent","agent_id","agent_id");
+    }
+
+}

+ 50 - 0
app/model/saas/SaasStoreShop.php

@@ -0,0 +1,50 @@
+<?php
+
+namespace app\model\saas;
+
+use app\extra\basic\Model;
+
+
+/**
+ * @property integer $id (主键)
+ * @property integer $user_id 
+ * @property integer $account_id 来客id
+ * @property integer $poi_id 
+ * @property string $poi_name 
+ * @property string $poi_address 
+ * @property integer $is_default 
+ * @property integer $status 
+ * @property mixed $create_at
+ */
+class SaasStoreShop extends Model
+{
+    /**
+     * The connection name for the model.
+     *
+     * @var string|null
+     */
+    protected $connection = 'mysql';
+    
+    /**
+     * The table associated with the model.
+     *
+     * @var string
+     */
+    protected string $table = "saas_store_shop";
+    
+    /**
+     * The primary key associated with the table.
+     *
+     * @var string
+     */
+    protected string $primaryKey = "id";
+    
+    /**
+     * Indicates if the model should be timestamped.
+     *
+     * @var bool
+     */
+    public bool $timestamps = false;
+
+
+}

+ 25 - 0
app/validate/saas/AgentValidate.php

@@ -0,0 +1,25 @@
+<?php
+
+namespace app\validate\saas;
+
+use think\Validate;
+
+class AgentValidate extends Validate
+{
+
+
+    protected $rule = [
+        "agent_id"  => "require",
+        "name"      => "require",
+        "vip_end"   => "require|date"
+    ];
+
+
+    protected $message = [
+        "agent_id.require"  => "请输入编码",
+        "name.require"      => "请输入名称",
+        "vip_end.require"   => "请输入到期时间",
+        "vip_end.date"      => "到期时间格式错误",
+    ];
+
+}

+ 22 - 0
app/validate/saas/ExpressValidate.php

@@ -0,0 +1,22 @@
+<?php
+
+namespace app\validate\saas;
+
+use think\Validate;
+
+class ExpressValidate extends Validate
+{
+
+
+    protected $rule = [
+        "code"  => "require",
+        "name"  => "require"
+    ];
+
+
+    protected $message = [
+        "code.require"  => "请输入编码",
+        "name.require"  => "请输入名称",
+    ];
+
+}

+ 44 - 0
app/validate/saas/StoreValidate.php

@@ -0,0 +1,44 @@
+<?php
+
+namespace app\validate\saas;
+
+use think\Validate;
+
+class StoreValidate extends Validate
+{
+
+
+    protected $rule = [
+        "agent_id"      => "require",
+        "store_id"      => "require",
+        "express_type"  => "require",
+        "is_auto"       => "require",
+        "is_reback"     => "require",
+        "store_name"    => "require",
+        "order_end"     => "require",
+        "express_name"  => "require",
+        "express_mobile"    => "require",
+        "express_goods" => "require",
+        "express_unit"  => "require",
+        "express_address"   => "require",
+        "express_time"  => "require"
+    ];
+
+
+    protected $message = [
+        "agent_id.require"      => "请现在代理",
+        "store_id.require"      => "请输入来客ID",
+        "express_type.require"  => "请选择快递类型",
+        "is_auto.require"       => "请选择自动呼叫快递",
+        "is_reback.require"     => "请选择退款自动拦截快递",
+        "store_name.require"    => "请输入来客店铺名称",
+        "order_end.require"     => "请选择核销时机",
+        "express_name.require"  => "请输入联系人",
+        "express_mobile.require"=> "请输入联系电话",
+        "express_goods.require" => "请输入物品名称",
+        "express_unit.require"  => "请输入物品单位",
+        "express_time.require"  => "请选择呼叫快递时间",
+        "express_address.require"  => "请输入发货地址",
+    ];
+
+}