Merge remote-tracking branch 'origin/main'

This commit is contained in:
=
2026-03-12 17:50:30 +08:00
5 changed files with 108 additions and 450 deletions
@@ -38,7 +38,6 @@ import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
@IocBean @IocBean
@At("/platform/sys/menu") @At("/platform/sys/menu")
@@ -391,11 +390,11 @@ public class SysMenuController {
@At @At
@Ok("json") @Ok("json")
@SaCheckPermission("sys.manager.menu.edit") @SaCheckPermission("sys.manager.menu.edit")
public Object sortDo(@Param("ids") String ids, HttpServletRequest req) { public Object sortDo(@Param("ids") String ids, @Param("platform") String platform, HttpServletRequest req) {
try { try {
String[] menuIds = StringUtils.split(ids, ","); String[] menuIds = StringUtils.split(ids, ",");
int i = 0; int i = 0;
sysMenuService.execute(Sqls.create("update sys_menu set location=0")); sysMenuService.execute(Sqls.create("update sys_menu set location=0 where platform = '%s'".formatted(platform)));
for (String s : menuIds) { for (String s : menuIds) {
if (!Strings.isBlank(s)) { if (!Strings.isBlank(s)) {
sysMenuService.update(org.nutz.dao.Chain.make("location", i), Cnd.where("id", "=", s)); sysMenuService.update(org.nutz.dao.Chain.make("location", i), Cnd.where("id", "=", s));
@@ -425,11 +424,11 @@ public class SysMenuController {
@SaCheckPermission("sys.manager.menu") @SaCheckPermission("sys.manager.menu")
@ApiOperation("更新首页推荐应用或服务") @ApiOperation("更新首页推荐应用或服务")
public Result updateRecommendSetting(@Param("menuIds") String[] menuIds, String platform, String type) { public Result updateRecommendSetting(@Param("menuIds") String[] menuIds, String platform, String type) {
String column = ""; String column = "";
switch (type) { switch (type) {
case "app" -> column = "isRecommendApp"; case "app" -> column = "isRecommendApp";
case "service" -> column = "isRecommendService"; case "service" -> column = "isRecommendService";
} }
sysMenuService.update(Chain.make(column, 0), Cnd.where("id", "is not", null).and("platform", "=", platform)); sysMenuService.update(Chain.make(column, 0), Cnd.where("id", "is not", null).and("platform", "=", platform));
if (ArrayUtil.isNotEmpty(menuIds)) { if (ArrayUtil.isNotEmpty(menuIds)) {
sysMenuService.update(Chain.make(column, 1), Cnd.where("id", "in", menuIds).and("platform", "=", platform)); sysMenuService.update(Chain.make(column, 1), Cnd.where("id", "in", menuIds).and("platform", "=", platform));
@@ -304,7 +304,7 @@ public class SysUserServiceImpl extends BaseServiceImpl<Sys_user> implements Sys
String decodePwd = Base64Decoder.decodeStr(passowrd); String decodePwd = Base64Decoder.decodeStr(passowrd);
String hashedPassword = PwdUtil.getPassword(decodePwd, user.getSalt()); String hashedPassword = PwdUtil.getPassword(decodePwd, user.getSalt());
if (!Strings.sNull(hashedPassword).equalsIgnoreCase(user.getPassword())) { if (!Strings.sNull(hashedPassword).equalsIgnoreCase(user.getPassword())) {
if (!Globals.sso) { if (Globals.sso) {
throw new BaseException("用户名或者密码不正确"); throw new BaseException("用户名或者密码不正确");
} }
} }
@@ -2,25 +2,25 @@
layout("/layouts/platform.html"){ layout("/layouts/platform.html"){
#--> #-->
<style> <style>
.context-menu { .context-menu {
position: fixed; position: fixed;
background: #fff; background: #fff;
border: 1px solid #dcdfe6; border: 1px solid #dcdfe6;
border-radius: 4px; border-radius: 4px;
box-shadow: 0 2px 12px 0 rgba(0,0,0,.1); box-shadow: 0 2px 12px 0 rgba(0,0,0,.1);
z-index: 3000; z-index: 3000;
list-style: none; list-style: none;
padding: 5px 0; padding: 5px 0;
margin: 0; margin: 0;
font-size: 14px; font-size: 14px;
} }
.context-menu li { .context-menu li {
padding: 7px 20px; padding: 7px 20px;
cursor: pointer; cursor: pointer;
} }
.context-menu li:hover { .context-menu li:hover {
background: #f2f6fc; background: #f2f6fc;
} }
</style> </style>
<div id="app" v-cloak> <div id="app" v-cloak>
<el-card shadow="never"> <el-card shadow="never">
@@ -52,17 +52,17 @@ layout("/layouts/platform.html"){
</el-button> </el-button>
</table-tool> </table-tool>
<el-table <el-table
:data="tableData" :data="tableData"
:highlight-current-row="true" :highlight-current-row="true"
:key="tableKey" :key="tableKey"
:load="loadChild" :load="loadChild"
@row-contextmenu="openMenu" @row-contextmenu="openMenu"
:expand-row-keys="expandedRowKeysRenew" :expand-row-keys="expandedRowKeysRenew"
@expand-change="handleExpandChange" @expand-change="handleExpandChange"
ref="tableData" ref="tableData"
style="width: 100%" style="width: 100%"
lazy lazy
row-key="id" row-key="id"
> >
<el-table-column align="left" header-align="left" label="菜单名称" prop="name" width="200"></el-table-column> <el-table-column align="left" header-align="left" label="菜单名称" prop="name" width="200"></el-table-column>
<el-table-column align="center" header-align="center" label="菜单图标" prop="icon" width="100"> <el-table-column align="center" header-align="center" label="菜单图标" prop="icon" width="100">
@@ -124,13 +124,13 @@ layout("/layouts/platform.html"){
</el-table-column> </el-table-column>
</el-table> </el-table>
<!-- 右键菜单 --> <!-- 右键菜单 -->
<ul v-show="menuVisible" class="context-menu" :style="{left: menuLeft + 'px', top: menuTop + 'px'}"> <ul v-show="menuVisible" class="context-menu" :style="{left: menuLeft + 'px', top: menuTop + 'px'}">
<li @click="handleAddMenu(currentRow)">新建菜单</li> <li @click="handleAddMenu(currentRow)">新建菜单</li>
<li v-if="showAddMenu" @click="handleAddChildMenu(currentRow)">添加子菜单</li> <li v-if="showAddMenu" @click="handleAddChildMenu(currentRow)">添加子菜单</li>
<li @click="handleEdit(currentRow)">编辑</li> <li @click="handleEdit(currentRow)">编辑</li>
<li @click="handleDelete(currentRow)">删除</li> <li @click="handleDelete(currentRow)">删除</li>
</ul> </ul>
</el-card> </el-card>
@@ -140,7 +140,7 @@ layout("/layouts/platform.html"){
<sort ref="sortRef" @refresh="doSearch"></sort> <sort ref="sortRef" @refresh="doSearch"></sort>
<recommend-setting ref="recommendSettingRef" @refresh="doSearch"></recommend-setting> <recommend-setting ref="recommendSettingRef" @refresh="doSearch"></recommend-setting>
</div> </div>
<script> <script nonce="${cspNonce!}">
<!--#include("permissionForm.js"){}#--> <!--#include("permissionForm.js"){}#-->
<!--#include("basicForm.js"){}#--> <!--#include("basicForm.js"){}#-->
<!--#include("sort.js"){}#--> <!--#include("sort.js"){}#-->
@@ -165,65 +165,65 @@ layout("/layouts/platform.html"){
expandedRowKeysRenew: [], expandedRowKeysRenew: [],
tableTreeRefreshTool: [], tableTreeRefreshTool: [],
// 右键打开菜单相关 // 右键打开菜单相关
currentRow: null, currentRow: null,
menuVisible: false, menuVisible: false,
menuLeft: 0, menuLeft: 0,
menuTop: 0, menuTop: 0,
showAddMenu: false, showAddMenu: false,
} }
}, },
methods: { methods: {
/* 右键行 */ /* 右键行 */
openMenu(row, column, event) { openMenu(row, column, event) {
this.showAddMenu = row.type === 'menu'; this.showAddMenu = row.type === 'menu';
// 阻止浏览器默认菜单 // 阻止浏览器默认菜单
event.preventDefault(); event.preventDefault();
this.currentRow = row; this.currentRow = row;
this.menuVisible = true; this.menuVisible = true;
this.$nextTick(() => { this.$nextTick(() => {
const menu = this.$el.querySelector('.context-menu'); const menu = this.$el.querySelector('.context-menu');
const h = menu.offsetHeight || 100; const h = menu.offsetHeight || 100;
const sh = document.documentElement.clientHeight; const sh = document.documentElement.clientHeight;
let top = event.clientY; let top = event.clientY;
if (top + h > sh) top -= h; if (top + h > sh) top -= h;
this.menuLeft = event.clientX; this.menuLeft = event.clientX;
this.menuTop = top; this.menuTop = top;
}); });
}, },
// 新建菜单 // 新建菜单
handleAddMenu(row) { handleAddMenu(row) {
console.log(row) console.log(row)
this.$refs.basicFormRef.onOpen(null, this.pageForm.platform) this.$refs.basicFormRef.onOpen(null, this.pageForm.platform)
}, },
handleAddChildMenu(row) { handleAddChildMenu(row) {
this.$refs.basicFormRef.addChildMenu(row, this.pageForm.platform) this.$refs.basicFormRef.addChildMenu(row, this.pageForm.platform)
}, },
handleEdit(row) { handleEdit(row) {
// 判断子菜单的type是权限还是菜单 // 判断子菜单的type是权限还是菜单
if (row.type === 'menu') { if (row.type === 'menu') {
this.$refs.basicFormRef.onOpen(row.id, this.pageForm.platform) this.$refs.basicFormRef.onOpen(row.id, this.pageForm.platform)
} else { } else {
this.$refs.permissionFormRef.onOpen(row.id) this.$refs.permissionFormRef.onOpen(row.id)
} }
}, },
handleDelete(row) { handleDelete(row) {
// 删除逻辑 // 删除逻辑
console.log(row) console.log(row)
this.$confirm("此操作将删除 " + row.name, "提示", { this.$confirm("此操作将删除 " + row.name, "提示", {
confirmButtonText: "确定", confirmButtonText: "确定",
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning" type: "warning"
}).then(() => { }).then(() => {
this.$axios.post("/platform/sys/menu/delete/" + row.id).then((res) => { this.$axios.post("/platform/sys/menu/delete/" + row.id).then((res) => {
if (res.code === 0) { if (res.code === 0) {
this.$message.success(res.msg) this.$message.success(res.msg)
this.loadChildByExpandedKeys() this.loadChildByExpandedKeys()
} }
}) })
}) })
}, },
doSearch() { doSearch() {
this.initTreeTable() this.initTreeTable()
}, },
@@ -327,13 +327,13 @@ layout("/layouts/platform.html"){
}) })
} }
}, },
mounted() { mounted() {
// 点击任意处关闭菜单 // 点击任意处关闭菜单
document.addEventListener('click', () => (this.menuVisible = false)); document.addEventListener('click', () => (this.menuVisible = false));
}, },
beforeDestroy() { beforeDestroy() {
document.removeEventListener('click', () => (this.menuVisible = false)); document.removeEventListener('click', () => (this.menuVisible = false));
}, },
created() { created() {
setTimeout(() => { setTimeout(() => {
if (this.dict.type.SYS_MENU_PLATFORM) { if (this.dict.type.SYS_MENU_PLATFORM) {
File diff suppressed because one or more lines are too long
-50
View File
@@ -1,50 +0,0 @@
package com.budwk.app;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.crypto.digest.DigestUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.budwk.app.base.sms.impl.njupt.SmsNjuptServiceImpl;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;
public class Test {
public static void main(String[] args) {
String appId = "1926887238437818370";
String secret = "32df31fcf4fc43f9a647ee1f47134f36";
long ts = System.currentTimeMillis();
String sign = Base64.encode(DigestUtil.md5Hex(appId + secret + ts, CharsetUtil.CHARSET_UTF_8));
HttpRequest httpRequest = HttpUtil.createPost("https://sjzcpt.nnu.edu.cn/cdsp/data-api/v2/DS0005");
httpRequest.header("Content-Type", "application/json");
httpRequest.header("appId", appId);
httpRequest.header("timestamp", String.valueOf(ts));
httpRequest.header("sign", sign);
httpRequest.body("{}");
String body = httpRequest.execute().body();
System.out.println(body);
// JSONObject entries = JSONUtil.parseObj(body);
// JSONArray value = entries.getJSONArray("value");
//
// for (Object o : value) {
// JSONObject jsonObject = (JSONObject) o;
// }
}
}