支持复制常驻留言
This commit is contained in:
parent
d897e9a33d
commit
4ef6a822c1
@ -9,6 +9,7 @@ use Illuminate\Routing\Controller as BaseController;
|
|||||||
|
|
||||||
class ProgramAppendConstructController extends BaseController
|
class ProgramAppendConstructController extends BaseController
|
||||||
{
|
{
|
||||||
|
// region Views
|
||||||
public function index(Request $request, Programs $program) {
|
public function index(Request $request, Programs $program) {
|
||||||
return view("program.construct.append.index", [
|
return view("program.construct.append.index", [
|
||||||
"program" => $program,
|
"program" => $program,
|
||||||
@ -27,21 +28,6 @@ class ProgramAppendConstructController extends BaseController
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function create(Request $request, Programs $program) {
|
|
||||||
$request->validate([
|
|
||||||
"name" => ["required_without:is_original"],
|
|
||||||
"from" => ["required"],
|
|
||||||
"price" => ["required", "numeric"],
|
|
||||||
]);
|
|
||||||
$createPayload = $request->only(["name", "from", "price", "append"]);
|
|
||||||
$append = $program->appends()->create($createPayload);
|
|
||||||
$append->is_original = $request->post("is_original", 0);
|
|
||||||
$append->save();
|
|
||||||
return redirect(route("program.construct.append.list", [
|
|
||||||
"program"=>$program->id,
|
|
||||||
]));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function edit(Request $request, ProgramAppends $append) {
|
public function edit(Request $request, ProgramAppends $append) {
|
||||||
return view("program.construct.append.create", [
|
return view("program.construct.append.create", [
|
||||||
"program" => $append->program,
|
"program" => $append->program,
|
||||||
@ -49,16 +35,44 @@ class ProgramAppendConstructController extends BaseController
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function copy_view(Request $request, Programs $program) {
|
||||||
|
return view("program.construct.append.copy_broadcast", [
|
||||||
|
"program" => $program,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
// endregion
|
||||||
|
|
||||||
|
// region Form Submits
|
||||||
|
public function create(Request $request, Programs $program) {
|
||||||
|
$append = $this->fill_model($request);
|
||||||
|
$program->appends()->save($append);
|
||||||
|
return redirect(route("program.construct.append.list", [
|
||||||
|
"program"=>$program->id,
|
||||||
|
]));
|
||||||
|
}
|
||||||
|
|
||||||
public function submit(Request $request, ProgramAppends $append) {
|
public function submit(Request $request, ProgramAppends $append) {
|
||||||
$submitPayload = $request->only(["name", "from", "price", "append"]);
|
$append = $this->fill_model($request, $append);
|
||||||
$append->update($submitPayload);
|
|
||||||
$append->is_original = $request->post("is_original", 0);
|
|
||||||
$append->save();
|
$append->save();
|
||||||
return redirect(route("program.construct.append.list", [
|
return redirect(route("program.construct.append.list", [
|
||||||
"program"=>$append->program->id,
|
"program"=>$append->program->id,
|
||||||
]));
|
]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function copy_append(Request $request, Programs $program) {
|
||||||
|
$payload = $request->validate([
|
||||||
|
"id" => ["required", "numeric", "exists:App\Models\ProgramAppends,id"]
|
||||||
|
]);
|
||||||
|
$original_append = ProgramAppends::query()->findOrFail($payload["id"]);
|
||||||
|
$append = $original_append->replicate();
|
||||||
|
$program->appends()->save($append);
|
||||||
|
return redirect(route("program.construct.append.list", [
|
||||||
|
"program"=>$append->program->id,
|
||||||
|
]));
|
||||||
|
}
|
||||||
|
// endregion
|
||||||
|
|
||||||
|
// region API
|
||||||
public function from_list(Request $request) {
|
public function from_list(Request $request) {
|
||||||
$query = ProgramAppends::query()->groupBy("from")
|
$query = ProgramAppends::query()->groupBy("from")
|
||||||
->select("from")
|
->select("from")
|
||||||
@ -73,4 +87,35 @@ class ProgramAppendConstructController extends BaseController
|
|||||||
];
|
];
|
||||||
})->toArray();
|
})->toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function broadcast_list(Request $request) {
|
||||||
|
$query = ProgramAppends::query()->groupBy("name")
|
||||||
|
->where("broadcast", "=", 1)
|
||||||
|
->select("name")->selectRaw("max(id) as id");
|
||||||
|
return $query->get()->map(function ($item) {
|
||||||
|
return [
|
||||||
|
"text" => $item["name"],
|
||||||
|
"value" => $item["id"],
|
||||||
|
"alias" => implode("", \pinyin($item["name"], PINYIN_NO_TONE|PINYIN_KEEP_ENGLISH)),
|
||||||
|
"abbr" => \pinyin_abbr($item["name"]),
|
||||||
|
];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// endregion
|
||||||
|
|
||||||
|
private function fill_model(Request $request, ?ProgramAppends $append = null): ProgramAppends
|
||||||
|
{
|
||||||
|
if ($append === null) {
|
||||||
|
$append = new ProgramAppends();
|
||||||
|
}
|
||||||
|
$payload = $request->validate([
|
||||||
|
"name" => ["required_without:is_original"],
|
||||||
|
"from" => ["required"],
|
||||||
|
"price" => ["required", "numeric"],
|
||||||
|
"post" => [],
|
||||||
|
]);
|
||||||
|
$append->fill($payload);
|
||||||
|
$append->is_original = $request->post("is_original", 0);
|
||||||
|
return $append;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
30
resources/js/component/broadcast_select.js
Normal file
30
resources/js/component/broadcast_select.js
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import PickleComplate from "../vendor/picomplete/picomplete";
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
const id_input = document.getElementById("broadcast_id")
|
||||||
|
const pickle_config = {
|
||||||
|
target: '#broadcast_select',
|
||||||
|
suggest: ["alias", "abbr"],
|
||||||
|
clickCallback: (target, node) => {
|
||||||
|
target.value = node.text;
|
||||||
|
id_input.value = node.value;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let local_data_string = window.localStorage.getItem("append_broadcast_list");
|
||||||
|
if (!local_data_string) {
|
||||||
|
return fetch("/programs/construct/append/broadcast_list", {
|
||||||
|
"method": "GET",
|
||||||
|
}).then((response) => response.json()).then((data) => {
|
||||||
|
window.localStorage.setItem("append_broadcast_list", JSON.stringify(data));
|
||||||
|
new PickleComplate({
|
||||||
|
data: data,
|
||||||
|
config: pickle_config,
|
||||||
|
})
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
new PickleComplate({
|
||||||
|
data: JSON.parse(local_data_string),
|
||||||
|
config: pickle_config,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})()
|
6
resources/js/vendor/picomplete/picomplete.js
vendored
6
resources/js/vendor/picomplete/picomplete.js
vendored
@ -118,8 +118,8 @@ export default class PickleComplate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
containsSuggest(item, value) {
|
containsSuggest(item, value) {
|
||||||
if (item.text.toLowerCase().includes(value.toLowerCase()) ||
|
if (item.text.toString().toLowerCase().includes(value.toLowerCase()) ||
|
||||||
item.value.toLowerCase().includes(value.toLowerCase())) {
|
item.value.toString().toLowerCase().includes(value.toLowerCase())) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (this.config.suggest) {
|
if (this.config.suggest) {
|
||||||
@ -127,7 +127,7 @@ export default class PickleComplate {
|
|||||||
this.config.suggest = [this.config.suggest]
|
this.config.suggest = [this.config.suggest]
|
||||||
}
|
}
|
||||||
for (const suggest_key of this.config.suggest) {
|
for (const suggest_key of this.config.suggest) {
|
||||||
if (item.hasOwnProperty(suggest_key) && item[suggest_key].toLowerCase().includes(value.toLowerCase())) {
|
if (item.hasOwnProperty(suggest_key) && item[suggest_key].toString().toLowerCase().includes(value.toLowerCase())) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,26 @@
|
|||||||
|
<html lang="zh">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>录播节目点播信息修改</title>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<link href="{{ mix('/css/app.css') }}" rel="stylesheet"/>
|
||||||
|
<script src="{{ mix('/js/manifest.js') }}" rel="script"></script>
|
||||||
|
<link href="{{ asset('/css/vendor/picomplete/picomplete.css') }}" rel="stylesheet"/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
@include("common.header")
|
||||||
|
<form class="w-full lg:w-1/2 lg:ml-6 border-2" action="" method="post" enctype="multipart/form-data">
|
||||||
|
<label class="block my-2" id="broadcast_select">
|
||||||
|
复制的名称
|
||||||
|
<input class="form-input border-0 border-b-2 w-full" type="text" name="name" value="{{ old('name') }}">
|
||||||
|
<input class="form-input border-0 border-b-2 w-full" id="broadcast_id" type="hidden" name="id" value="{{ old('id') }}">
|
||||||
|
</label>
|
||||||
|
@include("common.form_error")
|
||||||
|
<div class="block my-2 text-center">
|
||||||
|
<input class="px-6 py-2 inline-block rounded-full bg-cyan-600 text-white" type="submit">
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
@include("common.footer")
|
||||||
|
</body>
|
||||||
|
<script src="{{ mix('/js/component/broadcast_select.js') }}" rel="script"></script>
|
||||||
|
</html>
|
@ -8,6 +8,7 @@
|
|||||||
<body>
|
<body>
|
||||||
@include("common.header")
|
@include("common.header")
|
||||||
<a href="{{route("program.construct.append.add", ["program"=>$program->id])}}">新增</a>
|
<a href="{{route("program.construct.append.add", ["program"=>$program->id])}}">新增</a>
|
||||||
|
<a href="{{route("program.construct.append.copy", ["program"=>$program->id])}}">复制常驻留言</a>
|
||||||
<table class="table-auto border-collapse w-full lg:border lg:border-black">
|
<table class="table-auto border-collapse w-full lg:border lg:border-black">
|
||||||
<thead>
|
<thead>
|
||||||
<tr class="border border-black sticky bg-white lg:static top-0 left-0 right-0">
|
<tr class="border border-black sticky bg-white lg:static top-0 left-0 right-0">
|
||||||
|
@ -55,6 +55,9 @@ Route::prefix("/programs/construct")->middleware("auth:web")->group(function (Ro
|
|||||||
$router->get('/{program}/append/add', ["\\App\\Http\\Controllers\\ProgramAppendConstructController","add"])->name("program.construct.append.add");
|
$router->get('/{program}/append/add', ["\\App\\Http\\Controllers\\ProgramAppendConstructController","add"])->name("program.construct.append.add");
|
||||||
$router->post('/{program}/append/add', ["\\App\\Http\\Controllers\\ProgramAppendConstructController","create"])->name("program.construct.append.create");
|
$router->post('/{program}/append/add', ["\\App\\Http\\Controllers\\ProgramAppendConstructController","create"])->name("program.construct.append.create");
|
||||||
$router->get('/append/from_list', ["\\App\\Http\\Controllers\\ProgramAppendConstructController", "from_list"])->name("program.construct.append.from_list");
|
$router->get('/append/from_list', ["\\App\\Http\\Controllers\\ProgramAppendConstructController", "from_list"])->name("program.construct.append.from_list");
|
||||||
|
$router->get('/{program}/append/copy', ["\\App\\Http\\Controllers\\ProgramAppendConstructController","copy_view"])->name("program.construct.append.copy");
|
||||||
|
$router->post('/{program}/append/copy', ["\\App\\Http\\Controllers\\ProgramAppendConstructController","copy_append"])->name("program.construct.append.copy.submit");
|
||||||
|
$router->get('/append/broadcast_list', ["\\App\\Http\\Controllers\\ProgramAppendConstructController", "broadcast_list"])->name("program.construct.append.broadcast_list");
|
||||||
$router->get('/append/{append}', ["\\App\\Http\\Controllers\\ProgramAppendConstructController","edit"])->name("program.construct.append.edit");
|
$router->get('/append/{append}', ["\\App\\Http\\Controllers\\ProgramAppendConstructController","edit"])->name("program.construct.append.edit");
|
||||||
$router->post('/append/{append}', ["\\App\\Http\\Controllers\\ProgramAppendConstructController","submit"])->name("program.construct.append.submit");
|
$router->post('/append/{append}', ["\\App\\Http\\Controllers\\ProgramAppendConstructController","submit"])->name("program.construct.append.submit");
|
||||||
});
|
});
|
||||||
|
@ -13,6 +13,7 @@ const mix = require('laravel-mix');
|
|||||||
|
|
||||||
mix
|
mix
|
||||||
.js('resources/js/component/from_select.js', 'public/js/component')
|
.js('resources/js/component/from_select.js', 'public/js/component')
|
||||||
|
.js('resources/js/component/broadcast_select.js', 'public/js/component')
|
||||||
.js('resources/js/app.js', 'public/js')
|
.js('resources/js/app.js', 'public/js')
|
||||||
.extract(['axios', 'lodash'])
|
.extract(['axios', 'lodash'])
|
||||||
.js('resources/js/webauthn.js', 'public/js')
|
.js('resources/js/webauthn.js', 'public/js')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user