Merge remote-tracking branch 'origin/main' into feature/codex-system-database-migration
This commit is contained in:
commit
f8708f2b4a
@ -62,7 +62,12 @@ class Pages extends Controller
|
||||
return $this->redirectToPage($sectionConfig, $pages->first());
|
||||
}
|
||||
|
||||
$pageConfig = $pages->firstWhere('slug', $page);
|
||||
$pageConfig = $pages
|
||||
->flatMap(fn (array $configuredPage) => [
|
||||
$configuredPage,
|
||||
...($configuredPage['children'] ?? []),
|
||||
])
|
||||
->firstWhere('slug', $page);
|
||||
|
||||
abort_if(empty($pageConfig), 404);
|
||||
|
||||
|
||||
16
app/Models/Business/AutoInvoicing.php
Normal file
16
app/Models/Business/AutoInvoicing.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class AutoInvoicing extends Model
|
||||
{
|
||||
protected $table = 'business_auto_invoicing';
|
||||
|
||||
protected $fillable = ['company_id', 'store_name', 'auto_invoice_status', 'notes'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/BankAccount.php
Normal file
16
app/Models/Business/BankAccount.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class BankAccount extends Model
|
||||
{
|
||||
protected $table = 'business_bank_accounts';
|
||||
|
||||
protected $fillable = ['company_id', 'account_name', 'account_type', 'bank_account_number', 'opening_bank', 'ukey_password_maker', 'login_password_maker', 'ukey_password_reviewer', 'login_password_reviewer'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/CompanyCancellation.php
Normal file
16
app/Models/Business/CompanyCancellation.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class CompanyCancellation extends Model
|
||||
{
|
||||
protected $table = 'business_company_cancellations';
|
||||
|
||||
protected $fillable = ['company_id', 'company_name', 'cancellation_status', 'notes'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/CompanyChange.php
Normal file
16
app/Models/Business/CompanyChange.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class CompanyChange extends Model
|
||||
{
|
||||
protected $table = 'business_company_changes';
|
||||
|
||||
protected $fillable = ['company_id', 'company_name', 'change_type', 'change_status', 'change_date', 'notes'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/CompanyRegistration.php
Normal file
16
app/Models/Business/CompanyRegistration.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class CompanyRegistration extends Model
|
||||
{
|
||||
protected $table = 'business_company_registrations';
|
||||
|
||||
protected $fillable = ['company_id', 'company_name', 'registration_type', 'registration_status', 'notes'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/CompanySharedAccount.php
Normal file
16
app/Models/Business/CompanySharedAccount.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class CompanySharedAccount extends Model
|
||||
{
|
||||
protected $table = 'business_company_shared_accounts';
|
||||
|
||||
protected $fillable = ['company_id', 'account_name', 'account_type', 'bank_account_number', 'opening_bank'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
18
app/Models/Business/CompanyStoreData.php
Normal file
18
app/Models/Business/CompanyStoreData.php
Normal file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class CompanyStoreData extends Model
|
||||
{
|
||||
protected $table = 'business_company_store_data';
|
||||
|
||||
protected $fillable = ['company_id', 'company_name', 'store_name', 'store_performance', 'company_performance', 'trigger_store_change', 'trigger_company_registration'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
'trigger_store_change' => 'boolean',
|
||||
'trigger_company_registration' => 'boolean',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/CourierCollection.php
Normal file
16
app/Models/Business/CourierCollection.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class CourierCollection extends Model
|
||||
{
|
||||
protected $table = 'business_courier_collections';
|
||||
|
||||
protected $fillable = ['company_id', 'courier_name', 'collection_type', 'collection_name', 'collection_account', 'opening_bank'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/FinancialAnalysis.php
Normal file
16
app/Models/Business/FinancialAnalysis.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class FinancialAnalysis extends Model
|
||||
{
|
||||
protected $table = 'business_financial_analysis';
|
||||
|
||||
protected $fillable = ['company_id', 'company_name', 'period', 'revenue', 'total_cost', 'gross_profit', 'net_profit', 'profit_margin'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/FundForecast.php
Normal file
16
app/Models/Business/FundForecast.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class FundForecast extends Model
|
||||
{
|
||||
protected $table = 'business_fund_forecast';
|
||||
|
||||
protected $fillable = ['company_id', 'budget_month', 'actual_month', 'store_balance_budget', 'store_balance_actual', 'bank_balance_budget', 'bank_balance_actual', 'other_balance_budget', 'other_balance_actual', 'expected_monthly_return_budget', 'expected_monthly_return_actual', 'income_total_budget', 'income_total_actual', 'prior_unpaid_budget', 'prior_unpaid_actual', 'advance_budget', 'advance_actual', 'supplier_budget', 'supplier_actual', 'spot_settlement_budget', 'spot_settlement_actual', 'courier_budget', 'courier_actual', 'paper_factory_budget', 'paper_factory_actual', 'edge_band_budget', 'edge_band_actual', 'board_budget', 'board_actual', 'salary_budget', 'salary_actual', 'daily_expense_budget', 'daily_expense_actual', 'planting_budget', 'planting_actual', 'red_packet_budget', 'red_packet_actual', 'corporate_deduction_budget', 'corporate_deduction_actual', 'expense_total_budget', 'expense_total_actual', 'bank_reservation', 'net_balance_budget', 'net_balance_actual'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/InputInvoiceReport.php
Normal file
16
app/Models/Business/InputInvoiceReport.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class InputInvoiceReport extends Model
|
||||
{
|
||||
protected $table = 'business_input_invoice_reports';
|
||||
|
||||
protected $fillable = ['company_id', 'company_name', 'input_goods_amount', 'input_goods_tax', 'input_service_amount', 'input_service_tax', 'input_total_amount', 'input_total_tax'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/InvoiceBasicInfo.php
Normal file
16
app/Models/Business/InvoiceBasicInfo.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class InvoiceBasicInfo extends Model
|
||||
{
|
||||
protected $table = 'business_invoice_basic_info';
|
||||
|
||||
protected $fillable = ['company_id', 'store_name', 'store_entity', 'invoice_officer', 'invoice_quota', 'output_amount', 'input_amount'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/OutputInvoiceReport.php
Normal file
16
app/Models/Business/OutputInvoiceReport.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class OutputInvoiceReport extends Model
|
||||
{
|
||||
protected $table = 'business_output_invoice_reports';
|
||||
|
||||
protected $fillable = ['company_id', 'company_name', 'output_goods_amount', 'output_goods_tax', 'output_service_amount', 'output_service_tax', 'output_total_amount', 'output_total_tax'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/PaymentStatistics.php
Normal file
16
app/Models/Business/PaymentStatistics.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class PaymentStatistics extends Model
|
||||
{
|
||||
protected $table = 'business_payment_statistics';
|
||||
|
||||
protected $fillable = ['company_id', 'payment_type', 'total_count', 'completed_count', 'pending_count', 'total_amount', 'period'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/ProcessStatistics.php
Normal file
16
app/Models/Business/ProcessStatistics.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class ProcessStatistics extends Model
|
||||
{
|
||||
protected $table = 'business_process_statistics';
|
||||
|
||||
protected $fillable = ['company_id', 'process_name', 'total_count', 'completed_count', 'pending_count', 'period'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/StoreChange.php
Normal file
16
app/Models/Business/StoreChange.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class StoreChange extends Model
|
||||
{
|
||||
protected $table = 'business_store_changes';
|
||||
|
||||
protected $fillable = ['company_id', 'store_name', 'change_type', 'change_status', 'notes'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/StoreChangeLog.php
Normal file
16
app/Models/Business/StoreChangeLog.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class StoreChangeLog extends Model
|
||||
{
|
||||
protected $table = 'business_store_change_logs';
|
||||
|
||||
protected $fillable = ['company_id', 'store_name', 'store_entity', 'change_date', 'receiving_account_info', 'historical_entity'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/StoreClosing.php
Normal file
16
app/Models/Business/StoreClosing.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class StoreClosing extends Model
|
||||
{
|
||||
protected $table = 'business_store_closings';
|
||||
|
||||
protected $fillable = ['company_id', 'store_name', 'closing_status', 'notes'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/StoreInvoicing.php
Normal file
16
app/Models/Business/StoreInvoicing.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class StoreInvoicing extends Model
|
||||
{
|
||||
protected $table = 'business_store_invoicing';
|
||||
|
||||
protected $fillable = ['company_id', 'store_name', 'seller_name', 'seller_tax_number', 'buyer_name', 'buyer_tax_number', 'invoice_amount', 'category', 'invoice_type'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/StoreOpening.php
Normal file
16
app/Models/Business/StoreOpening.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class StoreOpening extends Model
|
||||
{
|
||||
protected $table = 'business_store_openings';
|
||||
|
||||
protected $fillable = ['company_id', 'store_name', 'store_platform', 'opening_status', 'notes'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/StoreReceivingAccount.php
Normal file
16
app/Models/Business/StoreReceivingAccount.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class StoreReceivingAccount extends Model
|
||||
{
|
||||
protected $table = 'business_store_receiving_accounts';
|
||||
|
||||
protected $fillable = ['company_id', 'store_platform', 'store_name', 'wallet_number', 'store_entity_name', 'login_account', 'login_password', 'receiving_method', 'receiving_account_name', 'alipay_or_bank_account', 'opening_bank'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/SwActualStatistics.php
Normal file
16
app/Models/Business/SwActualStatistics.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class SwActualStatistics extends Model
|
||||
{
|
||||
protected $table = 'business_sw_actual_statistics';
|
||||
|
||||
protected $fillable = ['company_id', 'region', 'company_type', 'contact_person', 'bookkeeping_company', 'period', 'company_name', 'provided_performance', 'actual_declared_performance', 'goods_special_invoice_amount', 'goods_special_invoice_tax', 'goods_general_invoice_amount', 'goods_general_invoice_tax', 'goods_uninvoiced_amount', 'goods_uninvoiced_tax', 'goods_income_subtotal', 'goods_tax_subtotal', 'service_special_invoice_amount', 'service_special_invoice_tax', 'service_general_invoice_amount', 'service_general_invoice_tax', 'service_uninvoiced_amount', 'service_uninvoiced_tax', 'service_income_subtotal', 'service_tax_subtotal', 'total_income', 'total_tax', 'input_goods_amount', 'input_goods_tax', 'input_service_amount', 'input_service_tax', 'input_other_amount', 'input_other_tax', 'input_total_amount', 'input_total_tax', 'additional_deduction', 'retained_tax', 'monthly_vat', 'urban_maintenance_tax', 'education_surcharge', 'local_education_surcharge', 'stamp_tax', 'union_fund', 'personal_income_tax', 'corporate_income_tax', 'garbage_fee', 'other_late_fee', 'total_paid_tax', 'tax_burden'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/SwPlanning.php
Normal file
16
app/Models/Business/SwPlanning.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class SwPlanning extends Model
|
||||
{
|
||||
protected $table = 'business_sw_planning';
|
||||
|
||||
protected $fillable = ['company_id', 'company_name', 'final_tax_performance', 'product_cost', 'logistics_cost', 'platform_invoice', 'labor_cost', 'other_expenses', 'profit'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/TaxData.php
Normal file
16
app/Models/Business/TaxData.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class TaxData extends Model
|
||||
{
|
||||
protected $table = 'business_tax_data';
|
||||
|
||||
protected $fillable = ['company_id', 'company_name', 'real_shipping_performance', 'planting_performance', 'refund_amount', 'net_performance_income', 'tax_performance', 'tax_refund', 'tax_net_income', 'performance_difference', 'final_tax_performance'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/Todo.php
Normal file
16
app/Models/Business/Todo.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class Todo extends Model
|
||||
{
|
||||
protected $table = 'business_todos';
|
||||
|
||||
protected $fillable = ['company_id', 'title', 'category', 'priority', 'status', 'due_date', 'description'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
16
app/Models/Business/Trademark.php
Normal file
16
app/Models/Business/Trademark.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace App\Models\Business;
|
||||
|
||||
use App\Abstracts\Model;
|
||||
|
||||
class Trademark extends Model
|
||||
{
|
||||
protected $table = 'business_trademarks';
|
||||
|
||||
protected $fillable = ['company_id', 'trademark_name', 'trademark_type', 'trademark_status', 'registration_date', 'expiry_date', 'notes'];
|
||||
|
||||
protected $casts = [
|
||||
'company_id' => 'integer',
|
||||
];
|
||||
}
|
||||
513
database/migrations/2026_07_21_000000_create_business_tables.php
Normal file
513
database/migrations/2026_07_21_000000_create_business_tables.php
Normal file
@ -0,0 +1,513 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
public function up()
|
||||
{
|
||||
// 1. 店铺后台税务数据
|
||||
Schema::create('business_tax_data', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('company_name')->comment('公司名称');
|
||||
$table->decimal('real_shipping_performance', 15, 2)->default(0)->comment('公司真实发货业绩');
|
||||
$table->decimal('planting_performance', 15, 2)->default(0)->comment('公司种菜业绩');
|
||||
$table->decimal('refund_amount', 15, 2)->default(0)->comment('退款金额');
|
||||
$table->decimal('net_performance_income', 15, 2)->default(0)->comment('业绩净收入');
|
||||
$table->decimal('tax_performance', 15, 2)->default(0)->comment('税务业绩');
|
||||
$table->decimal('tax_refund', 15, 2)->default(0)->comment('税务退款');
|
||||
$table->decimal('tax_net_income', 15, 2)->default(0)->comment('税务净收入');
|
||||
$table->decimal('performance_difference', 15, 2)->default(0)->comment('业绩差额');
|
||||
$table->decimal('final_tax_performance', 15, 2)->default(0)->comment('最终报税业绩');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 2. 公司店铺数据
|
||||
Schema::create('business_company_store_data', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('company_name')->comment('公司名称');
|
||||
$table->string('store_name')->comment('店铺名称');
|
||||
$table->decimal('store_performance', 15, 2)->default(0)->comment('店铺业绩');
|
||||
$table->decimal('company_performance', 15, 2)->default(0)->comment('公司业绩');
|
||||
$table->boolean('trigger_store_change')->default(false)->comment('是否触发店铺变更流程');
|
||||
$table->boolean('trigger_company_registration')->default(false)->comment('是否触发公司注册流程');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 3. 店铺变更统计表
|
||||
Schema::create('business_store_change_logs', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('store_name')->comment('店铺名称');
|
||||
$table->string('store_entity')->comment('店铺主体');
|
||||
$table->date('change_date')->comment('变更时间');
|
||||
$table->string('receiving_account_info')->nullable()->comment('收款账户信息');
|
||||
$table->string('historical_entity')->nullable()->comment('历史主体');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 4. 店铺收款账户信息
|
||||
Schema::create('business_store_receiving_accounts', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('store_platform')->comment('店铺平台');
|
||||
$table->string('store_name')->comment('店铺名称');
|
||||
$table->string('wallet_number')->nullable()->comment('钱包号');
|
||||
$table->string('store_entity_name')->comment('店铺主体名称');
|
||||
$table->string('login_account')->nullable()->comment('登录账号');
|
||||
$table->string('login_password')->nullable()->comment('登录密码');
|
||||
$table->string('receiving_method')->default('银行卡')->comment('收款方式');
|
||||
$table->string('receiving_account_name')->nullable()->comment('收款账户名称');
|
||||
$table->string('alipay_or_bank_account')->nullable()->comment('支付宝账号/银行账号');
|
||||
$table->string('opening_bank')->nullable()->comment('开户银行');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 5. 银行账户信息
|
||||
Schema::create('business_bank_accounts', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('account_name')->comment('账户名称');
|
||||
$table->string('account_type')->default('基本户')->comment('账户类型');
|
||||
$table->string('bank_account_number')->nullable()->comment('银行账号');
|
||||
$table->string('opening_bank')->nullable()->comment('开户行');
|
||||
$table->string('ukey_password_maker')->nullable()->comment('ukey密码(制单)');
|
||||
$table->string('login_password_maker')->nullable()->comment('登录密码(制单)');
|
||||
$table->string('ukey_password_reviewer')->nullable()->comment('ukey密码(审核)');
|
||||
$table->string('login_password_reviewer')->nullable()->comment('登录密码(审核)');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 6. 快递收款系统
|
||||
Schema::create('business_courier_collections', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('courier_name')->comment('快递名称');
|
||||
$table->string('collection_type')->comment('收款类型');
|
||||
$table->string('collection_name')->nullable()->comment('收款名称');
|
||||
$table->string('collection_account')->nullable()->comment('收款账号');
|
||||
$table->string('opening_bank')->nullable()->comment('开户行');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 7. 发票基础信息
|
||||
Schema::create('business_invoice_basic_info', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('store_name')->comment('店铺名称');
|
||||
$table->string('store_entity')->comment('店铺主体');
|
||||
$table->string('invoice_officer')->nullable()->comment('开票员');
|
||||
$table->decimal('invoice_quota', 15, 2)->default(0)->comment('开票额度');
|
||||
$table->decimal('output_amount', 15, 2)->default(0)->comment('销项金额');
|
||||
$table->decimal('input_amount', 15, 2)->default(0)->comment('进项金额');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 8. 店铺后台开票
|
||||
Schema::create('business_store_invoicing', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('store_name')->comment('店铺');
|
||||
$table->string('seller_name')->comment('销售方名称');
|
||||
$table->string('seller_tax_number')->comment('销售方税号');
|
||||
$table->string('buyer_name')->nullable()->comment('购买方名称');
|
||||
$table->string('buyer_tax_number')->nullable()->comment('购买方税号');
|
||||
$table->decimal('invoice_amount', 15, 2)->default(0)->comment('开票金额');
|
||||
$table->string('category')->nullable()->comment('类目');
|
||||
$table->string('invoice_type')->default('普票')->comment('开票类型');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 9. 财务SW规划表
|
||||
Schema::create('business_sw_planning', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('company_name')->comment('公司名称');
|
||||
$table->decimal('final_tax_performance', 15, 2)->default(0)->comment('最终报税业绩');
|
||||
$table->decimal('product_cost', 15, 2)->default(0)->comment('商品成本');
|
||||
$table->decimal('logistics_cost', 15, 2)->default(0)->comment('物流成本');
|
||||
$table->decimal('platform_invoice', 15, 2)->default(0)->comment('平台来票');
|
||||
$table->decimal('labor_cost', 15, 2)->default(0)->comment('人工');
|
||||
$table->decimal('other_expenses', 15, 2)->default(0)->comment('其他报销');
|
||||
$table->decimal('profit', 15, 2)->default(0)->comment('利润');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 10. 实际SW统计表
|
||||
Schema::create('business_sw_actual_statistics', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('region')->nullable()->comment('区域');
|
||||
$table->string('company_type')->nullable()->comment('公司类型');
|
||||
$table->string('contact_person')->nullable()->comment('对接人');
|
||||
$table->string('bookkeeping_company')->nullable()->comment('代账公司');
|
||||
$table->string('period')->nullable()->comment('期间');
|
||||
$table->string('company_name')->comment('公司名称');
|
||||
$table->decimal('provided_performance', 15, 2)->default(0)->comment('提供业绩');
|
||||
$table->decimal('actual_declared_performance', 15, 2)->default(0)->comment('实际申报业绩');
|
||||
// 商品收入(13%)
|
||||
$table->decimal('goods_special_invoice_amount', 15, 2)->default(0)->comment('商品专票金额');
|
||||
$table->decimal('goods_special_invoice_tax', 15, 2)->default(0)->comment('商品专票税额');
|
||||
$table->decimal('goods_general_invoice_amount', 15, 2)->default(0)->comment('商品普票金额');
|
||||
$table->decimal('goods_general_invoice_tax', 15, 2)->default(0)->comment('商品普票税额');
|
||||
$table->decimal('goods_uninvoiced_amount', 15, 2)->default(0)->comment('商品未开票金额');
|
||||
$table->decimal('goods_uninvoiced_tax', 15, 2)->default(0)->comment('商品未开票税额');
|
||||
$table->decimal('goods_income_subtotal', 15, 2)->default(0)->comment('商品收入小计');
|
||||
$table->decimal('goods_tax_subtotal', 15, 2)->default(0)->comment('商品税金小计');
|
||||
// 服务收入(6%)
|
||||
$table->decimal('service_special_invoice_amount', 15, 2)->default(0)->comment('服务专票金额');
|
||||
$table->decimal('service_special_invoice_tax', 15, 2)->default(0)->comment('服务专票税额');
|
||||
$table->decimal('service_general_invoice_amount', 15, 2)->default(0)->comment('服务普票金额');
|
||||
$table->decimal('service_general_invoice_tax', 15, 2)->default(0)->comment('服务普票税额');
|
||||
$table->decimal('service_uninvoiced_amount', 15, 2)->default(0)->comment('服务未开票金额');
|
||||
$table->decimal('service_uninvoiced_tax', 15, 2)->default(0)->comment('服务未开票税额');
|
||||
$table->decimal('service_income_subtotal', 15, 2)->default(0)->comment('服务收入小计');
|
||||
$table->decimal('service_tax_subtotal', 15, 2)->default(0)->comment('服务税金小计');
|
||||
// 合计
|
||||
$table->decimal('total_income', 15, 2)->default(0)->comment('合计收入');
|
||||
$table->decimal('total_tax', 15, 2)->default(0)->comment('合计税金');
|
||||
// 进项发票
|
||||
$table->decimal('input_goods_amount', 15, 2)->default(0)->comment('进项商品金额');
|
||||
$table->decimal('input_goods_tax', 15, 2)->default(0)->comment('进项商品税额');
|
||||
$table->decimal('input_service_amount', 15, 2)->default(0)->comment('进项服务费金额');
|
||||
$table->decimal('input_service_tax', 15, 2)->default(0)->comment('进项服务费税额');
|
||||
$table->decimal('input_other_amount', 15, 2)->default(0)->comment('进项其他金额');
|
||||
$table->decimal('input_other_tax', 15, 2)->default(0)->comment('进项其他税额');
|
||||
$table->decimal('input_total_amount', 15, 2)->default(0)->comment('进项金额合计');
|
||||
$table->decimal('input_total_tax', 15, 2)->default(0)->comment('进项税额合计');
|
||||
// 其他抵减
|
||||
$table->decimal('additional_deduction', 15, 2)->default(0)->comment('加计抵减');
|
||||
$table->decimal('retained_tax', 15, 2)->default(0)->comment('留抵税金');
|
||||
// 实缴税金
|
||||
$table->decimal('monthly_vat', 15, 2)->default(0)->comment('本月应交增值税');
|
||||
$table->decimal('urban_maintenance_tax', 15, 2)->default(0)->comment('城建税金');
|
||||
$table->decimal('education_surcharge', 15, 2)->default(0)->comment('教育费附加');
|
||||
$table->decimal('local_education_surcharge', 15, 2)->default(0)->comment('地方教育费附加');
|
||||
$table->decimal('stamp_tax', 15, 2)->default(0)->comment('印花税');
|
||||
$table->decimal('union_fund', 15, 2)->default(0)->comment('工会经费');
|
||||
$table->decimal('personal_income_tax', 15, 2)->default(0)->comment('个税');
|
||||
$table->decimal('corporate_income_tax', 15, 2)->default(0)->comment('所得税');
|
||||
$table->decimal('garbage_fee', 15, 2)->default(0)->comment('垃圾处理费');
|
||||
$table->decimal('other_late_fee', 15, 2)->default(0)->comment('其他(滞纳金)');
|
||||
$table->decimal('total_paid_tax', 15, 2)->default(0)->comment('税金合计');
|
||||
$table->decimal('tax_burden', 8, 4)->default(0)->comment('税负');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 11. 资金预测表
|
||||
Schema::create('business_fund_forecast', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('budget_month')->nullable()->comment('预算填报月份');
|
||||
$table->string('actual_month')->nullable()->comment('实际填报月份');
|
||||
$table->decimal('store_balance_budget', 15, 2)->default(0)->comment('店铺余额-预算');
|
||||
$table->decimal('store_balance_actual', 15, 2)->default(0)->comment('店铺余额-实际');
|
||||
$table->decimal('bank_balance_budget', 15, 2)->default(0)->comment('银行余额-预算');
|
||||
$table->decimal('bank_balance_actual', 15, 2)->default(0)->comment('银行余额-实际');
|
||||
$table->decimal('other_balance_budget', 15, 2)->default(0)->comment('其他账户余额-预算');
|
||||
$table->decimal('other_balance_actual', 15, 2)->default(0)->comment('其他账户余额-实际');
|
||||
$table->decimal('expected_monthly_return_budget', 15, 2)->default(0)->comment('预计本月回款-预算');
|
||||
$table->decimal('expected_monthly_return_actual', 15, 2)->default(0)->comment('预计本月回款-实际');
|
||||
$table->decimal('income_total_budget', 15, 2)->default(0)->comment('收入合计-预算');
|
||||
$table->decimal('income_total_actual', 15, 2)->default(0)->comment('收入合计-实际');
|
||||
// 支出明细
|
||||
$table->decimal('prior_unpaid_budget', 15, 2)->default(0)->comment('往期未付-预算');
|
||||
$table->decimal('prior_unpaid_actual', 15, 2)->default(0)->comment('往期未付-实际');
|
||||
$table->decimal('advance_budget', 15, 2)->default(0)->comment('借支-预算');
|
||||
$table->decimal('advance_actual', 15, 2)->default(0)->comment('借支-实际');
|
||||
$table->decimal('supplier_budget', 15, 2)->default(0)->comment('供应商-预算');
|
||||
$table->decimal('supplier_actual', 15, 2)->default(0)->comment('供应商-实际');
|
||||
$table->decimal('spot_settlement_budget', 15, 2)->default(0)->comment('现结-预算');
|
||||
$table->decimal('spot_settlement_actual', 15, 2)->default(0)->comment('现结-实际');
|
||||
$table->decimal('courier_budget', 15, 2)->default(0)->comment('快递-预算');
|
||||
$table->decimal('courier_actual', 15, 2)->default(0)->comment('快递-实际');
|
||||
$table->decimal('paper_factory_budget', 15, 2)->default(0)->comment('纸厂压贴-预算');
|
||||
$table->decimal('paper_factory_actual', 15, 2)->default(0)->comment('纸厂压贴-实际');
|
||||
$table->decimal('edge_band_budget', 15, 2)->default(0)->comment('封边条-预算');
|
||||
$table->decimal('edge_band_actual', 15, 2)->default(0)->comment('封边条-实际');
|
||||
$table->decimal('board_budget', 15, 2)->default(0)->comment('板材、三合板-预算');
|
||||
$table->decimal('board_actual', 15, 2)->default(0)->comment('板材、三合板-实际');
|
||||
$table->decimal('salary_budget', 15, 2)->default(0)->comment('工资-预算');
|
||||
$table->decimal('salary_actual', 15, 2)->default(0)->comment('工资-实际');
|
||||
$table->decimal('daily_expense_budget', 15, 2)->default(0)->comment('日常费用-预算');
|
||||
$table->decimal('daily_expense_actual', 15, 2)->default(0)->comment('日常费用-实际');
|
||||
$table->decimal('planting_budget', 15, 2)->default(0)->comment('种菜-预算');
|
||||
$table->decimal('planting_actual', 15, 2)->default(0)->comment('种菜-实际');
|
||||
$table->decimal('red_packet_budget', 15, 2)->default(0)->comment('红包-预算');
|
||||
$table->decimal('red_packet_actual', 15, 2)->default(0)->comment('红包-实际');
|
||||
$table->decimal('corporate_deduction_budget', 15, 2)->default(0)->comment('对公扣款-预算');
|
||||
$table->decimal('corporate_deduction_actual', 15, 2)->default(0)->comment('对公扣款-实际');
|
||||
$table->decimal('expense_total_budget', 15, 2)->default(0)->comment('支出合计-预算');
|
||||
$table->decimal('expense_total_actual', 15, 2)->default(0)->comment('支出合计-实际');
|
||||
$table->decimal('bank_reservation', 15, 2)->default(0)->comment('银行账户店铺预留');
|
||||
$table->decimal('net_balance_budget', 15, 2)->default(0)->comment('本月净结余-预算');
|
||||
$table->decimal('net_balance_actual', 15, 2)->default(0)->comment('本月净结余-实际');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 12. 公司注册
|
||||
Schema::create('business_company_registrations', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('company_name')->comment('公司名称');
|
||||
$table->string('registration_type')->nullable()->comment('注册类型');
|
||||
$table->string('registration_status')->default('进行中')->comment('注册状态');
|
||||
$table->text('notes')->nullable()->comment('备注');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 13. 公司变更
|
||||
Schema::create('business_company_changes', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('company_name')->comment('公司名称');
|
||||
$table->string('change_type')->nullable()->comment('变更类型');
|
||||
$table->string('change_status')->default('进行中')->comment('变更状态');
|
||||
$table->date('change_date')->nullable()->comment('变更日期');
|
||||
$table->text('notes')->nullable()->comment('备注');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 14. 公司注销
|
||||
Schema::create('business_company_cancellations', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('company_name')->comment('公司名称');
|
||||
$table->string('cancellation_status')->default('进行中')->comment('注销状态');
|
||||
$table->text('notes')->nullable()->comment('备注');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 15. 商标信息
|
||||
Schema::create('business_trademarks', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('trademark_name')->comment('商标名称');
|
||||
$table->string('trademark_type')->nullable()->comment('商标类型');
|
||||
$table->string('trademark_status')->default('有效')->comment('商标状态');
|
||||
$table->date('registration_date')->nullable()->comment('注册日期');
|
||||
$table->date('expiry_date')->nullable()->comment('到期日期');
|
||||
$table->text('notes')->nullable()->comment('备注');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 16. 开店流程
|
||||
Schema::create('business_store_openings', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('store_name')->comment('店铺名称');
|
||||
$table->string('store_platform')->comment('店铺平台');
|
||||
$table->string('opening_status')->default('进行中')->comment('开店状态');
|
||||
$table->text('notes')->nullable()->comment('备注');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 17. 店铺变更
|
||||
Schema::create('business_store_changes', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('store_name')->comment('店铺名称');
|
||||
$table->string('change_type')->nullable()->comment('变更类型');
|
||||
$table->string('change_status')->default('进行中')->comment('变更状态');
|
||||
$table->text('notes')->nullable()->comment('备注');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 18. 关店流程
|
||||
Schema::create('business_store_closings', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('store_name')->comment('店铺名称');
|
||||
$table->string('closing_status')->default('进行中')->comment('关店状态');
|
||||
$table->text('notes')->nullable()->comment('备注');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 19. 公司公用账户信息
|
||||
Schema::create('business_company_shared_accounts', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('account_name')->comment('账户名称');
|
||||
$table->string('account_type')->default('基本户')->comment('账户类型');
|
||||
$table->string('bank_account_number')->nullable()->comment('银行账号');
|
||||
$table->string('opening_bank')->nullable()->comment('开户行');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 20. 自动开票
|
||||
Schema::create('business_auto_invoicing', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('store_name')->comment('店铺名称');
|
||||
$table->string('auto_invoice_status')->default('已开启')->comment('自动开票状态');
|
||||
$table->text('notes')->nullable()->comment('备注');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 21. 进项报表
|
||||
Schema::create('business_input_invoice_reports', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('company_name')->comment('公司名称');
|
||||
$table->decimal('input_goods_amount', 15, 2)->default(0)->comment('进项商品金额');
|
||||
$table->decimal('input_goods_tax', 15, 2)->default(0)->comment('进项商品税额');
|
||||
$table->decimal('input_service_amount', 15, 2)->default(0)->comment('进项服务费金额');
|
||||
$table->decimal('input_service_tax', 15, 2)->default(0)->comment('进项服务费税额');
|
||||
$table->decimal('input_total_amount', 15, 2)->default(0)->comment('进项金额合计');
|
||||
$table->decimal('input_total_tax', 15, 2)->default(0)->comment('进项税额合计');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 22. 销项报表
|
||||
Schema::create('business_output_invoice_reports', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('company_name')->comment('公司名称');
|
||||
$table->decimal('output_goods_amount', 15, 2)->default(0)->comment('销项商品金额');
|
||||
$table->decimal('output_goods_tax', 15, 2)->default(0)->comment('销项商品税额');
|
||||
$table->decimal('output_service_amount', 15, 2)->default(0)->comment('销项服务费金额');
|
||||
$table->decimal('output_service_tax', 15, 2)->default(0)->comment('销项服务费税额');
|
||||
$table->decimal('output_total_amount', 15, 2)->default(0)->comment('销项金额合计');
|
||||
$table->decimal('output_total_tax', 15, 2)->default(0)->comment('销项税额合计');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 23. 财务经营分析报表
|
||||
Schema::create('business_financial_analysis', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('company_name')->comment('公司名称');
|
||||
$table->string('period')->nullable()->comment('期间');
|
||||
$table->decimal('revenue', 15, 2)->default(0)->comment('收入');
|
||||
$table->decimal('total_cost', 15, 2)->default(0)->comment('总成本');
|
||||
$table->decimal('gross_profit', 15, 2)->default(0)->comment('毛利');
|
||||
$table->decimal('net_profit', 15, 2)->default(0)->comment('净利润');
|
||||
$table->decimal('profit_margin', 8, 4)->default(0)->comment('利润率');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 24. 业务流程统计表
|
||||
Schema::create('business_process_statistics', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('process_name')->comment('流程名称');
|
||||
$table->integer('total_count')->default(0)->comment('总数量');
|
||||
$table->integer('completed_count')->default(0)->comment('已完成');
|
||||
$table->integer('pending_count')->default(0)->comment('待处理');
|
||||
$table->string('period')->nullable()->comment('期间');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 25. 付款流程统计表
|
||||
Schema::create('business_payment_statistics', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('payment_type')->comment('付款类型');
|
||||
$table->integer('total_count')->default(0)->comment('总数量');
|
||||
$table->integer('completed_count')->default(0)->comment('已完成');
|
||||
$table->integer('pending_count')->default(0)->comment('待处理');
|
||||
$table->decimal('total_amount', 15, 2)->default(0)->comment('总金额');
|
||||
$table->string('period')->nullable()->comment('期间');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
|
||||
// 26. 待办事项
|
||||
Schema::create('business_todos', function (Blueprint $table) {
|
||||
$table->increments('id');
|
||||
$table->integer('company_id')->default(1);
|
||||
$table->string('title')->comment('标题');
|
||||
$table->string('category')->nullable()->comment('分类');
|
||||
$table->string('priority')->default('普通')->comment('优先级');
|
||||
$table->string('status')->default('待处理')->comment('状态');
|
||||
$table->date('due_date')->nullable()->comment('截止日期');
|
||||
$table->text('description')->nullable()->comment('描述');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->index('company_id');
|
||||
});
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('business_tax_data');
|
||||
Schema::dropIfExists('business_company_store_data');
|
||||
Schema::dropIfExists('business_store_change_logs');
|
||||
Schema::dropIfExists('business_store_receiving_accounts');
|
||||
Schema::dropIfExists('business_bank_accounts');
|
||||
Schema::dropIfExists('business_courier_collections');
|
||||
Schema::dropIfExists('business_invoice_basic_info');
|
||||
Schema::dropIfExists('business_store_invoicing');
|
||||
Schema::dropIfExists('business_sw_planning');
|
||||
Schema::dropIfExists('business_sw_actual_statistics');
|
||||
Schema::dropIfExists('business_fund_forecast');
|
||||
Schema::dropIfExists('business_company_registrations');
|
||||
Schema::dropIfExists('business_company_changes');
|
||||
Schema::dropIfExists('business_company_cancellations');
|
||||
Schema::dropIfExists('business_trademarks');
|
||||
Schema::dropIfExists('business_store_openings');
|
||||
Schema::dropIfExists('business_store_changes');
|
||||
Schema::dropIfExists('business_store_closings');
|
||||
Schema::dropIfExists('business_company_shared_accounts');
|
||||
Schema::dropIfExists('business_auto_invoicing');
|
||||
Schema::dropIfExists('business_input_invoice_reports');
|
||||
Schema::dropIfExists('business_output_invoice_reports');
|
||||
Schema::dropIfExists('business_financial_analysis');
|
||||
Schema::dropIfExists('business_process_statistics');
|
||||
Schema::dropIfExists('business_payment_statistics');
|
||||
Schema::dropIfExists('business_todos');
|
||||
}
|
||||
};
|
||||
@ -2,9 +2,9 @@
|
||||
|
||||
namespace Modules\EcommerceFinance\Http\Controllers;
|
||||
|
||||
use App\Abstracts\Http\Controller;
|
||||
use App\Utilities\SidebarPermissions;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Modules\EcommerceFinance\AccountBillColumns;
|
||||
use Modules\EcommerceFinance\Models\AccountBill;
|
||||
|
||||
@ -15,11 +15,11 @@ class AccountBills extends Controller
|
||||
* 经 admin 路由组(web 会话)暴露,前端带 CSRF 调用。
|
||||
* 按 bill_type 过滤,返回分页数据 + 汇总 + 该类型的列配置。
|
||||
*/
|
||||
public function index(Request $request)
|
||||
public function index(Request $request, string $bill_type)
|
||||
{
|
||||
$this->authorizeStoreReceivingBills();
|
||||
|
||||
$billType = (string) $request->get('bill_type', '');
|
||||
$billType = $bill_type;
|
||||
|
||||
if (! AccountBillColumns::has($billType)) {
|
||||
abort(404, '未知的账户类型。');
|
||||
|
||||
@ -9,7 +9,4 @@ Route::admin('ecommerce-finance', function () {
|
||||
Route::get('alipay-bills', 'AlipayBills@index')->name('alipay-bills.index');
|
||||
Route::get('alipay-bills/{bill}', 'AlipayBills@show')->name('alipay-bills.show');
|
||||
|
||||
// 店铺收款账户账单 › 其它账户类型(通用表 ec_account_bills,按 bill_type 区分)
|
||||
Route::get('account-bills', 'AccountBills@index')->name('account-bills.index');
|
||||
Route::get('account-bills/{bill}', 'AccountBills@show')->name('account-bills.show');
|
||||
});
|
||||
|
||||
6
public/css/app.css
vendored
6
public/css/app.css
vendored
File diff suppressed because one or more lines are too long
@ -163,7 +163,6 @@ export default {
|
||||
this.loading = true;
|
||||
this.loadError = false;
|
||||
const params = {
|
||||
bill_type: this.billType,
|
||||
...this.filters,
|
||||
sort: this.sort.key,
|
||||
dir: this.sort.dir,
|
||||
|
||||
5
resources/assets/js/views/business/pages.js
vendored
5
resources/assets/js/views/business/pages.js
vendored
@ -39,9 +39,8 @@ function resolveComponent(context) {
|
||||
? `/${context.companyId}/ecommerce-finance/alipay-bills`
|
||||
: '/ecommerce-finance/alipay-bills';
|
||||
const accountBase = context.companyId
|
||||
? `/${context.companyId}/ecommerce-finance/account-bills`
|
||||
: '/ecommerce-finance/account-bills';
|
||||
|
||||
? `/${context.companyId}/ecommerce-finance/account-bills/type/${encodeURIComponent(context.tab)}`
|
||||
: `/ecommerce-finance/account-bills/type/${encodeURIComponent(context.tab)}`;
|
||||
// 店铺收款账户账单 › 淘系支付宝账户(独立实现)
|
||||
if (context.page === 'store-receiving-bills' && context.tab === 'taobao-alipay') {
|
||||
return { Component: TaobaoAlipayBills, props: { apiBase: alipayBase } };
|
||||
|
||||
30
resources/views/business/pages/auto_invoicing.blade.php
Normal file
30
resources/views/business/pages/auto_invoicing.blade.php
Normal file
@ -0,0 +1,30 @@
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">{{ $title ?? '自动开票' }}</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>店铺名称</th>
|
||||
<th>自动开票状态</th>
|
||||
<th>备注</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td>{{ $item->store_name }}</td>
|
||||
<td><span class="business-badge business-badge-info">{{ $item->auto_invoice_status }}</span></td>
|
||||
<td>{{ $item->notes }}</td>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan=4 style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
38
resources/views/business/pages/bank_accounts.blade.php
Normal file
38
resources/views/business/pages/bank_accounts.blade.php
Normal file
@ -0,0 +1,38 @@
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">{{ $title ?? '银行账户信息' }}</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>账户名称</th>
|
||||
<th>账户类型</th>
|
||||
<th>银行账号</th>
|
||||
<th>开户行</th>
|
||||
<th>ukey密码(制单)</th>
|
||||
<th>登录密码(制单)</th>
|
||||
<th>ukey密码(审核)</th>
|
||||
<th>登录密码(审核)</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
<td>{{ $item->account_name }}</td>
|
||||
<td><span class="business-badge business-badge-info">{{ $item->account_type }}</span></td>
|
||||
<td>{{ $item->bank_account_number }}</td>
|
||||
<td>{{ $item->opening_bank }}</td>
|
||||
<td>{{ $item->ukey_password_maker }}</td>
|
||||
<td>{{ $item->login_password_maker }}</td>
|
||||
<td>{{ $item->ukey_password_reviewer }}</td>
|
||||
<td>{{ $item->login_password_reviewer }}</td>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan=8 style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@ -0,0 +1,30 @@
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">{{ $title ?? '公司注销' }}</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>公司名称</th>
|
||||
<th>注销状态</th>
|
||||
<th>备注</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td>{{ $item->company_name }}</td>
|
||||
<td><span class="business-badge business-badge-info">{{ $item->cancellation_status }}</span></td>
|
||||
<td>{{ $item->notes }}</td>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan=4 style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
34
resources/views/business/pages/company_change.blade.php
Normal file
34
resources/views/business/pages/company_change.blade.php
Normal file
@ -0,0 +1,34 @@
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">{{ $title ?? '公司变更' }}</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>公司名称</th>
|
||||
<th>变更类型</th>
|
||||
<th>变更状态</th>
|
||||
<th>变更日期</th>
|
||||
<th>备注</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td>{{ $item->company_name }}</td>
|
||||
<td>{{ $item->change_type }}</td>
|
||||
<td><span class="business-badge business-badge-info">{{ $item->change_status }}</span></td>
|
||||
<td>{{ $item->change_date }}</td>
|
||||
<td>{{ $item->notes }}</td>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan=6 style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@ -0,0 +1,32 @@
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">{{ $title ?? '公司注册' }}</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>公司名称</th>
|
||||
<th>注册类型</th>
|
||||
<th>注册状态</th>
|
||||
<th>备注</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td>{{ $item->company_name }}</td>
|
||||
<td>{{ $item->registration_type }}</td>
|
||||
<td><span class="business-badge business-badge-info">{{ $item->registration_status }}</span></td>
|
||||
<td>{{ $item->notes }}</td>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan=5 style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
32
resources/views/business/pages/courier_collection.blade.php
Normal file
32
resources/views/business/pages/courier_collection.blade.php
Normal file
@ -0,0 +1,32 @@
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">快递收款系统</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>快递名称</th>
|
||||
<th>收款类型</th>
|
||||
<th>收款名称</th>
|
||||
<th>收款账号</th>
|
||||
<th>开户行</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td>{{ $item->courier_name }}</td>
|
||||
<td><span class="business-badge business-badge-info">{{ $item->collection_type }}</span></td>
|
||||
<td>{{ $item->collection_name }}</td>
|
||||
<td>{{ $item->collection_account }}</td>
|
||||
<td>{{ $item->opening_bank }}</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan=6 style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
108
resources/views/business/pages/fund_forecast.blade.php
Normal file
108
resources/views/business/pages/fund_forecast.blade.php
Normal file
@ -0,0 +1,108 @@
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">{{ $title ?? '资金预测表' }}</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>预算月份</th>
|
||||
<th>实际月份</th>
|
||||
<th>店铺余额(预算)</th>
|
||||
<th>店铺余额(实际)</th>
|
||||
<th>银行余额(预算)</th>
|
||||
<th>银行余额(实际)</th>
|
||||
<th>其他余额(预算)</th>
|
||||
<th>其他余额(实际)</th>
|
||||
<th>预计回款(预算)</th>
|
||||
<th>预计回款(实际)</th>
|
||||
<th>收入合计(预算)</th>
|
||||
<th>收入合计(实际)</th>
|
||||
<th>往期未付(预算)</th>
|
||||
<th>往期未付(实际)</th>
|
||||
<th>借支(预算)</th>
|
||||
<th>借支(实际)</th>
|
||||
<th>供应商(预算)</th>
|
||||
<th>供应商(实际)</th>
|
||||
<th>现结(预算)</th>
|
||||
<th>现结(实际)</th>
|
||||
<th>快递(预算)</th>
|
||||
<th>快递(实际)</th>
|
||||
<th>纸厂压贴(预算)</th>
|
||||
<th>纸厂压贴(实际)</th>
|
||||
<th>封边条(预算)</th>
|
||||
<th>封边条(实际)</th>
|
||||
<th>板材(预算)</th>
|
||||
<th>板材(实际)</th>
|
||||
<th>工资(预算)</th>
|
||||
<th>工资(实际)</th>
|
||||
<th>日常费用(预算)</th>
|
||||
<th>日常费用(实际)</th>
|
||||
<th>种菜(预算)</th>
|
||||
<th>种菜(实际)</th>
|
||||
<th>红包(预算)</th>
|
||||
<th>红包(实际)</th>
|
||||
<th>对公扣款(预算)</th>
|
||||
<th>对公扣款(实际)</th>
|
||||
<th>支出合计(预算)</th>
|
||||
<th>支出合计(实际)</th>
|
||||
<th>银行预留</th>
|
||||
<th>净结余(预算)</th>
|
||||
<th>净结余(实际)</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
<td>{{ $item->budget_month }}</td>
|
||||
<td>{{ $item->actual_month }}</td>
|
||||
<td>{{ number_format($item->store_balance_budget, 2) }}</td>
|
||||
<td>{{ number_format($item->store_balance_actual, 2) }}</td>
|
||||
<td>{{ number_format($item->bank_balance_budget, 2) }}</td>
|
||||
<td>{{ number_format($item->bank_balance_actual, 2) }}</td>
|
||||
<td>{{ number_format($item->other_balance_budget, 2) }}</td>
|
||||
<td>{{ number_format($item->other_balance_actual, 2) }}</td>
|
||||
<td>{{ number_format($item->expected_monthly_return_budget, 2) }}</td>
|
||||
<td>{{ number_format($item->expected_monthly_return_actual, 2) }}</td>
|
||||
<td>{{ number_format($item->income_total_budget, 2) }}</td>
|
||||
<td>{{ number_format($item->income_total_actual, 2) }}</td>
|
||||
<td>{{ number_format($item->prior_unpaid_budget, 2) }}</td>
|
||||
<td>{{ number_format($item->prior_unpaid_actual, 2) }}</td>
|
||||
<td>{{ number_format($item->advance_budget, 2) }}</td>
|
||||
<td>{{ number_format($item->advance_actual, 2) }}</td>
|
||||
<td>{{ number_format($item->supplier_budget, 2) }}</td>
|
||||
<td>{{ number_format($item->supplier_actual, 2) }}</td>
|
||||
<td>{{ number_format($item->spot_settlement_budget, 2) }}</td>
|
||||
<td>{{ number_format($item->spot_settlement_actual, 2) }}</td>
|
||||
<td>{{ number_format($item->courier_budget, 2) }}</td>
|
||||
<td>{{ number_format($item->courier_actual, 2) }}</td>
|
||||
<td>{{ number_format($item->paper_factory_budget, 2) }}</td>
|
||||
<td>{{ number_format($item->paper_factory_actual, 2) }}</td>
|
||||
<td>{{ number_format($item->edge_band_budget, 2) }}</td>
|
||||
<td>{{ number_format($item->edge_band_actual, 2) }}</td>
|
||||
<td>{{ number_format($item->board_budget, 2) }}</td>
|
||||
<td>{{ number_format($item->board_actual, 2) }}</td>
|
||||
<td>{{ number_format($item->salary_budget, 2) }}</td>
|
||||
<td>{{ number_format($item->salary_actual, 2) }}</td>
|
||||
<td>{{ number_format($item->daily_expense_budget, 2) }}</td>
|
||||
<td>{{ number_format($item->daily_expense_actual, 2) }}</td>
|
||||
<td>{{ number_format($item->planting_budget, 2) }}</td>
|
||||
<td>{{ number_format($item->planting_actual, 2) }}</td>
|
||||
<td>{{ number_format($item->red_packet_budget, 2) }}</td>
|
||||
<td>{{ number_format($item->red_packet_actual, 2) }}</td>
|
||||
<td>{{ number_format($item->corporate_deduction_budget, 2) }}</td>
|
||||
<td>{{ number_format($item->corporate_deduction_actual, 2) }}</td>
|
||||
<td>{{ number_format($item->expense_total_budget, 2) }}</td>
|
||||
<td>{{ number_format($item->expense_total_actual, 2) }}</td>
|
||||
<td>{{ number_format($item->bank_reservation, 2) }}</td>
|
||||
<td>{{ number_format($item->net_balance_budget, 2) }}</td>
|
||||
<td>{{ number_format($item->net_balance_actual, 2) }}</td>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan=43 style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
36
resources/views/business/pages/invoice_basic_info.blade.php
Normal file
36
resources/views/business/pages/invoice_basic_info.blade.php
Normal file
@ -0,0 +1,36 @@
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">{{ $title ?? '发票基础信息' }}</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>店铺名称</th>
|
||||
<th>店铺主体</th>
|
||||
<th>开票员</th>
|
||||
<th>开票额度</th>
|
||||
<th>销项金额</th>
|
||||
<th>进项金额</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td>{{ $item->store_name }}</td>
|
||||
<td>{{ $item->store_entity }}</td>
|
||||
<td>{{ $item->invoice_officer }}</td>
|
||||
<td>{{ number_format($item->invoice_quota, 2) }}</td>
|
||||
<td>{{ number_format($item->output_amount, 2) }}</td>
|
||||
<td>{{ number_format($item->input_amount, 2) }}</td>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan=7 style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
44
resources/views/business/pages/invoice_reports.blade.php
Normal file
44
resources/views/business/pages/invoice_reports.blade.php
Normal file
@ -0,0 +1,44 @@
|
||||
@php
|
||||
// Determine which fields to show based on active tab
|
||||
$isInputTab = isset($activeTab) && $activeTab['slug'] === 'input';
|
||||
$pageTitle = $isInputTab ? '进项报表' : '销项报表';
|
||||
if ($isInputTab) {
|
||||
$displayFields = ['id', 'company_name', 'input_goods_amount', 'input_goods_tax', 'input_service_amount', 'input_service_tax', 'input_total_amount', 'input_total_tax'];
|
||||
$displayHeaders = ['序号', '公司名称', '商品金额', '商品税额', '服务费金额', '服务费税额', '金额合计', '税额合计'];
|
||||
} else {
|
||||
$displayFields = ['id', 'company_name', 'output_goods_amount', 'output_goods_tax', 'output_service_amount', 'output_service_tax', 'output_total_amount', 'output_total_tax'];
|
||||
$displayHeaders = ['序号', '公司名称', '商品金额', '商品税额', '服务费金额', '服务费税额', '金额合计', '税额合计'];
|
||||
}
|
||||
@endphp
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">{{ $pageTitle ?? '发票数据报表' }}</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
@foreach($displayHeaders as $h)
|
||||
<th>{{ $h }}</th>
|
||||
@endforeach
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
@foreach($displayFields as $f)
|
||||
@if($f === 'id')
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
@elseif(in_array($f, ['input_goods_amount', 'input_goods_tax', 'input_service_amount', 'input_service_tax', 'input_total_amount', 'input_total_tax', 'output_goods_amount', 'output_goods_tax', 'output_service_amount', 'output_service_tax', 'output_total_amount', 'output_total_tax']))
|
||||
<td>{{ number_format($item->$f, 2) }}</td>
|
||||
@else
|
||||
<td>{{ $item->$f }}</td>
|
||||
@endif
|
||||
@endforeach
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan="{{ count($displayHeaders) }}" style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
36
resources/views/business/pages/payment_statistics.blade.php
Normal file
36
resources/views/business/pages/payment_statistics.blade.php
Normal file
@ -0,0 +1,36 @@
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">{{ $title ?? '付款流程统计表' }}</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>付款类型</th>
|
||||
<th>总数量</th>
|
||||
<th>已完成</th>
|
||||
<th>待处理</th>
|
||||
<th>总金额</th>
|
||||
<th>期间</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td>{{ $item->payment_type }}</td>
|
||||
<td>{{ $item->total_count }}</td>
|
||||
<td>{{ $item->completed_count }}</td>
|
||||
<td>{{ $item->pending_count }}</td>
|
||||
<td>{{ number_format($item->total_amount, 2) }}</td>
|
||||
<td>{{ $item->period }}</td>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan=7 style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
34
resources/views/business/pages/process_statistics.blade.php
Normal file
34
resources/views/business/pages/process_statistics.blade.php
Normal file
@ -0,0 +1,34 @@
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">{{ $title ?? '业务流程统计表' }}</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>流程名称</th>
|
||||
<th>总数量</th>
|
||||
<th>已完成</th>
|
||||
<th>待处理</th>
|
||||
<th>期间</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td>{{ $item->process_name }}</td>
|
||||
<td>{{ $item->total_count }}</td>
|
||||
<td>{{ $item->completed_count }}</td>
|
||||
<td>{{ $item->pending_count }}</td>
|
||||
<td>{{ $item->period }}</td>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan=6 style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
30
resources/views/business/pages/shared_accounts.blade.php
Normal file
30
resources/views/business/pages/shared_accounts.blade.php
Normal file
@ -0,0 +1,30 @@
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">{{ $title ?? '公司公用账户信息' }}</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>账户名称</th>
|
||||
<th>账户类型</th>
|
||||
<th>银行账号</th>
|
||||
<th>开户行</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
<td>{{ $item->account_name }}</td>
|
||||
<td><span class="business-badge business-badge-info">{{ $item->account_type }}</span></td>
|
||||
<td>{{ $item->bank_account_number }}</td>
|
||||
<td>{{ $item->opening_bank }}</td>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan=4 style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
34
resources/views/business/pages/store_change_log.blade.php
Normal file
34
resources/views/business/pages/store_change_log.blade.php
Normal file
@ -0,0 +1,34 @@
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">{{ $title ?? '店铺变更统计表' }}</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>店铺名称</th>
|
||||
<th>店铺主体</th>
|
||||
<th>变更时间</th>
|
||||
<th>收款账户信息</th>
|
||||
<th>历史主体</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td>{{ $item->store_name }}</td>
|
||||
<td>{{ $item->store_entity }}</td>
|
||||
<td>{{ $item->change_date }}</td>
|
||||
<td>{{ $item->receiving_account_info }}</td>
|
||||
<td>{{ $item->historical_entity }}</td>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan=6 style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
36
resources/views/business/pages/store_data.blade.php
Normal file
36
resources/views/business/pages/store_data.blade.php
Normal file
@ -0,0 +1,36 @@
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">{{ $title ?? '公司店铺数据' }}</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>公司名称</th>
|
||||
<th>店铺名称</th>
|
||||
<th>店铺业绩</th>
|
||||
<th>公司业绩</th>
|
||||
<th>是否触发店铺变更流程</th>
|
||||
<th>是否触发公司注册流程</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td>{{ $item->company_name }}</td>
|
||||
<td>{{ $item->store_name }}</td>
|
||||
<td>{{ number_format($item->store_performance, 2) }}</td>
|
||||
<td>{{ number_format($item->company_performance, 2) }}</td>
|
||||
<td>@if($item->trigger_store_change) <span class="business-badge business-badge-success">是</span> @else <span class="business-badge business-badge-danger">否</span> @endif</td>
|
||||
<td>@if($item->trigger_company_registration) <span class="business-badge business-badge-success">是</span> @else <span class="business-badge business-badge-danger">否</span> @endif</td>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan=7 style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
40
resources/views/business/pages/store_invoicing.blade.php
Normal file
40
resources/views/business/pages/store_invoicing.blade.php
Normal file
@ -0,0 +1,40 @@
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">{{ $title ?? '店铺后台开票' }}</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>店铺</th>
|
||||
<th>销售方名称</th>
|
||||
<th>销售方税号</th>
|
||||
<th>购买方名称</th>
|
||||
<th>购买方税号</th>
|
||||
<th>开票金额</th>
|
||||
<th>类目</th>
|
||||
<th>开票类型</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td>{{ $item->store_name }}</td>
|
||||
<td>{{ $item->seller_name }}</td>
|
||||
<td>{{ $item->seller_tax_number }}</td>
|
||||
<td>{{ $item->buyer_name }}</td>
|
||||
<td>{{ $item->buyer_tax_number }}</td>
|
||||
<td>{{ number_format($item->invoice_amount, 2) }}</td>
|
||||
<td><span class="business-badge business-badge-info">{{ $item->category }}</span></td>
|
||||
<td><span class="business-badge business-badge-info">{{ $item->invoice_type }}</span></td>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan=9 style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
32
resources/views/business/pages/store_process.blade.php
Normal file
32
resources/views/business/pages/store_process.blade.php
Normal file
@ -0,0 +1,32 @@
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">{{ $title ?? '店铺流程' }}</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>店铺名称</th>
|
||||
<th>店铺平台</th>
|
||||
<th>状态</th>
|
||||
<th>备注</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td>{{ $item->store_name }}</td>
|
||||
<td>{{ $item->store_platform }}</td>
|
||||
<td><span class="business-badge business-badge-info">{{ $item->opening_status }}</span></td>
|
||||
<td>{{ $item->notes }}</td>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan=5 style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@ -0,0 +1,42 @@
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">{{ $title ?? '店铺收款账户信息' }}</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>店铺平台</th>
|
||||
<th>店铺名称</th>
|
||||
<th>钱包号</th>
|
||||
<th>店铺主体名称</th>
|
||||
<th>登录账号</th>
|
||||
<th>登录密码</th>
|
||||
<th>收款方式</th>
|
||||
<th>收款账户名称</th>
|
||||
<th>支付宝账号/银行账号</th>
|
||||
<th>开户银行</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
<td>{{ $item->store_platform }}</td>
|
||||
<td>{{ $item->store_name }}</td>
|
||||
<td>{{ $item->wallet_number }}</td>
|
||||
<td>{{ $item->store_entity_name }}</td>
|
||||
<td>{{ $item->login_account }}</td>
|
||||
<td>{{ $item->login_password }}</td>
|
||||
<td><span class="business-badge business-badge-info">{{ $item->receiving_method }}</span></td>
|
||||
<td>{{ $item->receiving_account_name }}</td>
|
||||
<td>{{ $item->alipay_or_bank_account }}</td>
|
||||
<td>{{ $item->opening_bank }}</td>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan=10 style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@ -0,0 +1,190 @@
|
||||
<div class="supplier-board-page">
|
||||
<style>
|
||||
.supplier-board-toolbar {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: flex-end;
|
||||
gap: 0.75rem;
|
||||
margin-bottom: 1rem;
|
||||
padding: 1rem;
|
||||
border: 1px solid #e5e7eb;
|
||||
border-radius: 0.5rem;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.supplier-board-field {
|
||||
display: flex;
|
||||
min-width: 9rem;
|
||||
flex-direction: column;
|
||||
gap: 0.35rem;
|
||||
}
|
||||
|
||||
.supplier-board-field label {
|
||||
color: #6b7280;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.supplier-board-field input,
|
||||
.supplier-board-field select {
|
||||
height: 2.25rem;
|
||||
min-width: 9rem;
|
||||
padding: 0 0.65rem;
|
||||
border: 1px solid #d1d5db;
|
||||
border-radius: 0.375rem;
|
||||
background: #ffffff;
|
||||
color: #374151;
|
||||
font-size: 0.8125rem;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.supplier-board-field input:focus,
|
||||
.supplier-board-field select:focus {
|
||||
border-color: var(--vip-content-accent);
|
||||
box-shadow: 0 0 0 2px rgba(197, 160, 74, 0.14);
|
||||
}
|
||||
|
||||
.supplier-board-table-card {
|
||||
overflow: hidden;
|
||||
border: 1px solid #e5e7eb;
|
||||
border-radius: 0.5rem;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.supplier-board-table-scroll {
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.supplier-board-table {
|
||||
width: 100%;
|
||||
min-width: 94rem;
|
||||
border-collapse: collapse;
|
||||
font-size: 0.8125rem;
|
||||
}
|
||||
|
||||
.supplier-board-table th,
|
||||
.supplier-board-table td {
|
||||
height: 2.75rem;
|
||||
padding: 0.55rem 0.7rem;
|
||||
border-right: 1px solid #e5e7eb;
|
||||
border-bottom: 1px solid #e5e7eb;
|
||||
text-align: left;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.supplier-board-table th:last-child,
|
||||
.supplier-board-table td:last-child {
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
.supplier-board-table thead th {
|
||||
background: #f4f6fa;
|
||||
color: #374151;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.supplier-board-table .is-number {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.supplier-board-table .is-empty td {
|
||||
height: 8rem;
|
||||
color: #9ca3af;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.supplier-board-pagination {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 1rem;
|
||||
padding: 0.75rem 1rem;
|
||||
color: #6b7280;
|
||||
font-size: 0.8125rem;
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
.supplier-board-toolbar {
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
.supplier-board-field,
|
||||
.supplier-board-field input,
|
||||
.supplier-board-field select {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="supplier-board-toolbar" aria-label="板材扣款筛选">
|
||||
<div class="supplier-board-field">
|
||||
<label for="board-deduction-stock-in-date">入库日期</label>
|
||||
<input id="board-deduction-stock-in-date" type="date">
|
||||
</div>
|
||||
<div class="supplier-board-field">
|
||||
<label for="board-deduction-stock-out-date">出库日期</label>
|
||||
<input id="board-deduction-stock-out-date" type="date">
|
||||
</div>
|
||||
<div class="supplier-board-field">
|
||||
<label for="board-deduction-furniture-factory">家具厂</label>
|
||||
<input id="board-deduction-furniture-factory" type="text" placeholder="请输入家具厂">
|
||||
</div>
|
||||
<div class="supplier-board-field">
|
||||
<label for="board-deduction-lamination-factory">压贴厂</label>
|
||||
<input id="board-deduction-lamination-factory" type="text" placeholder="请输入压贴厂">
|
||||
</div>
|
||||
<div class="supplier-board-field">
|
||||
<label for="board-deduction-type">类型</label>
|
||||
<select id="board-deduction-type">
|
||||
<option>全部类型</option>
|
||||
<option>正常扣款</option>
|
||||
<option>调整扣款</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="supplier-board-field">
|
||||
<label for="board-deduction-material">原料名称</label>
|
||||
<input id="board-deduction-material" type="text" placeholder="请输入原料名称">
|
||||
</div>
|
||||
<div class="supplier-board-field">
|
||||
<label for="board-deduction-claim-number">申领单号</label>
|
||||
<input id="board-deduction-claim-number" type="text" placeholder="请输入申领单号">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="supplier-board-table-card">
|
||||
<div class="supplier-board-table-scroll">
|
||||
<table class="supplier-board-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>入库日期</th>
|
||||
<th>出库日期</th>
|
||||
<th>家具厂</th>
|
||||
<th>压贴厂</th>
|
||||
<th>类型</th>
|
||||
<th>规格</th>
|
||||
<th>原料名称</th>
|
||||
<th class="is-number">实收数量</th>
|
||||
<th class="is-number">单价</th>
|
||||
<th class="is-number">金额</th>
|
||||
<th>单位</th>
|
||||
<th>批次日期</th>
|
||||
<th>出库单号</th>
|
||||
<th>出库备注</th>
|
||||
<th>申领单号</th>
|
||||
<th>单号类型</th>
|
||||
<th>送货单号</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="is-empty">
|
||||
<td colspan="17">暂无数据</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="supplier-board-pagination">
|
||||
<span>共 0 条记录</span>
|
||||
<span>第 1 / 1 页</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -40,20 +40,45 @@
|
||||
<span class="text-gray-400">加载中...</span>
|
||||
</div>
|
||||
<el-table v-else :data="tableData" stripe border style="width: 100%" size="small" height="600">
|
||||
<el-table-column type="index" label="#" width="50" fixed="left"></el-table-column>
|
||||
<el-table-column prop="date" label="日期" width="110" fixed="left"></el-table-column>
|
||||
<el-table-column prop="purchase" label="采购人" width="100" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="warehouse" label="仓库" width="180" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="transactionNo" label="来源单号" width="180" fixed="left" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="distributionNo" label="单据编号(采购单号)" width="180" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="date" label="创建时间" width="110"></el-table-column>
|
||||
<el-table-column prop="supplier" label="供应商" width="120" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="transactionNo" label="交易号" width="200" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="distributionNo" label="配货单号" width="200" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="expressNo" label="快递单号" width="160" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="sku" label="SKU编码" width="120" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="barCode" label="条形码" width="160" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="skuName" label="商品名称" width="240" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="distribution_date" label="配货时间" width="160" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="ship_date" label="发货时间" width="110"></el-table-column>
|
||||
<el-table-column prop="sku" label="货号" width="120" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="barCode" label="条码" width="150" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="skuName" label="规格名" width="200" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="库存变动量" width="100" align="right">
|
||||
<template slot-scope="scope">@{{ scope.row.stock_change == null ? '-' : scope.row.stock_change }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单价" width="100" align="right">
|
||||
<template slot-scope="scope">@{{ scope.row.unit_price == null ? '-' : formatMoney(scope.row.unit_price) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="金额" width="110" align="right">
|
||||
<template slot-scope="scope">@{{ scope.row.amount == null ? '-' : formatMoney(scope.row.amount) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="预估单价" width="100" align="right">
|
||||
<template slot-scope="scope">@{{ scope.row.estimated_unit_price == null ? '-' : formatMoney(scope.row.estimated_unit_price) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="预估金额" width="110" align="right">
|
||||
<template slot-scope="scope">@{{ scope.row.estimated_amount == null ? '-' : formatMoney(scope.row.estimated_amount) }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="supplier_barcode" label="供应商条码" width="130" show-overflow-tooltip>
|
||||
<template slot-scope="scope">@{{ scope.row.supplier_barcode || '-' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="remark" label="备注" width="150" show-overflow-tooltip>
|
||||
<template slot-scope="scope">@{{ scope.row.remark || '-' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="warehouse" label="仓库" width="160" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="distribution_date" label="创建时间" width="160" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="expressName" label="快递名称" width="100" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="expressNo" label="快递单号" width="150" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="未发出" width="90" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-tag v-if="scope.row.unsent" size="mini" type="warning">未发出</el-tag>
|
||||
<span v-else class="text-gray-400">-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="purchase" label="负责人" width="100" show-overflow-tooltip></el-table-column>
|
||||
</el-table>
|
||||
|
||||
<div class="flex items-center justify-between px-4 py-3 border-t border-gray-100" v-if="!loading">
|
||||
|
||||
@ -20,7 +20,7 @@
|
||||
{{-- 筛选栏 --}}
|
||||
<div class="bg-white rounded-xl border border-gray-100 p-4 mb-4 shadow-sm">
|
||||
<div class="flex flex-wrap items-center gap-3">
|
||||
<el-input v-model="filters.supplier" placeholder="供应商" size="small" style="width: 160px" clearable @clear="onFilterChange" @keyup.enter="onFilterChange"></el-input>
|
||||
<el-input v-model="filters.supplier" placeholder="明细供应商" size="small" style="width: 160px" clearable @clear="onFilterChange" @keyup.enter="onFilterChange"></el-input>
|
||||
<el-select v-model="filters.warehouse" placeholder="仓库" size="small" style="width: 140px" filterable clearable @change="onFilterChange">
|
||||
<el-option v-for="w in options.warehouses" :key="w" :label="w" :value="w"></el-option>
|
||||
</el-select>
|
||||
@ -41,12 +41,11 @@
|
||||
<span class="text-gray-400">加载中...</span>
|
||||
</div>
|
||||
<el-table v-else :data="tableData" stripe border style="width: 100%" size="small" height="600">
|
||||
<el-table-column type="index" label="#" width="50" fixed="left"></el-table-column>
|
||||
<el-table-column prop="send_time" label="发货时间" width="110" fixed="left"></el-table-column>
|
||||
<el-table-column prop="supplier" label="供应商" width="120" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="supplier" label="明细供应商" width="120" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="barcode" label="条形码" width="160" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="sku_name" label="商品名称" width="220" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="qty" label="退货量" width="80" align="right"></el-table-column>
|
||||
<el-table-column prop="qty" label="发货量" width="80" align="right"></el-table-column>
|
||||
<el-table-column label="单价" width="100" align="right">
|
||||
<template slot-scope="scope">@{{ formatMoney(scope.row.unit_price) }}</template>
|
||||
</el-table-column>
|
||||
@ -63,12 +62,20 @@
|
||||
<span class="text-orange-500">@{{ formatMoney(scope.row.guess_amount) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="supplier_barcode" label="供应商条码" width="130" show-overflow-tooltip>
|
||||
<template slot-scope="scope">@{{ scope.row.supplier_barcode || '-' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="remark" label="备注" width="160" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="title" label="标题" width="120" show-overflow-tooltip>
|
||||
<template slot-scope="scope">@{{ scope.row.title || '-' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="wms_pick_no" label="wms配货单号" width="120" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="warehouse" label="仓库名称" width="140" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="express_no" label="快递单号" width="140" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="express_name" label="快递名称" width="100" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="io_date" label="出库时间" width="110"></el-table-column>
|
||||
<el-table-column prop="io_date" label="发货时间" width="110"></el-table-column>
|
||||
<el-table-column prop="original_barcode" label="原条码" width="130" show-overflow-tooltip>
|
||||
<template slot-scope="scope">@{{ scope.row.original_barcode || '-' }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="labels" label="标记多标签" width="120">
|
||||
<template slot-scope="scope">
|
||||
<el-tag v-if="scope.row.labels" size="mini" type="warning">@{{ scope.row.labels }}</el-tag>
|
||||
@ -76,6 +83,9 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="creator" label="创建人" width="100" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="reconciler" label="对账人" width="100" show-overflow-tooltip>
|
||||
<template slot-scope="scope">@{{ scope.row.reconciler || '-' }}</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<div class="flex items-center justify-between px-4 py-3 border-t border-gray-100" v-if="!loading">
|
||||
|
||||
@ -0,0 +1,314 @@
|
||||
<div class="supplier-payables-report-page">
|
||||
<style>
|
||||
.supplier-payables-report-toolbar {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: flex-end;
|
||||
gap: 0.75rem;
|
||||
margin-bottom: 1rem;
|
||||
padding: 1rem;
|
||||
border: 1px solid #e5e7eb;
|
||||
border-radius: 0.5rem;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.supplier-payables-report-field {
|
||||
display: flex;
|
||||
min-width: 9rem;
|
||||
flex-direction: column;
|
||||
gap: 0.35rem;
|
||||
}
|
||||
|
||||
.supplier-payables-report-field label {
|
||||
color: #6b7280;
|
||||
font-size: 0.75rem;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.supplier-payables-report-field input,
|
||||
.supplier-payables-report-field select {
|
||||
height: 2.25rem;
|
||||
min-width: 9rem;
|
||||
padding: 0 0.65rem;
|
||||
border: 1px solid #d1d5db;
|
||||
border-radius: 0.375rem;
|
||||
background: #ffffff;
|
||||
color: #374151;
|
||||
font-size: 0.8125rem;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.supplier-payables-report-field input:focus,
|
||||
.supplier-payables-report-field select:focus {
|
||||
border-color: var(--vip-content-accent);
|
||||
box-shadow: 0 0 0 2px rgba(197, 160, 74, 0.14);
|
||||
}
|
||||
|
||||
.supplier-payables-report-actions {
|
||||
display: flex;
|
||||
gap: 0.5rem;
|
||||
}
|
||||
|
||||
.supplier-payables-report-button {
|
||||
display: inline-flex;
|
||||
height: 2.25rem;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 0.35rem;
|
||||
padding: 0 0.85rem;
|
||||
border: 1px solid #d1d5db;
|
||||
border-radius: 0.375rem;
|
||||
background: #ffffff;
|
||||
color: #374151;
|
||||
font-size: 0.8125rem;
|
||||
font-weight: 600;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.supplier-payables-report-button.is-primary {
|
||||
border-color: var(--vip-content-accent);
|
||||
background: var(--vip-content-accent);
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.supplier-payables-report-button .material-icons-outlined {
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.supplier-payables-report-table-card {
|
||||
overflow: hidden;
|
||||
border: 1px solid #e5e7eb;
|
||||
border-radius: 0.5rem;
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
.supplier-payables-report-table-scroll {
|
||||
overflow-x: auto;
|
||||
}
|
||||
|
||||
.supplier-payables-report-table {
|
||||
width: 100%;
|
||||
min-width: 242rem;
|
||||
border-collapse: separate;
|
||||
border-spacing: 0;
|
||||
color: #374151;
|
||||
font-size: 0.75rem;
|
||||
}
|
||||
|
||||
.supplier-payables-report-table th,
|
||||
.supplier-payables-report-table td {
|
||||
height: 2.75rem;
|
||||
padding: 0.55rem 0.65rem;
|
||||
border-right: 1px solid #e5e7eb;
|
||||
border-bottom: 1px solid #e5e7eb;
|
||||
text-align: left;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.supplier-payables-report-table th:last-child,
|
||||
.supplier-payables-report-table td:last-child {
|
||||
border-right: 0;
|
||||
}
|
||||
|
||||
.supplier-payables-report-table thead th {
|
||||
background: #f4f6fa;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.supplier-payables-report-table thead tr:first-child th {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.supplier-payables-report-table thead tr:nth-child(2) th {
|
||||
position: sticky;
|
||||
top: 2.75rem;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
.supplier-payables-report-table .group-closed {
|
||||
background: #f3f0fa;
|
||||
}
|
||||
|
||||
.supplier-payables-report-table .group-purchase {
|
||||
background: #edf6ff;
|
||||
}
|
||||
|
||||
.supplier-payables-report-table .group-deduction {
|
||||
background: #fff1f2;
|
||||
}
|
||||
|
||||
.supplier-payables-report-table .group-addition {
|
||||
background: #ecf8f0;
|
||||
}
|
||||
|
||||
.supplier-payables-report-table .group-payment {
|
||||
background: #fff7df;
|
||||
}
|
||||
|
||||
.supplier-payables-report-table .is-empty td {
|
||||
height: 10rem;
|
||||
color: #9ca3af;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.supplier-payables-report-pagination {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 1rem;
|
||||
padding: 0.75rem 1rem;
|
||||
color: #6b7280;
|
||||
font-size: 0.8125rem;
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
.supplier-payables-report-toolbar {
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
.supplier-payables-report-field,
|
||||
.supplier-payables-report-field input,
|
||||
.supplier-payables-report-field select {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<form method="GET" class="supplier-payables-report-toolbar" aria-label="供应商应付表筛选">
|
||||
<div class="supplier-payables-report-field">
|
||||
<label for="supplier-payables-report-month">账单月份</label>
|
||||
<input id="supplier-payables-report-month" name="month" type="month" value="{{ request('month') }}">
|
||||
</div>
|
||||
<div class="supplier-payables-report-field">
|
||||
<label for="supplier-payables-report-supplier">供应商</label>
|
||||
<input id="supplier-payables-report-supplier" name="supplier" type="text" value="{{ request('supplier') }}" placeholder="供应商名称或简称">
|
||||
</div>
|
||||
<div class="supplier-payables-report-field">
|
||||
<label for="supplier-payables-report-reconciler">对账人</label>
|
||||
<input id="supplier-payables-report-reconciler" name="reconciler" type="text" value="{{ request('reconciler') }}" placeholder="请输入对账人">
|
||||
</div>
|
||||
<div class="supplier-payables-report-field">
|
||||
<label for="supplier-payables-report-status">合作状态</label>
|
||||
<select id="supplier-payables-report-status" name="cooperation_status">
|
||||
<option value="">全部状态</option>
|
||||
<option value="cooperating" @selected(request('cooperation_status') === 'cooperating')>合作中</option>
|
||||
<option value="stopped" @selected(request('cooperation_status') === 'stopped')>已停止合作</option>
|
||||
<option value="resumed" @selected(request('cooperation_status') === 'resumed')>重新启用</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="supplier-payables-report-actions">
|
||||
<button type="submit" class="supplier-payables-report-button is-primary">
|
||||
<span class="material-icons-outlined" aria-hidden="true">search</span>
|
||||
<span>查询</span>
|
||||
</button>
|
||||
<a
|
||||
href="{{ route('business.pages.show', ['section' => $section['slug'], 'page' => $page['slug']]) }}"
|
||||
class="supplier-payables-report-button"
|
||||
>
|
||||
<span class="material-icons-outlined" aria-hidden="true">refresh</span>
|
||||
<span>重置</span>
|
||||
</a>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div class="supplier-payables-report-table-card">
|
||||
<div class="supplier-payables-report-table-scroll">
|
||||
<table class="supplier-payables-report-table">
|
||||
<colgroup>
|
||||
<col style="width: 7rem">
|
||||
<col style="width: 7rem">
|
||||
<col style="width: 4.5rem">
|
||||
<col style="width: 13rem">
|
||||
<col style="width: 9rem">
|
||||
<col style="width: 8rem">
|
||||
<col style="width: 8rem">
|
||||
<col style="width: 12rem">
|
||||
<col style="width: 8rem">
|
||||
<col style="width: 8rem">
|
||||
<col style="width: 8rem">
|
||||
<col style="width: 8rem">
|
||||
<col style="width: 8rem">
|
||||
<col style="width: 8rem">
|
||||
<col style="width: 8rem">
|
||||
<col style="width: 9rem">
|
||||
<col style="width: 8rem">
|
||||
<col style="width: 8rem">
|
||||
<col style="width: 8rem">
|
||||
<col style="width: 8rem">
|
||||
<col style="width: 8rem">
|
||||
<col style="width: 9rem">
|
||||
<col style="width: 9rem">
|
||||
<col style="width: 9rem">
|
||||
<col style="width: 11rem">
|
||||
<col style="width: 11rem">
|
||||
<col style="width: 12rem">
|
||||
<col style="width: 9rem">
|
||||
<col style="width: 8rem">
|
||||
<col style="width: 9rem">
|
||||
<col style="width: 14rem">
|
||||
<col style="width: 9rem">
|
||||
<col style="width: 9rem">
|
||||
<col style="width: 12rem">
|
||||
</colgroup>
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="2" class="group-closed">已销账供应商</th>
|
||||
<th rowspan="2">序号</th>
|
||||
<th rowspan="2">供应商公司主体名称</th>
|
||||
<th rowspan="2">供应商简称</th>
|
||||
<th rowspan="2">快递运费</th>
|
||||
<th rowspan="2">月初未付</th>
|
||||
<th rowspan="2">之前未定价-本月定价</th>
|
||||
<th rowspan="2">预支借款</th>
|
||||
<th colspan="3" class="group-purchase">本月采购金额</th>
|
||||
<th colspan="5" class="group-deduction">减</th>
|
||||
<th class="group-addition">加</th>
|
||||
<th colspan="6" class="group-payment">单位:元</th>
|
||||
<th rowspan="2">备注</th>
|
||||
<th rowspan="2">是否直接对私打款</th>
|
||||
<th rowspan="2">对私原因</th>
|
||||
<th rowspan="2">含税定价金额</th>
|
||||
<th rowspan="2">押款金额</th>
|
||||
<th rowspan="2">结款截图</th>
|
||||
<th rowspan="2">最晚出账单时间(新执行标准)</th>
|
||||
<th rowspan="2">不合作时间</th>
|
||||
<th rowspan="2">重新启用日期</th>
|
||||
<th rowspan="2">负数原因</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th class="group-closed">对账人</th>
|
||||
<th class="group-closed">合作状态</th>
|
||||
<th class="group-purchase">货款金额</th>
|
||||
<th class="group-purchase">减:退货金额</th>
|
||||
<th class="group-purchase">小计</th>
|
||||
<th class="group-deduction">发票扣款</th>
|
||||
<th class="group-deduction">板材扣款</th>
|
||||
<th class="group-deduction">样品扣款</th>
|
||||
<th class="group-deduction">总赔偿金额</th>
|
||||
<th class="group-deduction">其他费用</th>
|
||||
<th class="group-addition">补给厂家</th>
|
||||
<th class="group-payment">供应商余额</th>
|
||||
<th class="group-payment">应付余额</th>
|
||||
<th class="group-payment">预估金额</th>
|
||||
<th class="group-payment">对公打款金额</th>
|
||||
<th class="group-payment">对私打款金额</th>
|
||||
<th class="group-payment">已销账金额</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class="is-empty">
|
||||
<td colspan="34">暂无供应商应付数据</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="supplier-payables-report-pagination">
|
||||
<span>共 0 条记录</span>
|
||||
<span>第 1 / 1 页</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
120
resources/views/business/pages/sw_actual_statistics.blade.php
Normal file
120
resources/views/business/pages/sw_actual_statistics.blade.php
Normal file
@ -0,0 +1,120 @@
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">{{ $title ?? '实际SW统计表' }}</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>区域</th>
|
||||
<th>公司类型</th>
|
||||
<th>对接人</th>
|
||||
<th>代账公司</th>
|
||||
<th>期间</th>
|
||||
<th>公司名称</th>
|
||||
<th>提供业绩</th>
|
||||
<th>实际申报业绩</th>
|
||||
<th>商品收入(专票金额)</th>
|
||||
<th>商品收入(专票税额)</th>
|
||||
<th>商品收入(普票金额)</th>
|
||||
<th>商品收入(普票税额)</th>
|
||||
<th>商品收入(未开票金额)</th>
|
||||
<th>商品收入(未开票税额)</th>
|
||||
<th>商品收入小计</th>
|
||||
<th>商品税金小计</th>
|
||||
<th>服务收入(专票金额)</th>
|
||||
<th>服务收入(专票税额)</th>
|
||||
<th>服务收入(普票金额)</th>
|
||||
<th>服务收入(普票税额)</th>
|
||||
<th>服务收入(未开票金额)</th>
|
||||
<th>服务收入(未开票税额)</th>
|
||||
<th>服务收入小计</th>
|
||||
<th>服务税金小计</th>
|
||||
<th>合计收入</th>
|
||||
<th>合计税金</th>
|
||||
<th>进项商品金额</th>
|
||||
<th>进项商品税额</th>
|
||||
<th>进项服务费金额</th>
|
||||
<th>进项服务费税额</th>
|
||||
<th>进项其他金额</th>
|
||||
<th>进项其他税额</th>
|
||||
<th>进项金额合计</th>
|
||||
<th>进项税额合计</th>
|
||||
<th>加计抵减</th>
|
||||
<th>留抵税金</th>
|
||||
<th>本月应交增值税</th>
|
||||
<th>城建税金</th>
|
||||
<th>教育费附加</th>
|
||||
<th>地方教育费附加</th>
|
||||
<th>印花税</th>
|
||||
<th>工会经费</th>
|
||||
<th>个税</th>
|
||||
<th>所得税</th>
|
||||
<th>垃圾处理费</th>
|
||||
<th>其他(滞纳金)</th>
|
||||
<th>税金合计</th>
|
||||
<th>税负</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td>{{ $item->region }}</td>
|
||||
<td>{{ $item->company_type }}</td>
|
||||
<td>{{ $item->contact_person }}</td>
|
||||
<td>{{ $item->bookkeeping_company }}</td>
|
||||
<td>{{ $item->period }}</td>
|
||||
<td>{{ $item->company_name }}</td>
|
||||
<td>{{ number_format($item->provided_performance, 2) }}</td>
|
||||
<td>{{ number_format($item->actual_declared_performance, 2) }}</td>
|
||||
<td>{{ number_format($item->goods_special_invoice_amount, 2) }}</td>
|
||||
<td>{{ number_format($item->goods_special_invoice_tax, 2) }}</td>
|
||||
<td>{{ number_format($item->goods_general_invoice_amount, 2) }}</td>
|
||||
<td>{{ number_format($item->goods_general_invoice_tax, 2) }}</td>
|
||||
<td>{{ number_format($item->goods_uninvoiced_amount, 2) }}</td>
|
||||
<td>{{ number_format($item->goods_uninvoiced_tax, 2) }}</td>
|
||||
<td>{{ number_format($item->goods_income_subtotal, 2) }}</td>
|
||||
<td>{{ number_format($item->goods_tax_subtotal, 2) }}</td>
|
||||
<td>{{ number_format($item->service_special_invoice_amount, 2) }}</td>
|
||||
<td>{{ number_format($item->service_special_invoice_tax, 2) }}</td>
|
||||
<td>{{ number_format($item->service_general_invoice_amount, 2) }}</td>
|
||||
<td>{{ number_format($item->service_general_invoice_tax, 2) }}</td>
|
||||
<td>{{ number_format($item->service_uninvoiced_amount, 2) }}</td>
|
||||
<td>{{ number_format($item->service_uninvoiced_tax, 2) }}</td>
|
||||
<td>{{ number_format($item->service_income_subtotal, 2) }}</td>
|
||||
<td>{{ number_format($item->service_tax_subtotal, 2) }}</td>
|
||||
<td>{{ number_format($item->total_income, 2) }}</td>
|
||||
<td>{{ number_format($item->total_tax, 2) }}</td>
|
||||
<td>{{ number_format($item->input_goods_amount, 2) }}</td>
|
||||
<td>{{ number_format($item->input_goods_tax, 2) }}</td>
|
||||
<td>{{ number_format($item->input_service_amount, 2) }}</td>
|
||||
<td>{{ number_format($item->input_service_tax, 2) }}</td>
|
||||
<td>{{ number_format($item->input_other_amount, 2) }}</td>
|
||||
<td>{{ number_format($item->input_other_tax, 2) }}</td>
|
||||
<td>{{ number_format($item->input_total_amount, 2) }}</td>
|
||||
<td>{{ number_format($item->input_total_tax, 2) }}</td>
|
||||
<td>{{ number_format($item->additional_deduction, 2) }}</td>
|
||||
<td>{{ number_format($item->retained_tax, 2) }}</td>
|
||||
<td>{{ number_format($item->monthly_vat, 2) }}</td>
|
||||
<td>{{ number_format($item->urban_maintenance_tax, 2) }}</td>
|
||||
<td>{{ number_format($item->education_surcharge, 2) }}</td>
|
||||
<td>{{ number_format($item->local_education_surcharge, 2) }}</td>
|
||||
<td>{{ number_format($item->stamp_tax, 2) }}</td>
|
||||
<td>{{ number_format($item->union_fund, 2) }}</td>
|
||||
<td>{{ number_format($item->personal_income_tax, 2) }}</td>
|
||||
<td>{{ number_format($item->corporate_income_tax, 2) }}</td>
|
||||
<td>{{ number_format($item->garbage_fee, 2) }}</td>
|
||||
<td>{{ number_format($item->other_late_fee, 2) }}</td>
|
||||
<td>{{ number_format($item->total_paid_tax, 2) }}</td>
|
||||
<td>{{ $item->tax_burden }}</td>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan=49 style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
40
resources/views/business/pages/sw_planning.blade.php
Normal file
40
resources/views/business/pages/sw_planning.blade.php
Normal file
@ -0,0 +1,40 @@
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">{{ $title ?? '财务SW规划表' }}</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>公司名称</th>
|
||||
<th>最终报税业绩</th>
|
||||
<th>商品成本</th>
|
||||
<th>物流成本</th>
|
||||
<th>平台来票</th>
|
||||
<th>人工</th>
|
||||
<th>其他报销</th>
|
||||
<th>利润</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td>{{ $item->company_name }}</td>
|
||||
<td>{{ number_format($item->final_tax_performance, 2) }}</td>
|
||||
<td>{{ number_format($item->product_cost, 2) }}</td>
|
||||
<td>{{ number_format($item->logistics_cost, 2) }}</td>
|
||||
<td>{{ number_format($item->platform_invoice, 2) }}</td>
|
||||
<td>{{ number_format($item->labor_cost, 2) }}</td>
|
||||
<td>{{ number_format($item->other_expenses, 2) }}</td>
|
||||
<td>{{ number_format($item->profit, 2) }}</td>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan=9 style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
44
resources/views/business/pages/tax_data.blade.php
Normal file
44
resources/views/business/pages/tax_data.blade.php
Normal file
@ -0,0 +1,44 @@
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">{{ $title ?? '店铺后台税务数据' }}</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>公司名称</th>
|
||||
<th>公司真实发货业绩</th>
|
||||
<th>公司种菜业绩</th>
|
||||
<th>退款金额</th>
|
||||
<th>业绩净收入</th>
|
||||
<th>税务业绩</th>
|
||||
<th>税务退款</th>
|
||||
<th>税务净收入</th>
|
||||
<th>业绩差额</th>
|
||||
<th>最终报税业绩</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td>{{ $item->company_name }}</td>
|
||||
<td>{{ number_format($item->real_shipping_performance, 2) }}</td>
|
||||
<td>{{ number_format($item->planting_performance, 2) }}</td>
|
||||
<td>{{ number_format($item->refund_amount, 2) }}</td>
|
||||
<td>{{ number_format($item->net_performance_income, 2) }}</td>
|
||||
<td>{{ number_format($item->tax_performance, 2) }}</td>
|
||||
<td>{{ number_format($item->tax_refund, 2) }}</td>
|
||||
<td>{{ number_format($item->tax_net_income, 2) }}</td>
|
||||
<td>{{ number_format($item->performance_difference, 2) }}</td>
|
||||
<td>{{ number_format($item->final_tax_performance, 2) }}</td>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan=11 style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
36
resources/views/business/pages/todos.blade.php
Normal file
36
resources/views/business/pages/todos.blade.php
Normal file
@ -0,0 +1,36 @@
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">{{ $title ?? '待办事项' }}</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>标题</th>
|
||||
<th>分类</th>
|
||||
<th>优先级</th>
|
||||
<th>状态</th>
|
||||
<th>截止日期</th>
|
||||
<th>描述</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td>{{ $item->title }}</td>
|
||||
<td><span class="business-badge business-badge-info">{{ $item->category }}</span></td>
|
||||
<td><span class="business-badge business-badge-info">{{ $item->priority }}</span></td>
|
||||
<td><span class="business-badge business-badge-info">{{ $item->status }}</span></td>
|
||||
<td>{{ $item->due_date }}</td>
|
||||
<td>{{ $item->description }}</td>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan=7 style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
36
resources/views/business/pages/trademark.blade.php
Normal file
36
resources/views/business/pages/trademark.blade.php
Normal file
@ -0,0 +1,36 @@
|
||||
<div class="business-page-header">
|
||||
<span class="business-page-title">{{ $title ?? '商标信息' }}</span>
|
||||
</div>
|
||||
<div class="business-table-container">
|
||||
<table class="business-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>序号</th>
|
||||
<th>商标名称</th>
|
||||
<th>商标类型</th>
|
||||
<th>商标状态</th>
|
||||
<th>注册日期</th>
|
||||
<th>到期日期</th>
|
||||
<th>备注</th>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach($items as $item)
|
||||
<tr>
|
||||
<td>{{ $loop->iteration }}</td>
|
||||
<td>{{ $item->trademark_name }}</td>
|
||||
<td>{{ $item->trademark_type }}</td>
|
||||
<td><span class="business-badge business-badge-info">{{ $item->trademark_status }}</span></td>
|
||||
<td>{{ $item->registration_date }}</td>
|
||||
<td>{{ $item->expiry_date }}</td>
|
||||
<td>{{ $item->notes }}</td>
|
||||
|
||||
</tr>
|
||||
@endforeach
|
||||
@if($items->isEmpty())
|
||||
<tr><td colspan=7 style="text-align:center; color:#9ca3af; padding:2rem;">暂无数据</td></tr>
|
||||
@endif
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@ -1,6 +1,12 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Support\Facades\Route;
|
||||
use Modules\EcommerceFinance\Http\Controllers\AccountBills;
|
||||
|
||||
Route::get('ecommerce-finance/account-bills/type/{bill_type}', [AccountBills::class, 'index'])
|
||||
->name('ecommerce-finance.account-bills.index');
|
||||
Route::get('ecommerce-finance/account-bills/{bill}', [AccountBills::class, 'show'])
|
||||
->name('ecommerce-finance.account-bills.show');
|
||||
|
||||
/**
|
||||
* 'admin' middleware applied to all routes
|
||||
|
||||
@ -4,7 +4,8 @@ param(
|
||||
[ValidateRange(1024, 8192)]
|
||||
[int]$MaxOldSpaceSizeMB = 4096,
|
||||
[ValidateRange(1, 8)]
|
||||
[int]$TerserWorkers = 2
|
||||
[int]$TerserWorkers = 2,
|
||||
[switch]$PublishLocal
|
||||
)
|
||||
|
||||
$ErrorActionPreference = 'Stop'
|
||||
@ -102,6 +103,26 @@ function Write-Utf8NoBom {
|
||||
[IO.File]::WriteAllText($Path, $Value, [Text.UTF8Encoding]::new($false))
|
||||
}
|
||||
|
||||
function Publish-FrontendCache {
|
||||
$cachedJsPath = Join-Path $frontendOutputRoot 'js'
|
||||
$cachedCssPath = Join-Path $frontendOutputRoot 'css/app.css'
|
||||
$cachedManifestPath = Join-Path $frontendOutputRoot 'mix-manifest.json'
|
||||
|
||||
foreach ($requiredPath in @($cachedJsPath, $cachedCssPath, $cachedManifestPath)) {
|
||||
if (-not (Test-Path -LiteralPath $requiredPath)) {
|
||||
throw "Frontend cache output is missing: $requiredPath"
|
||||
}
|
||||
}
|
||||
|
||||
if (Test-Path -LiteralPath $publicJsPath) {
|
||||
Remove-Item -LiteralPath $publicJsPath -Recurse -Force
|
||||
}
|
||||
|
||||
Copy-Item -LiteralPath $cachedJsPath -Destination $publicJsPath -Recurse
|
||||
Copy-Item -LiteralPath $cachedCssPath -Destination $trackedCssPath -Force
|
||||
Copy-Item -LiteralPath $cachedManifestPath -Destination $publicManifestPath -Force
|
||||
}
|
||||
|
||||
$packageLockHash = Get-PathFingerprint @('package-lock.json')
|
||||
$jsFingerprintInputs = @(
|
||||
'resources/assets/js',
|
||||
@ -144,6 +165,12 @@ $cssCacheValid = Test-CacheFingerprint `
|
||||
|
||||
if ($jsCacheValid -and $cssCacheValid) {
|
||||
Write-Host 'Frontend inputs unchanged. Reusing JavaScript, CSS, and dependency caches.'
|
||||
|
||||
if ($PublishLocal) {
|
||||
Publish-FrontendCache
|
||||
Write-Host 'Published cached frontend assets to the local public directory.'
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
@ -281,7 +308,7 @@ finally {
|
||||
$env:NODE_OPTIONS = $originalNodeOptions
|
||||
$env:CAIWU_BUILD_TARGET = $originalBuildTarget
|
||||
$env:CAIWU_TERSER_WORKERS = $originalTerserWorkers
|
||||
if ($null -ne $trackedCssBackup) {
|
||||
if (-not $PublishLocal -and $null -ne $trackedCssBackup) {
|
||||
[IO.File]::WriteAllBytes($trackedCssPath, $trackedCssBackup)
|
||||
}
|
||||
}
|
||||
|
||||
34
serviceworker.js
vendored
34
serviceworker.js
vendored
@ -1,22 +1,20 @@
|
||||
var staticCacheName = "pwa-v" + new Date().getTime();
|
||||
var staticCacheName = "pwa-v2";
|
||||
var filesToCache = [
|
||||
'public/img/pwa/icon-192x192.png',
|
||||
'public/img/pwa/icon-512x512.png'
|
||||
'/public/img/pwa/icon-192x192.png',
|
||||
'/public/img/pwa/icon-512x512.png'
|
||||
];
|
||||
|
||||
/*
|
||||
// Cache on install
|
||||
self.addEventListener("install", event => {
|
||||
this.skipWaiting();
|
||||
event.waitUntil(
|
||||
caches.open(staticCacheName)
|
||||
.then(cache => {
|
||||
return cache.addAll(filesToCache);
|
||||
})
|
||||
.then(() => self.skipWaiting())
|
||||
)
|
||||
});
|
||||
*/
|
||||
/*
|
||||
|
||||
// Clear cache on activate
|
||||
self.addEventListener('activate', event => {
|
||||
event.waitUntil(
|
||||
@ -27,19 +25,29 @@ self.addEventListener('activate', event => {
|
||||
.filter(cacheName => (cacheName !== staticCacheName))
|
||||
.map(cacheName => caches.delete(cacheName))
|
||||
);
|
||||
})
|
||||
}).then(() => self.clients.claim())
|
||||
);
|
||||
});*/
|
||||
});
|
||||
|
||||
// Serve from Cache
|
||||
// Navigation must prefer the network so cached redirects cannot mask auth state.
|
||||
self.addEventListener("fetch", event => {
|
||||
if (event.request.method !== 'GET') {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.request.mode === 'navigate') {
|
||||
event.respondWith(
|
||||
fetch(event.request)
|
||||
.catch(() => caches.match(event.request))
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
event.respondWith(
|
||||
caches.match(event.request)
|
||||
.then(response => {
|
||||
return response || fetch(event.request);
|
||||
})
|
||||
.catch(() => {
|
||||
return caches.match('offline');
|
||||
})
|
||||
)
|
||||
});
|
||||
|
||||
106
tests/Feature/Business/SupplierPayablePagesTest.php
Normal file
106
tests/Feature/Business/SupplierPayablePagesTest.php
Normal file
@ -0,0 +1,106 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature\Business;
|
||||
|
||||
use App\Models\Auth\Permission;
|
||||
use Tests\Feature\FeatureTestCase;
|
||||
|
||||
class SupplierPayablePagesTest extends FeatureTestCase
|
||||
{
|
||||
protected function grantAdminPermission(): void
|
||||
{
|
||||
$this->user->attachPermission(
|
||||
Permission::where('name', 'read-admin-panel')->firstOrFail()
|
||||
);
|
||||
}
|
||||
|
||||
public function testDeliveryUnpricedPageUsesItsOwnTwentyColumnTable()
|
||||
{
|
||||
$this->grantAdminPermission();
|
||||
|
||||
$response = $this->loginAs()->get(route('business.pages.show', [
|
||||
'section' => 'supplier-payables',
|
||||
'page' => 'delivery-unpriced',
|
||||
]));
|
||||
|
||||
$response
|
||||
->assertOk()
|
||||
->assertSee('id="delivery-unpriced-app"', false)
|
||||
->assertSee('来源单号')
|
||||
->assertSee('单据编号(采购单号)')
|
||||
->assertSee('负责人')
|
||||
->assertSee('public/js/ecommerce-finance/delivery-unpriced.min.js', false)
|
||||
->assertDontSee('class="business-blank-page"', false);
|
||||
|
||||
$this->assertSame(20, substr_count($response->getContent(), '<el-table-column'));
|
||||
}
|
||||
|
||||
public function testReturnUnpricedPageUsesItsOwnTwentyColumnTable()
|
||||
{
|
||||
$this->grantAdminPermission();
|
||||
|
||||
$response = $this->loginAs()->get(route('business.pages.show', [
|
||||
'section' => 'supplier-payables',
|
||||
'page' => 'return-unpriced',
|
||||
]));
|
||||
|
||||
$response
|
||||
->assertOk()
|
||||
->assertSee('id="return-unpriced-app"', false)
|
||||
->assertSee('明细供应商')
|
||||
->assertSee('供应商条码')
|
||||
->assertSee('对账人')
|
||||
->assertSee('public/js/ecommerce-finance/return-unpriced.min.js', false)
|
||||
->assertDontSee('class="business-blank-page"', false);
|
||||
|
||||
$this->assertSame(20, substr_count($response->getContent(), '<el-table-column'));
|
||||
}
|
||||
|
||||
public function testBoardDeductionsPageUsesItsOwnSeventeenColumnTable()
|
||||
{
|
||||
$this->grantAdminPermission();
|
||||
|
||||
$response = $this->loginAs()->get(route('business.pages.show', [
|
||||
'section' => 'supplier-payables',
|
||||
'page' => 'board-deductions',
|
||||
]));
|
||||
|
||||
$response
|
||||
->assertOk()
|
||||
->assertSee('class="supplier-board-table"', false)
|
||||
->assertSee('入库日期')
|
||||
->assertSee('出库备注')
|
||||
->assertSee('送货单号')
|
||||
->assertDontSee('class="business-blank-page"', false);
|
||||
|
||||
preg_match_all('/<th(?:\s|>)/', $response->getContent(), $headers);
|
||||
|
||||
$this->assertCount(17, $headers[0]);
|
||||
}
|
||||
|
||||
public function testSupplierPayablesReportPageUsesItsOwnThirtyFourColumnGroupedTable()
|
||||
{
|
||||
$this->grantAdminPermission();
|
||||
|
||||
$response = $this->loginAs()->get(route('business.pages.show', [
|
||||
'section' => 'supplier-payables',
|
||||
'page' => 'supplier-payables-report',
|
||||
]));
|
||||
|
||||
$response
|
||||
->assertOk()
|
||||
->assertSee('class="supplier-payables-report-table"', false)
|
||||
->assertSee('已销账供应商')
|
||||
->assertSee('本月采购金额')
|
||||
->assertSee('<th class="group-addition">加</th>', false)
|
||||
->assertSee('<th colspan="6" class="group-payment">单位:元</th>', false)
|
||||
->assertSee('<th class="group-payment">供应商余额</th>', false)
|
||||
->assertSee('最晚出账单时间(新执行标准)')
|
||||
->assertDontSee('class="business-blank-page"', false);
|
||||
|
||||
preg_match_all('/<col(?:\s|>)/', $response->getContent(), $columns);
|
||||
|
||||
$this->assertCount(34, $columns[0]);
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user