新增前端vue

This commit is contained in:
2025-11-26 19:08:26 +08:00
parent 3ac807e5d9
commit 4e90603dfe
6 changed files with 117 additions and 221 deletions

View File

@@ -1,5 +1,6 @@
package com.jeesite.modules.biz.entity; package com.jeesite.modules.biz.entity;
import java.io.Serializable;
import java.util.Date; import java.util.Date;
import com.jeesite.common.mybatis.annotation.JoinTable; import com.jeesite.common.mybatis.annotation.JoinTable;
import com.jeesite.common.mybatis.annotation.JoinTable.Type; import com.jeesite.common.mybatis.annotation.JoinTable.Type;
@@ -12,6 +13,8 @@ import com.jeesite.common.entity.DataEntity;
import com.jeesite.common.mybatis.annotation.Column; import com.jeesite.common.mybatis.annotation.Column;
import com.jeesite.common.mybatis.annotation.Table; import com.jeesite.common.mybatis.annotation.Table;
import com.jeesite.common.mybatis.mapper.query.QueryType; import com.jeesite.common.mybatis.mapper.query.QueryType;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial; import java.io.Serial;
@@ -20,6 +23,7 @@ import java.io.Serial;
* @author gaoxq * @author gaoxq
* @version 2025-11-26 * @version 2025-11-26
*/ */
@EqualsAndHashCode(callSuper = true)
@Table(name="biz_quick_login", alias="a", label="系统信息信息", columns={ @Table(name="biz_quick_login", alias="a", label="系统信息信息", columns={
@Column(name="create_time", attrName="createTime", label="创建时间", isUpdate=false, isUpdateForce=true), @Column(name="create_time", attrName="createTime", label="创建时间", isUpdate=false, isUpdateForce=true),
@Column(name="id", attrName="id", label="自增主键", isPK=true), @Column(name="id", attrName="id", label="自增主键", isPK=true),
@@ -38,7 +42,8 @@ import java.io.Serial;
@Column(name="f_flow_state", attrName="fflowState", label="流程任务状态", isUpdate=false, isQuery=false, isUpdateForce=true), @Column(name="f_flow_state", attrName="fflowState", label="流程任务状态", isUpdate=false, isQuery=false, isUpdateForce=true),
}, orderBy="a.id DESC" }, orderBy="a.id DESC"
) )
public class BizQuickLogin extends DataEntity<BizQuickLogin> { @Data
public class BizQuickLogin extends DataEntity<BizQuickLogin> implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@@ -65,137 +70,6 @@ public class BizQuickLogin extends DataEntity<BizQuickLogin> {
super(id); super(id);
} }
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@NotBlank(message="系统名称不能为空")
@Size(min=0, max=100, message="系统名称长度不能超过 100 个字符")
public String getSystemName() {
return systemName;
}
public void setSystemName(String systemName) {
this.systemName = systemName;
}
@NotBlank(message="首页地址不能为空")
@Size(min=0, max=255, message="首页地址长度不能超过 255 个字符")
public String getHomepageUrl() {
return homepageUrl;
}
public void setHomepageUrl(String homepageUrl) {
this.homepageUrl = homepageUrl;
}
@NotBlank(message="图标类名不能为空")
@Size(min=0, max=50, message="图标类名长度不能超过 50 个字符")
public String getIconClass() {
return iconClass;
}
public void setIconClass(String iconClass) {
this.iconClass = iconClass;
}
@NotBlank(message="图标颜色不能为空")
@Size(min=0, max=20, message="图标颜色长度不能超过 20 个字符")
public String getIconColor() {
return iconColor;
}
public void setIconColor(String iconColor) {
this.iconColor = iconColor;
}
@NotNull(message="排序序号不能为空")
public Long getSortOrder() {
return sortOrder;
}
public void setSortOrder(Long sortOrder) {
this.sortOrder = sortOrder;
}
@NotBlank(message="图标背景色不能为空")
@Size(min=0, max=52, message="图标背景色长度不能超过 52 个字符")
public String getBgColor() {
return bgColor;
}
public void setBgColor(String bgColor) {
this.bgColor = bgColor;
}
@NotBlank(message="悬浮遮罩色不能为空")
@Size(min=0, max=52, message="悬浮遮罩色长度不能超过 52 个字符")
public String getMaskColor() {
return maskColor;
}
public void setMaskColor(String maskColor) {
this.maskColor = maskColor;
}
@NotNull(message="是否启用不能为空")
public Long getIsEnabled() {
return isEnabled;
}
public void setIsEnabled(Long isEnabled) {
this.isEnabled = isEnabled;
}
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
@Size(min=0, max=50, message="租户id长度不能超过 50 个字符")
public String getFtenantId() {
return ftenantId;
}
public void setFtenantId(String ftenantId) {
this.ftenantId = ftenantId;
}
@Size(min=0, max=50, message="流程id长度不能超过 50 个字符")
public String getFflowId() {
return fflowId;
}
public void setFflowId(String fflowId) {
this.fflowId = fflowId;
}
@Size(min=0, max=50, message="流程任务主键长度不能超过 50 个字符")
public String getFflowTaskId() {
return fflowTaskId;
}
public void setFflowTaskId(String fflowTaskId) {
this.fflowTaskId = fflowTaskId;
}
public Integer getFflowState() {
return fflowState;
}
public void setFflowState(Integer fflowState) {
this.fflowState = fflowState;
}
public Date getCreateTime_gte() { public Date getCreateTime_gte() {
return sqlMap.getWhere().getValue("create_time", QueryType.GTE); return sqlMap.getWhere().getValue("create_time", QueryType.GTE);
} }

View File

@@ -18,8 +18,11 @@ import com.jeesite.common.web.BaseController;
import com.jeesite.modules.biz.entity.BizQuickLogin; import com.jeesite.modules.biz.entity.BizQuickLogin;
import com.jeesite.modules.biz.service.BizQuickLoginService; import com.jeesite.modules.biz.service.BizQuickLoginService;
import java.util.List;
/** /**
* 系统信息Controller * 系统信息Controller
*
* @author gaoxq * @author gaoxq
* @version 2025-11-26 * @version 2025-11-26
*/ */
@@ -27,72 +30,81 @@ import com.jeesite.modules.biz.service.BizQuickLoginService;
@RequestMapping(value = "${adminPath}/biz/quickLogin") @RequestMapping(value = "${adminPath}/biz/quickLogin")
public class BizQuickLoginController extends BaseController { public class BizQuickLoginController extends BaseController {
private final BizQuickLoginService bizQuickLoginService; private final BizQuickLoginService bizQuickLoginService;
public BizQuickLoginController(BizQuickLoginService bizQuickLoginService) { public BizQuickLoginController(BizQuickLoginService bizQuickLoginService) {
this.bizQuickLoginService = bizQuickLoginService; this.bizQuickLoginService = bizQuickLoginService;
} }
/**
* 获取数据
*/
@ModelAttribute
public BizQuickLogin get(String id, boolean isNewRecord) {
return bizQuickLoginService.get(id, isNewRecord);
}
/**
* 查询列表
*/
@RequiresPermissions("biz:quickLogin:view")
@RequestMapping(value = {"list", ""})
public String list(BizQuickLogin bizQuickLogin, Model model) {
model.addAttribute("bizQuickLogin", bizQuickLogin);
return "modules/biz/bizQuickLoginList";
}
/**
* 查询列表数据
*/
@RequiresPermissions("biz:quickLogin:view")
@RequestMapping(value = "listData")
@ResponseBody
public Page<BizQuickLogin> listData(BizQuickLogin bizQuickLogin, HttpServletRequest request, HttpServletResponse response) {
bizQuickLogin.setPage(new Page<>(request, response));
Page<BizQuickLogin> page = bizQuickLoginService.findPage(bizQuickLogin);
return page;
}
/** /**
* 查看编辑表单 * 获取数据
*/ */
@RequiresPermissions("biz:quickLogin:view") @ModelAttribute
@RequestMapping(value = "form") public BizQuickLogin get(String id, boolean isNewRecord) {
public String form(BizQuickLogin bizQuickLogin, Model model) { return bizQuickLoginService.get(id, isNewRecord);
model.addAttribute("bizQuickLogin", bizQuickLogin); }
return "modules/biz/bizQuickLoginForm";
} /**
* 查询列表
*/
@RequiresPermissions("biz:quickLogin:view")
@RequestMapping(value = {"list", ""})
public String list(BizQuickLogin bizQuickLogin, Model model) {
model.addAttribute("bizQuickLogin", bizQuickLogin);
return "modules/biz/bizQuickLoginList";
}
/**
* 查询列表数据
*/
@RequiresPermissions("biz:quickLogin:view")
@RequestMapping(value = "listData")
@ResponseBody
public Page<BizQuickLogin> listData(BizQuickLogin bizQuickLogin, HttpServletRequest request, HttpServletResponse response) {
bizQuickLogin.setPage(new Page<>(request, response));
Page<BizQuickLogin> page = bizQuickLoginService.findPage(bizQuickLogin);
return page;
}
/**
* 查看编辑表单
*/
@RequiresPermissions("biz:quickLogin:view")
@RequestMapping(value = "form")
public String form(BizQuickLogin bizQuickLogin, Model model) {
model.addAttribute("bizQuickLogin", bizQuickLogin);
return "modules/biz/bizQuickLoginForm";
}
/**
* 保存数据
*/
@RequiresPermissions("biz:quickLogin:edit")
@PostMapping(value = "save")
@ResponseBody
public String save(@Validated BizQuickLogin bizQuickLogin) {
bizQuickLoginService.save(bizQuickLogin);
return renderResult(Global.TRUE, text("保存系统信息成功!"));
}
/**
* 删除数据
*/
@RequiresPermissions("biz:quickLogin:edit")
@RequestMapping(value = "delete")
@ResponseBody
public String delete(BizQuickLogin bizQuickLogin) {
bizQuickLoginService.delete(bizQuickLogin);
return renderResult(Global.TRUE, text("删除系统信息成功!"));
}
/**
* 获取列表
*/
@RequestMapping(value = "listAll")
@ResponseBody
public List<BizQuickLogin> listAll(BizQuickLogin bizQuickLogin) {
return bizQuickLoginService.findList(bizQuickLogin);
}
/**
* 保存数据
*/
@RequiresPermissions("biz:quickLogin:edit")
@PostMapping(value = "save")
@ResponseBody
public String save(@Validated BizQuickLogin bizQuickLogin) {
bizQuickLoginService.save(bizQuickLogin);
return renderResult(Global.TRUE, text("保存系统信息成功!"));
}
/**
* 删除数据
*/
@RequiresPermissions("biz:quickLogin:edit")
@RequestMapping(value = "delete")
@ResponseBody
public String delete(BizQuickLogin bizQuickLogin) {
bizQuickLoginService.delete(bizQuickLogin);
return renderResult(Global.TRUE, text("删除系统信息成功!"));
}
} }

View File

@@ -26,6 +26,9 @@ export interface BizQuickLogin extends BasicModel<BizQuickLogin> {
fflowState?: number; // 流程任务状态 fflowState?: number; // 流程任务状态
} }
export const bizQuickLoginListAll = (params?: BizQuickLogin | any) =>
defHttp.get<BizQuickLogin[]>({ url: adminPath + '/biz/quickLogin/listAll', params });
export const bizQuickLoginList = (params?: BizQuickLogin | any) => export const bizQuickLoginList = (params?: BizQuickLogin | any) =>
defHttp.get<BizQuickLogin>({ url: adminPath + '/biz/quickLogin/list', params }); defHttp.get<BizQuickLogin>({ url: adminPath + '/biz/quickLogin/list', params });

View File

@@ -11,7 +11,7 @@
v-model:value="searchKey" v-model:value="searchKey"
placeholder="搜索应用系统..." placeholder="搜索应用系统..."
class="search-input" class="search-input"
size="middle" size="large"
> >
<template #prefix> <template #prefix>
<SearchOutlined class="search-icon" /> <SearchOutlined class="search-icon" />
@@ -26,22 +26,22 @@
v-for="(app, index) in filteredAppList" v-for="(app, index) in filteredAppList"
:key="index" :key="index"
class="app-card" class="app-card"
@click="openAppUrl(app.url)" @click="openAppUrl(app.homepageUrl)"
> >
<!-- 图片图标容器 --> <!-- 图片图标容器 -->
<div class="app-icon-wrapper" :style="{ backgroundColor: app.bgColor }"> <div class="app-icon-wrapper" :style="{ backgroundColor: app.bgColor }">
<img <img
:src="app.icon" :src="app.iconClass"
:alt="app.name" :alt="app.systemName"
class="app-icon" class="app-icon"
@error="handleImgError($event)" @error="handleImgError($event)"
/> />
</div> </div>
<!-- 应用名称 --> <!-- 应用名称 -->
<div class="app-name">{{ app.name }}</div> <div class="app-name">{{ app.systemName }}</div>
<!-- 悬浮遮罩层 --> <!-- 悬浮遮罩层 -->
<div class="app-hover-mask" :style="{ background: app.maskColor }"> <div class="app-hover-mask" :style="{ background: app.maskColor }">
<span class="hover-text">打开 {{ app.name }}</span> <span class="hover-text">打开 {{ app.systemName }}</span>
</div> </div>
</div> </div>
@@ -56,20 +56,12 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, computed } from 'vue'; import { ref, computed, onMounted } from 'vue';
import { Input } from 'ant-design-vue'; import { Input } from 'ant-design-vue';
import { LoginOutlined, SearchOutlined } from '@ant-design/icons-vue'; import { LoginOutlined, SearchOutlined } from '@ant-design/icons-vue';
import { BizQuickLogin, bizQuickLoginListAll } from '@jeesite/biz/api/biz/quickLogin';
// TSfallbackIcon const appList = ref<BizQuickLogin[]>([]);
interface AppItem {
name: string;
icon: string; //
url: string;
bgColor: string; //
maskColor: string; //
}
const appList = ref<AppItem[]>([]);
// //
const searchKey = ref(''); const searchKey = ref('');
@@ -78,10 +70,25 @@ const searchKey = ref('');
const filteredAppList = computed(() => { const filteredAppList = computed(() => {
if (!searchKey.value) return appList.value; if (!searchKey.value) return appList.value;
return appList.value.filter(app => return appList.value.filter(app =>
app.name.toLowerCase().includes(searchKey.value.toLowerCase()) app.systemName.toLowerCase().includes(searchKey.value.toLowerCase())
); );
}); });
const fetchAppList = async () => {
try {
//
const result = await bizQuickLoginListAll();
appList.value = result || []; // null
} catch (error) {
console.error('获取应用列表失败:', error);
appList.value = []; //
}
};
onMounted(() => {
fetchAppList();
});
// URL // URL
const openAppUrl = (url: string) => { const openAppUrl = (url: string) => {
if (!url) return; if (!url) return;
@@ -95,7 +102,7 @@ const openAppUrl = (url: string) => {
const handleImgError = (e: Event) => { const handleImgError = (e: Event) => {
const img = e.target as HTMLImageElement; const img = e.target as HTMLImageElement;
// //
img.src = 'http://crontab.club:30012/cApi/images/login-brand.png'; img.src = '';
}; };
</script> </script>
@@ -157,7 +164,7 @@ const handleImgError = (e: Event) => {
/* 核心:滚动容器 */ /* 核心:滚动容器 */
.app-scroll-container { .app-scroll-container {
max-height: 400px; max-height: 45vh;
overflow-y: auto; overflow-y: auto;
padding-right: 4px; padding-right: 4px;
scroll-behavior: smooth; scroll-behavior: smooth;

View File

@@ -1,8 +1,8 @@
<template> <template>
<div class="mb-4"> <div class="mb-4">
<Home class="enter-y" /> <QuickLogin class="enter-y" />
</div> </div>
</template> </template>
<script lang="ts" setup name="Analysis"> <script lang="ts" setup name="Analysis">
import Home from './components/Home.vue'; import QuickLogin from './components/QuickLogin.vue';
</script> </script>

View File

@@ -1,6 +1,6 @@
export default { export default {
dashboard: '控制面板', dashboard: '控制面板',
workbench: '我的工作', workbench: '我的工作',
analysis: '仪表盘', analysis: '首页',
about: '关于我们', about: '关于我们',
}; };