漏洞修改

This commit is contained in:
jiang 2025-10-28 09:23:41 +08:00
parent 2b96bfad84
commit 6fdb30008c
9 changed files with 298 additions and 231 deletions

View File

@ -6,11 +6,10 @@
<title>贵州机具配件管理系统</title>
<meta name="keywords" content="layuimini,layui,layui模板,layui后台,后台模板,admin,admin模板,layui mini">
<meta name="description"
content="layuimini基于layui的轻量级前端后台管理框架最简洁、易用的后台框架模板面向所有层次的前后端程序,只需提供一个接口就直接初始化整个框架,无需复杂操作。">
content="layuimini基于layui的轻量级前端后台管理框架最简洁、易用的后台框架模板面向所有层次的前后端程序,只需提供一个接口就直接初始化整个框架,无需复杂操作。">
<meta name="renderer" content="webkit">
<meta http-equiv="Content-Security-Policy"
content="default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline' https://cdnjs.cloudflare.com; img-src 'self' data:; font-src 'self' https://cdnjs.cloudflare.com;">
<meta http-equiv="x-ua-compatible" content="SAMEORIGIN">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta http-equiv="Access-Control-Allow-Origin" content="*">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="apple-mobile-web-app-capable" content="yes">
@ -25,222 +24,222 @@
</head>
<body class="layui-layout-body layuimini-all">
<div class="layui-layout layui-layout-admin">
<div class="layui-layout layui-layout-admin">
<div class="layui-header header">
<div class="layui-logo layuimini-logo"></div>
<div class="layui-header header">
<div class="layui-logo layuimini-logo"></div>
<div class="layuimini-header-content">
<a>
<div class="layuimini-tool"><i title="展开" class="fa fa-outdent" data-side-fold="1"></i></div>
</a>
<div class="layuimini-header-content">
<a>
<div class="layuimini-tool"><i title="展开" class="fa fa-outdent" data-side-fold="1"></i></div>
</a>
<!--电脑端头部菜单-->
<!-- <ul class="layui-nav layui-layout-left layuimini-header-menu layuimini-menu-header-pc layuimini-pc-show">
</ul> -->
<!--电脑端头部菜单-->
<!-- <ul class="layui-nav layui-layout-left layuimini-header-menu layuimini-menu-header-pc layuimini-pc-show">
</ul> -->
<!--手机端头部菜单-->
<!-- <ul class="layui-nav layui-layout-left layuimini-header-menu layuimini-mobile-show">
<li class="layui-nav-item">
<a href="javascript:;"><i class="fa fa-list-ul"></i> 选择模块</a>
<dl class="layui-nav-child layuimini-menu-header-mobile">
</dl>
<!--手机端头部菜单-->
<!-- <ul class="layui-nav layui-layout-left layuimini-header-menu layuimini-mobile-show">
<li class="layui-nav-item">
<a href="javascript:;"><i class="fa fa-list-ul"></i> 选择模块</a>
<dl class="layui-nav-child layuimini-menu-header-mobile">
</dl>
</li>
</ul> -->
<ul class="layui-nav layui-layout-right">
<li class="layui-nav-item" lay-unselect>
<a href="javascript:;" data-refresh="刷新"><i class="fa fa-refresh"></i></a>
</li>
</ul> -->
<ul class="layui-nav layui-layout-right">
<li class="layui-nav-item" lay-unselect>
<a href="javascript:;" data-refresh="刷新"><i class="fa fa-refresh"></i></a>
</li>
<li class="layui-nav-item" lay-unselect>
<a href="javascript:;" data-clear="清理" class="layuimini-clear"><i class="fa fa-trash-o"></i></a>
</li>
<li class="layui-nav-item mobile layui-hide-xs" lay-unselect>
<a href="javascript:;" data-check-screen="full"><i class="fa fa-arrows-alt"></i></a>
</li>
<!-- <li class="layui-nav-item layuimini-setting">
<a href="javascript:;">admin</a>
<dl class="layui-nav-child">
<dd>
<a href="javascript:;" layuimini-content-href="page/user-setting.html" data-title="基本资料" data-icon="fa fa-gears">基本资料<span class="layui-badge-dot"></span></a>
</dd>
<dd>
<a href="javascript:;" layuimini-content-href="page/user-password.html" data-title="修改密码" data-icon="fa fa-gears">修改密码</a>
</dd>
<dd>
<hr>
</dd>
<dd>
<a href="javascript:;" class="login-out">退出登录</a>
</dd>
</dl>
</li> -->
<li class="layui-nav-item layuimini-select-bgcolor" lay-unselect>
<a href="javascript:;" data-bgcolor="配色方案"><i class="fa fa-ellipsis-v"></i></a>
</li>
</ul>
</div>
</div>
<!--无限极左侧菜单-->
<div class="layui-side layui-bg-black layuimini-menu-left">
</div>
<!--初始化加载层-->
<div class="layuimini-loader">
<div class="layuimini-loader-inner"></div>
</div>
<!--手机端遮罩层-->
<div class="layuimini-make"></div>
<!-- 移动导航 -->
<div class="layuimini-site-mobile"><i class="layui-icon"></i></div>
<div class="layui-body">
<div class="layuimini-tab layui-tab-rollTool layui-tab" lay-filter="layuiminiTab" lay-allowclose="true">
<ul class="layui-tab-title">
<li class="layui-this" id="layuiminiHomeTabId" lay-id=""></li>
</ul>
<div class="layui-tab-control">
<li class="layuimini-tab-roll-left layui-icon layui-icon-left"></li>
<li class="layuimini-tab-roll-right layui-icon layui-icon-right"></li>
<li class="layui-tab-tool layui-icon layui-icon-down">
<ul class="layui-nav close-box">
<li class="layui-nav-item">
<a href="javascript:;"><span class="layui-nav-more"></span></a>
<dl class="layui-nav-child">
<dd><a href="javascript:;" layuimini-tab-close="current">关 闭 当 前</a></dd>
<dd><a href="javascript:;" layuimini-tab-close="other">关 闭 其 他</a></dd>
<dd><a href="javascript:;" layuimini-tab-close="all">关 闭 全 部</a></dd>
</dl>
</li>
</ul>
</li>
</div>
<div class="layui-tab-content">
<div id="layuiminiHomeTabIframe" class="layui-tab-item layui-show"></div>
</div>
</div>
<li class="layui-nav-item" lay-unselect>
<a href="javascript:;" data-clear="清理" class="layuimini-clear"><i class="fa fa-trash-o"></i></a>
</li>
<li class="layui-nav-item mobile layui-hide-xs" lay-unselect>
<a href="javascript:;" data-check-screen="full"><i class="fa fa-arrows-alt"></i></a>
</li>
<!-- <li class="layui-nav-item layuimini-setting">
<a href="javascript:;">admin</a>
<dl class="layui-nav-child">
<dd>
<a href="javascript:;" layuimini-content-href="page/user-setting.html" data-title="基本资料" data-icon="fa fa-gears">基本资料<span class="layui-badge-dot"></span></a>
</dd>
<dd>
<a href="javascript:;" layuimini-content-href="page/user-password.html" data-title="修改密码" data-icon="fa fa-gears">修改密码</a>
</dd>
<dd>
<hr>
</dd>
<dd>
<a href="javascript:;" class="login-out">退出登录</a>
</dd>
</dl>
</li> -->
<li class="layui-nav-item layuimini-select-bgcolor" lay-unselect>
<a href="javascript:;" data-bgcolor="配色方案"><i class="fa fa-ellipsis-v"></i></a>
</li>
</ul>
</div>
</div>
<script src="lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script src="js/lay-config.js?v=2.0.0" charset="utf-8"></script>
<script src="lib/jquery-3.4.1/jquery-3.7.1.min.js" charset="utf-8"></script>
<script src="js/public.js" charset="utf-8"></script>
<script>
layui.use(['jquery', 'layer', 'miniAdmin', 'miniTongji'], function () {
var $ = layui.jquery,
layer = layui.layer,
miniAdmin = layui.miniAdmin,
miniTongji = layui.miniTongji;
let token = getUrlParam('token');
if (!token) {
let gz_token = sessionStorage.getItem("gz-token");
if (gz_token) {
token = gz_token;
}
<!--无限极左侧菜单-->
<div class="layui-side layui-bg-black layuimini-menu-left">
</div>
<!--初始化加载层-->
<div class="layuimini-loader">
<div class="layuimini-loader-inner"></div>
</div>
<!--手机端遮罩层-->
<div class="layuimini-make"></div>
<!-- 移动导航 -->
<div class="layuimini-site-mobile"><i class="layui-icon"></i></div>
<div class="layui-body">
<div class="layuimini-tab layui-tab-rollTool layui-tab" lay-filter="layuiminiTab" lay-allowclose="true">
<ul class="layui-tab-title">
<li class="layui-this" id="layuiminiHomeTabId" lay-id=""></li>
</ul>
<div class="layui-tab-control">
<li class="layuimini-tab-roll-left layui-icon layui-icon-left"></li>
<li class="layuimini-tab-roll-right layui-icon layui-icon-right"></li>
<li class="layui-tab-tool layui-icon layui-icon-down">
<ul class="layui-nav close-box">
<li class="layui-nav-item">
<a href="javascript:;"><span class="layui-nav-more"></span></a>
<dl class="layui-nav-child">
<dd><a href="javascript:;" layuimini-tab-close="current">关 闭 当 前</a></dd>
<dd><a href="javascript:;" layuimini-tab-close="other">关 闭 其 他</a></dd>
<dd><a href="javascript:;" layuimini-tab-close="all">关 闭 全 部</a></dd>
</dl>
</li>
</ul>
</li>
</div>
<div class="layui-tab-content">
<div id="layuiminiHomeTabIframe" class="layui-tab-item layui-show"></div>
</div>
</div>
</div>
</div>
<script src="lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script src="js/lay-config.js?v=2.0.0" charset="utf-8"></script>
<script src="lib/jquery-3.4.1/jquery-3.7.1.min.js" charset="utf-8"></script>
<script src="js/public.js" charset="utf-8"></script>
<script>
layui.use(['jquery', 'layer', 'miniAdmin', 'miniTongji'], function () {
var $ = layui.jquery,
layer = layui.layer,
miniAdmin = layui.miniAdmin,
miniTongji = layui.miniTongji;
let token = getUrlParam('token');
if (!token) {
let gz_token = sessionStorage.getItem("gz-token");
if (gz_token) {
token = gz_token;
}
console.log('当前登录的token:' + token);
if (token) {
console.log('走的跳转登录');
sessionStorage.setItem('gz-token', token);
// 校验传过来的token是否合法
let url = dataUrl + 'backstage/health/isHealth'
ajaxRequest(url, "GET", null, false, function () {
}, function (result) {
console.log(result);
if (result.code === 200) {
var url = window.location.href; //获取当前页面的url
if (url.indexOf("?") != -1) { //判断是否存在参数
url = url.replace(/(\?|#)[^'"]*/, ''); //去除参数
window.history.pushState({}, 0, url);
}
initPage(miniAdmin);
sessionStorage.setItem('us', JSON.stringify(result.data));
} else if (result.code === 401) {
closeWindowOpen();
}
}, function (xhr, status, error) {
errorFn(xhr, status, error)
}, null);
} else {
console.log('走的自己登录');
login(miniAdmin);
//window.location = 'page/401.html';
}
/* var options = {
iniUrl: "api/init.json", // 初始化接口
clearUrl: "api/clear.json", // 缓存清理接口
urlHashLocation: true, // 是否打开hash定位
bgColorDefault: false, // 主题默认配置
multiModule: true, // 是否开启多模块
menuChildOpen: false, // 是否默认展开菜单
loadingTime: 0, // 初始化加载时间
pageAnim: true, // iframe窗口动画
maxTabNum: 20, // 最大的tab打开数量
};
miniAdmin.render(options); */
// 百度统计代码,只统计指定域名
miniTongji.render({
specific: true,
domains: [
'99php.cn',
'layuimini.99php.cn',
'layuimini-onepage.99php.cn',
],
});
$('.login-out').on("click", function () {
layer.msg('退出登录成功', function () {
window.location = 'page/login-3.html';
});
});
});
// 初始化页面
function initPage(miniAdmin){
var options = {
iniUrl: "api/init.json", // 初始化接口
clearUrl: "api/clear.json", // 缓存清理接口
urlHashLocation: true, // 是否打开hash定位
bgColorDefault: false, // 主题默认配置
multiModule: true, // 是否开启多模块
menuChildOpen: false, // 是否默认展开菜单
loadingTime: 0, // 初始化加载时间
pageAnim: true, // iframe窗口动画
maxTabNum: 20, // 最大的tab打开数量
};
miniAdmin.render(options);
}
function login(miniAdmin) {
// 登录获取token
let login_url = dataUrl + 'login/userLogin'
const params = {
"username": 'sa',
"password": 'ebbd6ea34bbab2b0813afcf59c8c9556',
// "password": '3NBzZK7qxhMhrmvi63FnuQ==',
}
ajaxRequest(login_url, "POST", params, true, function () {
console.log('当前登录的token:' + token);
if (token) {
console.log('走的跳转登录');
sessionStorage.setItem('gz-token', token);
// 校验传过来的token是否合法
let url = dataUrl + 'backstage/health/isHealth'
ajaxRequest(url, "GET", null, false, function () {
}, function (result) {
console.log(result);
if (result.code === 200) {
sessionStorage.setItem('gz-token', result.token);
sessionStorage.setItem('us', JSON.stringify(result.user));
var url = window.location.href; //获取当前页面的url
if (url.indexOf("?") != -1) { //判断是否存在参数
url = url.replace(/(\?|#)[^'"]*/, ''); //去除参数
window.history.pushState({}, 0, url);
}
initPage(miniAdmin);
} else if (result.code === 500) {
// layer.msg(result.msg, { icon: 2 });
sessionStorage.setItem('us', JSON.stringify(result.data));
} else if (result.code === 401) {
closeWindowOpen();
}
}, function (xhr, status, error) {
errorFn(xhr, status, error)
}, null);
} else {
console.log('走的自己登录');
login(miniAdmin);
//window.location = 'page/401.html';
}
</script>
/* var options = {
iniUrl: "api/init.json", // 初始化接口
clearUrl: "api/clear.json", // 缓存清理接口
urlHashLocation: true, // 是否打开hash定位
bgColorDefault: false, // 主题默认配置
multiModule: true, // 是否开启多模块
menuChildOpen: false, // 是否默认展开菜单
loadingTime: 0, // 初始化加载时间
pageAnim: true, // iframe窗口动画
maxTabNum: 20, // 最大的tab打开数量
};
miniAdmin.render(options); */
// 百度统计代码,只统计指定域名
miniTongji.render({
specific: true,
domains: [
'99php.cn',
'layuimini.99php.cn',
'layuimini-onepage.99php.cn',
],
});
$('.login-out').on("click", function () {
layer.msg('退出登录成功', function () {
window.location = 'page/login-3.html';
});
});
});
// 初始化页面
function initPage(miniAdmin){
var options = {
iniUrl: "api/init.json", // 初始化接口
clearUrl: "api/clear.json", // 缓存清理接口
urlHashLocation: true, // 是否打开hash定位
bgColorDefault: false, // 主题默认配置
multiModule: true, // 是否开启多模块
menuChildOpen: false, // 是否默认展开菜单
loadingTime: 0, // 初始化加载时间
pageAnim: true, // iframe窗口动画
maxTabNum: 20, // 最大的tab打开数量
};
miniAdmin.render(options);
}
function login(miniAdmin) {
// 登录获取token
let login_url = dataUrl + 'login/userLogin'
const params = {
"username": 'sa',
"password": 'ebbd6ea34bbab2b0813afcf59c8c9556',
// "password": '3NBzZK7qxhMhrmvi63FnuQ==',
}
ajaxRequest(login_url, "POST", params, true, function () {
}, function (result) {
console.log(result);
if (result.code === 200) {
sessionStorage.setItem('gz-token', result.token);
sessionStorage.setItem('us', JSON.stringify(result.user));
initPage(miniAdmin);
} else if (result.code === 500) {
// layer.msg(result.msg, { icon: 2 });
}
}, function (xhr, status, error) {
errorFn(xhr, status, error)
}, null);
}
</script>
</body>
</html>
</html>

View File

@ -12,16 +12,16 @@ layui.use(["form", "table", 'laydate'], function () {
range: ['#startDay', '#endDay'],
rangeLinked: true
});
// 监听复选框选择
table.on('checkbox(currentTableId2)', function(obj){
table.on('checkbox(currentTableId2)', function (obj) {
let checkStatus = table.checkStatus('currentTableId');
selectedData = checkStatus.data;
// 根据选中状态显示/隐藏批量审核按钮
updateBatchAuditButton();
});
initTable();
});
@ -58,6 +58,7 @@ function reloadData() {
function reloadTable(pageNum) {
selectedData = []; // 清空选中数据
$('#batchAuditBtn').hide(); // 隐藏批量审核按钮
$('#batchOutBoundBtn').hide();
table.reload("currentTableId", {
page: {
curr: pageNum ? pageNum : 1,
@ -281,28 +282,35 @@ function updateBatchAuditButton() {
} else {
$('#batchAuditBtn').hide();
}
let batchOutBoundBtn = selectedData.filter(item => item.status === '2'); // 只有待审核状态的才能批量审核
if (batchOutBoundBtn.length > 0) {
$('#batchOutBoundBtn').show();
} else {
$('#batchOutBoundBtn').hide();
}
}
// 批量审核
function batchAudit() {
let pendingAuditData = selectedData.filter(item => item.status === '1');
if (pendingAuditData.length === 0) {
return layer.msg('请选择待审核状态的数据', {icon: 2});
}
layer.open({
type: 1,
title: '批量审核 (' + pendingAuditData.length + '条)',
area: ['500px', '300px'],
content: getBatchAuditFormHtml(),
btn: ['确定', '取消'],
success: function(layero) {
success: function (layero) {
// 重新渲染表单
form.render();
// 监听审核结果变化
form.on('radio(batchAuditResult)', function(data) {
form.on('radio(batchAuditResult)', function (data) {
if (data.value === '2') { // 通过
$('textarea[name="batchAuditRemarks"]').val('批量审核通过');
} else if (data.value === '3') { // 不通过
@ -310,12 +318,32 @@ function batchAudit() {
}
});
},
yes: function(index) {
yes: function (index) {
submitBatchAudit(pendingAuditData, index);
}
});
}
// 批量审核
function batchOutBound() {
let pendingAuditData = selectedData.filter(item => item.status === '2');
if (pendingAuditData.length === 0) {
return layer.msg('请选择待审核状态的数据', {icon: 2});
}
layer.open({
type: 1,
title: '批量出库 (' + pendingAuditData.length + '条)',
btn: ['确定', '取消'],
yes: function (index) {
partOutInByIds(pendingAuditData, index);
}
});
}
// 获取批量审核表单HTML
function getBatchAuditFormHtml() {
return `
@ -343,17 +371,17 @@ function getBatchAuditFormHtml() {
function submitBatchAudit(dataList, layerIndex) {
let auditStatus = $('input[name="batchAuditStatus"]:checked').val();
let auditRemarks = $('textarea[name="batchAuditRemarks"]').val();
if (auditStatus === '3' && (!auditRemarks || auditRemarks.trim() === '')) {
return layer.msg('驳回时必须填写审核意见', {icon: 2});
}
let loadingMsg = layer.msg('正在批量审核,请稍等...', {
icon: 16,
shade: 0.3,
time: 0
});
let idList = dataList.map(item => item.id);
let params = {
encryptedData: JSON.stringify({
@ -362,12 +390,12 @@ function submitBatchAudit(dataList, layerIndex) {
remark: auditRemarks.trim()
})
};
ajaxRequest(dataUrl + "backstage/partApply/batchAudit", "POST", params, true,
function() {
ajaxRequest(dataUrl + "backstage/partApply/batchAudit", "POST", params, true,
function () {
// 请求前处理
},
function(result) {
},
function (result) {
layer.close(loadingMsg);
if (result.code === 200) {
layer.close(layerIndex);
@ -378,8 +406,48 @@ function submitBatchAudit(dataList, layerIndex) {
} else {
layer.msg(result.msg || '批量审核失败', {icon: 2});
}
},
function(xhr, status, error) {
},
function (xhr, status, error) {
layer.close(loadingMsg);
layer.msg('服务异常,请稍后重试', {icon: 2});
errorFn(xhr, status, error);
}
);
}
// 提交批量审核
function partOutInByIds(dataList, layerIndex) {
let loadingMsg = layer.msg('正在批量出库,请稍等...', {
icon: 16,
shade: 0.3,
time: 0
});
let idList = dataList.map(item => item.id);
let params = {
encryptedData: JSON.stringify({
idList: idList,
})
};
ajaxRequest(dataUrl + "backstage/partApply/partOutInByIds", "POST", params, true,
function () {
// 请求前处理
},
function (result) {
layer.close(loadingMsg);
if (result.code === 200) {
layer.close(layerIndex);
layer.msg('批量出库成功', {icon: 1});
selectedData = [];
$('#batchOutBoundBtn').hide();
reloadData();
} else {
layer.msg(result.msg || '批量出库失败', {icon: 2});
}
},
function (xhr, status, error) {
layer.close(loadingMsg);
layer.msg('服务异常,请稍后重试', {icon: 2});
errorFn(xhr, status, error);

View File

@ -426,7 +426,7 @@ function exportExcel() {
}
// 打印
function print() {
/*function print() {
Print('#table-box', {
onStart: function () {
console.log('onStart', new Date())
@ -435,7 +435,7 @@ function print() {
console.log('onEnd', new Date())
}
})
}
}*/
// 查看概述
function viewGs(obj) {

File diff suppressed because one or more lines are too long

View File

@ -60,6 +60,8 @@
class="layui-icon layui-icon-download-circle"></i> 导 出</button>
<button class="layui-btn layui-bg-orange" id="batchAuditBtn" onclick="batchAudit()" style="display: none;"><i
class="layui-icon layui-icon-ok"></i> 批量审核</button>
<button class="layui-btn layui-bg-blue" id="batchOutBoundBtn" onclick="batchOutBound()" style="display: none;"><i
class="layui-icon layui-icon-ok"></i> 批量出库</button>
</div>
</div>
</form>

View File

@ -109,7 +109,7 @@
</table>
</div>
</div>
<div id="file-box">
<div id="file-box" class="no-print">
<div class="title layout">
<span style="font-weight:700;text-decoration:none;color:#409EFF;"></span>
<p>附件文档</p>

View File

@ -54,7 +54,7 @@
</div>
</div>
</div>
<script src="../../../lib/jquery-3.4.1/jquery-3.4.1.min.js" charset="utf-8"></script>
<script src="../../../lib/jquery-3.4.1/jquery-3.7.1.min.js" charset="utf-8"></script>
<script src="../../../js/public.js" charset="utf-8"></script>
<script src="../../../lib/layui-v2.9.18/layui/layui.js" charset="utf-8"></script>
<script src="../../../js/accessory/child/part_detail.js"></script>

View File

@ -41,7 +41,7 @@
</div>
</div>
</div>
<script src="../../../lib/jquery-3.4.1/jquery-3.4.1.min.js" charset="utf-8"></script>
<script src="../../../lib/jquery-3.4.1/jquery-3.7.1.min.js" charset="utf-8"></script>
<script src="../../../js/public.js" charset="utf-8"></script>
<script src="../../../lib/layui-v2.9.18/layui/layui.js" charset="utf-8"></script>
<script src="../../../js/accessory/child/pro_part_detail.js"></script>

View File

@ -41,7 +41,7 @@
</div>
</div>
</div>
<script src="../../lib/jquery-3.4.1/jquery-3.4.1.min.js" charset="utf-8"></script>
<script src="../../lib/jquery-3.4.1/jquery-3.7.1.min.js" charset="utf-8"></script>
<script src="../../js/public.js" charset="utf-8"></script>
<script src="../../lib/layui-v2.9.18/layui/layui.js" charset="utf-8"></script>
<script src="../../js/accessory/device_pro_list.js" charset="utf-8"></script>