任敬轩 преди 2 години
родител
ревизия
7397160b4a
променени са 35 файла, в които са добавени 707 реда и са изтрити 1 реда
  1. 0 0
      Modules/Email/Config/.gitkeep
  2. 5 0
      Modules/Email/Config/config.php
  3. 0 0
      Modules/Email/Console/.gitkeep
  4. 0 0
      Modules/Email/Database/Migrations/.gitkeep
  5. 33 0
      Modules/Email/Database/Migrations/2022_09_07_174740_create_email_table.php
  6. 0 0
      Modules/Email/Database/Seeders/.gitkeep
  7. 21 0
      Modules/Email/Database/Seeders/EmailDatabaseSeeder.php
  8. 0 0
      Modules/Email/Database/factories/.gitkeep
  9. 0 0
      Modules/Email/Entities/.gitkeep
  10. 0 0
      Modules/Email/Http/Controllers/.gitkeep
  11. 120 0
      Modules/Email/Http/Controllers/EmailController.php
  12. 0 0
      Modules/Email/Http/Middleware/.gitkeep
  13. 0 0
      Modules/Email/Http/Requests/.gitkeep
  14. 0 0
      Modules/Email/Providers/.gitkeep
  15. 125 0
      Modules/Email/Providers/EmailServiceProvider.php
  16. 69 0
      Modules/Email/Providers/RouteServiceProvider.php
  17. 0 0
      Modules/Email/Resources/assets/.gitkeep
  18. 0 0
      Modules/Email/Resources/assets/js/app.js
  19. 0 0
      Modules/Email/Resources/assets/sass/app.scss
  20. 0 0
      Modules/Email/Resources/lang/.gitkeep
  21. 0 0
      Modules/Email/Resources/views/.gitkeep
  22. 97 0
      Modules/Email/Resources/views/add.blade.php
  23. 103 0
      Modules/Email/Resources/views/edit.blade.php
  24. 9 0
      Modules/Email/Resources/views/index.blade.php
  25. 19 0
      Modules/Email/Resources/views/layouts/master.blade.php
  26. 0 0
      Modules/Email/Routes/.gitkeep
  27. 18 0
      Modules/Email/Routes/api.php
  28. 19 0
      Modules/Email/Routes/web.php
  29. 0 0
      Modules/Email/Tests/Feature/.gitkeep
  30. 0 0
      Modules/Email/Tests/Unit/.gitkeep
  31. 23 0
      Modules/Email/composer.json
  32. 13 0
      Modules/Email/module.json
  33. 17 0
      Modules/Email/package.json
  34. 14 0
      Modules/Email/webpack.mix.js
  35. 2 1
      modules_statuses.json

+ 0 - 0
Modules/Email/Config/.gitkeep


+ 5 - 0
Modules/Email/Config/config.php

@@ -0,0 +1,5 @@
+<?php
+
+return [
+    'name' => 'Email'
+];

+ 0 - 0
Modules/Email/Console/.gitkeep


+ 0 - 0
Modules/Email/Database/Migrations/.gitkeep


+ 33 - 0
Modules/Email/Database/Migrations/2022_09_07_174740_create_email_table.php

@@ -0,0 +1,33 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class CreateEmailTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::create('email', function (Blueprint $table) {
+            $table->bigIncrements('id')->comment('ID');
+            $table->string('mine_id_list', 255)->nullable()->comment('邮件矿区列表');
+            $table->string('email', 255)->nullable()->comment('邮件地址');
+            $table->timestamps();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::dropIfExists('email');
+    }
+}

+ 0 - 0
Modules/Email/Database/Seeders/.gitkeep


+ 21 - 0
Modules/Email/Database/Seeders/EmailDatabaseSeeder.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace Modules\Email\Database\Seeders;
+
+use Illuminate\Database\Seeder;
+use Illuminate\Database\Eloquent\Model;
+
+class EmailDatabaseSeeder extends Seeder
+{
+    /**
+     * Run the database seeds.
+     *
+     * @return void
+     */
+    public function run()
+    {
+        Model::unguard();
+
+        // $this->call("OthersTableSeeder");
+    }
+}

+ 0 - 0
Modules/Email/Database/factories/.gitkeep


+ 0 - 0
Modules/Email/Entities/.gitkeep


+ 0 - 0
Modules/Email/Http/Controllers/.gitkeep


+ 120 - 0
Modules/Email/Http/Controllers/EmailController.php

@@ -0,0 +1,120 @@
+<?php
+
+namespace Modules\Email\Http\Controllers;
+
+use Illuminate\Contracts\Support\Renderable;
+use Illuminate\Http\Request;
+use Illuminate\Routing\Controller;
+use Modules\Admin\Auxiliary\View\FromAuxiliary;
+use Modules\Admin\Auxiliary\View\TableAuxiliary;
+use DB;
+use Modules\Admin\Http\Controllers\BaseController;
+
+class EmailController extends BaseController
+{
+    /**
+     * Display a listing of the resource.
+     * @return Renderable
+     */
+    public function index(Request $request)
+    {
+        $this->menusActive[0] = 'adminEmail';
+
+        $email_list = DB::table('email')->orderBy('created_at')->get();
+        if(count($email_list)>0){
+            for($i=0;$i<count($email_list);$i++){
+                $mine_list = explode(';',$email_list[$i]->mine_id_list);
+                $email_list[$i]->mine_name_list = '';
+                foreach($mine_list as $k=>$v){
+                    $mine_title = DB::table('mine_list')->where('id',$v)->get()[0]->title;
+                    $email_list[$i]->mine_name_list = $email_list[$i]->mine_name_list.$mine_title.' , ';
+                }
+                $email_list[$i]->mine_name_list = substr($email_list[$i]->mine_name_list,0,strlen($email_list[$i]->mine_name_list)-3);
+            }
+        }
+
+        $tableObj = new TableAuxiliary('email', $email_list);
+        $tableObj->actionBtns = ['edit','del'];
+        $tableObj->column('mine_name_list', '发送范围');
+        $tableObj->column('email', '邮件地址');
+        return $this->tableList($tableObj);
+    }
+
+    public function add(Request $request){
+        if ($request->isMethod('post')) {
+            $params = $request->all();
+            $pattern = "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/";
+            preg_match($pattern, $params['email'], $matches);
+            if(!isset($params['mine_id'])){
+                $data['code'] = 1;
+                $data['log'] = '至少选择一个矿区';
+            }else if($matches == null){
+                $data['code'] = 1;
+                $data['log'] = '请输入正确格式的邮箱地址';
+            }else{
+                $email['email'] = $params['email'];
+                $email['mine_id_list'] = "";
+                foreach($params['mine_id'] as $k=>$v){
+                    $email['mine_id_list'] = $email['mine_id_list'] . $v . ';';
+                }
+                $email['mine_id_list'] = substr($email['mine_id_list'], 0, strlen($email['mine_id_list']) - 1);
+                $email['created_at'] = date('Y-m-d H:i:s');
+                $email['updated_at'] = date('Y-m-d H:i:s');
+                DB::table('email')->insert($email);
+                $data['code'] = 0;
+                $data['log'] = '提交成功!';
+            }
+            return $data;
+        }
+        $mine_parent = DB::table('mine_list')->where('parent_id',0)->where('deleted_at',null)->get();
+        $data['menusAll'] = $mine_parent;
+        $data['title']    = '添加邮件配置';
+        return $this->view('email::add', $data);
+    }
+
+    public function edit(Request $request){
+        $params = $request->all();
+        if ($request->isMethod('post')) {
+            $pattern = "/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,})$/";
+            preg_match($pattern, $params['email'], $matches);
+            if(!isset($params['mine_id'])){
+                $data['code'] = 1;
+                $data['log'] = '至少选择一个矿区';
+            }else if($matches == null){
+                $data['code'] = 1;
+                $data['log'] = '请输入正确格式的邮箱地址';
+            }else{
+                $email['email'] = $params['email'];
+                $email['mine_id_list'] = "";
+                foreach($params['mine_id'] as $k=>$v){
+                    $email['mine_id_list'] = $email['mine_id_list'] . $v . ';';
+                }
+                $email['mine_id_list'] = substr($email['mine_id_list'], 0, strlen($email['mine_id_list']) - 1);
+                $email['created_at'] = date('Y-m-d H:i:s');
+                $email['updated_at'] = date('Y-m-d H:i:s');
+                DB::table('email')->where('id',$params['id'])->update($email);
+                $data['code'] = 0;
+                $data['log'] = '提交成功!';
+            }
+            return $data;
+        }
+        $mine_parent = DB::table('mine_list')->where('parent_id',0)->where('deleted_at',null)->get();
+        $data['menusAll'] = $mine_parent;
+        $data['title']    = '修改邮件配置';
+        $email = DB::table('email')->where('id',$params['id'])->first();
+        $checkedId = explode(';',$email->mine_id_list);
+        foreach($checkedId as $k=>$v){
+            $checkedId[$k] = (int)$v;
+        }
+        $data['checkedId'] = $checkedId;
+        $data['id'] = $params['id'];
+        $data['email'] = $email->email;
+        return $this->view('email::edit', $data);
+    }
+
+    public function del(Request $request){
+        $params = $request->all();
+        DB::table('email')->where('id',$params['id'])->delete();
+        return $this->success();
+    }
+}

+ 0 - 0
Modules/Email/Http/Middleware/.gitkeep


+ 0 - 0
Modules/Email/Http/Requests/.gitkeep


+ 0 - 0
Modules/Email/Providers/.gitkeep


+ 125 - 0
Modules/Email/Providers/EmailServiceProvider.php

@@ -0,0 +1,125 @@
+<?php
+
+namespace Modules\Email\Providers;
+
+use Illuminate\Support\ServiceProvider;
+use Illuminate\Database\Eloquent\Factory;
+
+class EmailServiceProvider extends ServiceProvider
+{
+    /**
+     * @var string $moduleName
+     */
+    protected $moduleName = 'Email';
+
+    /**
+     * @var string $moduleNameLower
+     */
+    protected $moduleNameLower = 'email';
+
+    /**
+     * Boot the application events.
+     *
+     * @return void
+     */
+    public function boot()
+    {
+        $this->registerTranslations();
+        $this->registerConfig();
+        $this->registerViews();
+        $this->registerFactories();
+        $this->loadMigrationsFrom(module_path($this->moduleName, 'Database/Migrations'));
+    }
+
+    /**
+     * Register the service provider.
+     *
+     * @return void
+     */
+    public function register()
+    {
+        $this->app->register(RouteServiceProvider::class);
+    }
+
+    /**
+     * Register config.
+     *
+     * @return void
+     */
+    protected function registerConfig()
+    {
+        $this->publishes([
+            module_path($this->moduleName, 'Config/config.php') => config_path($this->moduleNameLower . '.php'),
+        ], 'config');
+        $this->mergeConfigFrom(
+            module_path($this->moduleName, 'Config/config.php'), $this->moduleNameLower
+        );
+    }
+
+    /**
+     * Register views.
+     *
+     * @return void
+     */
+    public function registerViews()
+    {
+        $viewPath = resource_path('views/modules/' . $this->moduleNameLower);
+
+        $sourcePath = module_path($this->moduleName, 'Resources/views');
+
+        $this->publishes([
+            $sourcePath => $viewPath
+        ], ['views', $this->moduleNameLower . '-module-views']);
+
+        $this->loadViewsFrom(array_merge($this->getPublishableViewPaths(), [$sourcePath]), $this->moduleNameLower);
+    }
+
+    /**
+     * Register translations.
+     *
+     * @return void
+     */
+    public function registerTranslations()
+    {
+        $langPath = resource_path('lang/modules/' . $this->moduleNameLower);
+
+        if (is_dir($langPath)) {
+            $this->loadTranslationsFrom($langPath, $this->moduleNameLower);
+        } else {
+            $this->loadTranslationsFrom(module_path($this->moduleName, 'Resources/lang'), $this->moduleNameLower);
+        }
+    }
+
+    /**
+     * Register an additional directory of factories.
+     *
+     * @return void
+     */
+    public function registerFactories()
+    {
+        if (! app()->environment('production') && $this->app->runningInConsole()) {
+            app(Factory::class)->load(module_path($this->moduleName, 'Database/factories'));
+        }
+    }
+
+    /**
+     * Get the services provided by the provider.
+     *
+     * @return array
+     */
+    public function provides()
+    {
+        return [];
+    }
+
+    private function getPublishableViewPaths(): array
+    {
+        $paths = [];
+        foreach (\Config::get('view.paths') as $path) {
+            if (is_dir($path . '/modules/' . $this->moduleNameLower)) {
+                $paths[] = $path . '/modules/' . $this->moduleNameLower;
+            }
+        }
+        return $paths;
+    }
+}

+ 69 - 0
Modules/Email/Providers/RouteServiceProvider.php

@@ -0,0 +1,69 @@
+<?php
+
+namespace Modules\Email\Providers;
+
+use Illuminate\Support\Facades\Route;
+use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
+
+class RouteServiceProvider extends ServiceProvider
+{
+    /**
+     * The module namespace to assume when generating URLs to actions.
+     *
+     * @var string
+     */
+    protected $moduleNamespace = 'Modules\Email\Http\Controllers';
+
+    /**
+     * Called before routes are registered.
+     *
+     * Register any model bindings or pattern based filters.
+     *
+     * @return void
+     */
+    public function boot()
+    {
+        parent::boot();
+    }
+
+    /**
+     * Define the routes for the application.
+     *
+     * @return void
+     */
+    public function map()
+    {
+        $this->mapApiRoutes();
+
+        $this->mapWebRoutes();
+    }
+
+    /**
+     * Define the "web" routes for the application.
+     *
+     * These routes all receive session state, CSRF protection, etc.
+     *
+     * @return void
+     */
+    protected function mapWebRoutes()
+    {
+        Route::middleware('web')
+            ->namespace($this->moduleNamespace)
+            ->group(module_path('Email', '/Routes/web.php'));
+    }
+
+    /**
+     * Define the "api" routes for the application.
+     *
+     * These routes are typically stateless.
+     *
+     * @return void
+     */
+    protected function mapApiRoutes()
+    {
+        Route::prefix('api')
+            ->middleware('api')
+            ->namespace($this->moduleNamespace)
+            ->group(module_path('Email', '/Routes/api.php'));
+    }
+}

+ 0 - 0
Modules/Email/Resources/assets/.gitkeep


+ 0 - 0
Modules/Email/Resources/assets/js/app.js


+ 0 - 0
Modules/Email/Resources/assets/sass/app.scss


+ 0 - 0
Modules/Email/Resources/lang/.gitkeep


+ 0 - 0
Modules/Email/Resources/views/.gitkeep


+ 97 - 0
Modules/Email/Resources/views/add.blade.php

@@ -0,0 +1,97 @@
+<h2>{{ $title }} <a href="javascript:history.go(-1);" class="layui-btn layui-btn-primary layui-layer-close"
+                    style="position:relative;">返回</a></h2>
+<hr/>
+
+<form class="layui-form">
+    <div class="layui-form-item">
+        <label class="layui-form-label">全部选择</label>
+        <div class="layui-input-block">
+            <input type="checkbox" lay-filter="xuanze" lay-skin="switch" lay-text="全选|全不选">
+        </div>
+    </div>
+
+    <div class="layui-form-item">
+        <label class="layui-form-label">发送范围</label>
+        <div class="layui-input-block">
+            <div id="LAY-auth-tree-index"></div>
+        </div>
+    </div>
+
+    <div class="layui-form-item">
+        <label class="layui-form-label">邮箱地址</label>
+        <div class="layui-input-block">
+            <input class="layui-input" type="text" placeholder="请输入邮箱地址" name="email" id="email"/>
+        </div>
+    </div>
+
+    <div class="layui-form-item">
+        <div class="layui-input-block">
+            <button class="layui-btn" type="submit" lay-submit lay-filter="LAY-auth-tree-submit">提交</button>
+            <button class="layui-btn layui-btn-default" type="reset">重置</button>
+        </div>
+    </div>
+</form>
+
+<script type="text/javascript">
+    layui.extend({
+        authtree: '/js/admin/layui/extends/authtree',
+    });
+    layui.use(['jquery', 'authtree', 'form', 'layer'], function () {
+        var $ = layui.jquery;
+        var authtree = layui.authtree;
+        var form = layui.form;
+        var layer = layui.layer;
+        // 初始化
+        var trees = authtree.listConvert(@json($menusAll), {
+            primaryKey: 'id'
+            , startPid: 0
+            , parentKey: 'parent_id'
+            , nameKey: 'title'
+            , valueKey: 'id'
+        });
+
+        // 渲染时传入渲染目标ID,树形结构数据(具体结构看样例,checked表示默认选中),以及input表单的名字
+        authtree.render('#LAY-auth-tree-index', trees, {
+            inputname: 'authids[]'
+            , layfilter: 'lay-check-auth'
+            // ,autoclose: false
+            // ,autochecked: false
+            // ,openchecked: true
+            , openall: true
+            , autowidth: true
+        });
+
+        form.on('switch(zhankai)', function (data) {
+            if (data.elem.checked) {
+                authtree.showAll('#LAY-auth-tree-index');
+            } else {
+                authtree.closeAll('#LAY-auth-tree-index');
+            }
+        });
+
+        form.on('switch(xuanze)', function (data) {
+            if (data.elem.checked) {
+                authtree.checkAll('#LAY-auth-tree-index');
+            } else {
+                authtree.uncheckAll('#LAY-auth-tree-index');
+            }
+        });
+
+        form.on('submit(LAY-auth-tree-submit)', function (obj) {
+            var authids = authtree.getChecked('#LAY-auth-tree-index');
+            var email = document.getElementById('email').value;
+            console.log('Choosed authids is', authids);
+            $.post('/admin/email/add',{'email':email,'mine_id':authids},function(res){
+                if (res.code === 0) {
+                    layer.msg(res.log);
+                    location.href = '/admin/email';
+                }else{
+                    layer.msg(res.log);
+                }
+            })
+            return false;
+        });
+
+    });
+
+</script>

+ 103 - 0
Modules/Email/Resources/views/edit.blade.php

@@ -0,0 +1,103 @@
+<h2>{{ $title }} <a href="javascript:history.go(-1);" class="layui-btn layui-btn-primary layui-layer-close"
+                    style="position:relative;">返回</a></h2>
+<hr/>
+
+<form class="layui-form">
+    <div class="layui-form-item">
+         <input type="hidden" name="id" id="id" value="{{ $id }}">
+    </div>
+
+    <div class="layui-form-item">
+        <label class="layui-form-label">全部选择</label>
+        <div class="layui-input-block">
+            <input type="checkbox" lay-filter="xuanze" lay-skin="switch" lay-text="全选|全不选">
+        </div>
+    </div>
+
+    <div class="layui-form-item">
+        <label class="layui-form-label">发送范围</label>
+        <div class="layui-input-block">
+            <div id="LAY-auth-tree-index"></div>
+        </div>
+    </div>
+
+    <div class="layui-form-item">
+        <label class="layui-form-label">邮箱地址</label>
+        <div class="layui-input-block">
+            <input class="layui-input" type="text" placeholder="请输入邮箱地址" name="email" id="email" value="{{ $email }}"/>
+        </div>
+    </div>
+
+    <div class="layui-form-item">
+        <div class="layui-input-block">
+            <button class="layui-btn" type="submit" lay-submit lay-filter="LAY-auth-tree-submit">提交</button>
+            <button class="layui-btn layui-btn-default" type="reset">重置</button>
+        </div>
+    </div>
+</form>
+
+<script type="text/javascript">
+    layui.extend({
+        authtree: '/js/admin/layui/extends/authtree',
+    });
+    layui.use(['jquery', 'authtree', 'form', 'layer'], function () {
+        var $ = layui.jquery;
+        var authtree = layui.authtree;
+        var form = layui.form;
+        var layer = layui.layer;
+        // 初始化
+        var trees = authtree.listConvert(@json($menusAll), {
+            primaryKey: 'id'
+            , startPid: 0
+            , parentKey: 'parent_id'
+            , nameKey: 'title'
+            , valueKey: 'id'
+            , checkedKey: eval(<?php echo json_encode($checkedId);?>)
+        });
+
+        // 渲染时传入渲染目标ID,树形结构数据(具体结构看样例,checked表示默认选中),以及input表单的名字
+        authtree.render('#LAY-auth-tree-index', trees, {
+            inputname: 'authids[]'
+            , layfilter: 'lay-check-auth'
+            // ,autoclose: false
+            // ,autochecked: false
+            // ,openchecked: true
+            , openall: true
+            , autowidth: true
+        });
+
+        form.on('switch(zhankai)', function (data) {
+            if (data.elem.checked) {
+                authtree.showAll('#LAY-auth-tree-index');
+            } else {
+                authtree.closeAll('#LAY-auth-tree-index');
+            }
+        });
+
+        form.on('switch(xuanze)', function (data) {
+            if (data.elem.checked) {
+                authtree.checkAll('#LAY-auth-tree-index');
+            } else {
+                authtree.uncheckAll('#LAY-auth-tree-index');
+            }
+        });
+
+        form.on('submit(LAY-auth-tree-submit)', function (obj) {
+            var authids = authtree.getChecked('#LAY-auth-tree-index');
+            console.log('Choosed authids is', authids);
+            var id = $('#id').val();
+            var email = document.getElementById('email').value;
+            $.post('/admin/email/edit',{'id':id,'mine_id':authids,'email':email},function(res){
+                if (res.code === 0) {
+                    layer.msg(res.log);
+                    location.href = '/admin/email';
+                }else{
+                    layer.msg(res.log);
+                }
+            })
+            return false;
+        });
+
+    });
+
+</script>

+ 9 - 0
Modules/Email/Resources/views/index.blade.php

@@ -0,0 +1,9 @@
+@extends('email::layouts.master')
+
+@section('content')
+    <h1>Hello World</h1>
+
+    <p>
+        This view is loaded from module: {!! config('email.name') !!}
+    </p>
+@endsection

+ 19 - 0
Modules/Email/Resources/views/layouts/master.blade.php

@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="en">
+    <head>
+        <meta charset="utf-8">
+        <meta http-equiv="X-UA-Compatible" content="IE=edge">
+        <meta name="viewport" content="width=device-width, initial-scale=1">
+        <title>Module Email</title>
+
+       {{-- Laravel Mix - CSS File --}}
+       {{-- <link rel="stylesheet" href="{{ mix('css/email.css') }}"> --}}
+
+    </head>
+    <body>
+        @yield('content')
+
+        {{-- Laravel Mix - JS File --}}
+        {{-- <script src="{{ mix('js/email.js') }}"></script> --}}
+    </body>
+</html>

+ 0 - 0
Modules/Email/Routes/.gitkeep


+ 18 - 0
Modules/Email/Routes/api.php

@@ -0,0 +1,18 @@
+<?php
+
+use Illuminate\Http\Request;
+
+/*
+|--------------------------------------------------------------------------
+| API Routes
+|--------------------------------------------------------------------------
+|
+| Here is where you can register API routes for your application. These
+| routes are loaded by the RouteServiceProvider within a group which
+| is assigned the "api" middleware group. Enjoy building your API!
+|
+*/
+
+Route::middleware('auth:api')->get('/email', function (Request $request) {
+    return $request->user();
+});

+ 19 - 0
Modules/Email/Routes/web.php

@@ -0,0 +1,19 @@
+<?php
+
+/*
+|--------------------------------------------------------------------------
+| Web Routes
+|--------------------------------------------------------------------------
+|
+| Here is where you can register web routes for your application. These
+| routes are loaded by the RouteServiceProvider within a group which
+| contains the "web" middleware group. Now create something great!
+|
+*/
+
+Route::prefix('admin')->group(function() {
+    Route::get('/email', 'EmailController@index');
+    Route::match(['get', 'post'], '/email/add', 'EmailController@add');
+    Route::match(['get', 'post'], '/email/edit', 'EmailController@edit');
+    Route::post('/email/del', 'EmailController@del');
+});

+ 0 - 0
Modules/Email/Tests/Feature/.gitkeep


+ 0 - 0
Modules/Email/Tests/Unit/.gitkeep


+ 23 - 0
Modules/Email/composer.json

@@ -0,0 +1,23 @@
+{
+    "name": "nwidart/email",
+    "description": "",
+    "authors": [
+        {
+            "name": "Nicolas Widart",
+            "email": "n.widart@gmail.com"
+        }
+    ],
+    "extra": {
+        "laravel": {
+            "providers": [],
+            "aliases": {
+
+            }
+        }
+    },
+    "autoload": {
+        "psr-4": {
+            "Modules\\Email\\": ""
+        }
+    }
+}

+ 13 - 0
Modules/Email/module.json

@@ -0,0 +1,13 @@
+{
+    "name": "Email",
+    "alias": "email",
+    "description": "",
+    "keywords": [],
+    "order": 0,
+    "providers": [
+        "Modules\\Email\\Providers\\EmailServiceProvider"
+    ],
+    "aliases": {},
+    "files": [],
+    "requires": []
+}

+ 17 - 0
Modules/Email/package.json

@@ -0,0 +1,17 @@
+{
+    "private": true,
+    "scripts": {
+        "dev": "npm run development",
+        "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
+        "watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
+        "watch-poll": "npm run watch -- --watch-poll",
+        "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
+        "prod": "npm run production",
+        "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
+    },
+    "devDependencies": {
+        "cross-env": "^7.0",
+        "laravel-mix": "^5.0.1",
+        "laravel-mix-merge-manifest": "^0.1.2"
+    }
+}

+ 14 - 0
Modules/Email/webpack.mix.js

@@ -0,0 +1,14 @@
+const dotenvExpand = require('dotenv-expand');
+dotenvExpand(require('dotenv').config({ path: '../../.env'/*, debug: true*/}));
+
+const mix = require('laravel-mix');
+require('laravel-mix-merge-manifest');
+
+mix.setPublicPath('../../public').mergeManifest();
+
+mix.js(__dirname + '/Resources/assets/js/app.js', 'js/email.js')
+    .sass( __dirname + '/Resources/assets/sass/app.scss', 'css/email.css');
+
+if (mix.inProduction()) {
+    mix.version();
+}

+ 2 - 1
modules_statuses.json

@@ -4,5 +4,6 @@
     "Mine": true,
     "Camera": true,
     "OpcData": true,
-    "Log": true
+    "Log": true,
+    "Email": true
 }