This commit is contained in:
toom1996
2025-07-24 15:49:49 +08:00
parent 07fe136d62
commit b33b922b65
25 changed files with 25662 additions and 809 deletions

View File

@ -44,4 +44,70 @@ class WebsiteController extends AbstractController
{ {
return $render->render('website/view'); return $render->render('website/view');
} }
/**
* @url /admin/website/first-column
* @param RenderInterface $render
* @return ResponseInterface
*/
#[RequestMapping(path: 'first-column', methods: 'get')]
public function firstColumn(RenderInterface $render): ResponseInterface
{
return $render->render('website/first-column/index');
}
/**
* @url /admin/website/first-column/insert
* @param RenderInterface $render
* @return ResponseInterface
*/
#[RequestMapping(path: 'first-column/insert', methods: 'get')]
public function firstColumnInsert(RenderInterface $render): ResponseInterface
{
return $render->render('website/first-column/insert');
}
/**
* @url /admin/website/first-column/view
* @param RenderInterface $render
* @return ResponseInterface
*/
#[RequestMapping(path: 'first-column/view', methods: 'get')]
public function firstColumnView(RenderInterface $render): ResponseInterface
{
return $render->render('website/first-column/view');
}
/**
* @url /admin/website/second-column
* @param RenderInterface $render
* @return ResponseInterface
*/
#[RequestMapping(path: 'second-column', methods: 'get')]
public function secondColumn(RenderInterface $render): ResponseInterface
{
return $render->render('website/second-column/index');
}
/**
* @url /admin/website/second-column/insert
* @param RenderInterface $render
* @return ResponseInterface
*/
#[RequestMapping(path: 'second-column/insert', methods: 'get')]
public function secondColumnInsert(RenderInterface $render): ResponseInterface
{
return $render->render('website/second-column/insert');
}
/**
* @url /admin/website/second-column/view
* @param RenderInterface $render
* @return ResponseInterface
*/
#[RequestMapping(path: 'second-column/view', methods: 'get')]
public function secondColumnView(RenderInterface $render): ResponseInterface
{
return $render->render('website/second-column/view');
}
} }

View File

@ -88,7 +88,7 @@ class NewsController extends AbstractController
public function insert() public function insert()
{ {
$model = new NewsFormModel(); $model = new NewsFormModel();
$model->setAttributes($this->request->post(), ['title', 'keywords', 'description', 'cover', 'content', 'platform']); $model->setAttributes($this->request->post(), ['title', 'keywords', 'description', 'cover', 'content', 'platform', 'column1', 'column2']);
$model->insert(); $model->insert();
return $this->response->json(['code' => 0, 'msg' => 'ok']); return $this->response->json(['code' => 0, 'msg' => 'ok']);
} }
@ -104,6 +104,7 @@ class NewsController extends AbstractController
$content = $this->request->post('content', null); $content = $this->request->post('content', null);
$platform = $this->request->post('platform', 0); $platform = $this->request->post('platform', 0);
$column = $this->request->post('column', 0); $column = $this->request->post('column', 0);
$column2 = $this->request->post('column2', 0);
// 随机图片 // 随机图片
$directory = env('COVER_ROOT'); // 文件夹路径 $directory = env('COVER_ROOT'); // 文件夹路径
$images = glob($directory . '/*.{jpg,jpeg,png,gif,bmp}', GLOB_BRACE); // 获取图片文件 $images = glob($directory . '/*.{jpg,jpeg,png,gif,bmp}', GLOB_BRACE); // 获取图片文件
@ -139,6 +140,7 @@ class NewsController extends AbstractController
EOF EOF
]); ]);
$model->column_tag = $column; $model->column_tag = $column;
$model->second_column = $column2;
$model->save(); $model->save();
} }
return $this->response->json(['code' => 0, 'msg' => 'ok']); return $this->response->json(['code' => 0, 'msg' => 'ok']);

View File

@ -3,6 +3,8 @@
namespace App\Controller\admin\api; namespace App\Controller\admin\api;
use App\Controller\AbstractController; use App\Controller\AbstractController;
use App\Model\AppNewsColumn;
use App\Model\AppNewsSecondColumn;
use App\Model\AppWebsiteConfig; use App\Model\AppWebsiteConfig;
use Hyperf\HttpServer\Annotation\Controller; use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\RequestMapping; use Hyperf\HttpServer\Annotation\RequestMapping;
@ -119,4 +121,167 @@ class WebsiteController extends AbstractController
return $this->response->json(['code' => 0, 'msg' => 'ok', 'data' => $query]); return $this->response->json(['code' => 0, 'msg' => 'ok', 'data' => $query]);
} }
/**
* 一级栏目列表
* @url /admin/api/website/first-column
* @return ResponseInterface
*/
#[RequestMapping(path: 'first-column', methods: 'get')]
public function firstColumn(): ResponseInterface
{
$query = AppNewsColumn::query()->where('is_delete', 0)->get()->toArray();
foreach ($query as &$item) {
$item['website'] = AppWebsiteConfig::find($item['website'])->app_name;
}
return $this->response->json([
'code' => 0,
'data' => $query
]);
}
/**
* 新增一级栏目
* @url /admin/api/website/first-column/insert
* @return ResponseInterface
*/
#[RequestMapping(path: 'first-column/insert', methods: 'post')]
public function firstColumnInsert(): ResponseInterface
{
$model = new AppNewsColumn();
$model->name = $this->request->post('name');
$model->website = $this->request->post('website');
$model->url = $this->request->post('url');
$model->desc = $this->request->post('desc');
$model->save();
return $this->response->json([]);
}
/**
* @url /admin/api/website/first-column/view
* @return ResponseInterface
*/
#[RequestMapping(path: 'first-column/view', methods: 'get')]
public function firstColumnView(): ResponseInterface
{
$id = $this->request->input('id');
$query = AppNewsColumn::query()->where(['id' => $id])->first()->toArray();
if (!$query) {
return $this->response->json(['code' => 400, 'msg' => 'id 有误']);
}
return $this->response->json(['code' => 0, 'msg' => 'ok', 'data' => $query]);
}
/**
* @url /admin/api/website/first-column/save
* @return ResponseInterface
*/
#[RequestMapping(path: 'first-column/save', methods: 'post')]
public function firstColumnSave(): ResponseInterface
{
$id = $this->request->post('id');
$query = AppNewsColumn::find($id);
if (!$query) {
return $this->response->json(['code' => 400, 'msg' => 'id 有误']);
}
$query->website = $this->request->post('website');
$query->name = $this->request->post('name');
$query->url = $this->request->post('url');
$query->desc = $this->request->post('desc');
$query->save();
return $this->response->json(['code' => 0, 'msg' => 'ok', 'data' => $query]);
}
/**
* 二级栏目列表
* @url /admin/api/website/second-column
* @return ResponseInterface
*/
#[RequestMapping(path: 'second-column', methods: 'get')]
public function secondColumn(): ResponseInterface
{
$query = AppNewsSecondColumn::query()->where('is_delete', 0);
$pagination = $query->paginate($this->request->input('limit', 10), page: $this->request->input('page'));
$data = $query->get()->toArray();
foreach ($data as &$item) {
$query = AppWebsiteConfig::find($item['website']);
$item['website'] = $query->app_name;
$item['rid'] = AppNewsColumn::find($item['rid'])->name;
}
return $this->response->json([
'code' => 0,
'data' => $data,
'count' => $pagination->total()
]);
}
/**
* 新增二级栏目
* @url /admin/api/website/second-column/insert
* @return ResponseInterface
*/
#[RequestMapping(path: 'second-column/insert', methods: 'post')]
public function secondColumnInsert(): ResponseInterface
{
$model = new AppNewsSecondColumn();
$model->name = $this->request->post('name');
$model->website = $this->request->post('website');
$model->url = $this->request->post('url');
$model->desc = $this->request->post('desc');
$model->rid = $this->request->post('rid');
$model->save();
return $this->response->json([]);
}
/**
* @url /admin/api/website/second-column/view
* @return ResponseInterface
*/
#[RequestMapping(path: 'second-column/view', methods: 'get')]
public function secondColumnView(): ResponseInterface
{
$id = $this->request->input('id');
$query = AppNewsSecondColumn::query()->where(['id' => $id])->first()->toArray();
if (!$query) {
return $this->response->json(['code' => 400, 'msg' => 'id 有误']);
}
return $this->response->json(['code' => 0, 'msg' => 'ok', 'data' => $query]);
}
/**
* @url /admin/api/website/second-column/save
* @return ResponseInterface
*/
#[RequestMapping(path: 'second-column/save', methods: 'post')]
public function secondColumnSave(): ResponseInterface
{
$id = $this->request->post('id');
$query = AppNewsSecondColumn::find($id);
if (!$query) {
return $this->response->json(['code' => 400, 'msg' => 'id 有误']);
}
$query->website = $this->request->post('website');
$query->name = $this->request->post('name');
$query->url = $this->request->post('url');
$query->desc = $this->request->post('desc');
$query->rid = $this->request->post('rid');
$query->save();
return $this->response->json(['code' => 0, 'msg' => 'ok', 'data' => $query]);
}
} }

View File

@ -26,6 +26,10 @@ class NewsFormModel
public function insert() public function insert()
{ {
$model = new AppNews(); $model = new AppNews();
$this->attributes['column_tag'] = $this->attributes['column1'] ?: 0;
$this->attributes['second_column'] = $this->attributes['column2'] ?: 0;
unset($this->attributes['column1']);
unset($this->attributes['column2']);
$model->setRawAttributes($this->attributes); $model->setRawAttributes($this->attributes);
$model->save(); $model->save();
} }
@ -39,6 +43,8 @@ class NewsFormModel
$model->cover = $this->attributes['cover']; $model->cover = $this->attributes['cover'];
$model->content = $this->attributes['content']; $model->content = $this->attributes['content'];
$model->platform = $this->attributes['platform']; $model->platform = $this->attributes['platform'];
$model->column_tag = $this->attributes['column1'] ?: 0;
$model->second_column = $this->attributes['column2'] ?: 0;
$model->save(); $model->save();
} }
} }

View File

@ -24,6 +24,7 @@ namespace App\Model;
* @property string $source_url * @property string $source_url
* @property string $source_platform * @property string $source_platform
* @property int $column_tag * @property int $column_tag
* @property int $second_column
* @property-read mixed $created_at * @property-read mixed $created_at
*/ */
class AppNews extends Model class AppNews extends Model
@ -41,7 +42,7 @@ class AppNews extends Model
/** /**
* The attributes that should be cast to native types. * The attributes that should be cast to native types.
*/ */
protected array $casts = ['id' => 'integer', 'created_at' => 'datetime', 'created_by' => 'integer', 'updated_at' => 'datetime', 'updated_by' => 'integer', 'deleted_at' => 'integer', 'deleted_by' => 'integer', 'platform' => 'integer', 'is_record' => 'integer', 'is_delete' => 'integer', 'column_tag' => 'integer']; protected array $casts = ['id' => 'integer', 'created_at' => 'datetime', 'created_by' => 'integer', 'updated_at' => 'datetime', 'updated_by' => 'integer', 'deleted_at' => 'integer', 'deleted_by' => 'integer', 'platform' => 'integer', 'is_record' => 'integer', 'is_delete' => 'integer', 'column_tag' => 'integer', 'second_column' => 'integer'];
protected ?string $dateFormat = 'U'; protected ?string $dateFormat = 'U';

View File

@ -10,6 +10,13 @@ namespace App\Model;
* @property int $id * @property int $id
* @property string $name * @property string $name
* @property string $url * @property string $url
* @property \Carbon\Carbon $created_at
* @property int $created_by
* @property int $website
* @property int $is_delete
* @property \Carbon\Carbon $updated_at
* @property int $updated_by
* @property string $desc
*/ */
class AppNewsColumn extends Model class AppNewsColumn extends Model
{ {
@ -26,5 +33,5 @@ class AppNewsColumn extends Model
/** /**
* The attributes that should be cast to native types. * The attributes that should be cast to native types.
*/ */
protected array $casts = ['id' => 'integer']; protected array $casts = ['id' => 'integer', 'created_at' => 'datetime', 'created_by' => 'integer', 'website' => 'integer', 'is_delete' => 'integer', 'updated_at' => 'datetime', 'updated_by' => 'integer'];
} }

View File

@ -0,0 +1,38 @@
<?php
declare(strict_types=1);
namespace App\Model;
/**
* @property int $id
* @property string $name
* @property string $url
* @property \Carbon\Carbon $created_at
* @property int $created_by
* @property int $website
* @property int $is_delete
* @property \Carbon\Carbon $updated_at
* @property int $updated_by
* @property string $desc
* @property int $rid
*/
class AppNewsSecondColumn extends Model
{
/**
* The table associated with the model.
*/
protected ?string $table = 'app_news_second_column';
/**
* The attributes that are mass assignable.
*/
protected array $fillable = [];
/**
* The attributes that should be cast to native types.
*/
protected array $casts = ['id' => 'integer', 'created_at' => 'datetime', 'created_by' => 'integer', 'website' => 'integer', 'is_delete' => 'integer', 'updated_at' => 'datetime', 'updated_by' => 'integer', 'rid' => 'integer'];
}

View File

@ -0,0 +1,59 @@
<?php
namespace App\Rpc\v1;
use App\Model\AppNews;
use App\Model\AppNewsColumn;
use App\Model\AppNewsSecondColumn;
use App\Rpc\BaseService;
use Hyperf\RpcServer\Annotation\RpcService;
#[RpcService(name: "column", server: "jsonrpc-http", protocol: "jsonrpc-http")]
class ColumnService extends BaseService
{
/**
* 获取栏目
* @url /column/index
* @param int $app_id
* @return array
*/
public function index(int $app_id = 0): array
{
$resp = $this->getResponse();
if ($app_id) {
$firstColumn = AppNewsColumn::query()->where('website', $app_id)->get()->toArray();
$res = [];
foreach ($firstColumn as $index => &$column) {
$filter = [];
$filter[] = ['column_tag', $column['id']];
$res[] = [
'filter' => $filter,
'desc' => $column['desc'],
'item' => [['title' => $column['name'], 'link' => $column['url']]],
'path' => $column['url'],
];
$second = AppNewsSecondColumn::query()->where('rid', $column['id'])->get()->toArray();
if ($second) {
foreach ($second as $secondCol) {
$appendArr = [];
$appendArr[] = ['title' => $column['name'], 'link' => $column['url']];
$appendArr[] = ['title' => $secondCol['name'], 'link' => $column['url'] . $secondCol['url']];
$filter = [
['column_tag', $column['id']],
['second_column', $secondCol['id']]
];
$res[] = [
'filter' => $filter,
'path' => "{$column['url']}{$secondCol['url']}",
'desc' => $secondCol['desc'],
'item' => $appendArr,
];
}
}
}
return $resp->setCode(200)->setData($res)->send();
}
return $resp->setCode(200)->send();
}
}

View File

@ -4,6 +4,7 @@ namespace App\Rpc\v1;
use App\Model\AppNews; use App\Model\AppNews;
use App\Model\AppNewsColumn; use App\Model\AppNewsColumn;
use App\Model\AppNewsSecondColumn;
use App\Rpc\BaseService; use App\Rpc\BaseService;
use Hyperf\RpcServer\Annotation\RpcService; use Hyperf\RpcServer\Annotation\RpcService;
@ -60,11 +61,16 @@ class NewsService extends BaseService
* @param int $page * @param int $page
* @return array * @return array
*/ */
public function index(int $id, int $limit = 30, int $page = 1): array public function index(int $id, int $limit = 30, int $page = 1, array $filter = []): array
{ {
$query = AppNews::formatQuery(['created_at', 'column_tag']) $query = AppNews::formatQuery(['created_at', 'column_tag'])
->where('is_delete', 0); ->where('is_delete', 0);
if ($filter) {
foreach ($filter as $item) {
$query->where(...$item);
}
}
if (isset(self::RELATION[$id])) { if (isset(self::RELATION[$id])) {
$query->whereIn('platform', self::RELATION[$id]); $query->whereIn('platform', self::RELATION[$id]);
} else { } else {
@ -83,15 +89,24 @@ class NewsService extends BaseService
foreach ($value as &$item) { foreach ($value as &$item) {
$item['created_at'] = date('Y-m-d', $item['created_at']); $item['created_at'] = date('Y-m-d', $item['created_at']);
if ($item['column_tag']) {
$columnTag = AppNewsColumn::find($item['column_tag']); $columnTag = AppNewsColumn::find($item['column_tag']);
$item['column_tag'] = $columnTag->name ?? ''; $item['column_tag'] = $columnTag->name ?? '';
$item['column_tag_url'] = $columnTag->url ?? ''; $item['column_tag_url'] = $columnTag->url ?? '';
if ($item['second_column']) {
$secondColumnTag = AppNewsSecondColumn::find($item['second_column']);
$item['second_column_tag'] = $secondColumnTag->name ?? '';
$item['second_column_tag_url'] = $columnTag->url . $secondColumnTag->url ?? '';
}
}
} }
$hot = AppNews::formatQuery(['created_at']) $hot = AppNews::formatQuery(['created_at'])
->where('platform', $id) ->where('platform', $id)
->where('is_delete', 0) ->where('is_delete', 0)
->select(['title', 'id', 'cover']) ->select(['title', 'id', 'cover', 'created_at'])
->limit(5) ->limit(5)
->orderBy('id', 'desc') ->orderBy('id', 'desc')
->get() ->get()

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -3,8 +3,12 @@ $platforms = call_user_func(function () {
return \App\Model\AppWebsiteConfig::query()->where('is_delete', 0)->get()->toArray(); return \App\Model\AppWebsiteConfig::query()->where('is_delete', 0)->get()->toArray();
}); });
$columnTag = call_user_func(function () { $firstColumn = call_user_func(function () {
return \App\Model\AppNewsColumn::query()->get()->toArray(); return json_encode(\App\Model\AppNewsColumn::query()->where('is_delete', 0)->get()->groupBy('website')->toArray());
});
$secondColumn = call_user_func(function () {
return json_encode(\App\Model\AppNewsSecondColumn::query()->where('is_delete', 0)->get()->groupBy('rid')->toArray());
}); });
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
@ -23,7 +27,7 @@ $columnTag = call_user_func(function () {
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label required">发布平台</label> <label class="layui-form-label required">发布平台</label>
<div class="layui-input-block"> <div class="layui-input-block">
<select name="platform" lay-search=""> <select name="platform" lay-search="" lay-filter="platform">
<option value="">请选择</option> <option value="">请选择</option>
<?php foreach ($platforms ?: [] as $platform): ?> <?php foreach ($platforms ?: [] as $platform): ?>
<option value="<?= $platform['id'] ?>"><?= $platform['app_name'] ?></option> <option value="<?= $platform['id'] ?>"><?= $platform['app_name'] ?></option>
@ -31,19 +35,22 @@ $columnTag = call_user_func(function () {
</select> </select>
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label required">栏目</label> <label class="layui-form-label required">栏目</label>
<div class="layui-input-block"> <div class="layui-input-block">
<select name="column" lay-search=""> <select id="column" name="column" lay-search="" lay-filter="first-column">
<option value="">请选择</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">二级栏目</label>
<div class="layui-input-block">
<select id="second-column" name="column2" lay-search="">
<option value="">请选择</option> <option value="">请选择</option>
<?php foreach ($columnTag ?: [] as $tag): ?>
<option value="<?= $tag['id'] ?>"><?= $tag['name'] ?></option>
<?php endforeach; ?>
</select> </select>
</div> </div>
</div> </div>
<div class="layui-form-item layui-form-text"> <div class="layui-form-item layui-form-text">
<label class="layui-form-label">json数据</label> <label class="layui-form-label">json数据</label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -70,6 +77,41 @@ $columnTag = call_user_func(function () {
layui.use(['upload', 'jquery', 'popup'], function(){ layui.use(['upload', 'jquery', 'popup'], function(){
const upload = layui.upload; const upload = layui.upload;
const $ = layui.jquery; const $ = layui.jquery;
const form = layui.form;
// 站点
form.on('select(platform)', function(data){
const val = data.value
var firstColumn = JSON.parse('<?= $firstColumn ?>')
console.log(firstColumn[val])
let html = '<option value="">请选择</option>'
if (firstColumn[val]) {
firstColumn[val].forEach(item => {
html += `<option value="${item.id}">${item.name}</option>`
})
console.log(html)
}
$('#column').html(html);
form.render('select'); // 重新渲染 select 以应用新的选项和样式
});
// 站点
form.on('select(first-column)', function(data){
const val = data.value
var firstColumn = JSON.parse('<?= $secondColumn ?>')
console.log(firstColumn[val])
let html = '<option value="0">请选择</option>'
if (firstColumn[val]) {
firstColumn[val].forEach(item => {
html += `<option value="${item.id}">${item.name}</option>`
})
console.log(html)
}
$('#second-column').html(html);
form.render('select'); // 重新渲染 select 以应用新的选项和样式
});
layui.form.on("submit(submit)", function (data) { layui.form.on("submit(submit)", function (data) {
layui.$.ajax({ layui.$.ajax({
url: SAVE_API, url: SAVE_API,
@ -77,10 +119,10 @@ $columnTag = call_user_func(function () {
dateType: "json", dateType: "json",
data: data.field, data: data.field,
success: function (res) { success: function (res) {
if (res.code) { if (res.code) {
return layui.popup.failure(res.msg); return layui.popup.failure(res.msg);
} }
return layui.popup.success("操作成功", function () { return layui.popup.success("操作成功", function () {
parent.refreshTable(); parent.refreshTable();
parent.layer.close(parent.layer.getFrameIndex(window.name)); parent.layer.close(parent.layer.getFrameIndex(window.name));

View File

@ -2,6 +2,14 @@
$platforms = call_user_func(function () { $platforms = call_user_func(function () {
return \App\Model\AppWebsiteConfig::query()->where('is_delete', 0)->get()->toArray(); return \App\Model\AppWebsiteConfig::query()->where('is_delete', 0)->get()->toArray();
}); });
$firstColumn = call_user_func(function () {
return json_encode(\App\Model\AppNewsColumn::query()->where('is_delete', 0)->get()->groupBy('website')->toArray());
});
$secondColumn = call_user_func(function () {
return json_encode(\App\Model\AppNewsSecondColumn::query()->where('is_delete', 0)->get()->groupBy('rid')->toArray());
});
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh-cn"> <html lang="zh-cn">
@ -11,7 +19,7 @@ $platforms = call_user_func(function () {
<link rel="stylesheet" href="/component/pear/css/pear.css" /> <link rel="stylesheet" href="/component/pear/css/pear.css" />
<link rel="stylesheet" href="/admin/css/reset.css" /> <link rel="stylesheet" href="/admin/css/reset.css" />
<link <link
href="https://unpkg.com/@wangeditor/editor@latest/dist/css/style.css" href="/component/wangeditor/style.css"
rel="stylesheet" rel="stylesheet"
/> />
</head> </head>
@ -23,7 +31,7 @@ $platforms = call_user_func(function () {
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label required">发布平台</label> <label class="layui-form-label required">发布平台</label>
<div class="layui-input-block"> <div class="layui-input-block">
<select name="platform" lay-search=""> <select name="platform" lay-search="" lay-filter="platform">
<option value="">请选择</option> <option value="">请选择</option>
<?php foreach ($platforms ?: [] as $platform): ?> <?php foreach ($platforms ?: [] as $platform): ?>
<option value="<?= $platform['id'] ?>"><?= $platform['app_name'] ?></option> <option value="<?= $platform['id'] ?>"><?= $platform['app_name'] ?></option>
@ -31,6 +39,22 @@ $platforms = call_user_func(function () {
</select> </select>
</div> </div>
</div> </div>
<div class="layui-form-item">
<label class="layui-form-label required">一级栏目</label>
<div class="layui-input-block">
<select id="first-column" name="column1" lay-search="" lay-filter="first-column">
<option value="">请选择</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">二级栏目</label>
<div class="layui-input-block">
<select id="second-column" name="column2" lay-search="">
<option value="">请选择</option>
</select>
</div>
</div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label required">文章标题</label> <label class="layui-form-label required">文章标题</label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -80,7 +104,7 @@ $platforms = call_user_func(function () {
</form> </form>
<script src="/component/layui/layui.js?v=2.8.12"></script> <script src="/component/layui/layui.js?v=2.8.12"></script>
<script src="/component/pear/pear.js"></script> <script src="/component/pear/pear.js"></script>
<script src="https://unpkg.com/@wangeditor/editor@latest/dist/index.js"></script> <script src="/component/wangeditor/index.js"></script>
<script> <script>
// api // api
const INSERT_API = "/admin/api/news/insert"; // 插入新闻 const INSERT_API = "/admin/api/news/insert"; // 插入新闻
@ -129,6 +153,41 @@ $platforms = call_user_func(function () {
layui.use(['upload', 'jquery'], function(){ layui.use(['upload', 'jquery'], function(){
const upload = layui.upload; const upload = layui.upload;
const $ = layui.jquery; const $ = layui.jquery;
const form = layui.form
// 站点
form.on('select(platform)', function(data){
const val = data.value
var firstColumn = JSON.parse('<?= $firstColumn ?>')
console.log(firstColumn[val])
let html = '<option value="">请选择</option>'
if (firstColumn[val]) {
firstColumn[val].forEach(item => {
html += `<option value="${item.id}">${item.name}</option>`
})
console.log(html)
}
$('#first-column').html(html);
form.render('select'); // 重新渲染 select 以应用新的选项和样式
});
// 站点
form.on('select(first-column)', function(data){
const val = data.value
var firstColumn = JSON.parse('<?= $secondColumn ?>')
console.log(firstColumn[val])
let html = '<option value="0">请选择</option>'
if (firstColumn[val]) {
firstColumn[val].forEach(item => {
html += `<option value="${item.id}">${item.name}</option>`
})
console.log(html)
}
$('#second-column').html(html);
form.render('select'); // 重新渲染 select 以应用新的选项和样式
});
//执行实例 //执行实例
var uploadInst = upload.render({ var uploadInst = upload.render({

View File

@ -2,6 +2,15 @@
$platforms = call_user_func(function () { $platforms = call_user_func(function () {
return \App\Model\AppWebsiteConfig::query()->where('is_delete', 0)->get()->toArray(); return \App\Model\AppWebsiteConfig::query()->where('is_delete', 0)->get()->toArray();
}); });
$firstColumn = call_user_func(function () {
return json_encode(\App\Model\AppNewsColumn::query()->where('is_delete', 0)->get()->groupBy('website')->toArray());
});
$secondColumn = call_user_func(function () {
return json_encode(\App\Model\AppNewsSecondColumn::query()->where('is_delete', 0)->get()->groupBy('rid')->toArray());
});
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="zh-cn"> <html lang="zh-cn">
@ -11,7 +20,7 @@ $platforms = call_user_func(function () {
<link rel="stylesheet" href="/component/pear/css/pear.css" /> <link rel="stylesheet" href="/component/pear/css/pear.css" />
<link rel="stylesheet" href="/admin/css/reset.css" /> <link rel="stylesheet" href="/admin/css/reset.css" />
<link <link
href="https://unpkg.com/@wangeditor/editor@latest/dist/css/style.css" href="/component/wangeditor/style.css"
rel="stylesheet" rel="stylesheet"
/> />
</head> </head>
@ -24,7 +33,7 @@ $platforms = call_user_func(function () {
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label required">发布平台</label> <label class="layui-form-label required">发布平台</label>
<div class="layui-input-block"> <div class="layui-input-block">
<select name="platform" lay-search=""> <select name="platform" lay-search="" lay-filter="platform">
<option value="">请选择</option> <option value="">请选择</option>
<?php foreach ($platforms ?: [] as $platform): ?> <?php foreach ($platforms ?: [] as $platform): ?>
<option value="<?= $platform['id'] ?>"><?= $platform['app_name'] ?></option> <option value="<?= $platform['id'] ?>"><?= $platform['app_name'] ?></option>
@ -32,6 +41,22 @@ $platforms = call_user_func(function () {
</select> </select>
</div> </div>
</div> </div>
<div class="layui-form-item">
<label class="layui-form-label required">一级栏目</label>
<div class="layui-input-block">
<select id="first-column" name="column1" lay-search="" lay-filter="first-column">
<option value="">请选择</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">二级栏目</label>
<div class="layui-input-block">
<select id="second-column" name="column2" lay-search="">
<option value="">请选择</option>
</select>
</div>
</div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label required">文章标题</label> <label class="layui-form-label required">文章标题</label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -81,7 +106,7 @@ $platforms = call_user_func(function () {
</form> </form>
<script src="/component/layui/layui.js?v=2.8.12"></script> <script src="/component/layui/layui.js?v=2.8.12"></script>
<script src="/component/pear/pear.js"></script> <script src="/component/pear/pear.js"></script>
<script src="https://unpkg.com/@wangeditor/editor@latest/dist/index.js"></script> <script src="/component/wangeditor/index.js"></script>
<script> <script>
// api // api
const SAVE_API = "/admin/api/news/update"; // 更新新闻 const SAVE_API = "/admin/api/news/update"; // 更新新闻
@ -131,8 +156,46 @@ $platforms = call_user_func(function () {
layui.use(['upload', 'jquery', 'popup'], function(){ layui.use(['upload', 'jquery', 'popup'], function(){
const upload = layui.upload; const upload = layui.upload;
const $ = layui.jquery; const $ = layui.jquery;
const col1 = JSON.parse('<?= $firstColumn ?>')
const col2 = JSON.parse('<?= $secondColumn ?>')
const form = layui.form
initViewData() initViewData()
// 站点
form.on('select(platform)', function(data){
const val = data.value
var firstColumn = JSON.parse('<?= $firstColumn ?>')
console.log(firstColumn[val])
let html = '<option value="">请选择</option>'
$('#second-column').html(html);
if (firstColumn[val]) {
firstColumn[val].forEach(item => {
html += `<option value="${item.id}">${item.name}</option>`
})
console.log(html)
}
$('#first-column').html(html);
form.render('select'); // 重新渲染 select 以应用新的选项和样式
});
// 站点
form.on('select(first-column)', function(data){
const val = data.value
var firstColumn = JSON.parse('<?= $secondColumn ?>')
console.log(firstColumn[val])
let html = '<option value="0">请选择</option>'
if (firstColumn[val]) {
firstColumn[val].forEach(item => {
html += `<option value="${item.id}">${item.name}</option>`
})
console.log(html)
}
$('#second-column').html(html);
form.render('select'); // 重新渲染 select 以应用新的选项和样式
});
//执行实例 //执行实例
var uploadInst = upload.render({ var uploadInst = upload.render({
@ -211,8 +274,33 @@ $platforms = call_user_func(function () {
$("[name=cover]").val(res.data.cover); $("[name=cover]").val(res.data.cover);
$("select[name=platform]").val(res.data.platform); $("select[name=platform]").val(res.data.platform);
layui.form.render("select");
// 栏目1
$("select[name=column1]").val(res.data.column_tag);
var val = res.data.platform
var html = '<option value="">请选择</option>'
if (col1[val]) {
col1[val].forEach(item => {
html += `<option value="${item.id}">${item.name}</option>`
})
}
$('#first-column').html(html);
$("select[name=column1]").val(res.data.column_tag);
// 栏目2
$("select[name=column2]").val(res.data.second_column);
val = res.data.column_tag
html = '<option value="">请选择</option>'
if (col2[val]) {
col2[val].forEach(item => {
html += `<option value="${item.id}">${item.name}</option>`
})
}
$('#second-column').html(html);
$("select[name=column2]").val(res.data.second_column);
layui.form.render("select");
editor.setHtml(res.data.content) editor.setHtml(res.data.content)
// ajax产生错误 // ajax产生错误

View File

@ -1,408 +0,0 @@
<?php
$articleModule = array_map(fn($case) => [
'label' => ucfirst($case->toString()),
'value' => $case->value,
], \App\Enums\ArticleModuleEnum::cases());
$articlePublishedStatus = array_map(fn($case) => [
'label' => ucfirst($case->toString()),
'value' => $case->value,
], \App\Enums\SpiderArticlePublishedStatusEnum::cases());
?>
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8">
<title>浏览页面</title>
<link rel="stylesheet" href="/component/pear/css/pear.css"/>
<link rel="stylesheet" href="/admin/css/reset.css"/>
<link rel="stylesheet" href="/admin/css/reset.css"/>
</head>
<body class="pear-container">
<!-- 顶部查询表单 -->
<div class="layui-card">
<div class="layui-card-body">
<form class="layui-form top-search-from">
<div class="layui-form-item">
<label class="layui-form-label">文章标题</label>
<div class="layui-input-block">
<input type="text" name="title" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">创建时间</label>
<div class="layui-input-block">
<div class="layui-input-block" id="created_at">
<input type="text" autocomplete="off" value="<?= date('Y-m-d', strtotime('-1 month')) ?>"
name="created_at[]" id="created_at-date-start" class="layui-input inline-block"
placeholder="开始时间">
-
<input type="text" autocomplete="off" value="<?= date('Y-m-d') ?>" name="created_at[]"
id="created_at-date-end" class="layui-input inline-block" placeholder="结束时间">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">文章类型</label>
<div class="layui-input-block">
<select name="module">
<option value="">请选择</option>
<?php foreach ($articleModule as $module): ?>
<option value="<?= $module['value'] ?>"><?= $module['label'] ?></option>
<?php endforeach; ?>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">发布状态</label>
<div class="layui-input-block">
<select name="published_status">
<?php foreach ($articlePublishedStatus as $status): ?>
<option value="<?= $status['value'] ?>"><?= $status['label'] ?></option>
<?php endforeach; ?>
</select>
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label"></label>
<button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="table-query">
<i class="layui-icon layui-icon-search"></i>查询
</button>
<button type="reset" class="pear-btn pear-btn-md" lay-submit lay-filter="table-reset">
<i class="layui-icon layui-icon-refresh"></i>重置
</button>
</div>
<div class="toggle-btn">
<a class="layui-hide">展开<i class="layui-icon layui-icon-down"></i></a>
<a class="layui-hide">收起<i class="layui-icon layui-icon-up"></i></a>
</div>
</form>
</div>
</div>
<!-- 数据表格 -->
<div class="layui-card">
<div class="layui-card-body">
<table id="data-table" lay-filter="data-table"></table>
</div>
</div>
<!-- 表格行工具栏 -->
<script type="text/html" id="table-bar">
<button class="pear-btn pear-btn-xs tool-btn" lay-event="pre-publish">预发布</button>
<button class="pear-btn pear-btn-xs tool-btn" lay-event="edit">预览数据</button>
<button class="pear-btn pear-btn-xs tool-btn" lay-event="delete">删除</button>
</script>
<script src="/component/layui/layui.js?v=2.8.12"></script>
<script src="/component/pear/pear.js"></script>
<script src="/admin/js/permission.js"></script>
<script src="/admin/js/common.js"></script>
<script>
// 相关常量
const PRIMARY_KEY = "id";
const UPDATE_API = "/admin/update";
const DELETE_API = "/admin/delete";
// ----------------------
const UPDATE_URL = "/articles/update";
// page
const VIEW_URL = "/admin/spider-article/view";
// api
const INDEX_API = '/admin/api/spider-article';
const PRE_PUBLISH_API = '/admin/api/spider-article/pre-publish';
// 字段 创建时间 created_at
layui.use(["laydate"], function () {
layui.laydate.render({
elem: "#created_at",
range: ["#created_at-date-start", "#created_at-date-end"],
});
})
// 表格渲染
layui.use(["table", "form", "common", "popup", "util"], function () {
let table = layui.table;
let form = layui.form;
let $ = layui.$;
let common = layui.common;
let util = layui.util;
// 表头参数
let cols = [
{
type: "checkbox"
}, {
title: "文章标题",
field: "title",
}, {
title: "文章类型",
field: "module",
}, {
field:'published_status', title: '发布状态', templet: function(d){
if(d.published_status === '未同步'){
return '<span style="color: red">' + d.published_status + '</span>';
} else {
return '<span style="color: green">' + d.published_status + '</span>';
}
},
// field: "published_status",
}, {
title: "采集时间",
field: "created_at",
}, {
title: "来源链接",
field: "source_url",
}, {
title: "操作",
toolbar: "#table-bar",
align: "center",
fixed: "right",
width: 230,
}
];
// 渲染表格
function render() {
table.render({
elem: "#data-table",
url: INDEX_API,
page: true,
cols: [cols],
skin: "line",
size: "lg",
toolbar: "#table-toolbar",
autoSort: false,
defaultToolbar: [{
title: "刷新",
layEvent: "refresh",
icon: "layui-icon-refresh",
}, "filter", "print", "exports"],
done: function () {
layer.photos({photos: 'div[lay-id="data-table"]', anim: 5});
}
});
}
// 获取表格中下拉或树形组件数据
let apis = [];
apis.push(["roles", "/role/select?format=select"]);
let apiResults = {};
apiResults["roles"] = [];
let count = apis.length;
layui.each(apis, function (k, item) {
let [field, url] = item;
$.ajax({
url: url,
dateType: "json",
success: function (res) {
if (res.code) {
return layui.popup.failure(res.msg);
}
function travel(items) {
for (let k in items) {
let item = items[k];
apiResults[field][item.value] = item.name;
if (item.children) {
travel(item.children);
}
}
}
travel(res.data);
},
complete: function () {
if (--count === 0) {
render();
}
}
});
});
if (!count) {
render();
}
// 编辑或删除行事件
table.on("tool(data-table)", function (obj) {
if (obj.event === "edit") {
edit(obj);
}
if (obj.event === "delete") {
alert('未生效');
}
// 预发布
if (obj.event === 'pre-publish') {
console.log(obj.data.id)
layer.confirm('确定发布吗?', function (index) {
// obj.del(); // 删除对应行tr的 DOM 结构,并更新缓存
// layer.close(index);
let loading = layer.load();
$.ajax({
url: PRE_PUBLISH_API,
data: {
id: obj.data.id
},
dataType: "json",
type: "post",
success: (res) => {
layer.close(index);
if (res.code) {
return layui.popup.failure(res.msg);
}
return layui.popup.success("操作成功", refreshTable);
},
error: function () {
return layui.popup.failure("操作失败");
},
complete: function () {
layer.close(loading);
}
})
// 向后端发送删除请求,执行完毕后,可通过 reloadData 方法完成数据重载
/*
table.reloadData(id, {
scrollPos: 'fixed' // 保持滚动条位置不变 - v2.7.3 新增
});
*/
});
}
});
// 表格顶部工具栏事件
table.on("toolbar(data-table)", function (obj) {
if (obj.event === "add") {
add();
} else if (obj.event === "refresh") {
refreshTable();
} else if (obj.event === "batchRemove") {
batchRemove(obj);
}
});
// 表格顶部搜索事件
form.on("submit(table-query)", function (data) {
table.reload("data-table", {
page: {
curr: 1
},
where: data.field
})
return false;
});
// 表格顶部搜索重置事件
form.on("submit(table-reset)", function (data) {
table.reload("data-table", {
where: []
})
});
// 表格排序事件
table.on("sort(data-table)", function (obj) {
table.reload("data-table", {
initSort: obj,
scrollPos: "fixed",
where: {
field: obj.field,
order: obj.type
}
});
});
// 表格新增数据
let add = function () {
layer.open({
type: 2,
title: "新增",
shade: 0.1,
area: [common.isModile() ? "100%" : "98%", common.isModile() ? "100%" : "95%"],
content: VIEW_URL
});
}
// 表格编辑数据
let edit = function (obj) {
let value = obj.data[PRIMARY_KEY];
layer.open({
type: 2,
title: "预览",
shade: 0.1,
area: [common.isModile() ? "100%" : "98%", common.isModile() ? "100%" : "95%"],
content: VIEW_URL + "?" + PRIMARY_KEY + "=" + value
});
}
// 删除一行
let remove = function (obj) {
return doRemove(obj.data[PRIMARY_KEY]);
}
// 删除多行
let batchRemove = function (obj) {
let checkIds = common.checkField(obj, PRIMARY_KEY);
if (checkIds === "") {
layui.popup.warning("未选中数据");
return false;
}
doRemove(checkIds.split(","));
}
// 执行删除
let doRemove = function (ids) {
let data = {};
data[PRIMARY_KEY] = ids;
layer.confirm("确定删除?", {
icon: 3,
title: "提示"
}, function (index) {
layer.close(index);
let loading = layer.load();
$.ajax({
url: DELETE_API,
data: data,
dataType: "json",
type: "post",
success: function (res) {
layer.close(loading);
if (res.code) {
return layui.popup.failure(res.msg);
}
return layui.popup.success("操作成功", refreshTable);
}
})
});
}
// 刷新表格数据
window.refreshTable = function () {
table.reloadData("data-table", {
scrollPos: "fixed",
done: function (res, curr) {
if (curr > 1 && res.data && !res.data.length) {
curr = curr - 1;
table.reloadData("data-table", {
page: {
curr: curr
},
})
}
}
});
}
})
</script>
</body>
</html>

View File

@ -1,208 +0,0 @@
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>更新页面</title>
<link rel="stylesheet" href="/component/pear/css/pear.css" />
<link rel="stylesheet" href="/admin/css/reset.css" />
<style>
.layui-iconpicker .layui-anim {
bottom: 42px !important;
top: inherit !important;
}
</style>
</head>
<body>
<form class="layui-form">
<div class="mainBox">
<div class="main-container mr-5">
<div class="layui-form-item">
<label class="layui-form-label required">标题</label>
<div class="layui-input-block">
<input type="text" name="title" required lay-verify="required" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">标识</label>
<div class="layui-input-block">
<input type="text" name="key" required lay-verify="required" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">url</label>
<div class="layui-input-block">
<input type="text" name="href" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">上级菜单</label>
<div class="layui-input-block">
<div name="pid" id="pid" value="0" ></div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">图标</label>
<div class="layui-input-block">
<input name="icon" id="icon" />
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">类型</label>
<div class="layui-input-block">
<div name="type" id="type" value="1" ></div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">排序</label>
<div class="layui-input-block">
<input type="number" name="weight" value="0" class="layui-input">
</div>
</div>
</div>
</div>
<div class="bottom">
<div class="button-container">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-md" lay-submit="" lay-filter="save">
提交
</button>
<button type="reset" class="pear-btn pear-btn-md">
重置
</button>
</div>
</div>
</form>
<script src="/component/layui/layui.js?v=2.8.12"></script>
<script src="/component/pear/pear.js"></script>
<script src="/admin/js/permission.js"></script>
<script>
// 相关接口
let PRIMARY_KEY = "id";
const VIEW_API = "/admin/api/menu/view" + location.search;
const UPDATE_API = "/admin/api/menu/update";
// 获取行数据
layui.use(["form", "util", "popup"], function () {
let $ = layui.$;
$.ajax({
url: VIEW_API,
dataType: "json",
success: function (res) {
// 赋值表单
layui.each(res.data, function (key, value) {
let obj = $('*[name="'+key+'"]');
// if (key === "password") {
// obj.attr("placeholder", "不更新密码请留空");
// return;
// }
if (typeof obj[0] === "undefined" || !obj[0].nodeName) return;
if (obj[0].nodeName.toLowerCase() === "textarea") {
obj.html(layui.util.escape(value));
} else {
obj.attr("value", value);
}
});
// 图标选择
layui.use(["iconPicker"], function() {
layui.iconPicker.render({
elem: "#icon",
type: "fontClass",
page: false,
});
});
// 获取上级菜单
layui.use(["jquery", "xmSelect", "popup"], function() {
layui.$.ajax({
url: "/admin/api/menu/list?format=tree&type=0,1",
dataType: "json",
success: function (res) {
let value = layui.$("#pid").attr("value");
console.log(value)
let initValue = value ? value.split(",") : [];
layui.xmSelect.render({
el: "#pid",
name: "pid",
initValue: initValue,
tips: "",
toolbar: {show: true, list: ["CLEAR"]},
data: res.data,
model: {"icon":"hidden","label":{"type":"text"}},
clickClose: true,
radio: true,
tree: {show: true,"strict":false,"clickCheck":true,"clickExpand":false,expandedKeys: initValue},
});
if (res.code) {
return layui.popup.failure(res.msg);
}
}
});
});
// 菜单类型下拉选择
layui.use(["jquery", "xmSelect"], function() {
let value = layui.$("#type").attr("value");
let initValue = value ? value.split(",") : [];
layui.xmSelect.render({
el: "#type",
name: "type",
initValue: initValue,
data: [{"value":"0","name":"目录"},{"value":"1","name":"菜单"},{"value":"2","name":"权限"}],
model: {"icon":"hidden","label":{"type":"text"}},
clickClose: true,
radio: true,
})
});
// ajax产生错误
if (res.code) {
layui.popup.failure(res.msg);
}
}
});
});
// 提交事件
layui.use(["form", "popup"], function () {
layui.form.on("submit(save)", function (data) {
data.field[PRIMARY_KEY] = layui.url().search[PRIMARY_KEY];
layui.$.ajax({
url: UPDATE_API,
type: "POST",
dateType: "json",
data: data.field,
success: function (res) {
if (res.code) {
return layui.popup.failure(res.msg);
}
return layui.popup.success("操作成功", function () {
parent.refreshTable();
parent.layer.close(parent.layer.getFrameIndex(window.name));
});
}
});
return false;
});
});
</script>
</body>
</html>

View File

@ -1,151 +0,0 @@
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>更新页面</title>
<link rel="stylesheet" href="/component/pear/css/pear.css" />
<link rel="stylesheet" href="/admin/css/reset.css" />
<style>
.layui-iconpicker .layui-anim {
bottom: 42px !important;
top: inherit !important;
}
</style>
</head>
<body>
<form class="layui-form">
<div class="mainBox">
<div class="main-container mr-5">
<div class="layui-form-item">
<label class="layui-form-label required">标题</label>
<div class="layui-input-block">
<input type="text" name="title" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">品牌名称</label>
<div class="layui-input-block">
<input type="text" name="brand" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">源数据</label>
<div class="layui-input-block">
<input type="text" name="source_url" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">类型</label>
<div class="layui-input-block">
<input type="text" name="module" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">图集</label>
<div class="layui-input-block">
<div id="images"></div>
</div>
</div>
</div>
</div>
</form>
<style>
.images-item {
display: flex;
align-items: center;
}
</style>
<script id="ID-demo-tpl" type="text/html">
<div class="layui-col-space1" style="display:grid;grid-template-columns: auto auto auto;">
@{{# d.forEach(function(item) { }}
<div class="images-item">
<img loading="lazy" style="width: 100%" src="@{{= item.src }}" >
</div>
@{{# }); }}
</div>
</script>
<script src="/component/layui/layui.js?v=2.8.12"></script>
<script src="/component/pear/pear.js"></script>
<script>
// 相关接口
let PRIMARY_KEY = "id";
// api
const VIEW_API = "/admin/api/spider-article/view"
const UPDATE_API = "/admin/api/menu/update";
// 获取行数据
layui.use(["form", "util", "popup"], function () {
let viewId = layui.url().search['id']
let $ = layui.$;
$.ajax({
url: VIEW_API,
data: {
id: viewId
},
method: 'get',
dataType: "json",
success: function (res) {
// 赋值表单
layui.each(res.data, function (key, value) {
let obj = $('*[name="'+key+'"]');
// if (key === "password") {
// obj.attr("placeholder", "不更新密码请留空");
// return;
// }
if (typeof obj[0] === "undefined" || !obj[0].nodeName) return;
if (obj[0].nodeName.toLowerCase() === "textarea") {
obj.html(layui.util.escape(value));
} else {
obj.attr("value", value);
}
});
// 图标选择
layui.use(["iconPicker"], function() {
layui.iconPicker.render({
elem: "#icon",
type: "fontClass",
page: false,
});
});
renderImages(res.data.images);
// ajax产生错误
if (res.code) {
layui.popup.failure(res.msg);
}
}
});
});
// 渲染图集
function renderImages(images) {
var laytpl = layui.laytpl;
var template = document.getElementById('ID-demo-tpl').innerHTML; // 获取模板字符
var target = document.getElementById('images'); // 输出结果的目标元素
// 渲染并输出结果
laytpl(template).render(images, function(html) {
target.innerHTML = html;
});
}
</script>
</body>
</html>

View File

@ -0,0 +1,205 @@
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8">
<title>一级菜单设置</title>
<link rel="stylesheet" href="/component/pear/css/pear.css"/>
<link rel="stylesheet" href="/admin/css/reset.css"/>
<link rel="stylesheet" href="/admin/css/reset.css"/>
</head>
<body class="pear-container">
<!-- 顶部查询表单 -->
<div class="layui-card">
<div class="layui-card-body">
<form class="layui-form top-search-from">
<div class="layui-form-item">
<label class="layui-form-label">栏目名称</label>
<div class="layui-input-block">
<input type="text" name="mobile" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label"></label>
<button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="table-query">
<i class="layui-icon layui-icon-search"></i>查询
</button>
<button type="reset" class="pear-btn pear-btn-md" lay-submit lay-filter="table-reset">
<i class="layui-icon layui-icon-refresh"></i>重置
</button>
</div>
<div class="toggle-btn">
<a class="layui-hide">展开<i class="layui-icon layui-icon-down"></i></a>
<a class="layui-hide">收起<i class="layui-icon layui-icon-up"></i></a>
</div>
</form>
</div>
</div>
<!-- 数据表格 -->
<div class="layui-card">
<div class="layui-card-body">
<table id="data-table" lay-filter="data-table"></table>
</div>
</div>
<!-- 表格顶部工具栏 -->
<script type="text/html" id="table-toolbar">
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="add">
<i class="layui-icon layui-icon-add-1"></i>新增
</button>
</script>
<!-- 表格行工具栏 -->
<script type="text/html" id="table-bar">
<button class="pear-btn pear-btn-xs tool-btn" lay-event="edit">编辑</button>
</script>
<script src="/component/layui/layui.js?v=2.8.12"></script>
<script src="/component/pear/pear.js"></script>
<script src="/admin/js/permission.js"></script>
<script src="/admin/js/common.js"></script>
<script>
// 相关常量
const PRIMARY_KEY = "id";
const INDEX_API = '/admin/api/website/first-column';
const VIEW_API = "/admin/api/website/first-column/view";
const VIEW_URL = "/admin/website/first-column/view";
const INSERT_API = "/admin/api/website/first-column/insert";
const INSERT_URL = "/admin/website/first-column/insert";
// 字段 创建时间 created_at
layui.use(["laydate"], function () {
layui.laydate.render({
elem: "#created_at",
range: ["#created_at-date-start", "#created_at-date-end"],
});
})
// 表格渲染
layui.use(["table", "form", "common", "popup", "util"], function () {
let table = layui.table;
let form = layui.form;
let $ = layui.$;
let common = layui.common;
let util = layui.util;
// 表头参数
let cols = [
{
type: "checkbox"
}, {
title: "所属网站",
field: "website",
},{
title: "栏目名称",
field: "name",
}, {
title: "操作",
toolbar: "#table-bar",
align: "center",
fixed: "right",
width: 230,
}
];
// 渲染表格
function render() {
table.render({
elem: "#data-table",
url: INDEX_API,
page: true,
cols: [cols],
skin: "line",
size: "lg",
toolbar: "#table-toolbar",
autoSort: false,
defaultToolbar: [{
title: "刷新",
layEvent: "refresh",
icon: "layui-icon-refresh",
}, "filter", "print", "exports"],
done: function () {
layer.photos({photos: 'div[lay-id="data-table"]', anim: 5});
}
});
}
render();
// 编辑或删除行事件
table.on("tool(data-table)", function (obj) {
if (obj.event === "edit") {
edit(obj);
}
});
// 表格顶部工具栏事件
table.on("toolbar(data-table)", function (obj) {
if (obj.event === "add") {
add();
}
});
// 表格新增数据
let add = function () {
layer.open({
type: 2,
title: "新增",
shade: 0.1,
area: [common.isModile() ? "100%" : "98%", common.isModile() ? "100%" : "95%"],
content: INSERT_URL
});
}
// 表格编辑数据
let edit = function (obj) {
let value = obj.data['id'];
layer.open({
type: 2,
title: "修改",
shade: 0.1,
area: [common.isModile() ? "100%" : "98%", common.isModile() ? "100%" : "95%"],
content: VIEW_URL + "?" + PRIMARY_KEY + "=" + value
});
}
// 删除一行
let remove = function (obj) {
return doRemove(obj.data[PRIMARY_KEY]);
}
// 删除多行
let batchRemove = function (obj) {
let checkIds = common.checkField(obj, PRIMARY_KEY);
if (checkIds === "") {
layui.popup.warning("未选中数据");
return false;
}
doRemove(checkIds.split(","));
}
// 刷新表格数据
window.refreshTable = function () {
table.reloadData("data-table", {
scrollPos: "fixed",
done: function (res, curr) {
if (curr > 1 && res.data && !res.data.length) {
curr = curr - 1;
table.reloadData("data-table", {
page: {
curr: curr
},
})
}
}
});
}
})
</script>
</body>
</html>

View File

@ -0,0 +1,90 @@
<?php
$platforms = call_user_func(function () {
return \App\Model\AppWebsiteConfig::query()->where('is_delete', 0)->get()->toArray();
});
?>
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>insert</title>
<link rel="stylesheet" href="/component/pear/css/pear.css" />
<link rel="stylesheet" href="/admin/css/reset.css" />
</head>
<body>
<form class="layui-form" action="">
<div class="main-container mr-5">
<div class="layui-form-item">
<label class="layui-form-label required">发布平台</label>
<div class="layui-input-block">
<select name="website" lay-search="">
<option value="">请选择</option>
<?php foreach ($platforms ?: [] as $platform): ?>
<option value="<?= $platform['id'] ?>"><?= $platform['app_name'] ?></option>
<?php endforeach; ?>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">栏目名称</label>
<div class="layui-input-block">
<input type="text" name="name" value="" required lay-verify="required" class="layui-input" autocomplete="off">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">栏目地址</label>
<div class="layui-input-block">
<input type="text" name="url" value="" required lay-verify="required" class="layui-input" autocomplete="off">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">栏目描述</label>
<div class="layui-input-block">
<input type="text" name="desc" value="" required lay-verify="required" class="layui-input" autocomplete="off">
</div>
</div>
<div class="layui-form-item">
<div class="button-container">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-md" lay-submit="" lay-filter="insert">
提交
</button>
</div>
</div>
</div>
</form>
<script src="/component/layui/layui.js?v=2.8.12"></script>
<script src="/component/pear/pear.js"></script>
<script>
// api
const INSERT_API = "/admin/api/website/first-column/insert";
const UPLOAD_API = '/upload/image' // 上传图片
layui.use(['upload', 'jquery', 'popup'], function(){
const $ = layui.jquery;
const upload = layui.upload;
layui.form.on("submit(insert)", function (data) {
console.log(data)
layui.$.ajax({
url: INSERT_API,
type: "POST",
dateType: "json",
data: data.field,
success: function (res) {
if (res.code) {
return layui.popup.failure(res.msg);
}
return layui.popup.success("操作成功", function () {
parent.refreshTable();
parent.layer.close(parent.layer.getFrameIndex(window.name));
});
}
});
return false;
});
});
</script>
</body>
</html>

View File

@ -0,0 +1,127 @@
<?php
$platforms = call_user_func(function () {
return \App\Model\AppWebsiteConfig::query()->where('is_delete', 0)->get()->toArray();
});
?>
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>更新</title>
<link rel="stylesheet" href="/component/pear/css/pear.css" />
<link rel="stylesheet" href="/admin/css/reset.css" />
</head>
<body>
<form class="layui-form" action="">
<input type="hidden" name="id" autocomplete="off">
<div class="main-container mr-5">
<div class="layui-form-item">
<label class="layui-form-label required">发布平台</label>
<div class="layui-input-block">
<select name="website" lay-search="">
<option value="">请选择</option>
<?php foreach ($platforms ?: [] as $platform): ?>
<option value="<?= $platform['id'] ?>"><?= $platform['app_name'] ?></option>
<?php endforeach; ?>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">栏目名称</label>
<div class="layui-input-block">
<input type="text" name="name" value="" required lay-verify="required" class="layui-input" autocomplete="off">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">栏目地址</label>
<div class="layui-input-block">
<input type="text" name="url" value="" required lay-verify="required" class="layui-input" autocomplete="off">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">栏目描述</label>
<div class="layui-input-block">
<input type="text" name="desc" value="" required lay-verify="required" class="layui-input" autocomplete="off">
</div>
</div>
<div class="layui-form-item">
<div class="button-container">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-md" lay-submit="" lay-filter="save">
提交
</button>
</div>
</div>
</div>
</form>
<div id="test"></div>
<script src="/component/layui/layui.js?v=2.8.12"></script>
<script src="/component/pear/pear.js"></script>
<script>
// API
const VIEW_API = "/admin/api/website/first-column/view"; // 获取关键词数据
const SAVE_API = "/admin/api/website/first-column/save"; // 重新保存数据
const UPLOAD_API = '/upload/image' // 上传图片
layui.use(['upload', 'jquery', 'popup', 'form'], function(){
const $ = layui.jquery;
layui.form.on("submit(save)", function (data) {
layui.$.ajax({
url: SAVE_API,
type: "POST",
dateType: "json",
data: data.field,
success: function (res) {
if (res.code) {
return layui.popup.failure(res.msg);
}
return layui.popup.success("操作成功", function () {
parent.refreshTable();
parent.layer.close(parent.layer.getFrameIndex(window.name));
});
}
});
return false;
});
initViewData()
function initViewData() {
let viewId = layui.url().search['id']
$.ajax({
url: VIEW_API,
data: {
id: viewId
},
method: 'get',
dataType: "json",
success: function (res) {
// ajax产生错误
if (res.code) {
layui.popup.failure(res.msg);
}
// 赋值表单
layui.each(res.data, function (key, value) {
let obj = $('*[name="'+key+'"]');
// if (key === "password") {
// obj.attr("placeholder", "不更新密码请留空");
// return;
// }
if (typeof obj[0] === "undefined" || !obj[0].nodeName) return;
if (obj[0].nodeName.toLowerCase() === "textarea") {
obj.html(layui.util.escape(value));
} else {
obj.attr("value", value);
}
});
$("select[name=website]").val(res.data.website);
layui.form.render("select");
}
});
}
});
</script>
</body>
</html>

View File

@ -62,14 +62,14 @@
<input type="text" name="app_filing_url" autocomplete="off" lay-affix="clear" class="layui-input"> <input type="text" name="app_filing_url" autocomplete="off" lay-affix="clear" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> {{-- <div class="layui-form-item">--}}
<label class="layui-form-label">模板</label> {{-- <label class="layui-form-label">模板</label>--}}
<div class="layui-input-inline layui-input-wrap"> {{-- <div class="layui-input-inline layui-input-wrap">--}}
<input type="radio" name="template" value="2" title="模板2"> {{-- <input type="radio" name="template" value="2" title="模板2">--}}
<input type="radio" name="template" value="3" title="模板3"> {{-- <input type="radio" name="template" value="3" title="模板3">--}}
{{-- <input type="radio" name="sex" value="nv" title="" checked>--}} {{-- --}}{{-- <input type="radio" name="sex" value="nv" title="" checked>--}}
</div> {{-- </div>--}}
</div> {{-- </div>--}}
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">百度站长验证</label> <label class="layui-form-label">百度站长验证</label>
<div class="layui-input-inline layui-input-wrap"> <div class="layui-input-inline layui-input-wrap">

View File

@ -0,0 +1,208 @@
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8">
<title>一级菜单设置</title>
<link rel="stylesheet" href="/component/pear/css/pear.css"/>
<link rel="stylesheet" href="/admin/css/reset.css"/>
<link rel="stylesheet" href="/admin/css/reset.css"/>
</head>
<body class="pear-container">
<!-- 顶部查询表单 -->
<div class="layui-card">
<div class="layui-card-body">
<form class="layui-form top-search-from">
<div class="layui-form-item">
<label class="layui-form-label">栏目名称</label>
<div class="layui-input-block">
<input type="text" name="mobile" value="" class="layui-input">
</div>
</div>
<div class="layui-form-item layui-inline">
<label class="layui-form-label"></label>
<button class="pear-btn pear-btn-md pear-btn-primary" lay-submit lay-filter="table-query">
<i class="layui-icon layui-icon-search"></i>查询
</button>
<button type="reset" class="pear-btn pear-btn-md" lay-submit lay-filter="table-reset">
<i class="layui-icon layui-icon-refresh"></i>重置
</button>
</div>
<div class="toggle-btn">
<a class="layui-hide">展开<i class="layui-icon layui-icon-down"></i></a>
<a class="layui-hide">收起<i class="layui-icon layui-icon-up"></i></a>
</div>
</form>
</div>
</div>
<!-- 数据表格 -->
<div class="layui-card">
<div class="layui-card-body">
<table id="data-table" lay-filter="data-table"></table>
</div>
</div>
<!-- 表格顶部工具栏 -->
<script type="text/html" id="table-toolbar">
<button class="pear-btn pear-btn-primary pear-btn-md" lay-event="add">
<i class="layui-icon layui-icon-add-1"></i>新增
</button>
</script>
<!-- 表格行工具栏 -->
<script type="text/html" id="table-bar">
<button class="pear-btn pear-btn-xs tool-btn" lay-event="edit">编辑</button>
</script>
<script src="/component/layui/layui.js?v=2.8.12"></script>
<script src="/component/pear/pear.js"></script>
<script src="/admin/js/permission.js"></script>
<script src="/admin/js/common.js"></script>
<script>
// 相关常量
const PRIMARY_KEY = "id";
const INDEX_API = '/admin/api/website/second-column';
const VIEW_API = "/admin/api/website/second-column/view";
const VIEW_URL = "/admin/website/second-column/view";
const INSERT_API = "/admin/api/website/second-column/insert";
const INSERT_URL = "/admin/website/second-column/insert";
// 字段 创建时间 created_at
layui.use(["laydate"], function () {
layui.laydate.render({
elem: "#created_at",
range: ["#created_at-date-start", "#created_at-date-end"],
});
})
// 表格渲染
layui.use(["table", "form", "common", "popup", "util"], function () {
let table = layui.table;
let form = layui.form;
let $ = layui.$;
let common = layui.common;
let util = layui.util;
// 表头参数
let cols = [
{
type: "checkbox"
},{
title: "所属网站",
field: "website",
},{
title: "一级栏目",
field: "rid",
},{
title: "二级栏目名称",
field: "name",
}, {
title: "操作",
toolbar: "#table-bar",
align: "center",
fixed: "right",
width: 230,
}
];
// 渲染表格
function render() {
table.render({
elem: "#data-table",
url: INDEX_API,
page: true,
cols: [cols],
skin: "line",
size: "lg",
toolbar: "#table-toolbar",
autoSort: false,
defaultToolbar: [{
title: "刷新",
layEvent: "refresh",
icon: "layui-icon-refresh",
}, "filter", "print", "exports"],
done: function () {
layer.photos({photos: 'div[lay-id="data-table"]', anim: 5});
}
});
}
render();
// 编辑或删除行事件
table.on("tool(data-table)", function (obj) {
if (obj.event === "edit") {
edit(obj);
}
});
// 表格顶部工具栏事件
table.on("toolbar(data-table)", function (obj) {
if (obj.event === "add") {
add();
}
});
// 表格新增数据
let add = function () {
layer.open({
type: 2,
title: "新增",
shade: 0.1,
area: [common.isModile() ? "100%" : "98%", common.isModile() ? "100%" : "95%"],
content: INSERT_URL
});
}
// 表格编辑数据
let edit = function (obj) {
let value = obj.data['id'];
layer.open({
type: 2,
title: "修改",
shade: 0.1,
area: [common.isModile() ? "100%" : "98%", common.isModile() ? "100%" : "95%"],
content: VIEW_URL + "?" + PRIMARY_KEY + "=" + value
});
}
// 删除一行
let remove = function (obj) {
return doRemove(obj.data[PRIMARY_KEY]);
}
// 删除多行
let batchRemove = function (obj) {
let checkIds = common.checkField(obj, PRIMARY_KEY);
if (checkIds === "") {
layui.popup.warning("未选中数据");
return false;
}
doRemove(checkIds.split(","));
}
// 刷新表格数据
window.refreshTable = function () {
table.reloadData("data-table", {
scrollPos: "fixed",
done: function (res, curr) {
if (curr > 1 && res.data && !res.data.length) {
curr = curr - 1;
table.reloadData("data-table", {
page: {
curr: curr
},
})
}
}
});
}
})
</script>
</body>
</html>

View File

@ -0,0 +1,120 @@
<?php
$platforms = call_user_func(function () {
return \App\Model\AppWebsiteConfig::query()->where('is_delete', 0)->get()->toArray();
});
$firstColumn = call_user_func(function () {
return json_encode(\App\Model\AppNewsColumn::query()->where('is_delete', 0)->get()->groupBy('website')->toArray());
});
?>
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>insert</title>
<link rel="stylesheet" href="/component/pear/css/pear.css" />
<link rel="stylesheet" href="/admin/css/reset.css" />
</head>
<body>
<form class="layui-form" action="">
<div class="main-container mr-5">
<div class="layui-form-item">
<label class="layui-form-label required">平台</label>
<div class="layui-input-block">
<select id="website" name="website" lay-search="" lay-filter="website">
<option value="">请选择</option>
<?php foreach ($platforms ?: [] as $platform): ?>
<option value="<?= $platform['id'] ?>"><?= $platform['app_name'] ?></option>
<?php endforeach; ?>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">一级栏目</label>
<div class="layui-input-block">
<select id="first-column" name="rid" lay-search="" lay-filter="first-column">
<option value="">请选择</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">栏目名称</label>
<div class="layui-input-block">
<input type="text" name="name" value="" required lay-verify="required" class="layui-input" autocomplete="off">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">栏目地址</label>
<div class="layui-input-block">
<input type="text" name="url" value="" required lay-verify="required" class="layui-input" autocomplete="off">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">栏目描述</label>
<div class="layui-input-block">
<input type="text" name="desc" value="" required lay-verify="required" class="layui-input" autocomplete="off">
</div>
</div>
<div class="layui-form-item">
<div class="button-container">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-md" lay-submit="" lay-filter="insert">
提交
</button>
</div>
</div>
</div>
</form>
<script src="/component/layui/layui.js?v=2.8.12"></script>
<script src="/component/pear/pear.js"></script>
<script>
// api
const INSERT_API = "/admin/api/website/second-column/insert";
const UPLOAD_API = '/upload/image' // 上传图片
layui.use(['upload', 'jquery', 'popup', 'form'], function(){
const $ = layui.jquery;
const form = layui.form;
// 站点
form.on('select(website)', function(data){
const val = data.value
var firstColumn = JSON.parse('<?= $firstColumn ?>')
console.log(firstColumn[val])
let html = '<option value="">请选择</option>'
if (firstColumn[val]) {
firstColumn[val].forEach(item => {
html += `<option value="${item.id}">${item.name}</option>`
})
console.log(html)
}
$('#first-column').html(html);
form.render('select'); // 重新渲染 select 以应用新的选项和样式
});
layui.form.on("submit(insert)", function (data) {
console.log(data)
layui.$.ajax({
url: INSERT_API,
type: "POST",
dateType: "json",
data: data.field,
success: function (res) {
if (res.code) {
return layui.popup.failure(res.msg);
}
return layui.popup.success("操作成功", function () {
parent.refreshTable();
parent.layer.close(parent.layer.getFrameIndex(window.name));
});
}
});
return false;
});
});
</script>
</body>
</html>

View File

@ -0,0 +1,166 @@
<?php
$platforms = call_user_func(function () {
return \App\Model\AppWebsiteConfig::query()->where('is_delete', 0)->get()->toArray();
});
$firstColumn = call_user_func(function () {
return json_encode(\App\Model\AppNewsColumn::query()->where('is_delete', 0)->get()->groupBy('website')->toArray());
});
?>
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>更新</title>
<link rel="stylesheet" href="/component/pear/css/pear.css" />
<link rel="stylesheet" href="/admin/css/reset.css" />
</head>
<body>
<form class="layui-form" action="">
<input type="hidden" name="id" autocomplete="off">
<div class="main-container mr-5">
<div class="layui-form-item">
<label class="layui-form-label required">平台</label>
<div class="layui-input-block">
<select name="website" lay-search="" lay-filter="website">
<option value="">请选择</option>
<?php foreach ($platforms ?: [] as $platform): ?>
<option value="<?= $platform['id'] ?>"><?= $platform['app_name'] ?></option>
<?php endforeach; ?>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">一级栏目</label>
<div class="layui-input-block">
<select id="first-column" name="rid" lay-search="" lay-filter="first-column">
<option value="">请选择</option>
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">栏目名称</label>
<div class="layui-input-block">
<input type="text" name="name" value="" required lay-verify="required" class="layui-input" autocomplete="off">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">栏目地址</label>
<div class="layui-input-block">
<input type="text" name="url" value="" required lay-verify="required" class="layui-input" autocomplete="off">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label required">栏目描述</label>
<div class="layui-input-block">
<input type="text" name="desc" value="" required lay-verify="required" class="layui-input" autocomplete="off">
</div>
</div>
<div class="layui-form-item">
<div class="button-container">
<button type="submit" class="pear-btn pear-btn-primary pear-btn-md" lay-submit="" lay-filter="save">
提交
</button>
</div>
</div>
</div>
</form>
<div id="test"></div>
<script src="/component/layui/layui.js?v=2.8.12"></script>
<script src="/component/pear/pear.js"></script>
<script>
// API
const VIEW_API = "/admin/api/website/second-column/view"; // 获取关键词数据
const SAVE_API = "/admin/api/website/second-column/save"; // 重新保存数据
const UPLOAD_API = '/upload/image' // 上传图片
layui.use(['upload', 'jquery', 'popup', 'form'], function(){
const $ = layui.jquery;
const form = layui.form
const col = JSON.parse('<?= $firstColumn ?>')
layui.form.on("submit(save)", function (data) {
layui.$.ajax({
url: SAVE_API,
type: "POST",
dateType: "json",
data: data.field,
success: function (res) {
if (res.code) {
return layui.popup.failure(res.msg);
}
return layui.popup.success("操作成功", function () {
parent.refreshTable();
parent.layer.close(parent.layer.getFrameIndex(window.name));
});
}
});
return false;
});
// 站点
form.on('select(website)', function(data){
const val = data.value
let html = '<option value="">请选择</option>'
if (col[val]) {
col[val].forEach(item => {
html += `<option value="${item.id}">${item.name}</option>`
})
}
$('#first-column').html(html);
form.render('select'); // 重新渲染 select 以应用新的选项和样式
});
initViewData()
function initViewData() {
let viewId = layui.url().search['id']
$.ajax({
url: VIEW_API,
data: {
id: viewId
},
method: 'get',
dataType: "json",
success: function (res) {
// ajax产生错误
if (res.code) {
layui.popup.failure(res.msg);
}
// 赋值表单
layui.each(res.data, function (key, value) {
let obj = $('*[name="'+key+'"]');
// if (key === "password") {
// obj.attr("placeholder", "不更新密码请留空");
// return;
// }
if (typeof obj[0] === "undefined" || !obj[0].nodeName) return;
if (obj[0].nodeName.toLowerCase() === "textarea") {
obj.html(layui.util.escape(value));
} else {
obj.attr("value", value);
}
});
$("select[name=website]").val(res.data.website);
const val = res.data.website
let html = '<option value="">请选择</option>'
if (col[val]) {
col[val].forEach(item => {
html += `<option value="${item.id}">${item.name}</option>`
})
}
$('#first-column').html(html);
$("select[name=rid]").val(res.data.rid);
layui.form.render("select");
}
});
}
});
</script>
</body>
</html>

View File

@ -69,14 +69,14 @@
<input type="text" name="app_baidu_zhanzhang" autocomplete="off" lay-affix="clear" class="layui-input"> <input type="text" name="app_baidu_zhanzhang" autocomplete="off" lay-affix="clear" class="layui-input">
</div> </div>
</div> </div>
<div class="layui-form-item"> {{-- <div class="layui-form-item">--}}
<label class="layui-form-label">模板</label> {{-- <label class="layui-form-label">模板</label>--}}
<div class="layui-input-inline layui-input-wrap"> {{-- <div class="layui-input-inline layui-input-wrap">--}}
<input type="radio" name="template" value="2" title="模板2"> {{-- <input type="radio" name="template" value="2" title="模板2">--}}
<input type="radio" name="template" value="3" title="模板3"> {{-- <input type="radio" name="template" value="3" title="模板3">--}}
{{-- <input type="radio" name="sex" value="nv" title="" checked>--}} {{-- <input type="radio" name="sex" value="nv" title="" checked>--}}
</div> {{-- </div>--}}
</div> {{-- </div>--}}
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">extra_tag</label> <label class="layui-form-label">extra_tag</label>
<div class="layui-input-inline layui-input-wrap"> <div class="layui-input-inline layui-input-wrap">