wesmiler 2 months ago
parent
commit
854d1c47c7
40 changed files with 1871 additions and 0 deletions
  1. 2 0
      database/.gitignore
  2. 33 0
      database/factories/UserFactory.php
  3. 36 0
      database/migrations/2014_10_12_000000_create_users_table.php
  4. 32 0
      database/migrations/2014_10_12_100000_create_password_resets_table.php
  5. 36 0
      database/migrations/2019_08_19_000000_create_failed_jobs_table.php
  6. 18 0
      database/seeders/DatabaseSeeder.php
  7. BIN
      public/favicon.ico
  8. BIN
      public/icon.png
  9. 43 0
      resources/certs/alipay/alipayCertPublicKey_RSA2.crt
  10. 88 0
      resources/certs/alipay/alipayRootCert.crt
  11. 23 0
      resources/certs/alipay/appCertPublicKey.crt
  12. BIN
      resources/certs/wechat/apiclient_cert.p12
  13. 25 0
      resources/certs/wechat/apiclient_cert.pem
  14. 28 0
      resources/certs/wechat/apiclient_key.pem
  15. 0 0
      resources/css/app.css
  16. 1 0
      resources/js/app.js
  17. 28 0
      resources/js/bootstrap.js
  18. 28 0
      resources/lang/en/api.php
  19. 19 0
      resources/lang/en/auth.php
  20. 19 0
      resources/lang/en/pagination.php
  21. 22 0
      resources/lang/en/passwords.php
  22. 152 0
      resources/lang/en/validation.php
  23. 305 0
      resources/lang/zh-cn/api.php
  24. 19 0
      resources/lang/zh-cn/auth.php
  25. 19 0
      resources/lang/zh-cn/pagination.php
  26. 22 0
      resources/lang/zh-cn/passwords.php
  27. 152 0
      resources/lang/zh-cn/validation.php
  28. 2 0
      resources/views/templates/.gitignore
  29. 132 0
      resources/views/welcome.blade.php
  30. 187 0
      routes/api.php
  31. 18 0
      routes/channels.php
  32. 19 0
      routes/console.php
  33. 288 0
      routes/web.php
  34. 9 0
      storage/framework/cache/.gitignore
  35. 9 0
      storage/framework/cache/data/.gitignore
  36. 2 0
      storage/framework/testing/.gitignore
  37. 9 0
      storage/framework/views/.gitignore
  38. 39 0
      storage/framework/views/b44774c9fede501ff8589f32466a7ab91b4397e8.php
  39. 5 0
      storage/framework/views/c8f2655af834107ae93bf2ac322f057109e5745a.php
  40. 2 0
      storage/logs/.gitignore

+ 2 - 0
database/.gitignore

@@ -0,0 +1,2 @@
+*.sqlite
+*.sqlite-journal

+ 33 - 0
database/factories/UserFactory.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace Database\Factories;
+
+use App\Models\User;
+use Illuminate\Database\Eloquent\Factories\Factory;
+use Illuminate\Support\Str;
+
+class UserFactory extends Factory
+{
+    /**
+     * The name of the factory's corresponding model.
+     *
+     * @var string
+     */
+    protected $model = User::class;
+
+    /**
+     * Define the model's default state.
+     *
+     * @return array
+     */
+    public function definition()
+    {
+        return [
+            'name' => $this->faker->name,
+            'email' => $this->faker->unique()->safeEmail,
+            'email_verified_at' => now(),
+            'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
+            'remember_token' => Str::random(10),
+        ];
+    }
+}

+ 36 - 0
database/migrations/2014_10_12_000000_create_users_table.php

@@ -0,0 +1,36 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateUsersTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('users', function (Blueprint $table) {
+            $table->id();
+            $table->string('name');
+            $table->string('email')->unique();
+            $table->timestamp('email_verified_at')->nullable();
+            $table->string('password');
+            $table->rememberToken();
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('users');
+    }
+}

+ 32 - 0
database/migrations/2014_10_12_100000_create_password_resets_table.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreatePasswordResetsTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('password_resets', function (Blueprint $table) {
+            $table->string('email')->index();
+            $table->string('token');
+            $table->timestamp('created_at')->nullable();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('password_resets');
+    }
+}

+ 36 - 0
database/migrations/2019_08_19_000000_create_failed_jobs_table.php

@@ -0,0 +1,36 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateFailedJobsTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('failed_jobs', function (Blueprint $table) {
+            $table->id();
+            $table->string('uuid')->unique();
+            $table->text('connection');
+            $table->text('queue');
+            $table->longText('payload');
+            $table->longText('exception');
+            $table->timestamp('failed_at')->useCurrent();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('failed_jobs');
+    }
+}

+ 18 - 0
database/seeders/DatabaseSeeder.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace Database\Seeders;
+
+use Illuminate\Database\Seeder;
+
+class DatabaseSeeder extends Seeder
+{
+    /**
+     * Seed the application's database.
+     *
+     * @return void
+     */
+    public function run()
+    {
+        // \App\Models\User::factory(10)->create();
+    }
+}

BIN
public/favicon.ico


BIN
public/icon.png


+ 43 - 0
resources/certs/alipay/alipayCertPublicKey_RSA2.crt

@@ -0,0 +1,43 @@
+-----BEGIN CERTIFICATE-----
+MIIDuzCCAqOgAwIBAgIQICMQJmg7OW5eYvBS8krf1TANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
+BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
+YXNzIDIgUjEwHhcNMjMxMDI2MDc0MDU4WhcNMjgxMDI0MDc0MDU4WjCBmzELMAkGA1UEBhMCQ04x
+NjA0BgNVBAoMLeW5v+ilv+S6uuS6uuaOpee9kee7nOenkeaKgOaciemZkOi0o+S7u+WFrOWPuDEP
+MA0GA1UECwwGQWxpcGF5MUMwQQYDVQQDDDrmlK/ku5jlrp0o5Lit5Zu9Kee9kee7nOaKgOacr+ac
+iemZkOWFrOWPuC0yMDg4NzQxMTY0Mjg5NzA3MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
+AQEA7Eki9SsC9nvBivaJWR8FED7HeHWPGtTDMv1Iov29ztp48io72g1MFpP9CVJ19kF7wwc8DDu7
+vSnPUS3yxrv74wdqdisKpqkX3R/XHwTs9tg8QEyRt2nCHWgTKrns962utdceirtcsMDHhiFXWwMk
+Cj+2tCj7NpXgsIiuMTzpFtSWxF5W5FYgWxp8nFdVARww4vaLCdrVx1MSKIJV+VDzgT3bIacPEDa8
+vDKyP8vEWTV3ubugxi8Nwg3wzQnQPGT8Gefp2Hjue06Szp6vhHQ4bxOYInZxkmmpivMuMoieHLqH
+gVf2Xfhhk9JLEWhOQoSEVPyP5p16BcCSq6U3mcLEMQIDAQABoxIwEDAOBgNVHQ8BAf8EBAMCA/gw
+DQYJKoZIhvcNAQELBQADggEBAIbHnh1uZfRxMQDxGMUkN2vYEhtWShWAugmoJhlb+8m6FsshjqIA
+xnnOGPuR2Uk7nduYHlA5mIACMIzAYUxRjTx5TtE0LZw8J/ORFbuqHE1g3K+X5uI0Qby2bSO+95Vn
+DKEiuCnVvw3YNhf/Ig2JLz4/O6LffdZhOO770B39nb4WNVHzfEwVde0nt9a8609oikX+ZYYLAF9u
+Ww99neJK9iMiKI+IgiJjmjz9QpitBPbCBIbiNMrX6S7B14AWMiFsCxTvYsVWV8OZZbHYnLjkwnJp
+9uZgE3Z4xEooZ6WFV6v7qSHdN7yqXxlY5sMIe402Lti9GpgrWuGbo4jyB2p501c=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE4jCCAsqgAwIBAgIIYsSr5bKAMl8wDQYJKoZIhvcNAQELBQAwejELMAkGA1UEBhMCQ04xFjAU
+BgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEw
+LwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMy
+MjE0MzQxNVoXDTM3MTEyNjE0MzQxNVowgYIxCzAJBgNVBAYTAkNOMRYwFAYDVQQKDA1BbnQgRmlu
+YW5jaWFsMSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE5MDcGA1UEAwwwQW50IEZp
+bmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBDbGFzcyAyIFIxMIIBIjANBgkqhkiG9w0B
+AQEFAAOCAQ8AMIIBCgKCAQEAsLMfYaoRoPRbmDcAfXPCmKf43pWRN5yTXa/KJWO0l+mrgQvs89bA
+NEvbDUxlkGwycwtwi5DgBuBgVhLliXu+R9CYgr2dXs8D8Hx/gsggDcyGPLmVrDOnL+dyeauheARZ
+fA3du60fwEwwbGcVIpIxPa/4n3IS/ElxQa6DNgqxh8J9Xwh7qMGl0JK9+bALuxf7B541Gr4p0WEN
+G8fhgjBV4w4ut9eQLOoa1eddOUSZcy46Z7allwowwgt7b5VFfx/P1iKJ3LzBMgkCK7GZ2kiLrL7R
+iqV+h482J7hkJD+ardoc6LnrHO/hIZymDxok+VH9fVeUdQa29IZKrIDVj65THQIDAQABo2MwYTAf
+BgNVHSMEGDAWgBRfdLQEwE8HWurlsdsio4dBspzhATAdBgNVHQ4EFgQUSqHkYINtUSAtDPnS8Xoy
+oP9p7qEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIB
+AIQ8TzFy4bVIVb8+WhHKCkKNPcJe2EZuIcqvRoi727lZTJOfYy/JzLtckyZYfEI8J0lasZ29wkTt
+a1IjSo+a6XdhudU4ONVBrL70U8Kzntplw/6TBNbLFpp7taRALjUgbCOk4EoBMbeCL0GiYYsTS0mw
+7xdySzmGQku4GTyqutIGPQwKxSj9iSFw1FCZqr4VP4tyXzMUgc52SzagA6i7AyLedd3tbS6lnR5B
+L+W9Kx9hwT8L7WANAxQzv/jGldeuSLN8bsTxlOYlsdjmIGu/C9OWblPYGpjQQIRyvs4Cc/mNhrh+
+14EQgwuemIIFDLOgcD+iISoN8CqegelNcJndFw1PDN6LkVoiHz9p7jzsge8RKay/QW6C03KNDpWZ
+EUCgCUdfHfo8xKeR+LL1cfn24HKJmZt8L/aeRZwZ1jwePXFRVtiXELvgJuM/tJDIFj2KD337iV64
+fWcKQ/ydDVGqfDZAdcU4hQdsrPWENwPTQPfVPq2NNLMyIH9+WKx9Ed6/WzeZmIy5ZWpX1TtTolo6
+OJXQFeItMAjHxW/ZSZTok5IS3FuRhExturaInnzjYpx50a6kS34c5+c8hYq7sAtZ/CNLZmBnBCFD
+aMQqT8xFZJ5uolUaSeXxg7JFY1QsYp5RKvj4SjFwCGKJ2+hPPe9UyyltxOidNtxjaknOCeBHytOr
+-----END CERTIFICATE-----

+ 88 - 0
resources/certs/alipay/alipayRootCert.crt

@@ -0,0 +1,88 @@
+-----BEGIN CERTIFICATE-----
+MIIBszCCAVegAwIBAgIIaeL+wBcKxnswDAYIKoEcz1UBg3UFADAuMQswCQYDVQQG
+EwJDTjEOMAwGA1UECgwFTlJDQUMxDzANBgNVBAMMBlJPT1RDQTAeFw0xMjA3MTQw
+MzExNTlaFw00MjA3MDcwMzExNTlaMC4xCzAJBgNVBAYTAkNOMQ4wDAYDVQQKDAVO
+UkNBQzEPMA0GA1UEAwwGUk9PVENBMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE
+MPCca6pmgcchsTf2UnBeL9rtp4nw+itk1Kzrmbnqo05lUwkwlWK+4OIrtFdAqnRT
+V7Q9v1htkv42TsIutzd126NdMFswHwYDVR0jBBgwFoAUTDKxl9kzG8SmBcHG5Yti
+W/CXdlgwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFEwysZfZ
+MxvEpgXBxuWLYlvwl3ZYMAwGCCqBHM9VAYN1BQADSAAwRQIgG1bSLeOXp3oB8H7b
+53W+CKOPl2PknmWEq/lMhtn25HkCIQDaHDgWxWFtnCrBjH16/W3Ezn7/U/Vjo5xI
+pDoiVhsLwg==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIF0zCCA7ugAwIBAgIIH8+hjWpIDREwDQYJKoZIhvcNAQELBQAwejELMAkGA1UE
+BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmlj
+YXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMyMTEzNDg0MFoXDTM4MDIyODEzNDg0
+MFowejELMAkGA1UEBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNV
+BAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5j
+aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMIICIjANBgkqhkiG9w0BAQEF
+AAOCAg8AMIICCgKCAgEAtytTRcBNuur5h8xuxnlKJetT65cHGemGi8oD+beHFPTk
+rUTlFt9Xn7fAVGo6QSsPb9uGLpUFGEdGmbsQ2q9cV4P89qkH04VzIPwT7AywJdt2
+xAvMs+MgHFJzOYfL1QkdOOVO7NwKxH8IvlQgFabWomWk2Ei9WfUyxFjVO1LVh0Bp
+dRBeWLMkdudx0tl3+21t1apnReFNQ5nfX29xeSxIhesaMHDZFViO/DXDNW2BcTs6
+vSWKyJ4YIIIzStumD8K1xMsoaZBMDxg4itjWFaKRgNuPiIn4kjDY3kC66Sl/6yTl
+YUz8AybbEsICZzssdZh7jcNb1VRfk79lgAprm/Ktl+mgrU1gaMGP1OE25JCbqli1
+Pbw/BpPynyP9+XulE+2mxFwTYhKAwpDIDKuYsFUXuo8t261pCovI1CXFzAQM2w7H
+DtA2nOXSW6q0jGDJ5+WauH+K8ZSvA6x4sFo4u0KNCx0ROTBpLif6GTngqo3sj+98
+SZiMNLFMQoQkjkdN5Q5g9N6CFZPVZ6QpO0JcIc7S1le/g9z5iBKnifrKxy0TQjtG
+PsDwc8ubPnRm/F82RReCoyNyx63indpgFfhN7+KxUIQ9cOwwTvemmor0A+ZQamRe
+9LMuiEfEaWUDK+6O0Gl8lO571uI5onYdN1VIgOmwFbe+D8TcuzVjIZ/zvHrAGUcC
+AwEAAaNdMFswCwYDVR0PBAQDAgEGMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFF90
+tATATwda6uWx2yKjh0GynOEBMB8GA1UdIwQYMBaAFF90tATATwda6uWx2yKjh0Gy
+nOEBMA0GCSqGSIb3DQEBCwUAA4ICAQCVYaOtqOLIpsrEikE5lb+UARNSFJg6tpkf
+tJ2U8QF/DejemEHx5IClQu6ajxjtu0Aie4/3UnIXop8nH/Q57l+Wyt9T7N2WPiNq
+JSlYKYbJpPF8LXbuKYG3BTFTdOVFIeRe2NUyYh/xs6bXGr4WKTXb3qBmzR02FSy3
+IODQw5Q6zpXj8prYqFHYsOvGCEc1CwJaSaYwRhTkFedJUxiyhyB5GQwoFfExCVHW
+05ZFCAVYFldCJvUzfzrWubN6wX0DD2dwultgmldOn/W/n8at52mpPNvIdbZb2F41
+T0YZeoWnCJrYXjq/32oc1cmifIHqySnyMnavi75DxPCdZsCOpSAT4j4lAQRGsfgI
+kkLPGQieMfNNkMCKh7qjwdXAVtdqhf0RVtFILH3OyEodlk1HYXqX5iE5wlaKzDop
+PKwf2Q3BErq1xChYGGVS+dEvyXc/2nIBlt7uLWKp4XFjqekKbaGaLJdjYP5b2s7N
+1dM0MXQ/f8XoXKBkJNzEiM3hfsU6DOREgMc1DIsFKxfuMwX3EkVQM1If8ghb6x5Y
+jXayv+NLbidOSzk4vl5QwngO/JYFMkoc6i9LNwEaEtR9PhnrdubxmrtM+RjfBm02
+77q3dSWFESFQ4QxYWew4pHE0DpWbWy/iMIKQ6UZ5RLvB8GEcgt8ON7BBJeMc+Dyi
+kT9qhqn+lw==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIICiDCCAgygAwIBAgIIQX76UsB/30owDAYIKoZIzj0EAwMFADB6MQswCQYDVQQG
+EwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UECwwXQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNpYWwgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkgRTEwHhcNMTkwNDI4MTYyMDQ0WhcNNDkwNDIwMTYyMDQ0
+WjB6MQswCQYDVQQGEwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UE
+CwwXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNp
+YWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRTEwdjAQBgcqhkjOPQIBBgUrgQQA
+IgNiAASCCRa94QI0vR5Up9Yr9HEupz6hSoyjySYqo7v837KnmjveUIUNiuC9pWAU
+WP3jwLX3HkzeiNdeg22a0IZPoSUCpasufiLAnfXh6NInLiWBrjLJXDSGaY7vaokt
+rpZvAdmjXTBbMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBRZ
+4ZTgDpksHL2qcpkFkxD2zVd16TAfBgNVHSMEGDAWgBRZ4ZTgDpksHL2qcpkFkxD2
+zVd16TAMBggqhkjOPQQDAwUAA2gAMGUCMQD4IoqT2hTUn0jt7oXLdMJ8q4vLp6sg
+wHfPiOr9gxreb+e6Oidwd2LDnC4OUqCWiF8CMAzwKs4SnDJYcMLf2vpkbuVE4dTH
+Rglz+HGcTLWsFs4KxLsq7MuU+vJTBUeDJeDjdA==
+-----END CERTIFICATE-----
+
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIUEMdk6dVgOEIS2cCP0Q43P90Ps5YwDQYJKoZIhvcNAQEF
+BQAwajELMAkGA1UEBhMCQ04xEzARBgNVBAoMCmlUcnVzQ2hpbmExHDAaBgNVBAsM
+E0NoaW5hIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMMH2lUcnVzQ2hpbmEgQ2xhc3Mg
+MiBSb290IENBIC0gRzMwHhcNMTMwNDE4MDkzNjU2WhcNMzMwNDE4MDkzNjU2WjBq
+MQswCQYDVQQGEwJDTjETMBEGA1UECgwKaVRydXNDaGluYTEcMBoGA1UECwwTQ2hp
+bmEgVHJ1c3QgTmV0d29yazEoMCYGA1UEAwwfaVRydXNDaGluYSBDbGFzcyAyIFJv
+b3QgQ0EgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOPPShpV
+nJbMqqCw6Bz1kehnoPst9pkr0V9idOwU2oyS47/HjJXk9Rd5a9xfwkPO88trUpz5
+4GmmwspDXjVFu9L0eFaRuH3KMha1Ak01citbF7cQLJlS7XI+tpkTGHEY5pt3EsQg
+wykfZl/A1jrnSkspMS997r2Gim54cwz+mTMgDRhZsKK/lbOeBPpWtcFizjXYCqhw
+WktvQfZBYi6o4sHCshnOswi4yV1p+LuFcQ2ciYdWvULh1eZhLxHbGXyznYHi0dGN
+z+I9H8aXxqAQfHVhbdHNzi77hCxFjOy+hHrGsyzjrd2swVQ2iUWP8BfEQqGLqM1g
+KgWKYfcTGdbPB1MCAwEAAaNjMGEwHQYDVR0OBBYEFG/oAMxTVe7y0+408CTAK8hA
+uTyRMB8GA1UdIwQYMBaAFG/oAMxTVe7y0+408CTAK8hAuTyRMA8GA1UdEwEB/wQF
+MAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBLnUTfW7hp
+emMbuUGCk7RBswzOT83bDM6824EkUnf+X0iKS95SUNGeeSWK2o/3ALJo5hi7GZr3
+U8eLaWAcYizfO99UXMRBPw5PRR+gXGEronGUugLpxsjuynoLQu8GQAeysSXKbN1I
+UugDo9u8igJORYA+5ms0s5sCUySqbQ2R5z/GoceyI9LdxIVa1RjVX8pYOj8JFwtn
+DJN3ftSFvNMYwRuILKuqUYSHc2GPYiHVflDh5nDymCMOQFcFG3WsEuB+EYQPFgIU
+1DHmdZcz7Llx8UOZXX2JupWCYzK1XhJb+r4hK5ncf/w8qGtYlmyJpxk3hr1TfUJX
+Yf4Zr0fJsGuv
+-----END CERTIFICATE-----

+ 23 - 0
resources/certs/alipay/appCertPublicKey.crt

@@ -0,0 +1,23 @@
+-----BEGIN CERTIFICATE-----
+MIIEqTCCA5GgAwIBAgIQICMQJgjpk0y+2aDbQOBRrDANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
+BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
+aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
+YXNzIDEgUjEwHhcNMjMxMDI2MDc0MDU3WhcNMjgxMDI0MDc0MDU3WjBxMQswCQYDVQQGEwJDTjE2
+MDQGA1UECgwt5bm/6KW/5Lq65Lq65o6l572R57uc56eR5oqA5pyJ6ZmQ6LSj5Lu75YWs5Y+4MQ8w
+DQYDVQQLDAZBbGlwYXkxGTAXBgNVBAMMEDIwODg3NDExNjQyODk3MDcwggEiMA0GCSqGSIb3DQEB
+AQUAA4IBDwAwggEKAoIBAQCSVk8G8saK/CN4bGQT7/WfpBGJ+9avbA835BRYBKicH6HjrQmK/h2v
+7KN7utgyk86yO6tA2JzZnaaC7z/6z6SYm5IqxGapWwowdIKQGK1/v/2VxnSLiUuEZ7het3Mb4pFz
+qvZXJBXOlE9Tj7T4EXkxMJaqfOamXZ5j/w83RmNRjit4lRoymb0cyoVETyTHP+CPr8I211iapXhV
+GQRxohfrn6cu5qYpS1D6Ha5aFcc5WMVKm0CWI2Vk4xQ+/S1v+C0DozMnk85c1Rjpu/lbo7dmbi0d
+65o5U6V7jKGDVcC/ZI6r3woICQ8UwCsqnnI5qvSg+HfKukuiUJ6wJZ6RstodAgMBAAGjggEpMIIB
+JTAfBgNVHSMEGDAWgBRxB+IEYRbk5fJl6zEPyeD0PJrVkTAdBgNVHQ4EFgQUOB3gjhuxDuhX0+FY
+Mkdj3p52ApowQAYDVR0gBDkwNzA1BgdggRwBbgEBMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9jYS5h
+bGlwYXkuY29tL2Nwcy5wZGYwDgYDVR0PAQH/BAQDAgbAMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6
+Ly9jYS5hbGlwYXkuY29tL2NybDgyLmNybDBgBggrBgEFBQcBAQRUMFIwKAYIKwYBBQUHMAKGHGh0
+dHA6Ly9jYS5hbGlwYXkuY29tL2NhNi5jZXIwJgYIKwYBBQUHMAGGGmh0dHA6Ly9jYS5hbGlwYXku
+Y29tOjgzNDAvMA0GCSqGSIb3DQEBCwUAA4IBAQA5YcsvZdYSAUbGfWTz98FFXqAQtN31MFsHfZ94
+nOrueWHZxS7OkJ1MWZ1I34NhPj2YpmtrlbciHv4TZTSl7omg4NFUrrT6XN/ys0ksL4jDsZ0e0ZbF
+79CsqninYn5E2HCxQNsxY/AxuFCCgRkmADKy3GddbuuQIX0krE5WJbhkfuJypyx5lFY3lNfBiLTa
+3sSeoFxB/qnxF++gmt9ou39xy4nYPI/JkYaBxna6Uee425zPZt0E4dgwS6CF4J4DmyEkCyvhXHwt
+RQQzZ33V4x8Hz8LnWUB1ox+kHgJY1I4RDgrUWQFGvW8FxILjUsD0R653uVJDcdqXcAwztBXTLmhK
+-----END CERTIFICATE-----

BIN
resources/certs/wechat/apiclient_cert.p12


+ 25 - 0
resources/certs/wechat/apiclient_cert.pem

@@ -0,0 +1,25 @@
+-----BEGIN CERTIFICATE-----
+MIIEMTCCAxmgAwIBAgIUfPZaOM89WkFlQ9zlGNHbyu2dKW4wDQYJKoZIhvcNAQEL
+BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
+FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
+Q0EwHhcNMjQwMTE5MDcyNzQ0WhcNMjkwMTE3MDcyNzQ0WjCBijETMBEGA1UEAwwK
+MTYwMDYxMTIwODEbMBkGA1UECgwS5b6u5L+h5ZWG5oi357O757ufMTYwNAYDVQQL
+DC3lub/opb/kurrkurrmjqXnvZHnu5znp5HmioDmnInpmZDotKPku7vlhazlj7gx
+CzAJBgNVBAYTAkNOMREwDwYDVQQHDAhTaGVuWmhlbjCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBAKHQzqV/BN9dG4yF+w0/nLZ60BgOlJdPK1Hrv5Fmk0W1
+vtCVeQwDYZK7OwynXcBCYEL37sDJSkQCYzCfWIArgW2ssnEaype6zQ3POlGYIMmg
+niEpHzl/dNdS9SO69cMQ1E/QWc30QZUbGNi86EtzYJnwpB15TC4Uy9a8uYgLuxVw
+puUj6kNNELoVlH5Hmal9O3uRw55dQRYUMlVuC0iTxRTXlDwgOPE8ikoQ8eudSvvT
+2bsbOPPQmgvwMOkKwuDuVpEZlEzVRESG0HMCzuER7vslfE0yNX5osoOm/QpCP2ts
+aY/p3Vogqe1zbk9bjzri3Bjp0quB8bQTWgQfpbeuPX8CAwEAAaOBuTCBtjAJBgNV
+HRMEAjAAMAsGA1UdDwQEAwID+DCBmwYDVR0fBIGTMIGQMIGNoIGKoIGHhoGEaHR0
+cDovL2V2Y2EuaXRydXMuY29tLmNuL3B1YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIw
+RTUwREJDMDRCMDZBRDM5NzU0OTg0NkMwMUMzRThFQkQyJnNnPUhBQ0M0NzFCNjU0
+MjJFMTJCMjdBOUQzM0E4N0FEMUNERjU5MjZFMTQwMzcxMA0GCSqGSIb3DQEBCwUA
+A4IBAQC004TEHV60O7lNuyrzx2erDCIcsnF19yxTVtgdcbuMHR+5l6+SFSJoZT/Z
+bwvHwmncNZJky8hxBI2hbcf9tCfPAXLbZKHMpGeeevdp7otboRprycp96skbh1g2
+xzDYGGr3lCY8bAfQ+GNoL80k4T1i1/+gBAQudskmJNYch0QIz9wBOiOqreOyH2f6
+uDoxzkwgld0lWDSnDa42Lr8oxDfMh+VYzAEWq61NB83b0MtzETN1hdAArG6X3TyG
+SypIf0wvQC0+ZK8+cGuxy99spFVIiQmk9pbar5LG1ADaOucH2IJqO7eidS8W0bl1
+dfhtpfhW87WukJuPVz19+hDeaOji
+-----END CERTIFICATE-----

+ 28 - 0
resources/certs/wechat/apiclient_key.pem

@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCh0M6lfwTfXRuM
+hfsNP5y2etAYDpSXTytR67+RZpNFtb7QlXkMA2GSuzsMp13AQmBC9+7AyUpEAmMw
+n1iAK4FtrLJxGsqXus0NzzpRmCDJoJ4hKR85f3TXUvUjuvXDENRP0FnN9EGVGxjY
+vOhLc2CZ8KQdeUwuFMvWvLmIC7sVcKblI+pDTRC6FZR+R5mpfTt7kcOeXUEWFDJV
+bgtIk8UU15Q8IDjxPIpKEPHrnUr709m7Gzjz0JoL8DDpCsLg7laRGZRM1UREhtBz
+As7hEe77JXxNMjV+aLKDpv0KQj9rbGmP6d1aIKntc25PW4864twY6dKrgfG0E1oE
+H6W3rj1/AgMBAAECggEAe4Z3yZRuNsjP1/ULUfDGg/K62jJ/MgaIrk/F/IwOTr/P
++1CviAEowidVi3JUOgkxjM3Rn6/JlqMv7xUlLSqI8h1MVtU55JwAHtOb1F/KX8DS
+FcRbhrwKiLlWU0FMjO1S9d66P2N/kQCPdhy3Q6m/C6TM04ceJWtQtAt7oiQ6W8Fd
+irEkghy9jwIYHJ0erC8aS7ht9Yp2d/15XtqjDZZ8zpaKE4rGgX8uVQxY/OXAGPTJ
+98MkPnWZ4H49H02187FCm7+25r7jQ9llfS3CsA5YLw/o+dO0OLG/f+onrlOyPfuJ
+oM8nqYFqpEVibdNgSbsOYi/TS2MgnimdWJUmbOjF6QKBgQDPRYG+fKT9cdyRg7T2
+ilw5C/d1+e/Cj/8opwXYy4bNdUUvqFKDmcTCu808ZNQzJQWRTgEnK5sN61/DYxDd
+S2MExRLnCSTg1xyoHMwpqVfZtE3sPXNL7s8OOZOYc+bdWD045Q3UaPBAilICRuf9
+h78LzmHOPzTdHnXvcsxCgAZQUwKBgQDH25ImBzzB6t/csdU/zwXgZfqgwNcmkeSA
+PHIQNqSEMrM5uMes1fUYtJ+XH/2lIx8tr9ZtaOEw/gyYNkOOIHxkP7sTD29Z0adp
+bXbHH8N/ShC29RkPERY5owRDkI1k4XaYXL/GuXBKvODHss21z2OnNIrYM1iro0LG
+k3ZNEMKopQKBgQDMF9EN1IZR2ZAq6NmD+fGdap8c2CKyHkBNs0kalC4EmXiq2L+H
+Ph508Z/B3DbmtYmp7nlMLK/dIOuG5UFx5g12YOef/20EyEw7bT/Ltif/An/IIyoo
+ltnjU+Z1s4qcYYrHPyRDB6Gqq4jdHRzKlKQV5/5+q9ZN9PSD9zISOSX+aQKBgB2V
+ZfPVHGxD/TEo7b0NQvxtfATxpqdh7yYATI4T2JRtANSpgn0WCrrGed0f8ibQpRvZ
+LG9zl+ntoSWi2qseKeuY93Mh1MTB4PsdJfjhvcmIyCKc80GksNqFQ+tQaW2mZiy1
+hfm/l1yoyskksYiZE1I719Wa/CQj/Y1xZJCRy461AoGARLGsrD8KYPrCNPGOhkCg
+16475/SbFhnHWWdghvIfpGjCewQsmcmDWPqFfthxr+lUrN+dtm5ktgfy7JMpRLzL
+Xpqbs2PjNoErvNvtIZ9yeisP6E82McpUbt9fKa62sBSxMrSYpvvnHCSvacwHWkfe
+WKHtv4Ab0zAmCg1IAibZe8Q=
+-----END PRIVATE KEY-----

+ 0 - 0
resources/css/app.css


+ 1 - 0
resources/js/app.js

@@ -0,0 +1 @@
+require('./bootstrap');

+ 28 - 0
resources/js/bootstrap.js

@@ -0,0 +1,28 @@
+window._ = require('lodash');
+
+/**
+ * We'll load the axios HTTP library which allows us to easily issue requests
+ * to our Laravel back-end. This library automatically handles sending the
+ * CSRF token as a header based on the value of the "XSRF" token cookie.
+ */
+
+window.axios = require('axios');
+
+window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
+
+/**
+ * Echo exposes an expressive API for subscribing to channels and listening
+ * for events that are broadcast by Laravel. Echo and event broadcasting
+ * allows your team to easily build robust real-time web applications.
+ */
+
+// import Echo from 'laravel-echo';
+
+// window.Pusher = require('pusher-js');
+
+// window.Echo = new Echo({
+//     broadcaster: 'pusher',
+//     key: process.env.MIX_PUSHER_APP_KEY,
+//     cluster: process.env.MIX_PUSHER_APP_CLUSTER,
+//     forceTLS: true
+// });

+ 28 - 0
resources/lang/en/api.php

@@ -0,0 +1,28 @@
+<?php
+
+return [
+    '1002'=> 'success',
+    '1003'=> 'failed',
+    '1004'=> 'not login',
+    '1005'=> 'Illegal access',
+    '1006'=> 'Illegal operation',
+    '1007'=> 'Save failed',
+    '1008'=> 'Saved successfully',
+    '1009'=> 'not data',
+    '1010'=> 'Data obtained',
+
+    // 登录注册
+    '2001'=> 'Illegal or nonexistent account',
+    '2002'=> 'Login password error',
+    '2003'=> 'Login failed',
+    '2004'=> 'Login successful',
+    '2005'=> 'Registered account has been used',
+    '2006'=> 'Incorrect verification code',
+    '2007'=> 'Account registration failed',
+    '2008'=> 'Account registration succeeded',
+
+    // 语言设置
+    '2101'=> 'Language parameter error',
+    '2102'=> 'Switch language succeeded',
+    '2103'=> 'Failed to switch languages',
+];

+ 19 - 0
resources/lang/en/auth.php

@@ -0,0 +1,19 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Authentication Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used during authentication for various
+    | messages that we need to display to the user. You are free to modify
+    | these language lines according to your application's requirements.
+    |
+    */
+
+    'failed' => 'These credentials do not match our records.',
+    'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
+
+];

+ 19 - 0
resources/lang/en/pagination.php

@@ -0,0 +1,19 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Pagination Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the paginator library to build
+    | the simple pagination links. You are free to change them to anything
+    | you want to customize your views to better match your application.
+    |
+    */
+
+    'previous' => '&laquo; Previous',
+    'next' => 'Next &raquo;',
+
+];

+ 22 - 0
resources/lang/en/passwords.php

@@ -0,0 +1,22 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Password Reset Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are the default lines which match reasons
+    | that are given by the password broker for a password update attempt
+    | has failed, such as for an invalid token or invalid new password.
+    |
+    */
+
+    'reset' => 'Your password has been reset!',
+    'sent' => 'We have emailed your password reset link!',
+    'throttled' => 'Please wait before retrying.',
+    'token' => 'This password reset token is invalid.',
+    'user' => "We can't find a user with that email address.",
+
+];

+ 152 - 0
resources/lang/en/validation.php

@@ -0,0 +1,152 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines contain the default error messages used by
+    | the validator class. Some of these rules have multiple versions such
+    | as the size rules. Feel free to tweak each of these messages here.
+    |
+    */
+
+    'accepted' => 'The :attribute must be accepted.',
+    'active_url' => 'The :attribute is not a valid URL.',
+    'after' => 'The :attribute must be a date after :date.',
+    'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
+    'alpha' => 'The :attribute may only contain letters.',
+    'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.',
+    'alpha_num' => 'The :attribute may only contain letters and numbers.',
+    'array' => 'The :attribute must be an array.',
+    'before' => 'The :attribute must be a date before :date.',
+    'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
+    'between' => [
+        'numeric' => 'The :attribute must be between :min and :max.',
+        'file' => 'The :attribute must be between :min and :max kilobytes.',
+        'string' => 'The :attribute must be between :min and :max characters.',
+        'array' => 'The :attribute must have between :min and :max items.',
+    ],
+    'boolean' => 'The :attribute field must be true or false.',
+    'confirmed' => 'The :attribute confirmation does not match.',
+    'date' => 'The :attribute is not a valid date.',
+    'date_equals' => 'The :attribute must be a date equal to :date.',
+    'date_format' => 'The :attribute does not match the format :format.',
+    'different' => 'The :attribute and :other must be different.',
+    'digits' => 'The :attribute must be :digits digits.',
+    'digits_between' => 'The :attribute must be between :min and :max digits.',
+    'dimensions' => 'The :attribute has invalid image dimensions.',
+    'distinct' => 'The :attribute field has a duplicate value.',
+    'email' => 'The :attribute must be a valid email address.',
+    'ends_with' => 'The :attribute must end with one of the following: :values.',
+    'exists' => 'The selected :attribute is invalid.',
+    'file' => 'The :attribute must be a file.',
+    'filled' => 'The :attribute field must have a value.',
+    'gt' => [
+        'numeric' => 'The :attribute must be greater than :value.',
+        'file' => 'The :attribute must be greater than :value kilobytes.',
+        'string' => 'The :attribute must be greater than :value characters.',
+        'array' => 'The :attribute must have more than :value items.',
+    ],
+    'gte' => [
+        'numeric' => 'The :attribute must be greater than or equal :value.',
+        'file' => 'The :attribute must be greater than or equal :value kilobytes.',
+        'string' => 'The :attribute must be greater than or equal :value characters.',
+        'array' => 'The :attribute must have :value items or more.',
+    ],
+    'image' => 'The :attribute must be an image.',
+    'in' => 'The selected :attribute is invalid.',
+    'in_array' => 'The :attribute field does not exist in :other.',
+    'integer' => 'The :attribute must be an integer.',
+    'ip' => 'The :attribute must be a valid IP address.',
+    'ipv4' => 'The :attribute must be a valid IPv4 address.',
+    'ipv6' => 'The :attribute must be a valid IPv6 address.',
+    'json' => 'The :attribute must be a valid JSON string.',
+    'lt' => [
+        'numeric' => 'The :attribute must be less than :value.',
+        'file' => 'The :attribute must be less than :value kilobytes.',
+        'string' => 'The :attribute must be less than :value characters.',
+        'array' => 'The :attribute must have less than :value items.',
+    ],
+    'lte' => [
+        'numeric' => 'The :attribute must be less than or equal :value.',
+        'file' => 'The :attribute must be less than or equal :value kilobytes.',
+        'string' => 'The :attribute must be less than or equal :value characters.',
+        'array' => 'The :attribute must not have more than :value items.',
+    ],
+    'max' => [
+        'numeric' => 'The :attribute may not be greater than :max.',
+        'file' => 'The :attribute may not be greater than :max kilobytes.',
+        'string' => 'The :attribute may not be greater than :max characters.',
+        'array' => 'The :attribute may not have more than :max items.',
+    ],
+    'mimes' => 'The :attribute must be a file of type: :values.',
+    'mimetypes' => 'The :attribute must be a file of type: :values.',
+    'min' => [
+        'numeric' => 'The :attribute must be at least :min.',
+        'file' => 'The :attribute must be at least :min kilobytes.',
+        'string' => 'The :attribute must be at least :min characters.',
+        'array' => 'The :attribute must have at least :min items.',
+    ],
+    'multiple_of' => 'The :attribute must be a multiple of :value',
+    'not_in' => 'The selected :attribute is invalid.',
+    'not_regex' => 'The :attribute format is invalid.',
+    'numeric' => 'The :attribute must be a number.',
+    'password' => 'The password is incorrect.',
+    'present' => 'The :attribute field must be present.',
+    'regex' => 'The :attribute format is invalid.',
+    'required' => 'The :attribute field is required.',
+    'required_if' => 'The :attribute field is required when :other is :value.',
+    'required_unless' => 'The :attribute field is required unless :other is in :values.',
+    'required_with' => 'The :attribute field is required when :values is present.',
+    'required_with_all' => 'The :attribute field is required when :values are present.',
+    'required_without' => 'The :attribute field is required when :values is not present.',
+    'required_without_all' => 'The :attribute field is required when none of :values are present.',
+    'same' => 'The :attribute and :other must match.',
+    'size' => [
+        'numeric' => 'The :attribute must be :size.',
+        'file' => 'The :attribute must be :size kilobytes.',
+        'string' => 'The :attribute must be :size characters.',
+        'array' => 'The :attribute must contain :size items.',
+    ],
+    'starts_with' => 'The :attribute must start with one of the following: :values.',
+    'string' => 'The :attribute must be a string.',
+    'timezone' => 'The :attribute must be a valid zone.',
+    'unique' => 'The :attribute has already been taken.',
+    'uploaded' => 'The :attribute failed to upload.',
+    'url' => 'The :attribute format is invalid.',
+    'uuid' => 'The :attribute must be a valid UUID.',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify custom validation messages for attributes using the
+    | convention "attribute.rule" to name the lines. This makes it quick to
+    | specify a specific custom language line for a given attribute rule.
+    |
+    */
+
+    'custom' => [
+        'attribute-name' => [
+            'rule-name' => 'custom-message',
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Attributes
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used to swap our attribute placeholder
+    | with something more reader friendly such as "E-Mail Address" instead
+    | of "email". This simply helps us make our message more expressive.
+    |
+    */
+
+    'attributes' => [],
+
+];

+ 305 - 0
resources/lang/zh-cn/api.php

@@ -0,0 +1,305 @@
+<?php
+
+return [
+    '1002'=> '操作成功',
+    '1003'=> '操作失败',
+    '1004'=> '未授权',
+    '1005'=> '签名错误',
+    '1006'=> '非法操作',
+    '1007'=> '保存失败',
+    '1008'=> '保存成功',
+    '1009'=> '获取失败',
+    '1010'=> '获取成功',
+    '1011'=> '验证码发送成功',
+    '1012'=> '请求超时',
+    '1013'=> '修改成功',
+    '1014'=> '修改失败',
+    '1015'=> '已经更新过',
+    '1016'=> '更新失败',
+    '1017'=> '更新成功',
+    '1018'=> '请求失败,服务器错误',
+    '1019'=> '设置成功',
+    '1020'=> '设置失败',
+    '1021'=> '参数类型错误',
+    '1022'=> '参数值错误',
+    '1023' => '发布成功',
+    '1024' => '发布失败',
+    '1025' => '删除成功',
+    '1026' => '删除失败',
+    '1027' => '添加成功',
+    '1028' => '添加失败',
+    '1029' => '余额不足,请使用其他支付方式',
+    '1030' => '支付方式不支持',
+    '1031' => '类型错误',
+    '1032' => '单页文章ID未配置',
+    '1033' => '请选择操作数据',
+    '1034' => '请不要频繁操作,稍后再试',
+    '1035' => '无权操作该订单',
+    '1036' => 'ID不为空',
+    '1037' => '验证码不为空',
+    '1038' => '提交成功',
+    '1039' => '提交失败',
+    '1040' => '请先身份实名认证',
+    '1041' => '未绑定注册,请填写手机号码重新提交',
+
+    '1070'=> '账号未入驻,请先到用户端申请',
+    '1071'=> '账号未审核',
+    '1072'=> '账号已审核',
+    '1073'=> '账号审核未通过',
+    '1074'=> '账号或已被冻结,请联系客服',
+    '1075'=> '消息设置失败',
+    '1076'=> '消息设置成功',
+    '1077'=> '账号已经认证过',
+    '1078'=> '认证信息提交成功,请等候审核',
+    '1079'=> '认证信息提交失败',
+    '1080'=> '请先完成身份认证再操作',
+    '1081'=> '请选择开票订单',
+    '1082'=> '所选订单存在已开票或无效订单,请刷新后重试',
+    '1083'=> '手机号已被绑定,请更换后重试',
+    '1084'=> '该微信已被绑定,请刷新后直接登录',
+
+    // 注册奖励
+    '1101'=> '无推荐人,无邀请奖励',
+    '1102'=> '活动时间未到,无邀请奖励',
+    '1103'=> '活动时间已过,无邀请奖励',
+    '1104'=> '邀请奖励金额参数设置错误或未设置',
+    '1105'=> '红包奖励处理失败',
+    '1106'=> '红包奖励处理成功',
+    '1107'=> '该红包不存在或无效',
+    '1108'=> '奖励的红包金额参数错误',
+    '1109'=> '该红包已领取过',
+    '1110'=> '该红包已过期失效',
+    '1111'=> '该红包您无权领取',
+    '1112'=> '红包领取成功',
+    '1113'=> '红包领取失败',
+
+    // 登录注册
+    '2001'=> '账号非法或不存在',
+    '2002'=> '登录密码错误',
+    '2003'=> '登录失败',
+    '2004'=> '登录成功',
+    '2005'=> '账号已被使用',
+    '2006'=> '验证码不正确',
+    '2007'=> '注册失败',
+    '2008'=> '注册成功',
+    '2009'=> '手机号码已被使用',
+    '2010'=> '短信验证码发送失败',
+    '2011'=> '短信验证码发送频繁,请60秒后重试',
+    '2012'=> '短信验证码已失效',
+    '2013'=> '短信验证码错误',
+    '2014'=> '缺少参数',
+    '2015'=> '账号已被冻结,请联系客服',
+    '2016'=> '微信授权失败',
+    '2017'=> '账号或已被冻结,请稍后再试或联系客服',
+    '2018'=> '账号不可用,请联系客服',
+    '2019'=> '短信接口参数未配置',
+    '2020'=> '短信验证码发送成功',
+    '2021'=> '短信验证码发送失败',
+    '2022'=> '注册成功,请下载并安装APP后登录使用',
+    '2023'=> '您已注册,请下载并安装APP后登录使用',
+    '2024'=> '您的账号或已被冻结,请联系客服',
+    '2025'=> '收款账号不存在或已被冻结,请联系客服',
+    '2026'=> '您到账号余额不足,请先使用其他支付方式或刷新后重试',
+    '2027'=> '您到商户余额不足,请先使用其他支付方式或刷新后重试',
+    '2028'=> '账户处理失败,请刷新后重试',
+    '2029'=> '账户明细处理失败,请刷新后重试',
+    '2030'=> '转账成功',
+    '2031'=> '请先选择或填写充值金额',
+    '2032'=> '请先选择充值支付方式',
+    '2033'=> '充值订单提交失败',
+    '2034'=> '充值订单提交成功,调起支付',
+    '2035'=> '支付方式参数错误',
+    '2036'=> '账户余额不足,请先使用其他支付方式',
+    '2037'=> '付款金额错误',
+    '2038'=> '付款账号参数错误',
+    '2039'=> '余额扣款失败',
+    '2040'=> '余额支付失败',
+    '2041'=> '余额支付成功',
+    '2042'=> '出行订单服务类型参数错误',
+    '2043'=> '当前行程超出服务距离:distance km',
+    '2044'=> '该用户未绑定支付宝账号,无法完成打款',
+    '2045'=> '该用户未授权绑定微信,无法完成打款',
+    '2046'=> '打款失败',
+    '2047'=> '打款成功',
+
+    '2100'=> '请选择车型',
+    '2101'=> '缺少必要参数',
+    '2102'=> '订单类型参数错误',
+    '2103'=> '订单服务类型参数错误',
+    '2104'=> '车型参数配置错误,请联系客服',
+    '2105'=> '请选择您起点或目的地',
+    '2106'=> '您的行程或配送距离较短小于100米,请确认或更换出行方式',
+    '2107'=> '货运订单需填写货物信息',
+    '2108'=> '货运订单需填写收货人信息',
+    '2109'=> '货物分类信息不存在,请刷新后重试',
+    '2110'=> '货物包装类型不存在,请刷新后重试',
+    '2111'=> '货物规格类型不存在,请刷新后重试',
+    '2112'=> '价格参数配置错误,请联系客服或刷新重试',
+    '2113'=> '优惠券无效或已使用,请刷新重试',
+    '2114'=> '出行订单出行方式参数错误',
+    '2115'=> '抱歉您还有未完成的的订单,请先完成后再操作',
+    '2116'=> '创建诚意金订单失败,请刷新后重试',
+    '2117'=> '创建订单失败,请刷新后重试',
+    '2118'=> '诚意金余额付款失败',
+    '2119'=> '订单余额付款失败',
+    '2120'=> '订单创建成功,已付诚意金',
+    '2121'=> '订单支付成功',
+    '2122'=> '订单创建成功,请支付',
+    '2123'=> '请选择预约时间',
+    '2124'=> '出行订单只支持现付',
+    '2125'=> '到付方式需选择支付诚意金',
+    '2126'=> '订单货物信息处理错误',
+    '2127'=> '支付订单创建错误',
+    '2128'=> '订单不存在',
+    '2129'=> '当前订单状态不可操作,刷新后重试',
+    '2130'=> '您今日的订单取消次数已用完',
+    '2131'=> '更新订单状态失败',
+    '2132'=> '取消订单账户处理失败',
+    '2133'=> '取消订单账户明细处理失败',
+    '2134'=> '取消订单退款处理失败',
+    '2135'=> '取消订单退款账户处理失败',
+    '2136'=> '订单支付信息不存在,请联系客服',
+    '2137'=> '订单取消退款到余额失败',
+    '2138'=> '订单用户信息错误',
+    '2139'=> '订单取消成功',
+    '2140'=> '订单取消返还优惠券失败',
+
+    '2141'=> '您有正在服务的订单,请先完成后接单',
+    '2142'=> '接单失败,请刷新后重试',
+    '2143'=> '接单处理失败,请刷新后重试',
+    '2144'=> '接单成功',
+    '2145'=> '抱歉请先到设置,设置上线再接单',
+    '2146'=> '抱歉请先接单再取货/接客',
+    '2147'=> '取货失败',
+    '2148'=> '接客失败',
+    '2149'=> '接客成功,订单开始服务',
+    '2150'=> '取货成功,订单开始配送',
+
+    '2151'=> '该订单为到付订单,需要先付款',
+    '2152'=> '订单完成处理失败',
+    '2153'=> '订单佣金结算失败',
+    '2154'=> '订单收入结算失败',
+    '2155'=> '操作失败,订单佣金结算失败',
+    '2156'=> '该订单未支付,请先付款后操作',
+
+    '2171'=> '诚意金退款处理失败',
+    '2172'=> '诚意金微信退款处理失败',
+    '2173'=> '诚意金支付宝退款处理失败',
+    '2174'=> '诚意金余额退款处理失败',
+    '2175'=> '订单已确认完成',
+    '2176'=> '该订单非到付订单不需再支付',
+    '2177'=> '该订单已支付',
+    '2178'=> '订单请求支付失败',
+    '2179'=> '到付订单付款成功',
+    '2180'=> '到付订单请求支付成功,请完成支付',
+    '2181'=> '订单司机信息/状态错误,请先匹配司机',
+    '2182'=> '您是普通司机今日接单数量已用完,请先购买VIP升级',
+    '2183'=> '您的VIP已到期今日接单数量已用完,请先购买VIP升级',
+
+    // 佣金
+    '2201'=> '用户不存在',
+    '2202'=> '账户余额不足扣除',
+    '2203'=> '调整账户余额失败',
+    '2204'=> '处理账户明细失败',
+    '2205'=> '调整账户余额成功',
+    '2206'=> '司机不存在',
+
+    // 积分
+    '2212'=> '通证积分余额不足扣除',
+    '2213'=> '调整通证积分账户失败',
+    '2214'=> '处理通证积分账户明细失败',
+    '2215'=> '调整通证积分成功',
+
+    '2420'=> '请先到我的收款方式绑定微信收款账号',
+    '2421'=> '请先到我的收款方式绑定支付宝收款账号',
+    '2422'=> '请先到我的收款方式绑定银行卡',
+    '2423'=> '提现账户处理失败',
+    '2424'=> '提现成功,请耐心等候审核打款~',
+    '2425'=> '请选择提现打款方式',
+    '2426'=> '提现订单创建失败',
+    '2427'=> '在线奖励未达到最低可提现金额:money元',
+    '2428'=> '在线奖励每月可提现:num次,本月已使用完',
+    '2429'=> '在线奖励提现处理失败',
+    '2430'=> '成功提现:money元到余额',
+
+    '2613'=> '优惠券使用错误',
+    '2614'=> '订单支付金额错误',
+    '2615'=> '优惠券使用错误',
+    '2616'=> '微信支付参数未配置',
+    '2617'=> '微信支付调用成功',
+    '2618'=> '微信支付调用失败',
+    '2619'=> '支付宝支付参数未配置',
+    '2620'=> '支付宝支付调用成功',
+    '2621'=> '支付宝支付调用失败',
+    '2622'=> '支付回调状态未成功',
+    '2623'=> '支付回调订单参数错误',
+    '2624'=> '支付回调付款金额错误',
+    '2625'=> '支付请求信息错误',
+    '2626'=> '订单已支付',
+    '2627'=> '订单回调支付类型不一致',
+    '2628'=> '订单付款金额错误',
+    '2629'=> '支付订单不存在',
+    '2630'=> '支付订单已处理',
+    '2631'=> '支付场景参数错误',
+    '2632'=> '支付信息处理错误',
+    '2633'=> '支付订单处理错误',
+    '2634'=> '用户账户入账错误',
+    '2635'=> '支付回调处理失败',
+    '2636'=> '订单不存在或参数错误',
+    '2637'=> '订单支付信息错误,请联系客服',
+    '2638'=> '订单退款处理失败,请联系客服',
+    '2639'=> '订单退款审核状态参数错误',
+    '2640'=> '订单参数错误',
+    '2641'=> '订单配送方式参数值错误',
+    '2642'=> '诚意金订单处理错误',
+    '2643'=> '退还优惠券失败,请刷新重试~',
+    '2644'=> '该优惠券已领完,请刷新重试',
+    '2645'=> '优惠券领取失败',
+
+    '2646'=> '提现账户不存在或不可用~',
+    '2647'=> '司机余额不足,请确认后重试~',
+    '2648'=> '账户余额不足,请确认后重试~',
+    '2649'=> '请先绑定微信收款码',
+    '2650'=> '请先绑定支付宝收款码',
+    '2651'=> '请先绑定银行卡信息',
+    '2652'=> '订单已处理',
+    '2653'=> '该订单已匹配',
+
+    // 优惠
+    '2901'=> '优惠券折扣数值不正确,请填写0-10之内数字',
+    '2902'=> '发放处理失败',
+    '2903'=> '发放成功',
+    '2904'=> '优惠券不存在,请刷新后重试',
+    '2905'=> '优惠券发放超出每月发放数量:num次限制',
+    '2906'=> '优惠券不存在或已失效,请刷新后重试',
+    '2907'=> '领取失败',
+    '2908'=> '领取成功',
+
+    // 司机
+    '3001'=> '当前账号已经申请成为司机',
+    '3002'=> '该手机号已被使用,请更换后重试',
+    '3003'=> '车型数据不存在或无效',
+    '3004'=> '车品牌数据不存在或无效',
+    '3005'=> '申请入驻司机失败,请刷新后重试',
+    '3006'=> '申请入驻司机资料处理错误,请刷新重试',
+    '3007'=> '申请入驻司机成功,请耐心等候审核',
+
+    // 升级VIP
+    '3101'=> 'VIP等级参数错误',
+    '3102'=> '购买等级VIP失败',
+    '3103'=> '购买等级VIP处理失败',
+    '3104'=> '购买等级VIP成功',
+    '3105'=> '购买等级VIP创建订单成功,请支付',
+    '3106'=> '购买等级VIP不能低于当前等级',
+    '3107'=> '账户处理失败',
+
+    // 代理
+    '4001'=> '当前账号已经申请成为代理',
+    '4002'=> '该区域已被申请,请刷新后重试',
+    '4003'=> '申请成为代理失败,请刷新后重试',
+    '4004'=> '申请成为代理成功,请耐心等候审核',
+    '4005'=> '申请类型参数错误',
+    '4006'=> '申请代理类型预缴保证金参数配置错误,请联系客服',
+
+
+];

+ 19 - 0
resources/lang/zh-cn/auth.php

@@ -0,0 +1,19 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Authentication Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used during authentication for various
+    | messages that we need to display to the user. You are free to modify
+    | these language lines according to your application's requirements.
+    |
+    */
+
+    'failed' => 'These credentials do not match our records.',
+    'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
+
+];

+ 19 - 0
resources/lang/zh-cn/pagination.php

@@ -0,0 +1,19 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Pagination Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used by the paginator library to build
+    | the simple pagination links. You are free to change them to anything
+    | you want to customize your views to better match your application.
+    |
+    */
+
+    'previous' => '&laquo; Previous',
+    'next' => 'Next &raquo;',
+
+];

+ 22 - 0
resources/lang/zh-cn/passwords.php

@@ -0,0 +1,22 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Password Reset Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are the default lines which match reasons
+    | that are given by the password broker for a password update attempt
+    | has failed, such as for an invalid token or invalid new password.
+    |
+    */
+
+    'reset' => 'Your password has been reset!',
+    'sent' => 'We have emailed your password reset link!',
+    'throttled' => 'Please wait before retrying.',
+    'token' => 'This password reset token is invalid.',
+    'user' => "We can't find a user with that email address.",
+
+];

+ 152 - 0
resources/lang/zh-cn/validation.php

@@ -0,0 +1,152 @@
+<?php
+
+return [
+
+    /*
+    |--------------------------------------------------------------------------
+    | Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines contain the default error messages used by
+    | the validator class. Some of these rules have multiple versions such
+    | as the size rules. Feel free to tweak each of these messages here.
+    |
+    */
+
+    'accepted' => 'The :attribute must be accepted.',
+    'active_url' => 'The :attribute is not a valid URL.',
+    'after' => 'The :attribute must be a date after :date.',
+    'after_or_equal' => 'The :attribute must be a date after or equal to :date.',
+    'alpha' => 'The :attribute may only contain letters.',
+    'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.',
+    'alpha_num' => 'The :attribute may only contain letters and numbers.',
+    'array' => 'The :attribute must be an array.',
+    'before' => 'The :attribute must be a date before :date.',
+    'before_or_equal' => 'The :attribute must be a date before or equal to :date.',
+    'between' => [
+        'numeric' => 'The :attribute must be between :min and :max.',
+        'file' => 'The :attribute must be between :min and :max kilobytes.',
+        'string' => 'The :attribute must be between :min and :max characters.',
+        'array' => 'The :attribute must have between :min and :max items.',
+    ],
+    'boolean' => 'The :attribute field must be true or false.',
+    'confirmed' => 'The :attribute confirmation does not match.',
+    'date' => 'The :attribute is not a valid date.',
+    'date_equals' => 'The :attribute must be a date equal to :date.',
+    'date_format' => 'The :attribute does not match the format :format.',
+    'different' => 'The :attribute and :other must be different.',
+    'digits' => 'The :attribute must be :digits digits.',
+    'digits_between' => 'The :attribute must be between :min and :max digits.',
+    'dimensions' => 'The :attribute has invalid image dimensions.',
+    'distinct' => 'The :attribute field has a duplicate value.',
+    'email' => 'The :attribute must be a valid email address.',
+    'ends_with' => 'The :attribute must end with one of the following: :values.',
+    'exists' => 'The selected :attribute is invalid.',
+    'file' => 'The :attribute must be a file.',
+    'filled' => 'The :attribute field must have a value.',
+    'gt' => [
+        'numeric' => 'The :attribute must be greater than :value.',
+        'file' => 'The :attribute must be greater than :value kilobytes.',
+        'string' => 'The :attribute must be greater than :value characters.',
+        'array' => 'The :attribute must have more than :value items.',
+    ],
+    'gte' => [
+        'numeric' => 'The :attribute must be greater than or equal :value.',
+        'file' => 'The :attribute must be greater than or equal :value kilobytes.',
+        'string' => 'The :attribute must be greater than or equal :value characters.',
+        'array' => 'The :attribute must have :value items or more.',
+    ],
+    'image' => 'The :attribute must be an image.',
+    'in' => 'The selected :attribute is invalid.',
+    'in_array' => 'The :attribute field does not exist in :other.',
+    'integer' => 'The :attribute must be an integer.',
+    'ip' => 'The :attribute must be a valid IP address.',
+    'ipv4' => 'The :attribute must be a valid IPv4 address.',
+    'ipv6' => 'The :attribute must be a valid IPv6 address.',
+    'json' => 'The :attribute must be a valid JSON string.',
+    'lt' => [
+        'numeric' => 'The :attribute must be less than :value.',
+        'file' => 'The :attribute must be less than :value kilobytes.',
+        'string' => 'The :attribute must be less than :value characters.',
+        'array' => 'The :attribute must have less than :value items.',
+    ],
+    'lte' => [
+        'numeric' => 'The :attribute must be less than or equal :value.',
+        'file' => 'The :attribute must be less than or equal :value kilobytes.',
+        'string' => 'The :attribute must be less than or equal :value characters.',
+        'array' => 'The :attribute must not have more than :value items.',
+    ],
+    'max' => [
+        'numeric' => 'The :attribute may not be greater than :max.',
+        'file' => 'The :attribute may not be greater than :max kilobytes.',
+        'string' => 'The :attribute may not be greater than :max characters.',
+        'array' => 'The :attribute may not have more than :max items.',
+    ],
+    'mimes' => 'The :attribute must be a file of type: :values.',
+    'mimetypes' => 'The :attribute must be a file of type: :values.',
+    'min' => [
+        'numeric' => 'The :attribute must be at least :min.',
+        'file' => 'The :attribute must be at least :min kilobytes.',
+        'string' => 'The :attribute must be at least :min characters.',
+        'array' => 'The :attribute must have at least :min items.',
+    ],
+    'multiple_of' => 'The :attribute must be a multiple of :value',
+    'not_in' => 'The selected :attribute is invalid.',
+    'not_regex' => 'The :attribute format is invalid.',
+    'numeric' => 'The :attribute must be a number.',
+    'password' => 'The password is incorrect.',
+    'present' => 'The :attribute field must be present.',
+    'regex' => 'The :attribute format is invalid.',
+    'required' => 'The :attribute field is required.',
+    'required_if' => 'The :attribute field is required when :other is :value.',
+    'required_unless' => 'The :attribute field is required unless :other is in :values.',
+    'required_with' => 'The :attribute field is required when :values is present.',
+    'required_with_all' => 'The :attribute field is required when :values are present.',
+    'required_without' => 'The :attribute field is required when :values is not present.',
+    'required_without_all' => 'The :attribute field is required when none of :values are present.',
+    'same' => 'The :attribute and :other must match.',
+    'size' => [
+        'numeric' => 'The :attribute must be :size.',
+        'file' => 'The :attribute must be :size kilobytes.',
+        'string' => 'The :attribute must be :size characters.',
+        'array' => 'The :attribute must contain :size items.',
+    ],
+    'starts_with' => 'The :attribute must start with one of the following: :values.',
+    'string' => 'The :attribute must be a string.',
+    'timezone' => 'The :attribute must be a valid zone.',
+    'unique' => 'The :attribute has already been taken.',
+    'uploaded' => 'The :attribute failed to upload.',
+    'url' => 'The :attribute format is invalid.',
+    'uuid' => 'The :attribute must be a valid UUID.',
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Language Lines
+    |--------------------------------------------------------------------------
+    |
+    | Here you may specify custom validation messages for attributes using the
+    | convention "attribute.rule" to name the lines. This makes it quick to
+    | specify a specific custom language line for a given attribute rule.
+    |
+    */
+
+    'custom' => [
+        'attribute-name' => [
+            'rule-name' => 'custom-message',
+        ],
+    ],
+
+    /*
+    |--------------------------------------------------------------------------
+    | Custom Validation Attributes
+    |--------------------------------------------------------------------------
+    |
+    | The following language lines are used to swap our attribute placeholder
+    | with something more reader friendly such as "E-Mail Address" instead
+    | of "email". This simply helps us make our message more expressive.
+    |
+    */
+
+    'attributes' => [],
+
+];

+ 2 - 0
resources/views/templates/.gitignore

@@ -0,0 +1,2 @@
+*
+!.gitignore

File diff suppressed because it is too large
+ 132 - 0
resources/views/welcome.blade.php


+ 187 - 0
routes/api.php

@@ -0,0 +1,187 @@
+<?php
+
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Route;
+
+/*
+|--------------------------------------------------------------------------
+| API Routes
+|--------------------------------------------------------------------------
+|
+| Here is where you can register API routes for your application. These
+| routes are loaded by the RouteServiceProvider within a group which
+| is assigned the "api" middleware group. Enjoy building your API!
+|
+*/
+
+
+// 用户端路由组
+Route::prefix('v1')->group(function() {
+    // 登录注册、验证码
+    Route::post('/login/mobile', [\App\Http\Controllers\Api\v1\LoginController::class, 'loginMobile']);
+    Route::post('/login/wechat', [\App\Http\Controllers\Api\v1\LoginController::class, 'loginWechat']);
+    Route::post('/logout', [\App\Http\Controllers\Api\v1\LoginController::class, 'logout']);
+    Route::post('/register', [\App\Http\Controllers\Api\v1\LoginController::class, 'register']);
+    Route::post('/sms/send', [\App\Http\Controllers\Api\v1\LoginController::class, 'sendmsm']);
+
+    // 上传文件
+    Route::post('/upload/image', [\App\Http\Controllers\Api\UploadController::class, 'uploadImage']);
+    Route::post('/upload/file', [\App\Http\Controllers\Api\UploadController::class, 'uploadFile']);
+
+    // 配置和首页数据
+    Route::get('/app/config', [\App\Http\Controllers\Api\v1\IndexController::class, 'config']);
+    Route::get('/versionCheck', [\App\Http\Controllers\Api\v1\IndexController::class, 'versionCheck']);
+    Route::get('/index/data', [\App\Http\Controllers\Api\v1\IndexController::class, 'data']);
+    Route::get('/index/banner', [\App\Http\Controllers\Api\v1\IndexController::class, 'banner']);
+    Route::get('/index/banks', [\App\Http\Controllers\Api\v1\IndexController::class, 'banks']);
+
+    // 车参数
+    Route::get('/car/categoryList', [\App\Http\Controllers\Api\v1\IndexController::class, 'carCategorys']);
+    Route::get('/car/brandList', [\App\Http\Controllers\Api\v1\IndexController::class, 'carBrands']);
+
+    // 货物
+    Route::get('/index/freight', [\App\Http\Controllers\Api\v1\IndexController::class, 'freight']);
+
+    // 用户信息
+    Route::get('/user/info', [\App\Http\Controllers\Api\v1\MemberController::class, 'info']);
+    Route::post('/user/setAvatar', [\App\Http\Controllers\Api\v1\MemberController::class, 'setAvatar']);
+    Route::post('/user/modify', [\App\Http\Controllers\Api\v1\MemberController::class, 'modify']);
+    Route::post('/user/idcardCheck', [\App\Http\Controllers\Api\v1\MemberController::class, 'idcardCheck']);
+    Route::post('/user/bindAccount', [\App\Http\Controllers\Api\v1\MemberController::class, 'bindAccount']);
+    Route::get('/user/getAccount', [\App\Http\Controllers\Api\v1\MemberController::class, 'getAccount']);
+    Route::post('/user/withdraw', [\App\Http\Controllers\Api\v1\MemberController::class, 'withdraw']);
+    Route::post('/user/package/receive', [\App\Http\Controllers\Api\v1\MemberController::class, 'packageReceive']);
+    Route::post('/user/package/list', [\App\Http\Controllers\Api\v1\MemberController::class, 'packageList']);
+
+    // 银行卡
+    Route::post('/user/banks/index', [\App\Http\Controllers\Api\v1\MemberBankController::class, 'index']);
+    Route::post('/user/banks/save', [\App\Http\Controllers\Api\v1\MemberBankController::class, 'save']);
+    Route::post('/user/banks/delete', [\App\Http\Controllers\Api\v1\MemberBankController::class, 'delete']);
+
+    // 代理
+    Route::post('/agent/apply', [\App\Http\Controllers\Api\v1\AgentController::class, 'apply']);
+    Route::get('/agent/regions', [\App\Http\Controllers\Api\v1\AgentController::class, 'regions']);
+    Route::get('/agent/applyInfo', [\App\Http\Controllers\Api\v1\AgentController::class, 'applyInfo']);
+
+
+    // 司机申请
+    Route::post('/driver/apply', [\App\Http\Controllers\Api\v1\DriverController::class, 'apply']);
+    Route::get('/driver/applyInfo', [\App\Http\Controllers\Api\v1\DriverController::class, 'applyInfo']);
+    Route::post('/driver/lines', [\App\Http\Controllers\Api\v1\DriverController::class, 'lines']);
+
+    // 优惠券
+    Route::post('/coupon/index', [\App\Http\Controllers\Api\v1\CouponController::class, 'index']);
+    Route::post('/coupon/receive', [\App\Http\Controllers\Api\v1\CouponController::class, 'receive']);
+    Route::post('/user/coupon/index', [\App\Http\Controllers\Api\v1\MemberCouponController::class, 'index']);
+    Route::post('/user/coupon/delete', [\App\Http\Controllers\Api\v1\MemberCouponController::class, 'delete']);
+
+    // 消费订单
+    Route::post('/order/index', [\App\Http\Controllers\Api\v1\OrderController::class, 'index']);
+    Route::post('/order/list', [\App\Http\Controllers\Api\v1\OrderController::class, 'list']);
+    Route::get('/order/info', [\App\Http\Controllers\Api\v1\OrderController::class, 'info']);
+    Route::post('/order/submit', [\App\Http\Controllers\Api\v1\OrderController::class, 'submit']);
+    Route::post('/order/count', [\App\Http\Controllers\Api\v1\OrderController::class, 'count']);
+    Route::post('/order/pay', [\App\Http\Controllers\Api\v1\OrderController::class, 'pay']);
+    Route::post('/order/cancel', [\App\Http\Controllers\Api\v1\OrderController::class, 'cancel']);
+    Route::post('/order/exception', [\App\Http\Controllers\Api\v1\OrderController::class, 'exception']);
+    Route::post('/order/complete', [\App\Http\Controllers\Api\v1\OrderController::class, 'complete']);
+    Route::post('/order/distance', [\App\Http\Controllers\Api\v1\OrderController::class, 'distance']);
+
+    // 收货地址
+    Route::post('/address/index', [\App\Http\Controllers\Api\v1\MemberAddressController::class, 'index']);
+    Route::post('/address/save', [\App\Http\Controllers\Api\v1\MemberAddressController::class, 'save']);
+    Route::post('/address/delete', [\App\Http\Controllers\Api\v1\MemberAddressController::class, 'delete']);
+
+    // 文章
+    Route::post('/article/index', [\App\Http\Controllers\Api\v1\ArticleController::class, 'index']);
+    Route::get('/article/info', [\App\Http\Controllers\Api\v1\ArticleController::class, 'info']);
+    Route::get('/article/page', [\App\Http\Controllers\Api\v1\ArticleController::class, 'page']);
+
+    // 消息
+    Route::post('/message/index', [\App\Http\Controllers\Api\v1\MessageController::class, 'index']);
+    Route::post('/message/history', [\App\Http\Controllers\Api\v1\MessageController::class, 'history']);
+    Route::get('/message/getSetting', [\App\Http\Controllers\Api\v1\MessageController::class, 'getSetting']);
+    Route::post('/message/setSetting', [\App\Http\Controllers\Api\v1\MessageController::class, 'setSetting']);
+    Route::get('/message/setRead', [\App\Http\Controllers\Api\v1\MessageController::class, 'setRead']);
+
+    // 账单明细
+    Route::post('/account/index', [\App\Http\Controllers\Api\v1\AccountController::class, 'index']);
+    Route::post('/account/counts', [\App\Http\Controllers\Api\v1\AccountController::class, 'counts']);
+    Route::post('/account/balance', [\App\Http\Controllers\Api\v1\AccountController::class, 'balance']);
+
+
+    // 投诉建议
+    Route::post('/complaint/index', [\App\Http\Controllers\Api\v1\ComplaintController::class, 'index']);
+    Route::post('/complaint/submit', [\App\Http\Controllers\Api\v1\ComplaintController::class, 'submit']);
+
+    // 发票
+    Route::post('/ticket/index', [\App\Http\Controllers\Api\v1\TicketController::class, 'index']);
+    Route::post('/ticket/info', [\App\Http\Controllers\Api\v1\TicketController::class, 'info']);
+    Route::post('/ticket/submit', [\App\Http\Controllers\Api\v1\TicketController::class, 'submit']);
+
+    // 客服
+    Route::post('/custom/index', [\App\Http\Controllers\Api\v1\ArticleController::class, 'customRecommend']);
+    Route::post('/custom/search', [\App\Http\Controllers\Api\v1\ArticleController::class, 'custom']);
+
+
+});
+
+
+// 司机端路由组
+Route::prefix('v1')->group(function() {
+    // 登录注册、验证码
+    Route::post('/driver/login/mobile', [\App\Http\Controllers\Api\driver\LoginController::class, 'loginMobile']);
+    Route::post('/driver/logout', [\App\Http\Controllers\Api\driver\LoginController::class, 'logout']);
+
+    // 司机信息
+    Route::get('/driver/info', [\App\Http\Controllers\Api\driver\DriverController::class, 'info']);
+    Route::post('/driver/setAvatar', [\App\Http\Controllers\Api\driver\DriverController::class, 'setAvatar']);
+    Route::post('/driver/modify', [\App\Http\Controllers\Api\driver\DriverController::class, 'modify']);
+    Route::post('/driver/bindAccount', [\App\Http\Controllers\Api\driver\DriverController::class, 'bindAccount']);
+    Route::get('/driver/getAccount', [\App\Http\Controllers\Api\driver\DriverController::class, 'getAccount']);
+    Route::post('/driver/withdraw', [\App\Http\Controllers\Api\driver\DriverController::class, 'withdraw']);
+    Route::post('/driver/onlineWithdraw', [\App\Http\Controllers\Api\driver\DriverController::class, 'onlineWithdraw']);
+    Route::post('/driver/line/list', [\App\Http\Controllers\Api\driver\DriverController::class, 'lines']);
+    Route::post('/driver/line/submit', [\App\Http\Controllers\Api\driver\DriverController::class, 'lineSubmit']);
+    Route::get('/driver/getVipLevel', [\App\Http\Controllers\Api\driver\DriverController::class, 'getVipLevel']);
+    Route::post('/driver/buyVip', [\App\Http\Controllers\Api\driver\DriverController::class, 'buyVip']);
+
+    // 订单
+    Route::post('/driver/order/index', [\App\Http\Controllers\Api\driver\OrderController::class, 'index']);
+    Route::post('/driver/order/list', [\App\Http\Controllers\Api\driver\OrderController::class, 'list']);
+    Route::get('/driver/order/info', [\App\Http\Controllers\Api\driver\OrderController::class, 'info']);
+    Route::get('/driver/order/picker', [\App\Http\Controllers\Api\driver\OrderController::class, 'picker']);
+    Route::get('/driver/order/receive', [\App\Http\Controllers\Api\driver\OrderController::class, 'receive']);
+    Route::post('/driver/order/cancel', [\App\Http\Controllers\Api\driver\OrderController::class, 'cancel']);
+    Route::post('/driver/order/check', [\App\Http\Controllers\Api\driver\OrderController::class, 'check']);
+    Route::post('/driver/order/exception', [\App\Http\Controllers\Api\driver\OrderController::class, 'exception']);
+    Route::post('/driver/order/complete', [\App\Http\Controllers\Api\driver\OrderController::class, 'complete']);
+
+    // 消息
+    Route::post('/driver/message/index', [\App\Http\Controllers\Api\driver\MessageController::class, 'index']);
+    Route::post('/driver/message/history', [\App\Http\Controllers\Api\driver\MessageController::class, 'history']);
+    Route::get('/driver/message/getSetting', [\App\Http\Controllers\Api\driver\MessageController::class, 'getSetting']);
+    Route::post('/driver/message/setSetting', [\App\Http\Controllers\Api\driver\MessageController::class, 'setSetting']);
+    Route::get('/driver/message/setRead', [\App\Http\Controllers\Api\driver\MessageController::class, 'setRead']);
+
+    // 账单明细
+    Route::post('/driver/account/index', [\App\Http\Controllers\Api\driver\AccountController::class, 'index']);
+    Route::post('/driver/account/counts', [\App\Http\Controllers\Api\driver\AccountController::class, 'counts']);
+    Route::post('/driver/account/balance', [\App\Http\Controllers\Api\driver\AccountController::class, 'balance']);
+
+    // 银行卡
+    Route::post('/driver/banks/index', [\App\Http\Controllers\Api\driver\MemberBankController::class, 'index']);
+    Route::post('/driver/banks/save', [\App\Http\Controllers\Api\driver\MemberBankController::class, 'save']);
+    Route::post('/driver/banks/delete', [\App\Http\Controllers\Api\driver\MemberBankController::class, 'delete']);
+
+    // 投诉建议
+    Route::post('/driver/complaint/index', [\App\Http\Controllers\Api\driver\ComplaintController::class, 'index']);
+    Route::post('/driver/complaint/submit', [\App\Http\Controllers\Api\driver\ComplaintController::class, 'submit']);
+
+});
+
+// 回调处理
+Route::match(['get','post'],'/notify/refund/{payType}', [\App\Http\Controllers\Api\v1\NotifyController::class, 'refund']);
+Route::match(['get','post'],'/notify/{scene}/{payType}', [\App\Http\Controllers\Api\v1\NotifyController::class, 'callback']);
+Route::match(['get','post'],'/test/check', [\App\Http\Controllers\Api\v1\TestController::class, 'check']);
+Route::match(['get','post'],'/test/pwd', [\App\Http\Controllers\Api\v1\TestController::class, 'pwd']);

+ 18 - 0
routes/channels.php

@@ -0,0 +1,18 @@
+<?php
+
+use Illuminate\Support\Facades\Broadcast;
+
+/*
+|--------------------------------------------------------------------------
+| Broadcast Channels
+|--------------------------------------------------------------------------
+|
+| Here you may register all of the event broadcasting channels that your
+| application supports. The given channel authorization callbacks are
+| used to check if an authenticated user can listen to the channel.
+|
+*/
+
+Broadcast::channel('App.Models.User.{id}', function ($user, $id) {
+    return (int) $user->id === (int) $id;
+});

+ 19 - 0
routes/console.php

@@ -0,0 +1,19 @@
+<?php
+
+use Illuminate\Foundation\Inspiring;
+use Illuminate\Support\Facades\Artisan;
+
+/*
+|--------------------------------------------------------------------------
+| Console Routes
+|--------------------------------------------------------------------------
+|
+| This file is where you may define all of your Closure based console
+| commands. Each Closure is bound to a command instance allowing a
+| simple approach to interacting with each command's IO methods.
+|
+*/
+
+Artisan::command('inspire', function () {
+    $this->comment(Inspiring::quote());
+})->purpose('Display an inspiring quote');

+ 288 - 0
routes/web.php

@@ -0,0 +1,288 @@
+<?php
+// +----------------------------------------------------------------------
+// | LARAVEL8.0 框架 [ LARAVEL ][ RXThinkCMF ]
+// +----------------------------------------------------------------------
+// | 版权所有 2017~2021 LARAVEL研发中心
+// +----------------------------------------------------------------------
+// | 官方网站: http://www.laravel.cn
+// +----------------------------------------------------------------------
+// | Author: laravel开发员 <laravel.qq.com>
+// +----------------------------------------------------------------------
+
+use App\Http\Controllers\Admin\ActionLogController;
+use App\Http\Controllers\Admin\AdController;
+use App\Http\Controllers\Admin\CityController;
+use App\Http\Controllers\Admin\ConfigController;
+use App\Http\Controllers\Admin\ConfigGroupController;
+use App\Http\Controllers\Admin\IndexController;
+use App\Http\Controllers\Admin\LoginLogController;
+use App\Http\Controllers\Admin\MemberController;
+use App\Http\Controllers\Admin\MemberLevelController;
+use App\Http\Controllers\Admin\MenuController;
+use App\Http\Controllers\Admin\NoticeController;
+use App\Http\Controllers\Admin\RoleController;
+use App\Http\Controllers\Admin\UploadController;
+use App\Http\Controllers\Admin\UserController;
+use Illuminate\Support\Facades\Route;
+use App\Http\Controllers\Admin\LoginController;
+
+/*
+|--------------------------------------------------------------------------
+| Web Routes
+|--------------------------------------------------------------------------
+|
+| Here is where you can register web routes for your application. These
+| routes are loaded by the RouteServiceProvider within a group which
+| contains the "web" middleware group. Now create something great!
+|
+*/
+
+Route::get('/', function () {
+    return message('1005','403');
+});
+
+// 上传文件
+Route::post('/upload/uploadImage', [UploadController::class, 'uploadImage']);
+Route::post('/upload/uploadBase64', [UploadController::class, 'uploadBase64']);
+
+// 系统登录
+Route::get('/captcha', [LoginController::class, 'captcha'])->name('captcha');
+Route::post('/login', [LoginController::class, 'login']);
+Route::get('/logout', [LoginController::class, 'logout']);
+
+// 系统主页
+
+Route::post('/index/data', [IndexController::class, 'indexData']);
+Route::post('/index/clearCache', [IndexController::class, 'clearCache']);
+Route::get('/index/getMenuList', [IndexController::class, 'getMenuList']);
+Route::get('/index/getUserInfo', [IndexController::class, 'getUserInfo']);
+Route::post('/index/updateUserInfo', [IndexController::class, 'updateUserInfo']);
+Route::post('/index/updatePwd', [IndexController::class, 'updatePwd']);
+Route::post('/index/statistics', [IndexController::class, 'statistics']);
+
+// 用户管理
+Route::get('/user/index', [UserController::class, 'index']);
+Route::get('/user/info', [UserController::class, 'info']);
+Route::post('/user/edit', [UserController::class, 'edit']);
+Route::post('/user/delete', [UserController::class, 'delete']);
+Route::post('/user/status', [UserController::class, 'status']);
+Route::post('/user/resetPwd', [UserController::class, 'resetPwd']);
+
+// 角色管理
+Route::get('/role/index', [RoleController::class, 'index']);
+Route::get('/role/info', [RoleController::class, 'info']);
+Route::post('/role/edit', [RoleController::class, 'edit']);
+Route::post('/role/delete', [RoleController::class, 'delete']);
+Route::get('/role/getRoleList', [RoleController::class, 'getRoleList']);
+Route::get('/role/getPermissionList', [RoleController::class, 'getPermissionList']);
+Route::post('/role/savePermission', [RoleController::class, 'savePermission']);
+
+// 菜单管理
+Route::get('/menu/index', [MenuController::class, 'index']);
+Route::get('/menu/info', [MenuController::class, 'info']);
+Route::post('/menu/edit', [MenuController::class, 'edit']);
+Route::post('/menu/delete', [MenuController::class, 'delete']);
+
+// 区域
+Route::get('/city/index', [CityController::class, 'index']);
+Route::get('/city/info', [CityController::class, 'info']);
+Route::post('/city/edit', [CityController::class, 'edit']);
+Route::post('/city/delete', [CityController::class, 'delete']);
+
+// 代理区域
+Route::get('/region/index', [\App\Http\Controllers\Admin\RegionController::class, 'index']);
+Route::get('/region/info', [\App\Http\Controllers\Admin\RegionController::class, 'info']);
+Route::post('/region/edit', [\App\Http\Controllers\Admin\RegionController::class, 'edit']);
+Route::post('/region/delete', [\App\Http\Controllers\Admin\RegionController::class, 'delete']);
+Route::get('/region/options', [\App\Http\Controllers\Admin\RegionController::class, 'options']);
+
+// 配置分组管理
+Route::get('/configgroup/index', [ConfigGroupController::class, 'index']);
+Route::get('/configgroup/info', [ConfigGroupController::class, 'info']);
+Route::post('/configgroup/edit', [ConfigGroupController::class, 'edit']);
+Route::post('/configgroup/delete', [ConfigGroupController::class, 'delete']);
+
+// 配置管理
+Route::get('/config/index', [ConfigController::class, 'index']);
+Route::get('/config/info', [ConfigController::class, 'info']);
+Route::post('/config/edit', [ConfigController::class, 'edit']);
+Route::post('/config/delete', [ConfigController::class, 'delete']);
+
+// 通知公告管理
+Route::get('/notice/index', [NoticeController::class, 'index']);
+Route::get('/notice/info', [NoticeController::class, 'info']);
+Route::post('/notice/edit', [NoticeController::class, 'edit']);
+Route::post('/notice/delete', [NoticeController::class, 'delete']);
+Route::post('/notice/status', [NoticeController::class, 'status']);
+
+// 文章管理
+Route::get('/article/index', [\App\Http\Controllers\Admin\ArticleController::class, 'index']);
+Route::get('/article/info', [\App\Http\Controllers\Admin\ArticleController::class, 'info']);
+Route::post('/article/edit', [\App\Http\Controllers\Admin\ArticleController::class, 'edit']);
+Route::post('/article/delete', [\App\Http\Controllers\Admin\ArticleController::class, 'delete']);
+Route::post('/article/status', [\App\Http\Controllers\Admin\ArticleController::class, 'status']);
+
+// 广告管理
+Route::get('/ad/index', [AdController::class, 'index']);
+Route::get('/ad/info', [AdController::class, 'info']);
+Route::post('/ad/edit', [AdController::class, 'edit']);
+Route::post('/ad/delete', [AdController::class, 'delete']);
+
+// 会员等级
+Route::get('/memberlevel/index', [MemberLevelController::class, 'index']);
+Route::get('/memberlevel/info', [MemberLevelController::class, 'info']);
+Route::post('/memberlevel/edit', [MemberLevelController::class, 'edit']);
+Route::post('/memberlevel/delete', [MemberLevelController::class, 'delete']);
+Route::get('/memberlevel/getMemberLevelList', [MemberLevelController::class, 'getMemberLevelList']);
+
+// 会员管理
+Route::get('/member/index', [MemberController::class, 'index']);
+Route::get('/member/info', [MemberController::class, 'info']);
+Route::post('/member/edit', [MemberController::class, 'edit']);
+Route::post('/member/delete', [MemberController::class, 'delete']);
+Route::post('/member/status', [MemberController::class, 'status']);
+Route::post('/member/parents', [MemberController::class, 'parents']);
+Route::post('/member/options', [MemberController::class, 'options']);
+Route::post('/member/tree', [MemberController::class, 'tree']);
+
+// 银行卡
+Route::get('/banks/index', [\App\Http\Controllers\Admin\MemberBankController::class, 'index']);
+Route::post('/banks/edit', [\App\Http\Controllers\Admin\MemberBankController::class, 'edit']);
+Route::post('/banks/delete', [\App\Http\Controllers\Admin\MemberBankController::class, 'delete']);
+
+
+// 代理管理
+Route::get('/agent/index', [\App\Http\Controllers\Admin\AgentController::class, 'index']);
+Route::get('/agent/info', [\App\Http\Controllers\Admin\AgentController::class, 'info']);
+Route::post('/agent/edit', [\App\Http\Controllers\Admin\AgentController::class, 'edit']);
+Route::post('/agent/delete', [\App\Http\Controllers\Admin\AgentController::class, 'delete']);
+Route::post('/agent/status', [\App\Http\Controllers\Admin\AgentController::class, 'status']);
+Route::post('/agent/parents', [\App\Http\Controllers\Admin\AgentController::class, 'parents']);
+
+
+// 司机管理
+Route::get('/driver/index', [\App\Http\Controllers\Admin\DriverController::class, 'index']);
+Route::post('/driver/edit', [\App\Http\Controllers\Admin\DriverController::class, 'edit']);
+Route::post('/driver/delete', [\App\Http\Controllers\Admin\DriverController::class, 'delete']);
+Route::post('/driver/status', [\App\Http\Controllers\Admin\DriverController::class, 'status']);
+Route::post('/driver/options', [\App\Http\Controllers\Admin\DriverController::class, 'options']);
+
+// 司机等级
+Route::get('/driverLevel/index', [\App\Http\Controllers\Admin\DriverLevelController::class, 'index']);
+Route::post('/driverLevel/edit', [\App\Http\Controllers\Admin\DriverLevelController::class, 'edit']);
+Route::post('/driverLevel/delete', [\App\Http\Controllers\Admin\DriverLevelController::class, 'delete']);
+Route::post('/driverLevel/status', [\App\Http\Controllers\Admin\DriverLevelController::class, 'status']);
+Route::post('/driverLevel/options', [\App\Http\Controllers\Admin\DriverLevelController::class, 'options']);
+
+// 车型
+Route::get('/carCategory/index', [\App\Http\Controllers\Admin\CarCategoryController::class, 'index']);
+Route::post('/carCategory/edit', [\App\Http\Controllers\Admin\CarCategoryController::class, 'edit']);
+Route::post('/carCategory/options', [\App\Http\Controllers\Admin\CarCategoryController::class, 'options']);
+Route::post('/carCategory/status', [\App\Http\Controllers\Admin\CarCategoryController::class, 'status']);
+Route::post('/carCategory/delete', [\App\Http\Controllers\Admin\CarCategoryController::class, 'delete']);
+
+// 车品牌
+Route::get('/carBrand/index', [\App\Http\Controllers\Admin\CarBrandController::class, 'index']);
+Route::post('/carBrand/edit', [\App\Http\Controllers\Admin\CarBrandController::class, 'edit']);
+Route::post('/carBrand/options', [\App\Http\Controllers\Admin\CarBrandController::class, 'options']);
+Route::post('/carBrand/status', [\App\Http\Controllers\Admin\CarBrandController::class, 'status']);
+Route::post('/carBrand/delete', [\App\Http\Controllers\Admin\CarBrandController::class, 'delete']);
+
+
+// 货物类型
+Route::get('/freightCategory/index', [\App\Http\Controllers\Admin\FreightCategoryController::class, 'index']);
+Route::post('/freightCategory/edit', [\App\Http\Controllers\Admin\FreightCategoryController::class, 'edit']);
+Route::post('/freightCategory/options', [\App\Http\Controllers\Admin\FreightCategoryController::class, 'options']);
+Route::post('/freightCategory/status', [\App\Http\Controllers\Admin\FreightCategoryController::class, 'status']);
+Route::post('/freightCategory/delete', [\App\Http\Controllers\Admin\FreightCategoryController::class, 'delete']);
+
+// 货物包装
+Route::get('/freightPackage/index', [\App\Http\Controllers\Admin\FreightPackageController::class, 'index']);
+Route::post('/freightPackage/edit', [\App\Http\Controllers\Admin\FreightPackageController::class, 'edit']);
+Route::post('/freightPackage/options', [\App\Http\Controllers\Admin\FreightPackageController::class, 'options']);
+Route::post('/freightPackage/status', [\App\Http\Controllers\Admin\FreightPackageController::class, 'status']);
+Route::post('/freightPackage/delete', [\App\Http\Controllers\Admin\FreightPackageController::class, 'delete']);
+
+
+// 订单
+Route::get('/order/index', [\App\Http\Controllers\Admin\OrderController::class, 'index']);
+Route::post('/order/edit', [\App\Http\Controllers\Admin\OrderController::class, 'edit']);
+Route::post('/order/status', [\App\Http\Controllers\Admin\OrderController::class, 'status']);
+Route::post('/order/cancel', [\App\Http\Controllers\Admin\OrderController::class, 'cancel']);
+Route::post('/order/exception', [\App\Http\Controllers\Admin\OrderController::class, 'exception']);
+Route::post('/order/complete', [\App\Http\Controllers\Admin\OrderController::class, 'complete']);
+Route::post('/order/count', [\App\Http\Controllers\Admin\OrderController::class, 'count']);
+Route::post('/order/delete', [\App\Http\Controllers\Admin\OrderController::class, 'delete']);
+
+
+// 货物规格
+Route::get('/freightSpec/index', [\App\Http\Controllers\Admin\FreightSpecController::class, 'index']);
+Route::post('/freightSpec/edit', [\App\Http\Controllers\Admin\FreightSpecController::class, 'edit']);
+Route::post('/freightSpec/options', [\App\Http\Controllers\Admin\FreightSpecController::class, 'options']);
+Route::post('/freightSpec/status', [\App\Http\Controllers\Admin\FreightSpecController::class, 'status']);
+Route::post('/freightSpec/delete', [\App\Http\Controllers\Admin\FreightSpecController::class, 'delete']);
+
+// 优惠券
+Route::get('/coupon/index', [\App\Http\Controllers\Admin\CouponController::class, 'index']);
+Route::post('/coupon/edit', [\App\Http\Controllers\Admin\CouponController::class, 'edit']);
+Route::post('/coupon/options', [\App\Http\Controllers\Admin\CouponController::class, 'options']);
+Route::post('/coupon/status', [\App\Http\Controllers\Admin\CouponController::class, 'status']);
+Route::post('/coupon/delete', [\App\Http\Controllers\Admin\CouponController::class, 'delete']);
+
+
+// 优惠券领取记录
+Route::get('/couponLog/index', [\App\Http\Controllers\Admin\MemberCouponController::class, 'index']);
+Route::post('/couponLog/edit', [\App\Http\Controllers\Admin\MemberCouponController::class, 'edit']);
+Route::post('/couponLog/options', [\App\Http\Controllers\Admin\MemberCouponController::class, 'options']);
+Route::post('/couponLog/status', [\App\Http\Controllers\Admin\MemberCouponController::class, 'status']);
+Route::post('/couponLog/delete', [\App\Http\Controllers\Admin\MemberCouponController::class, 'delete']);
+
+// 提现记录
+Route::get('/withdraw/index', [\App\Http\Controllers\Admin\WithdrawController::class, 'index']);
+Route::post('/withdraw/count', [\App\Http\Controllers\Admin\WithdrawController::class, 'count']);
+Route::post('/withdraw/edit', [\App\Http\Controllers\Admin\WithdrawController::class, 'edit']);
+Route::post('/withdraw/auth', [\App\Http\Controllers\Admin\WithdrawController::class, 'auth']);
+Route::post('/withdraw/options', [\App\Http\Controllers\Admin\WithdrawController::class, 'options']);
+Route::post('/withdraw/status', [\App\Http\Controllers\Admin\WithdrawController::class, 'status']);
+Route::post('/withdraw/delete', [\App\Http\Controllers\Admin\WithdrawController::class, 'delete']);
+
+
+// 开票记录
+Route::get('/ticket/index', [\App\Http\Controllers\Admin\TicketController::class, 'index']);
+Route::post('/ticket/edit', [\App\Http\Controllers\Admin\TicketController::class, 'edit']);
+Route::post('/ticket/status', [\App\Http\Controllers\Admin\TicketController::class, 'status']);
+Route::post('/ticket/delete', [\App\Http\Controllers\Admin\TicketController::class, 'delete']);
+
+// 反馈建议
+Route::get('/complaint/index', [\App\Http\Controllers\Admin\ComplaintController::class, 'index']);
+Route::post('/complaint/edit', [\App\Http\Controllers\Admin\ComplaintController::class, 'edit']);
+Route::post('/complaint/status', [\App\Http\Controllers\Admin\ComplaintController::class, 'status']);
+Route::post('/complaint/delete', [\App\Http\Controllers\Admin\ComplaintController::class, 'delete']);
+
+// 线路查询记录
+Route::get('/lines/index', [\App\Http\Controllers\Admin\DriverLineController::class, 'index']);
+Route::post('/lines/edit', [\App\Http\Controllers\Admin\DriverLineController::class, 'edit']);
+Route::post('/lines/status', [\App\Http\Controllers\Admin\DriverLineController::class, 'status']);
+Route::post('/lines/delete', [\App\Http\Controllers\Admin\DriverLineController::class, 'delete']);
+
+
+// 交易明细
+Route::get('/account/index', [\App\Http\Controllers\Admin\AccountController::class, 'index']);
+Route::post('/account/count', [\App\Http\Controllers\Admin\AccountController::class, 'count']);
+Route::post('/account/delete', [\App\Http\Controllers\Admin\AccountController::class, 'delete']);
+Route::post('/account/changeBalance', [\App\Http\Controllers\Admin\AccountController::class, 'changeBalance']);
+Route::post('/account/changeScore', [\App\Http\Controllers\Admin\AccountController::class, 'changeScore']);
+
+// 平台财务
+Route::get('/finance/index', [\App\Http\Controllers\Admin\FinanceController::class, 'index']);
+Route::post('/finance/count', [\App\Http\Controllers\Admin\FinanceController::class, 'count']);
+Route::post('/finance/delete', [\App\Http\Controllers\Admin\FinanceController::class, 'delete']);
+
+
+// 登录日志
+Route::get('/loginlog/index', [LoginLogController::class, 'index']);
+Route::post('/loginlog/delete', [LoginLogController::class, 'delete']);
+
+// 操作日志
+Route::get('/actionlog/index', [ActionLogController::class, 'index']);
+Route::post('/actionlog/delete', [ActionLogController::class, 'delete']);

+ 9 - 0
storage/framework/cache/.gitignore

@@ -0,0 +1,9 @@
+compiled.php
+config.php
+down
+events.scanned.php
+maintenance.php
+routes.php
+routes.scanned.php
+schedule-*
+services.json

+ 9 - 0
storage/framework/cache/data/.gitignore

@@ -0,0 +1,9 @@
+compiled.php
+config.php
+down
+events.scanned.php
+maintenance.php
+routes.php
+routes.scanned.php
+schedule-*
+services.json

+ 2 - 0
storage/framework/testing/.gitignore

@@ -0,0 +1,2 @@
+*
+!.gitignore

+ 9 - 0
storage/framework/views/.gitignore

@@ -0,0 +1,9 @@
+compiled.php
+config.php
+down
+events.scanned.php
+maintenance.php
+routes.php
+routes.scanned.php
+schedule-*
+services.json

File diff suppressed because it is too large
+ 39 - 0
storage/framework/views/b44774c9fede501ff8589f32466a7ab91b4397e8.php


+ 5 - 0
storage/framework/views/c8f2655af834107ae93bf2ac322f057109e5745a.php

@@ -0,0 +1,5 @@
+<?php $__env->startSection('title', __('Not Found')); ?>
+<?php $__env->startSection('code', '404'); ?>
+<?php $__env->startSection('message', __('Not Found')); ?>
+
+<?php echo $__env->make('errors::minimal', \Illuminate\Support\Arr::except(get_defined_vars(), ['__data', '__path']))->render(); ?><?php /**PATH /usr/local/develop/php/www/waibao/NN2023072601/NN2023072601/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/views/404.blade.php ENDPATH**/ ?>

+ 2 - 0
storage/logs/.gitignore

@@ -0,0 +1,2 @@
+*
+!.gitignore