增加 营销邮件接收选项

This commit is contained in:
iVampireSP.com 2023-02-22 21:32:33 +08:00
parent 7e9e5e2559
commit 56d1aacc79
No known key found for this signature in database
GPG Key ID: 2F7B001CA27A8132
6 changed files with 121 additions and 40 deletions

View File

@ -58,6 +58,11 @@ public function query(Request|array $request): User|CachedBuilder|Builder
}); });
} }
// 是否是营销邮件
if (! empty($request['receive_marketing_email'])) {
$users = $users->where('receive_marketing_email', true);
}
return $users; return $users;
} }

View File

@ -2,12 +2,11 @@
namespace App\Http\Controllers\Web; namespace App\Http\Controllers\Web;
// use App\Helpers\ApiResponse;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Notifications\User\UserNotification; use App\Notifications\User\UserNotification;
use function back; use function back;
use function config; use function config;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse; use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Carbon; use Illuminate\Support\Carbon;
@ -65,17 +64,20 @@ public function confirm_redirect(Request $request): View
return view('confirm_redirect', compact('callback', 'referer_host')); return view('confirm_redirect', compact('callback', 'referer_host'));
} }
public function update(Request $request): RedirectResponse public function update(Request $request): RedirectResponse|JsonResponse
{ {
$request->validate([ $request->validate([
'name' => 'required|string|max:255', 'name' => 'nullable|sometimes|string|max:255',
'receive_marketing_email' => 'nullable|sometimes|boolean',
]); ]);
$user = $request->user('web'); $user = $request->user('web');
$user->update([ $user->update($request->only('name', 'receive_marketing_email'));
'name' => $request->input('name'),
]); if ($request->ajax()) {
return $this->success($user->only('name', 'receive_marketing_email'));
}
return back()->with('success', '更新成功。'); return back()->with('success', '更新成功。');
} }

View File

@ -47,6 +47,7 @@ class User extends Authenticatable implements MustVerifyEmail
'name', 'name',
'email', 'email',
'password', 'password',
'receive_marketing_email',
]; ];
/** /**

View File

@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('users', function (Blueprint $table) {
$table->boolean('receive_marketing_email')->default(true)->index()->after('remember_token');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('users', function (Blueprint $table) {
$table->dropColumn('receive_marketing_email');
});
}
};

View File

@ -32,6 +32,15 @@
</select> </select>
</div> </div>
<div class="form-group">
<div class="form-check">
<label class="form-check-label" for="receive_marketing_email">
接收营销邮件的用户
</label>
<input class="form-check-input" type="checkbox" name="receive_marketing_email" id="receive_marketing_email" value="1" @if(Request::get('receive_marketing_email') == 1) checked @endif>
</div>
</div>
<p>这两个搜搜条件只能二选一。</p> <p>这两个搜搜条件只能二选一。</p>
<button type="submit" class="btn btn-primary mt-1">筛选并确定条件</button> <button type="submit" class="btn btn-primary mt-1">筛选并确定条件</button>
@ -96,40 +105,37 @@
</table> </table>
</div> </div>
{{-- 分页 --}}
{{ $users->links() }} {{ $users->links() }}
<form method="POST" action="{{ route('admin.notifications.store')}}">
@csrf
<input type="hidden" name="user" value="{{ Request::get('user') }}">
<input type="hidden" name="module_id" value="{{ Request::get('module_id') }}">
<input type="hidden" name="user_id" value="{{ Request::get('user_id') }}">
<div class="form-check mt-1">
<label class="form-check-label" for="send_mail">
邮件通知
</label>
<input class="form-check-input" type="checkbox" name="send_mail" id="send_mail" value="1" @if(Request::get('send_mail') == 1) checked @endif>
</div>
<div class="form-group">
<label for="title">标题</label>
<input type="text" name="title" id="title" class="form-control" value="{{ old('title') }}">
</div>
<div class="form-group mt-4">
<label for="content">通知内容 支持 Markdown</label>
<textarea name="content" id="content" class="form-control" rows="10">{{ old('content') }}</textarea>
</div>
<button type="submit" class="btn btn-primary mt-3">发送</button>
<span class="text-muted d-block">通知一旦发送,将无法撤销!</span>
</form>
@else
<h5 class="mt-4">没有符合条件的用户。</h5>
@endif @endif
<form method="POST" action="{{ route('admin.notifications.store')}}">
@csrf
<input type="hidden" name="user" value="{{ Request::get('user') }}">
<input type="hidden" name="module_id" value="{{ Request::get('module_id') }}">
<input type="hidden" name="user_id" value="{{ Request::get('user_id') }}">
{{-- checkbox send_mail --}}
<div class="form-group">
<label for="send_mail">邮件通知</label>
<input type="checkbox" name="send_mail" id="send_mail" value="1"
@if(Request::get('send_mail') == 1) checked @endif>
</div>
<div class="form-group">
<label for="title">标题</label>
<input type="text" name="title" id="title" class="form-control" value="{{ old('title') }}">
</div>
{{-- 通知内容 --}}
<div class="form-group mt-4">
<label for="content">通知内容 支持 Markdown</label>
<textarea name="content" id="content" class="form-control" rows="10">{{ old('content') }}</textarea>
</div>
<button type="submit" class="btn btn-primary mt-3">发送</button>
<span class="text-muted d-block">通知一旦发送,将无法撤销!</span>
</form>
@endsection @endsection

View File

@ -90,6 +90,12 @@
@if ($user->real_name_verified_at) @if ($user->real_name_verified_at)
<p>实人认证时间: {{ $user->real_name_verified_at }}</p> <p>实人认证时间: {{ $user->real_name_verified_at }}</p>
@endif @endif
<p>
营销邮件订阅: <a
onclick="update_receive_marketing_email()" style="cursor: pointer"
class="text-decoration-underline"></a>
<span id="receive_marketing_email_append_text"></span>
</p>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-secondary" <button type="button" class="btn btn-secondary"
@ -100,4 +106,37 @@
</div> </div>
</div> </div>
<script>
let receive_marketing_email = {{ $user->receive_marketing_email ? 'true' : 'false' }};
let receive_marketing_email_append_text = document.querySelector('#receive_marketing_email_append_text');
function update_receive_marketing_email_text() {
let ele = document.querySelector('a[onclick="update_receive_marketing_email()"]');
if (receive_marketing_email) {
ele.innerText = '是';
receive_marketing_email_append_text.innerText = ',如果有打扰到您,请取消订阅。';
} else {
receive_marketing_email_append_text.innerText = '。创业不易,感谢理解。';
ele.innerText = '否';
}
}
function update_receive_marketing_email() {
axios.patch("{{route('users.update')}}", {
receive_marketing_email: !receive_marketing_email
}).then(response => {
receive_marketing_email = response.data['receive_marketing_email']
update_receive_marketing_email_text(receive_marketing_email)
}).finally(() => {
update_receive_marketing_email_text()
})
}
update_receive_marketing_email_text()
</script>
@endsection @endsection