feat: new chain

This commit is contained in:
hashbro
2026-08-11 02:26:43 +08:00
parent ec2d9f2308
commit 9bf769b2bd
56 changed files with 3806 additions and 325 deletions
+36 -2
View File
@@ -84,13 +84,16 @@
@push('scripts')
<script>
layui.use(['table', 'form', 'laydate'], function () {
layui.use(['table', 'form', 'laydate', 'layer'], function () {
var table = layui.table;
var form = layui.form;
var laydate = layui.laydate;
var layer = layui.layer;
var $ = layui.$;
var dash = function (v) { return v ? v : '—'; };
var portal = @json($portal);
var token = @json(csrf_token());
var updateBase = @json(url('/'.$portal.'/devices'));
laydate.render({ elem: '#LAY-device-installed-from', type: 'date' });
laydate.render({ elem: '#LAY-device-installed-to', type: 'date' });
@@ -108,6 +111,11 @@ layui.use(['table', 'form', 'laydate'], function () {
{ field: 'device_model', title: '设备型号', width: 130, sort: true, templet: function (d) { return dash(d.device_model); } },
{ field: 'ios_version', title: 'iOS 版本', width: 110, sort: true, templet: function (d) { return dash(d.ios_version); } },
{ field: 'ip', title: 'IP', width: 140, sort: true, templet: function (d) { return dash(d.ip); } },
{ field: 'album_storage', title: '相册存储', width: 110, templet: function (d) {
var on = Number(d.album_storage) === 1;
return '<input type="checkbox" lay-skin="switch" lay-text="开|关" lay-filter="LAY-device-album-list"' +
' data-id="' + d.id + '"' + (on ? ' checked' : '') + '>';
} },
{ field: 'created_at', title: '安装时间', width: 170, sort: true },
{ field: 'updated_at', title: '更新时间', width: 170, sort: true },
{ title: '操作', width: 100, align: 'center', fixed: 'right', toolbar: '#LAY-device-ops' }
@@ -118,7 +126,33 @@ layui.use(['table', 'form', 'laydate'], function () {
height: 'full-220',
text: { none: '暂无设备' },
request: { pageName: 'page', limitName: 'limit' },
response: { statusName: 'code', statusCode: 0, msgName: 'msg', countName: 'count', dataName: 'data' }
response: { statusName: 'code', statusCode: 0, msgName: 'msg', countName: 'count', dataName: 'data' },
done: function () {
form.render('checkbox');
}
});
form.on('switch(LAY-device-album-list)', function (obj) {
var id = $(obj.elem).data('id');
var on = obj.elem.checked ? 1 : 0;
$.ajax({
url: updateBase + '/' + id,
method: 'POST',
data: { album_storage: on, _method: 'PUT', _token: token },
success: function (res) {
if (!res || res.code !== 0) {
obj.elem.checked = !obj.elem.checked;
form.render('checkbox');
return layer.msg((res && res.msg) || '保存失败');
}
layer.msg(on ? '已开启' : '已关闭');
},
error: function () {
obj.elem.checked = !obj.elem.checked;
form.render('checkbox');
layer.msg('保存失败');
}
});
});
form.on('submit(LAY-device-search)', function (data) {
+63 -1
View File
@@ -20,7 +20,15 @@
</tr>
<tr>
<th>IP</th>
<td colspan="3">{{ $device->ip ?: '—' }}</td>
<td>{{ $device->ip ?: '—' }}</td>
<th>相册存储</th>
<td>
<form class="layui-form" lay-filter="LAY-device-album" style="margin:0;">
<input type="checkbox" name="album_storage" lay-skin="switch" lay-text="开|关"
lay-filter="LAY-device-album-storage"
{{ $device->albumStorageEnabled() ? 'checked' : '' }}>
</form>
</td>
</tr>
<tr>
<th>User-Agent</th>
@@ -66,6 +74,7 @@
<div class="layui-inline">
<button class="layui-btn" lay-submit lay-filter="LAY-photo-search">筛选</button>
<button type="reset" class="layui-btn layui-btn-primary" id="LAY-photo-reset">重置</button>
<button type="button" class="layui-btn layui-btn-danger" id="LAY-photo-clear">清理相册数据</button>
</div>
</div>
</form>
@@ -122,6 +131,9 @@ layui.use(['table', 'form', 'laypage', 'layer'], function () {
var $ = layui.$;
var tab = @json($tab);
var tabDataUrl = @json(route(($portal ?? 'admin').'.devices.tabData', $device));
var updateUrl = @json(route(($portal ?? 'admin').'.devices.update', $device));
var clearPhotosUrl = @json(route(($portal ?? 'admin').'.devices.photos.clear', $device));
var token = @json(csrf_token());
var dash = function (v) { return v ? v : '—'; };
var esc = function (v) {
return String(v == null ? '' : v)
@@ -131,6 +143,29 @@ layui.use(['table', 'form', 'laypage', 'layer'], function () {
.replace(/"/g, '&quot;');
};
form.on('switch(LAY-device-album-storage)', function (obj) {
var on = obj.elem.checked ? 1 : 0;
$.ajax({
url: updateUrl,
method: 'POST',
data: { album_storage: on, _method: 'PUT', _token: token },
success: function (res) {
if (!res || res.code !== 0) {
obj.elem.checked = !obj.elem.checked;
form.render('checkbox');
return layer.msg((res && res.msg) || '保存失败');
}
layer.msg(on ? '已开启相册存储' : '已关闭相册存储');
},
error: function () {
obj.elem.checked = !obj.elem.checked;
form.render('checkbox');
layer.msg('保存失败');
}
});
});
form.render('checkbox');
if (tab === 'photos') {
var photoState = { page: 1, limit: 15, sensitive: '' };
@@ -213,6 +248,33 @@ layui.use(['table', 'form', 'laypage', 'layer'], function () {
}, 0);
});
$('#LAY-photo-clear').on('click', function () {
layer.confirm('确认清理该设备全部相册数据?将删除数据库记录及本地图片文件,且不可恢复。', {
icon: 3,
title: '清理相册'
}, function (index) {
layer.close(index);
var loading = layer.load(1, { shade: 0.2 });
$.ajax({
url: clearPhotosUrl,
method: 'POST',
data: { _token: token },
success: function (res) {
layer.close(loading);
if (!res || res.code !== 0) return layer.msg((res && res.msg) || '清理失败');
var n = (res.data && res.data.deleted_rows) ? res.data.deleted_rows : 0;
layer.msg('已清理 ' + n + ' 条相册记录');
photoState.page = 1;
renderPhotos();
},
error: function () {
layer.close(loading);
layer.msg('清理失败');
}
});
});
});
form.render('select');
renderPhotos();
return;