Просмотр исходного кода

快递打印 终端和打印controller service model factory seeder migration view

ajun 4 лет назад
Родитель
Сommit
bca759396c
26 измененных файлов с 1099 добавлено и 0 удалено
  1. 57 0
      app/Http/Controllers/TerminalController.php
  2. 61 0
      app/Http/Controllers/TerminalPrinterController.php
  3. 30 0
      app/Http/Requests/Printer/TerminalPrinterRequest.php
  4. 24 0
      app/Http/Requests/Printer/TerminalRequest.php
  5. 13 0
      app/Services/TerminalPrinterService.php
  6. 12 0
      app/Services/TerminalService.php
  7. 21 0
      app/Terminal.php
  8. 52 0
      app/TerminalPrinter.php
  9. 13 0
      database/factories/TerminalFactory.php
  10. 16 0
      database/factories/TerminalPrinterFactory.php
  11. 77 0
      database/migrations/2021_06_18_150046_create_terminals_table.php
  12. 76 0
      database/migrations/2021_06_18_150129_create_terminal_printers_table.php
  13. 16 0
      database/seeds/TerminalPrinterSeeder.php
  14. 16 0
      database/seeds/TerminalSeeder.php
  15. 4 0
      resources/views/maintenance/expressPrinting/menu.blade.php
  16. 14 0
      resources/views/maintenance/expressPrinting/setting/menu.blade.php
  17. 85 0
      resources/views/maintenance/expressPrinting/setting/printer/_create.blade.php
  18. 85 0
      resources/views/maintenance/expressPrinting/setting/printer/_edit.blade.php
  19. 27 0
      resources/views/maintenance/expressPrinting/setting/printer/_table.blade.php
  20. 146 0
      resources/views/maintenance/expressPrinting/setting/printer/index.blade.php
  21. 44 0
      resources/views/maintenance/expressPrinting/setting/terminal/_create.blade.php
  22. 45 0
      resources/views/maintenance/expressPrinting/setting/terminal/_edit.blade.php
  23. 27 0
      resources/views/maintenance/expressPrinting/setting/terminal/_table.blade.php
  24. 122 0
      resources/views/maintenance/expressPrinting/setting/terminal/index.blade.php
  25. 12 0
      routes/apiLocal.php
  26. 4 0
      routes/web.php

+ 57 - 0
app/Http/Controllers/TerminalController.php

@@ -0,0 +1,57 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Components\AsyncResponse;
+use App\Http\Requests\Printer\TerminalRequest;
+use App\Terminal;
+use Illuminate\Support\Facades\Gate;
+
+class TerminalController extends Controller
+{
+    use AsyncResponse;
+
+    public function index(TerminalRequest $request)
+    {
+        if (!Gate::allows('基础设置-快递打印-终端'))return redirect("/");
+
+        $terminals =  Terminal::query()->orderByDesc('id')->paginate($request['paginate'] ?? 50);
+
+        return view('maintenance/expressPrinting/setting/terminal/index',
+            compact('terminals')
+        );
+    }
+
+    public function storeApi(TerminalRequest  $request): array
+    {
+        if (!Gate::allows('基础设置-快递打印-终端-添加'))
+            return ['success' => false, 'message' => '没有对应权限'];
+
+        $terminal = Terminal::query()->create($request->all());
+        return ['success' => true, 'data' => $terminal];
+    }
+
+    public function destroyApi($id): array
+    {
+        if (!Gate::allows('基础设置-快递打印-终端-删除'))
+            return ['success' => false, 'message' => '没有对应权限'];
+
+        $terminal = Terminal::query()->find($id);
+        if (!$terminal) return ['success' => false , 'message' => '对应的终端不存在'];
+
+        $terminal->delete();
+        return ['success' => true];
+    }
+
+    public function updateApi(TerminalRequest $request): array
+    {
+        if (!Gate::allows('基础设置-快递打印-终端-编辑'))
+            return ['success' => false, 'message' => '没有对应权限'];
+
+        $terminal = Terminal::query()->find($request['id']);
+        if (!$terminal) return ['success' => false, 'message' => '对应的终端不存在'];
+
+        $terminal->update($request->all());
+        return ['success' => true, 'data' => $terminal];
+    }
+}

+ 61 - 0
app/Http/Controllers/TerminalPrinterController.php

@@ -0,0 +1,61 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Http\Requests\Printer\TerminalPrinterRequest;
+use App\Terminal;
+use App\TerminalPrinter;
+use Illuminate\Support\Facades\Gate;
+
+class TerminalPrinterController extends Controller
+{
+
+    public function index(TerminalPrinterRequest $request)
+    {
+        if (!Gate::allows('基础设置-快递打印-打印机-添加')) return redirect('/');
+
+        $terminalPrinters = TerminalPrinter::query()->with('terminal')->orderByDesc('terminal_id')->orderByDesc('id')->paginate($request['paginate'] ?? 50);
+
+        $terminals =  Terminal::query()->get();
+
+        return view('maintenance/expressPrinting/setting/printer/index',
+            compact('terminalPrinters','terminals')
+        );
+    }
+
+    public function storeApi(TerminalPrinterRequest  $request): array
+    {
+        if (!Gate::allows('基础设置-快递打印-打印机-添加'))
+            return ['success' => false, 'message' => '没有对应权限'];
+
+        $terminal_printer = TerminalPrinter::query()->create($request->all());
+        $terminal_printer->loadMissing('terminal');
+        return ['success' => true, 'data' => $terminal_printer];
+    }
+
+    public function destroyApi($id): array
+    {
+        if (!Gate::allows('基础设置-快递打印-打印机-删除'))
+            return ['success' => false, 'message' => '没有对应权限'];
+
+        $terminal_printer = TerminalPrinter::query()->find($id);
+        if (!$terminal_printer) return ['success' => false , 'message' => '对应的打印机不存在'];
+
+        $terminal_printer->delete();
+        return ['success' => true];
+    }
+
+    public function updateApi(TerminalPrinterRequest $request): array
+    {
+        if (!Gate::allows('基础设置-快递打印-打印机-编辑'))
+            return ['success' => false, 'message' => '没有对应权限'];
+
+        $terminal_printer = TerminalPrinter::query()->find($request['id']);
+        if (!$terminal_printer) return ['success' => false, 'message' => '对应的打印机不存在'];
+
+        $terminal_printer->update($request->all());
+        $terminal_printer->load('terminal');
+        return ['success' => true, 'data' => $terminal_printer];
+    }
+
+}

+ 30 - 0
app/Http/Requests/Printer/TerminalPrinterRequest.php

@@ -0,0 +1,30 @@
+<?php
+
+namespace App\Http\Requests\Printer;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class TerminalPrinterRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize(): bool
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules(): array
+    {
+        return [
+            //
+        ];
+    }
+}

+ 24 - 0
app/Http/Requests/Printer/TerminalRequest.php

@@ -0,0 +1,24 @@
+<?php
+
+namespace App\Http\Requests\Printer;
+
+use App\Traits\RequestApiFormValidation;
+use Illuminate\Foundation\Http\FormRequest;
+
+class TerminalRequest extends FormRequest
+{
+    use RequestApiFormValidation;
+
+
+    public function authorize(): bool
+    {
+        return true;
+    }
+
+    public function rules(): array
+    {
+        return [
+
+        ];
+    }
+}

+ 13 - 0
app/Services/TerminalPrinterService.php

@@ -0,0 +1,13 @@
+<?php 
+
+namespace App\Services;
+
+use App\Traits\ServiceAppAop;
+use App\TerminalPrinter;
+
+class TerminalPrinterService
+{
+    use ServiceAppAop;
+    protected $modelClass=TerminalPrinter::class;
+
+}

+ 12 - 0
app/Services/TerminalService.php

@@ -0,0 +1,12 @@
+<?php
+
+namespace App\Services;
+
+use App\Traits\ServiceAppAop;
+use App\Terminal;
+
+class TerminalService
+{
+    use ServiceAppAop;
+    protected $modelClass=Terminal::class;
+}

+ 21 - 0
app/Terminal.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace App;
+
+use App\Traits\ModelTimeFormat;
+use Illuminate\Database\Eloquent\Model;
+
+use App\Traits\ModelLogChanging;
+
+class Terminal extends Model
+{
+    use ModelLogChanging;
+    use ModelTimeFormat;
+
+    protected $fillable = ['name', 'ip'];
+
+    public function printer()
+    {
+        $this->hasMany(TerminalPrinter::class);
+    }
+}

+ 52 - 0
app/TerminalPrinter.php

@@ -0,0 +1,52 @@
+<?php
+
+namespace App;
+
+use App\Traits\ModelTimeFormat;
+use Illuminate\Database\Eloquent\Model;
+
+use App\Traits\ModelLogChanging;
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
+
+class TerminalPrinter extends Model
+{
+    use ModelLogChanging;
+    use ModelTimeFormat;
+
+    protected $fillable = ['terminal_id', 'printer_name', 'alias_name', 'print_type'];
+
+    static public $enums = [
+        'print_type' => [
+            '菜鸟' => 0,
+            '拼多多' => 1,
+            '顺丰' => 2,
+            '京东' => 3,
+        ],
+    ];
+
+    function __construct(array $attributes = [])
+    {
+        foreach (self::$enums as &$enum) {
+            $enum = $enum + array_flip($enum);
+        }
+        parent::__construct($attributes);
+    }
+
+    public function getPrintTypeAttribute($value)
+    {
+        if (!$value && $value !== 0) return '';
+        return self::$enums['print_type'][$value];
+    }
+
+    public function setPrintTypeAttribute($value)
+    {
+        if (!$value) return 0;
+        $this->attributes['print_type'] = self::$enums['print_type'][$value];
+    }
+
+
+    public function terminal(): BelongsTo
+    {
+        return $this->belongsTo(Terminal::class);
+    }
+}

+ 13 - 0
database/factories/TerminalFactory.php

@@ -0,0 +1,13 @@
+<?php
+
+/** @var \Illuminate\Database\Eloquent\Factory $factory */
+
+use App\Terminal;
+use Faker\Generator as Faker;
+
+$factory->define(Terminal::class, function (Faker $faker) {
+    return [
+        'name' => $faker->name,
+        'ip' => $faker->ipv4
+    ];
+});

+ 16 - 0
database/factories/TerminalPrinterFactory.php

@@ -0,0 +1,16 @@
+<?php
+
+/** @var \Illuminate\Database\Eloquent\Factory $factory */
+
+use App\TerminalPrinter;
+use Faker\Generator as Faker;
+
+$factory->define(TerminalPrinter::class, function (Faker $faker) {
+    $types = ['菜鸟','拼多多','顺丰','京东'];
+    return [
+        'terminal_id' => rand(1,10),
+        'printer_name' => $faker->name,
+        'alias_name' => $faker->lastName,
+        'print_type' => $types[rand(0,3)]
+    ];
+});

+ 77 - 0
database/migrations/2021_06_18_150046_create_terminals_table.php

@@ -0,0 +1,77 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateTerminalsTable extends Migration
+{
+    private $parent_name = '基础设置-快递打印-终端';
+
+    private $names = [
+        '打印终端-添加' => '基础设置-快递打印-终端-添加',
+        '打印终端-编辑' => '基础设置-快递打印-终端-编辑',
+        '打印终端-删除' => '基础设置-快递打印-终端-删除',
+    ];
+
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('terminals', function (Blueprint $table) {
+            $table->id();
+            $table->string('name')->comment('计算机别名');
+            $table->string('ip')->comment('计算机ip地址');
+            $table->timestamps();
+        });
+        $menu = \App\Menu::query()->where('route', 'maintenance/expressPrinting/part')->first();
+
+        $maxMenu = \App\Menu::query()->orderByDesc('sequence')->first();
+
+        $maxSequence = $maxMenu['sequence'];
+
+        $menu = \App\Menu::query()->firstOrCreate(['route' => 'maintenance/expressPrinting/part/setting/terminal/index'], [
+            'name' => '终端设置',
+            'level' => 3,
+            'parent_id' => $menu['id'],
+            'sequence' => $maxSequence++,
+        ]);
+
+        $menu = \App\Menu::query()->firstOrCreate(['route' => 'maintenance/expressPrinting/part/setting/terminal/index'], [
+            'name' => '终端',
+            'level' => 4,
+            'parent_id' => $menu['id'],
+            'sequence' => $maxSequence++,
+        ]);
+
+
+        $authority = \App\Authority::query()->firstOrCreate(['name' => '打印终端'], ['alias_name' => $this->parent_name]);
+        foreach ($this->names as $name=>$alias_name ) {
+            \App\Authority::query()->firstOrCreate(['name' => $name],['alias_name' => $alias_name,'parent_id' => $authority['id']]);
+        }
+
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('terminals');
+
+        \App\Menu::query()->where('route', 'maintenance/expressPrinting/part/setting/terminal/index')->delete();
+
+        $authority = \App\Authority::query()->where( 'alias_name' , $this->parent_name)->first();
+
+        if(!$authority) return ;
+
+        foreach ($this->names as $name=>$alias_name ) {
+            \App\Authority::query()->where(['name' => $name,'alias_name' => $alias_name,'parent_id' => $authority->id])->delete();
+        }
+    }
+}

+ 76 - 0
database/migrations/2021_06_18_150129_create_terminal_printers_table.php

@@ -0,0 +1,76 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class CreateTerminalPrintersTable extends Migration
+{
+    private $parent_name = '打印机';
+
+    private $names = [
+        '打印机-添加' => '基础设置-快递打印-打印机-添加',
+        '打印机-编辑' => '基础设置-快递打印-打印机-编辑',
+        '打印机-删除' => '基础设置-快递打印-打印机-删除',
+    ];
+
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('terminal_printers', function (Blueprint $table) {
+            $table->id();
+            $table->string('terminal_id')->comment('终端id');
+            $table->string('printer_name')->comment('打印机名称');
+            $table->string('alias_name')->comment('打印机别名');
+            $table->tinyInteger('print_type')->comment('打印类型');
+            $table->timestamps();
+        });
+
+        $menu = \App\Menu::query()->where('route', 'maintenance/expressPrinting/part')->first();
+
+        $maxMenu = \App\Menu::query()->orderByDesc('sequence')->first();
+
+        $maxSequence = $maxMenu['sequence'];
+
+        $menu = \App\Menu::query()->firstOrCreate(['route' => 'maintenance/expressPrinting/part/setting/printer/index'], [
+            'name' => '终端设置',
+            'level' => 3,
+            'parent_id' => $menu['id'],
+            'sequence' => $maxSequence++,
+        ]);
+
+        \App\Menu::query()->firstOrCreate(['route' => 'maintenance/expressPrinting/part/setting/printer/index'], [
+            'name' => '打印机',
+            'level' => 4,
+            'parent_id' => $menu['id'],
+            'sequence' => $maxSequence++,
+        ]);
+
+        $authority = \App\Authority::query()->firstOrCreate(['name' => '打印终端'], ['alias_name' => $this->parent_name]);
+        foreach ($this->names as $name=>$alias_name ) {
+            \App\Authority::query()->firstOrCreate(['name' => $name],['alias_name' => $alias_name,'parent_id' => $authority['id']]);
+        }
+
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('terminal_printers');
+        \App\Menu::query()->where('route','maintenance/expressPrinting/part/setting/printer/index')->delete();
+
+        $authority = \App\Authority::query()->where( 'alias_name' , $this->parent_name)->first();
+        if(!$authority) return ;
+        foreach ($this->names as $name=>$alias_name ) {
+            \App\Authority::query()->where(['name' => $name,'alias_name' => $alias_name,'parent_id' => $authority->id])->delete();
+        }
+    }
+}

+ 16 - 0
database/seeds/TerminalPrinterSeeder.php

@@ -0,0 +1,16 @@
+<?php
+
+use Illuminate\Database\Seeder;
+
+class TerminalPrinterSeeder extends Seeder
+{
+    /**
+     * Run the database seeds.
+     *
+     * @return void
+     */
+    public function run()
+    {
+        factory(\App\TerminalPrinter::class)->times(30)->create();
+    }
+}

+ 16 - 0
database/seeds/TerminalSeeder.php

@@ -0,0 +1,16 @@
+<?php
+
+use Illuminate\Database\Seeder;
+
+class TerminalSeeder extends Seeder
+{
+    /**
+     * Run the database seeds.
+     *
+     * @return void
+     */
+    public function run()
+    {
+        factory(\App\Terminal::class)->times(10)->create();
+    }
+}

+ 4 - 0
resources/views/maintenance/expressPrinting/menu.blade.php

@@ -7,6 +7,10 @@
             <li class="nav-item">
                 <a target="maintenance/expressPrinting/template" class="nav-link" href="{{url('/maintenance/expressPrinting/template/index')}}" :class="{active:isActive('template',3)}">模板</a>
             </li>
+            <li class="nav-item">
+                <a target="/maintenance/expressPrinting/setting/terminal/index" class="nav-link"
+                   href="{{url('/maintenance/expressPrinting/setting/terminal/index')}}" :class="{active:isActive('setting',3)}">设置</a>
+            </li>
         </ul>
     </div>
 </div>

+ 14 - 0
resources/views/maintenance/expressPrinting/setting/menu.blade.php

@@ -0,0 +1,14 @@
+<div class="container-fluid nav3">
+    <div class="card" >
+        <ul class="nav nav-pills">
+            <li class="nav-item">
+                <a target="/maintenance/expressPrinting/setting/terminal/index" class="nav-link"
+                   href="{{url('/maintenance/expressPrinting/setting/terminal/index')}}" :class="{active:isActive('terminal',4)}">终端</a>
+            </li>
+            <li class="nav-item">
+                <a target="/maintenance/expressPrinting/setting/terminal/index" class="nav-link"
+                   href="{{url('/maintenance/expressPrinting/setting/printer/index')}}" :class="{active:isActive('printer',4)}">打印机</a>
+            </li>
+        </ul>
+    </div>
+</div>

+ 85 - 0
resources/views/maintenance/expressPrinting/setting/printer/_create.blade.php

@@ -0,0 +1,85 @@
+<div class="modal " id="create-printer" tabindex="-1">
+    <div class="modal-dialog modal-lg modal-dialog-centered">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title text-center">终端-打印机添加</h5>
+                <button type="button" class="close" data-dismiss="modal">
+                    <span>&times;</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <form class="form">
+                    <div class="form-group row">
+                        <label for="create_printer_terminal_id" class="col-sm-3 col-form-label text-right">所属终端</label>
+                        <div class="col-sm-9 form-inline">
+                            <select name="printer_terminal_id" id="create_printer_terminal_id" class="form-control col-sm-5" v-model="printer.terminal_id">
+                                <option value=""></option>
+                                <template v-for="terminal in filterTerminals">
+                                    <option :value="terminal.id">
+                                        <span v-text="terminal.name"></span>
+                                    </option>
+                                </template>
+                            </select>
+                            <label class="col-sm-2 offset-sm-1">
+                                <input type="text" class="form-control offset-sm-1"  v-model="terminalFilter" placeholder="终端筛选">
+                            </label>
+                            <div class="invalid-feedback" v-if="printerErrors.terminal_id">
+                                @{{ printerErrors.terminal_id[0] }}
+                            </div>
+                        </div>
+                    </div>
+
+                    <div class="form-group row">
+                        <label for="create_printer_printer_name" class="col-sm-3 col-form-label text-right">打印机名称</label>
+                        <div class="col-sm-9 form-inline">
+                            <input type="text" id="create_printer_printer_name" class="form-control col-9" v-model="printer.printer_name"
+                                   placeholder="打印机名称"
+                                   :class="printerErrors.printer_name?'is-invalid':''"
+                                   @focus="printerErrors.printer_name= null">
+                            <div class="invalid-feedback" v-if="printerErrors.printer_name">
+                                @{{ printerErrors.printer_name[0] }}
+                            </div>
+                        </div>
+                    </div>
+
+                    <div class="form-group row">
+                        <label for="create_printer_alias_name" class="col-sm-3 col-form-label text-right">名称</label>
+                        <div class="col-sm-9 form-inline">
+                            <input type="text" id="create_printer_alias_name" class="form-control col-9" v-model="printer.alias_name"
+                                   placeholder="名称"
+                                   :class="printerErrors.alias_name?'is-invalid':''"
+                                   @focus="printerErrors.alias_name= null">
+                            <div class="invalid-feedback" v-if="printerErrors.alias_name">
+                                @{{ printerErrors.alias_name[0] }}
+                            </div>
+                        </div>
+                    </div>
+
+                    <div class="form-group row">
+                        <label for="create_printer_print_type" class="col-sm-3 col-form-label text-right">打印机类型</label>
+                        <div class="col-sm-9 form-inline">
+                            <label for="create_printer_print_type">
+                                <select name="print_type" id="create_printer_print_type" class="form-control" v-model="printer.print_type">
+                                    <option value=""></option>
+                                    <template v-for="type in types">
+                                        <option :value="type.value">
+                                            <span v-text="type.value"></span>
+                                        </option>
+                                    </template>
+                                </select>
+                            </label>
+
+                            <div class="invalid-feedback" v-if="printerErrors.print_type">
+                                @{{ printerErrors.print_type[0] }}
+                            </div>
+                        </div>
+                    </div>
+                </form>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary" @click="createPrinter">提交</button>
+            </div>
+        </div>
+    </div>
+</div>

+ 85 - 0
resources/views/maintenance/expressPrinting/setting/printer/_edit.blade.php

@@ -0,0 +1,85 @@
+<div class="modal " id="edit-printer" tabindex="-1">
+    <div class="modal-dialog modal-lg modal-dialog-centered">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title text-center">终端-打印机编辑</h5>
+                <button type="button" class="close" data-dismiss="modal">
+                    <span>&times;</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <form class="form">
+                    <div class="form-group row">
+                        <label for="edit_printer_terminal_id" class="col-sm-3 col-form-label text-right">所属终端</label>
+                        <div class="col-sm-9 form-inline">
+                            <select name="printer_terminal_id" id="edit_printer_terminal_id" class="form-control col-sm-5" v-model="printer.terminal_id">
+                                <option value=""></option>
+                                <template v-for="terminal in filterTerminals">
+                                    <option :value="terminal.id">
+                                        <span v-text="terminal.name"></span>
+                                    </option>
+                                </template>
+                            </select>
+                            <label class="col-sm-2 offset-sm-1">
+                                <input type="text" class="form-control offset-sm-1"  v-model="terminalFilter" placeholder="终端筛选">
+                            </label>
+                            <div class="invalid-feedback" v-if="printerErrors.terminal_id">
+                                @{{ printerErrors.terminal_id[0] }}
+                            </div>
+                        </div>
+                    </div>
+
+                    <div class="form-group row">
+                        <label for="edit_printer_printer_name" class="col-sm-3 col-form-label text-right">打印机名称</label>
+                        <div class="col-sm-9 form-inline">
+                            <input type="text" id="edit_printer_printer_name" class="form-control col-9" v-model="printer.printer_name"
+                                   placeholder="打印机名称"
+                                   :class="printerErrors.printer_name?'is-invalid':''"
+                                   @focus="printerErrors.printer_name= null">
+                            <div class="invalid-feedback" v-if="printerErrors.printer_name">
+                                @{{ printerErrors.printer_name[0] }}
+                            </div>
+                        </div>
+                    </div>
+
+                    <div class="form-group row">
+                        <label for="edit_printer_alias_name" class="col-sm-3 col-form-label text-right">名称</label>
+                        <div class="col-sm-9 form-inline">
+                            <input type="text" id="edit_printer_alias_name" class="form-control col-9" v-model="printer.alias_name"
+                                   placeholder="名称"
+                                   :class="printerErrors.alias_name?'is-invalid':''"
+                                   @focus="printerErrors.alias_name= null">
+                            <div class="invalid-feedback" v-if="printerErrors.alias_name">
+                                @{{ printerErrors.alias_name[0] }}
+                            </div>
+                        </div>
+                    </div>
+
+                    <div class="form-group row">
+                        <label for="edit_printer_print_type" class="col-sm-3 col-form-label text-right">打印机类型</label>
+                        <div class="col-sm-9 form-inline">
+                            <label for="edit_printer_print_type">
+                                <select name="print_type" id="edit_printer_print_type" class="form-control" v-model="printer.print_type">
+                                    <option value=""></option>
+                                    <template v-for="type in types">
+                                        <option :value="type.value">
+                                            <span v-text="type.value"></span>
+                                        </option>
+                                    </template>
+                                </select>
+                            </label>
+
+                            <div class="invalid-feedback" v-if="printerErrors.print_type">
+                                @{{ printerErrors.print_type[0] }}
+                            </div>
+                        </div>
+                    </div>
+                </form>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary" @click="editPrinter">提交</button>
+            </div>
+        </div>
+    </div>
+</div>

+ 27 - 0
resources/views/maintenance/expressPrinting/setting/printer/_table.blade.php

@@ -0,0 +1,27 @@
+<table class="table table-striped table-sm table-hover" id="table">
+    <thead>
+    <tr>
+        <td>序号</td>
+        <td>打印机名</td>
+        <td>名称</td>
+        <td>终端名称</td>
+        <td>打印机类型</td>
+        <td>操作</td>
+    </tr>
+    </thead>
+    <tbody>
+    <tr v-for="(printer,i) in printers" @click="selectTr===i+1?selectTr=0:selectTr=i+1"
+        :class="selectTr===i+1?'focusing' : ''">
+        <td>@{{ i+1 }}</td>
+        <td>@{{ printer.printer_name }}</td>
+        <td>@{{ printer.alias_name }}</td>
+        <td>@{{ printer.terminal ? printer.terminal.name : '' }}</td>
+        <td>@{{ printer.print_type}}</td>
+        <td>
+            <button class="btn btn-sm btn-primary" @click="showEditModel(printer,i)">编辑</button>
+            <button class="btn btn-sm btn-danger " style="opacity: 0.9" @click="destroyPrinter(printer,i)">删除</button>
+        </td>
+    </tr>
+    </tbody>
+</table>
+{{ $terminalPrinters->links()}}

+ 146 - 0
resources/views/maintenance/expressPrinting/setting/printer/index.blade.php

@@ -0,0 +1,146 @@
+@extends('layouts.app')
+
+@section('title','打印终端')
+
+@section('content')
+    <span id="nav2">
+        @component('maintenance.menu')@endcomponent
+        @component('maintenance.expressPrinting.menu')@endcomponent
+        @component('maintenance.expressPrinting.setting.menu')@endcomponent
+    </span>
+    <div class="container-fluid " id="list">
+        <div class="card">
+            @can('基础设置-快递打印-打印机-添加')
+                @include('maintenance.expressPrinting.setting.printer._create')
+            @endcan
+            @can('基础设置-快递打印-打印机-编辑')
+                @include('maintenance.expressPrinting.setting.printer._edit')
+            @endcan
+            <div class="card-body">
+                <div class="row pull-left m-1">
+                    @can('基础设置-快递打印-打印机-添加')
+                        <button class="btn btn-outline-info mb-1 mr-3" @click="showCreatedModel"><span
+                                class="fa fa-plus"></span>&nbsp;新&nbsp;&nbsp;增
+                        </button>
+                    @endcan
+                </div>
+                @include('maintenance.expressPrinting.setting.printer._table')
+            </div>
+        </div>
+    </div>
+@endsection
+
+@section('lastScript')
+    <script>
+        let list = new Vue({
+            el: "#list",
+            data: {
+                printers: {!! $terminalPrinters->toJson() !!}['data'],
+                terminals: [
+                    @foreach($terminals as $terminal)
+                    {id:'{{$terminal->id}}',name:'{{$terminal->name}}'},
+                    @endforeach
+                ],
+                printer: {},
+                printerErrors: {},
+                terminalFilter:null,
+                index: null,
+                selectTr: null,
+                types: [
+                    {name: '0', value: '菜鸟'},
+                    {name: '1', value: '拼多多'},
+                    {name: '2', value: '顺丰'},
+                    {name: '3', value: '京东'},
+                ]
+            },
+            mounted() {
+                $("#list").removeClass('d-none');
+            },
+            computed:{
+                filterTerminals(){
+                    let terminals = JSON.parse(JSON.stringify(this.terminals));
+                    let self = this;
+                    if(this.terminalFilter === null){
+                        return terminals;
+                    }
+                    let terminalFilter = terminals.filter(item=>{
+                        return item.name.indexOf(self.terminalFilter) >= 0;
+                    });
+                    if (terminalFilter.length < this.terminals.length && terminalFilter.length>0)
+                        this.printer.terminal_id = terminalFilter[0]['id'];
+                    return terminalFilter;
+                }
+            },
+            methods: {
+                showCreatedModel() {
+                    this.printer = {};
+                    this.printerErrors = {};
+                    $('#create-printer').modal('show');
+                },
+                showEditModel(printer, index) {
+                    this.printer = JSON.parse(JSON.stringify(printer));
+                    this.index = index;
+                    this.printerErrors = {};
+                    $('#edit-printer').modal('show');
+                },
+                createPrinter() {
+                    let url = '{{url('apiLocal/maintenance/expressPrinting/setting/printer')}}';
+                    let data = this.printer;
+                    window.tempTip.setIndex(1999)
+                    window.axios.post(url, data).then(res => {
+                        if (res.data['success']) {
+                            this.printers.unshift(res.data['data']);
+                            this.$forceUpdate();
+                            $('#create-printer').modal('hide');
+                            window.tempTip.showSuccess('添加成功!');
+                            return;
+                        } else if (res.data['errors']) {
+                            this.printerErrors = res.data['errors'];
+                            return;
+                        }
+                        window.tempTip.show(res.data['message']);
+                    }).catch(err => {
+                        window.tempTip.show('网络异常!' + err);
+                    })
+
+                },
+                editPrinter() {
+                    let url = '{{url('apiLocal/maintenance/expressPrinting/setting/printer')}}';
+                    let data = this.printer;
+                    window.tempTip.setIndex(1999)
+                    window.axios.put(url, data).then(res => {
+                        if (res.data['success']) {
+                            this.$set(this.printers, this.index, res.data['data']);
+                            window.tempTip.showSuccess('编辑成功!');
+                            $('#edit-printer').modal('hide');
+                            return;
+                        } else if (res.data['errors']) {
+                            this.printerErrors = res.data['errors'];
+                            return;
+                        }
+                        window.tempTip.show(res.data['message'])
+                    }).catch(err => {
+                        window.tempTip.show('网络异常!' + err)
+                    });
+                },
+                destroyPrinter(printer, index) {
+                    let url = '{{url('apiLocal/maintenance/expressPrinting/setting/printer')}}' + '/' + printer['id'];
+                    if (!confirm('是否删除当前终端')) return;
+                    window.axios.delete(url).then(res => {
+                        if (res.data['success']) {
+                            this.$delete(this.printers, index);
+                            window.tempTip.showSuccess('删除成功!');
+                            return;
+                        } else if (res.data['errors']) {
+                            this.printerErrors = res.data['errors'];
+                            return;
+                        }
+                        window.tempTip.show(res.data['message'])
+                    }).catch(err => {
+                        window.tempTip.show('网络异常!' + err)
+                    });
+                }
+            }
+        })
+    </script>
+@endsection

+ 44 - 0
resources/views/maintenance/expressPrinting/setting/terminal/_create.blade.php

@@ -0,0 +1,44 @@
+<div class="modal " id="create-terminal" tabindex="-1">
+    <div class="modal-dialog modal-lg modal-dialog-centered">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title text-center">终端添加</h5>
+                <button type="button" class="close" data-dismiss="modal">
+                    <span>&times;</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <form class="form">
+                    <div class="form-group row">
+                        <label for="add-name" class="col-sm-3 col-form-label text-right">名称</label>
+                        <div class="col-sm-9 form-inline">
+                            <input type="text" id="add-name" class="form-control col-9" v-model="terminal.name"
+                                   placeholder="终端名称"
+                                   :class="terminalErrors.name?'is-invalid':''"
+                                   @focus="terminalErrors.name= null">
+                            <div class="invalid-feedback" v-if="terminalErrors.name">
+                                @{{ terminalErrors.name[0] }}
+                            </div>
+                        </div>
+                    </div>
+                    <div class="form-group row">
+                        <label for="add-name" class="col-sm-3 col-form-label text-right">IP</label>
+                        <div class="col-sm-9 form-inline">
+                            <input type="text" id="add-name" class="form-control col-9" v-model="terminal.ip"
+                                   placeholder="终端IP"
+                                   :class="terminalErrors.ip?'is-invalid':''"
+                                   @focus="terminalErrors.ip= null">
+                            <div class="invalid-feedback" v-if="terminalErrors.ip">
+                                @{{ terminalErrors.ip[0] }}
+                            </div>
+                        </div>
+                    </div>
+                </form>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary" @click="createTerminal">提交</button>
+            </div>
+        </div>
+    </div>
+</div>

+ 45 - 0
resources/views/maintenance/expressPrinting/setting/terminal/_edit.blade.php

@@ -0,0 +1,45 @@
+<div class="modal " id="edit-terminal" tabindex="-1">
+    <div class="modal-dialog modal-lg modal-dialog-centered">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title text-center">终端编辑</h5>
+                <button type="button" class="close" data-dismiss="modal">
+                    <span>&times;</span>
+                </button>
+            </div>
+            <div class="modal-body">
+                <form class="form">
+                    <div class="form-group row">
+                        <label for="add-name" class="col-sm-3 col-form-label text-right">名称</label>
+                        <div class="col-sm-9 form-inline">
+                            <input type="text" id="add-name" class="form-control col-9" v-model="terminal.name"
+                                   placeholder="终端名称"
+                                   :class="terminalErrors.name?'is-invalid':''"
+                                   @focus="terminalErrors.name= null">
+                            <div class="invalid-feedback" v-if="terminalErrors.name">
+                                @{{ supplierErrors.name[0] }}
+                            </div>
+                        </div>
+                    </div>
+                    <div class="form-group row">
+                        <label for="add-name" class="col-sm-3 col-form-label text-right">IP</label>
+                        <div class="col-sm-9 form-inline">
+                            <input type="text" id="add-name" class="form-control col-9" v-model="terminal.ip"
+                                   placeholder="终端IP"
+                                   :class="terminalErrors.ip?'is-invalid':''"
+                                   @focus="terminalErrors.ip= null">
+                            <div class="invalid-feedback" v-if="terminalErrors.ip">
+                                @{{ supplierErrors.ip[0] }}
+                            </div>
+                        </div>
+                    </div>
+
+                </form>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button>
+                <button type="button" class="btn btn-primary" @click="editTerminal">提交</button>
+            </div>
+        </div>
+    </div>
+</div>

+ 27 - 0
resources/views/maintenance/expressPrinting/setting/terminal/_table.blade.php

@@ -0,0 +1,27 @@
+<table><table class="table table-striped table-sm table-hover" id="table">
+
+    <thead>
+    <tr>
+        <td>序号</td>
+        <td>名称</td>
+        <td>ip</td>
+        <td>打印机</td>
+        <td>操作</td>
+    </tr>
+    </thead>
+    <tbody>
+        <tr v-for="(terminal,i) in terminals" @click="selectTr===i+1?selectTr=0:selectTr=i+1" :class="selectTr===i+1?'focusing' : ''">
+            <td>@{{ i+1 }}</td>
+            <td>@{{ terminal.name }}</td>
+            <td>@{{ terminal.ip }}</td>
+            <td>
+
+            </td>
+            <td>
+                <button class="btn btn-sm btn-primary" @click="showEditModel(terminal,i)">编辑</button>
+                <button class="btn btn-sm btn-danger " style="opacity: 0.9" @click="destroyTerminal(terminal,i)">删除</button>
+            </td>
+        </tr>
+    </tbody>
+</table>
+{{$terminals->links()}}

+ 122 - 0
resources/views/maintenance/expressPrinting/setting/terminal/index.blade.php

@@ -0,0 +1,122 @@
+@extends('layouts.app')
+
+@section('title','打印机')
+
+@section('content')
+    <span id="nav2">
+        @component('maintenance.menu')@endcomponent
+        @component('maintenance.expressPrinting.menu')@endcomponent
+        @component('maintenance.expressPrinting.setting.menu')@endcomponent
+    </span>
+    <div class="container-fluid " id="list">
+        <div class="card">
+            @can('基础设置-快递打印-终端-添加')
+                @include('maintenance.expressPrinting.setting.terminal._create')
+            @endcan
+            @can('基础设置-快递打印-终端-编辑')
+                @include('maintenance.expressPrinting.setting.terminal._edit')
+            @endcan
+            <div class="card-body">
+                <div class="row pull-left m-1">
+                    @can('基础设置-快递打印-终端-添加')
+                        <button class="btn btn-outline-info mb-1 mr-3" @click="showCreatedModel"><span
+                                class="fa fa-plus"></span>&nbsp;新&nbsp;&nbsp;增
+                        </button>
+                    @endcan
+                </div>
+                @include('maintenance.expressPrinting.setting.terminal._table')
+            </div>
+        </div>
+    </div>
+@endsection
+
+@section('lastScript')
+    <script>
+        let list = new Vue({
+            el: '#list',
+            data: {
+                terminals: {!!$terminals->toJson()!!}['data'],
+                terminal: {},
+                selectTr: null,
+                index: null,
+                terminalErrors: {},
+            },
+            mounted() {
+                $('#list').removeClass('d-none');
+            },
+            created() {
+            },
+            methods: {
+                showCreatedModel() {
+                    this.terminal = {};
+                    this.terminalErrors = {};
+                    $('#create-terminal').modal('show');
+                },
+                showEditModel(terminal,index) {
+                    this.terminal = JSON.parse(JSON.stringify(terminal));
+                    this.index = index;
+                    this.terminalErrors = {};
+                    $('#edit-terminal').modal('show');
+                },
+                createTerminal() {
+                    let url = '{{url('apiLocal/maintenance/expressPrinting/setting/terminal')}}';
+                    let data = this.terminal;
+                    window.tempTip.setIndex(1999)
+                    window.axios.post(url, data).then(res => {
+                        if (res.data['success']) {
+                            this.terminals.unshift(res.data['data']);
+                            this.$forceUpdate();
+                            $('#create-terminal').modal('hide');
+                            window.tempTip.showSuccess('添加成功!');
+                            return ;
+                        } else if (res.data['errors']){
+                            this.terminalErrors = res.data['errors'];
+                            return;
+                        }
+                        window.tempTip.show(res.data['message']);
+                    }).catch(err => {
+                        window.tempTip.show('网络异常!'+err);
+                    })
+
+                },
+                editTerminal() {
+                    let url = '{{url('apiLocal/maintenance/expressPrinting/setting/terminal')}}';
+                    let data = this.terminal;
+                    window.tempTip.setIndex(1999)
+                    window.axios.put(url, data).then(res => {
+                        if (res.data['success']) {
+                            this.$set(this.terminals,this.index,res.data['data']);
+                            window.tempTip.showSuccess('编辑成功!');
+                            $('#edit-terminal').modal('hide');
+                            return ;
+                        } else if (res.data['errors']){
+                            this.terminalErrors = res.data['errors'];
+                            return;
+                        }
+                        window.tempTip.show(res.data['message'])
+                    }).catch(err => {
+                        window.tempTip.show('网络异常!'+err)
+                    });
+                },
+                destroyTerminal(terminal,index){
+                    let url = '{{url('apiLocal/maintenance/expressPrinting/setting/terminal')}}'+'/'+terminal['id'];
+                    if (!confirm('是否删除当前终端'))return;
+                    window.axios.delete(url).then(res => {
+                        if (res.data['success']) {
+                            this.$delete(this.terminals,index);
+                            window.tempTip.showSuccess('删除成功!');
+                            return ;
+                        } else if (res.data['errors']){
+                            this.terminalErrors = res.data['errors'];
+                            return;
+                        }
+                        window.tempTip.show(res.data['message'])
+                    }).catch(err => {
+                        window.tempTip.show('网络异常!'+err)
+                    });
+                }
+            }
+        })
+    </script>
+
+@endsection

+ 12 - 0
routes/apiLocal.php

@@ -131,6 +131,18 @@ Route::group(['prefix'=>'maintenance'],function (){
             Route::post('create','PrintTemplateController@storeApi');
             Route::post('destroy','PrintTemplateController@destroyApi');
         });
+        Route::group(['prefix' => 'setting'],function () {
+            Route::group(['prefix' => 'terminal'],function () {
+                Route::post('','TerminalController@storeApi')->name('terminal.storeApi');
+                Route::put('','TerminalController@updateApi')->name('terminal.updateApi');
+                Route::delete('{id}','TerminalController@destroyApi')->name('terminal.destroyApi');
+            });
+            Route::group(['prefix' => 'printer'],function () {
+                Route::post('','TerminalPrinterController@storeApi')->name('printer.storeApi');
+                Route::put('','TerminalPrinterController@updateApi')->name('printer.updateApi');
+                Route::delete('{id}','TerminalPrinterController@destroyApi')->name('printer.destroyApi');
+            });
+        });
     });
 });
 

+ 4 - 0
routes/web.php

@@ -239,6 +239,10 @@ Route::group(['prefix'=>'maintenance'],function(){
             Route::get('/index','PrintTemplateController@index');
             Route::get('/create','PrintTemplateController@create');
         });
+        Route::group(['prefix' => 'setting'] ,function (){
+            Route::get('/terminal/index','TerminalController@index');
+            Route::get('/printer/index','TerminalPrinterController@index');
+        });
     });