id(); $table->string('name', 50)->comment('分类名称'); $table->string('slug', 50)->comment('标识'); $table->string('description', 255)->default('')->comment('描述'); $table->string('icon', 255)->default('')->comment('图标'); $table->integer('sort')->default(0)->comment('排序'); $table->tinyInteger('status')->default(1)->comment('状态:0=禁用,1=正常'); $table->timestamps(); $table->unique('slug'); $table->comment('商户分类'); }); } // 商户/店铺 if (! Schema::hasTable('merchants')) { Schema::create('merchants', function (Blueprint $table) { $table->id(); $table->unsignedInteger('user_id')->comment('所属用户ID'); $table->unsignedBigInteger('category_id')->nullable()->comment('商户分类ID'); $table->string('name', 50)->comment('店铺名称'); $table->string('logo', 255)->default('')->comment('店铺Logo'); $table->string('banner', 255)->default('')->comment('店铺横幅/封面'); $table->text('description')->nullable()->comment('店铺简介'); $table->string('contact_name', 30)->default('')->comment('联系人'); $table->string('contact_mobile', 20)->default('')->comment('联系电话'); $table->string('province', 30)->default('')->comment('省'); $table->string('city', 30)->default('')->comment('市'); $table->string('district', 30)->default('')->comment('区'); $table->string('address', 255)->default('')->comment('详细地址'); $table->string('latitude', 20)->default('')->comment('纬度'); $table->string('longitude', 20)->default('')->comment('经度'); $table->string('business_hours', 100)->default('')->comment('营业时间'); $table->decimal('balance', 10, 2)->default(0)->comment('账户余额'); $table->decimal('total_income', 10, 2)->default(0)->comment('累计收入'); $table->decimal('min_price', 10, 2)->default(0)->comment('起送价'); $table->tinyInteger('status')->default(0)->comment('状态:0=待审核,1=正常,2=停用,3=已关闭'); $table->string('reject_reason', 255)->default('')->comment('拒绝原因'); $table->timestamps(); $table->index('user_id'); $table->index('category_id'); $table->index('status'); $table->comment('商户/店铺'); }); } // 商品分类 if (! Schema::hasTable('product_categories')) { Schema::create('product_categories', function (Blueprint $table) { $table->id(); $table->unsignedBigInteger('merchant_id')->comment('商户ID'); $table->unsignedBigInteger('parent_id')->default(0)->comment('父级ID'); $table->string('name', 50)->comment('分类名称'); $table->string('slug', 50)->comment('标识'); $table->string('description', 255)->default('')->comment('描述'); $table->string('icon', 255)->default('')->comment('图标'); $table->integer('sort')->default(0)->comment('排序'); $table->tinyInteger('status')->default(1)->comment('状态:0=禁用,1=正常'); $table->timestamps(); $table->index('merchant_id'); $table->comment('商品分类'); }); } // 商品 if (! Schema::hasTable('merchant_products')) { Schema::create('merchant_products', function (Blueprint $table) { $table->id(); $table->unsignedBigInteger('merchant_id')->comment('商户ID'); $table->unsignedBigInteger('category_id')->nullable()->comment('分类ID'); $table->string('name', 100)->comment('商品名称'); $table->text('description')->nullable()->comment('商品描述'); $table->json('images')->nullable()->comment('商品图片列表'); $table->decimal('price', 10, 2)->comment('售价'); $table->decimal('original_price', 10, 2)->nullable()->comment('原价'); $table->integer('stock')->default(0)->comment('库存'); $table->string('unit', 20)->default('份')->comment('单位'); $table->integer('sales')->default(0)->comment('销量'); $table->tinyInteger('status')->default(1)->comment('状态:0=下架,1=上架'); $table->tinyInteger('is_recommend')->default(0)->comment('是否推荐:0=否,1=是'); $table->integer('sort')->default(0)->comment('排序'); $table->timestamps(); $table->softDeletes(); $table->index('merchant_id'); $table->index('category_id'); $table->index('status'); $table->comment('商户商品'); }); } // 打印机 if (! Schema::hasTable('printers')) { Schema::create('printers', function (Blueprint $table) { $table->id(); $table->unsignedBigInteger('merchant_id')->comment('商户ID'); $table->string('name', 50)->comment('打印机名称'); $table->string('brand', 50)->default('')->comment('品牌'); $table->string('model', 50)->default('')->comment('型号'); $table->string('device_no', 100)->default('')->comment('设备编号'); $table->string('secret_key', 255)->default('')->comment('密钥'); $table->tinyInteger('status')->default(1)->comment('状态:0=离线,1=在线,2=故障'); $table->json('config')->nullable()->comment('打印配置'); $table->timestamps(); $table->index('merchant_id'); $table->comment('打印机'); }); } // 打印任务 if (! Schema::hasTable('print_tasks')) { Schema::create('print_tasks', function (Blueprint $table) { $table->id(); $table->unsignedBigInteger('printer_id')->comment('打印机ID'); $table->unsignedBigInteger('order_id')->nullable()->comment('关联订单ID'); $table->text('content')->comment('打印内容'); $table->integer('copies')->default(1)->comment('打印份数'); $table->tinyInteger('status')->default(0)->comment('状态:0=待打印,1=打印中,2=已完成,3=失败'); $table->string('error_msg', 255)->default('')->comment('错误信息'); $table->timestamp('printed_at')->nullable()->comment('打印时间'); $table->timestamps(); $table->index('printer_id'); $table->index('order_id'); $table->comment('打印任务'); }); } } public function down(): void { Schema::dropIfExists('print_tasks'); Schema::dropIfExists('printers'); Schema::dropIfExists('merchant_products'); Schema::dropIfExists('product_categories'); Schema::dropIfExists('merchants'); Schema::dropIfExists('merchant_categories'); } };