初始化项目
This commit is contained in:
@@ -1,13 +1,12 @@
|
|||||||
package com.jeesite.modules.apps.Module;
|
package com.jeesite.modules.apps.Module.Table;
|
||||||
|
|
||||||
|
import com.jeesite.modules.apps.Module.cPage;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class ErpFlowParams implements Serializable {
|
public class ErpFlowParams extends cPage implements Serializable {
|
||||||
private Integer pageNum;
|
|
||||||
private Integer pageSize;
|
|
||||||
private String accountId;
|
private String accountId;
|
||||||
private String flowName;
|
private String flowName;
|
||||||
private String flowType;
|
private String flowType;
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
package com.jeesite.modules.apps.Module.Table;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class MyDictParams implements Serializable {
|
||||||
|
private String dictType;
|
||||||
|
private String dictValue;
|
||||||
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
package com.jeesite.modules.apps.Module.Table;
|
||||||
|
|
||||||
|
import com.jeesite.modules.apps.Module.cPage;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class MyProjectParams extends cPage implements Serializable {
|
||||||
|
|
||||||
|
private String projectName;
|
||||||
|
|
||||||
|
private String projectType;
|
||||||
|
|
||||||
|
private String projectStatus;
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.jeesite.modules.apps.Module;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class cPage implements Serializable {
|
||||||
|
|
||||||
|
private Integer pageNum;
|
||||||
|
private Integer pageSize;
|
||||||
|
}
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package com.jeesite.modules.apps.web;
|
||||||
|
|
||||||
|
import com.jeesite.modules.apps.Module.Table.MyDictParams;
|
||||||
|
import com.jeesite.modules.sys.entity.DictData;
|
||||||
|
import com.jeesite.modules.sys.utils.DictUtils;
|
||||||
|
import org.springframework.stereotype.Controller;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Controller
|
||||||
|
@RequestMapping(value = "${adminPath}/biz/dict")
|
||||||
|
public class DictController {
|
||||||
|
|
||||||
|
|
||||||
|
@RequestMapping(value = "dictList")
|
||||||
|
@ResponseBody
|
||||||
|
public List<DictData> getDictList(MyDictParams myDictParams) {
|
||||||
|
return DictUtils.getDictList(myDictParams.getDictType());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,11 @@
|
|||||||
package com.jeesite.modules.biz.web;
|
package com.jeesite.modules.biz.web;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
import com.jeesite.modules.apps.Module.PageResult;
|
||||||
|
import com.jeesite.modules.apps.Module.Table.MyProjectParams;
|
||||||
|
import com.jeesite.modules.utils.PageUtil;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
@@ -26,6 +31,7 @@ import com.jeesite.modules.biz.service.MyProjectInfoService;
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 项目信息 Controller
|
* 项目信息 Controller
|
||||||
|
*
|
||||||
* @author gaoxq
|
* @author gaoxq
|
||||||
* @version 2026-03-21
|
* @version 2026-03-21
|
||||||
*/
|
*/
|
||||||
@@ -33,123 +39,142 @@ import com.jeesite.modules.biz.service.MyProjectInfoService;
|
|||||||
@RequestMapping(value = "${adminPath}/biz/myProjectInfo")
|
@RequestMapping(value = "${adminPath}/biz/myProjectInfo")
|
||||||
public class MyProjectInfoController extends BaseController {
|
public class MyProjectInfoController extends BaseController {
|
||||||
|
|
||||||
private final MyProjectInfoService myProjectInfoService;
|
private final MyProjectInfoService myProjectInfoService;
|
||||||
|
|
||||||
public MyProjectInfoController(MyProjectInfoService myProjectInfoService) {
|
public MyProjectInfoController(MyProjectInfoService myProjectInfoService) {
|
||||||
this.myProjectInfoService = myProjectInfoService;
|
this.myProjectInfoService = myProjectInfoService;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 获取数据
|
|
||||||
*/
|
|
||||||
@ModelAttribute
|
|
||||||
public MyProjectInfo get(String projectId, boolean isNewRecord) {
|
|
||||||
return myProjectInfoService.get(projectId, isNewRecord);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询列表
|
|
||||||
*/
|
|
||||||
@RequiresPermissions("biz:myProjectInfo:view")
|
|
||||||
@RequestMapping(value = {"list", ""})
|
|
||||||
public String list(MyProjectInfo myProjectInfo, Model model) {
|
|
||||||
model.addAttribute("myProjectInfo", myProjectInfo);
|
|
||||||
return "modules/biz/myProjectInfoList";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 查询列表数据
|
|
||||||
*/
|
|
||||||
@RequiresPermissions("biz:myProjectInfo:view")
|
|
||||||
@RequestMapping(value = "listData")
|
|
||||||
@ResponseBody
|
|
||||||
public Page<MyProjectInfo> listData(MyProjectInfo myProjectInfo, HttpServletRequest request, HttpServletResponse response) {
|
|
||||||
myProjectInfo.setPage(new Page<>(request, response));
|
|
||||||
Page<MyProjectInfo> page = myProjectInfoService.findPage(myProjectInfo);
|
|
||||||
return page;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查看编辑表单
|
* 获取数据
|
||||||
*/
|
*/
|
||||||
@RequiresPermissions("biz:myProjectInfo:view")
|
@ModelAttribute
|
||||||
@RequestMapping(value = "form")
|
public MyProjectInfo get(String projectId, boolean isNewRecord) {
|
||||||
public String form(MyProjectInfo myProjectInfo, Model model) {
|
return myProjectInfoService.get(projectId, isNewRecord);
|
||||||
model.addAttribute("myProjectInfo", myProjectInfo);
|
}
|
||||||
return "modules/biz/myProjectInfoForm";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 保存数据
|
* 查询列表
|
||||||
*/
|
*/
|
||||||
@RequiresPermissions("biz:myProjectInfo:edit")
|
@RequiresPermissions("biz:myProjectInfo:view")
|
||||||
@PostMapping(value = "save")
|
@RequestMapping(value = {"list", ""})
|
||||||
@ResponseBody
|
public String list(MyProjectInfo myProjectInfo, Model model) {
|
||||||
public String save(@Validated MyProjectInfo myProjectInfo) {
|
model.addAttribute("myProjectInfo", myProjectInfo);
|
||||||
myProjectInfoService.save(myProjectInfo);
|
return "modules/biz/myProjectInfoList";
|
||||||
return renderResult(Global.TRUE, text("保存项目成功!"));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出数据
|
* 查询列表数据
|
||||||
*/
|
*/
|
||||||
@RequiresPermissions("biz:myProjectInfo:view")
|
@RequiresPermissions("biz:myProjectInfo:view")
|
||||||
@RequestMapping(value = "exportData")
|
@RequestMapping(value = "listData")
|
||||||
public void exportData(MyProjectInfo myProjectInfo, HttpServletResponse response) {
|
@ResponseBody
|
||||||
List<MyProjectInfo> list = myProjectInfoService.findList(myProjectInfo);
|
public Page<MyProjectInfo> listData(MyProjectInfo myProjectInfo, HttpServletRequest request, HttpServletResponse response) {
|
||||||
String fileName = "项目" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
|
myProjectInfo.setPage(new Page<>(request, response));
|
||||||
try(ExcelExport ee = new ExcelExport("项目", MyProjectInfo.class)){
|
Page<MyProjectInfo> page = myProjectInfoService.findPage(myProjectInfo);
|
||||||
ee.setDataList(list).write(response, fileName);
|
return page;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 下载模板
|
* 查看编辑表单
|
||||||
*/
|
*/
|
||||||
@RequiresPermissions("biz:myProjectInfo:view")
|
@RequiresPermissions("biz:myProjectInfo:view")
|
||||||
@RequestMapping(value = "importTemplate")
|
@RequestMapping(value = "form")
|
||||||
public void importTemplate(HttpServletResponse response) {
|
public String form(MyProjectInfo myProjectInfo, Model model) {
|
||||||
MyProjectInfo myProjectInfo = new MyProjectInfo();
|
model.addAttribute("myProjectInfo", myProjectInfo);
|
||||||
List<MyProjectInfo> list = ListUtils.newArrayList(myProjectInfo);
|
return "modules/biz/myProjectInfoForm";
|
||||||
String fileName = "项目模板.xlsx";
|
}
|
||||||
try(ExcelExport ee = new ExcelExport("项目", MyProjectInfo.class, Type.IMPORT)){
|
|
||||||
ee.setDataList(list).write(response, fileName);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导入数据
|
* 保存数据
|
||||||
*/
|
*/
|
||||||
@ResponseBody
|
@RequiresPermissions("biz:myProjectInfo:edit")
|
||||||
@RequiresPermissions("biz:myProjectInfo:edit")
|
@PostMapping(value = "save")
|
||||||
@PostMapping(value = "importData")
|
@ResponseBody
|
||||||
public String importData(MultipartFile file) {
|
public String save(@Validated MyProjectInfo myProjectInfo) {
|
||||||
try {
|
myProjectInfoService.save(myProjectInfo);
|
||||||
String message = myProjectInfoService.importData(file);
|
return renderResult(Global.TRUE, text("保存项目成功!"));
|
||||||
return renderResult(Global.TRUE, "posfull:"+message);
|
}
|
||||||
} catch (Exception ex) {
|
|
||||||
return renderResult(Global.FALSE, "posfull:"+ex.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 删除数据
|
|
||||||
*/
|
|
||||||
@RequiresPermissions("biz:myProjectInfo:edit")
|
|
||||||
@RequestMapping(value = "delete")
|
|
||||||
@ResponseBody
|
|
||||||
public String delete(MyProjectInfo myProjectInfo) {
|
|
||||||
myProjectInfoService.delete(myProjectInfo);
|
|
||||||
return renderResult(Global.TRUE, text("删除项目成功!"));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 列表数据
|
* 导出数据
|
||||||
*/
|
*/
|
||||||
@RequestMapping(value = "listAll")
|
@RequiresPermissions("biz:myProjectInfo:view")
|
||||||
@ResponseBody
|
@RequestMapping(value = "exportData")
|
||||||
public List<MyProjectInfo> listAll(MyProjectInfo myProjectInfo){
|
public void exportData(MyProjectInfo myProjectInfo, HttpServletResponse response) {
|
||||||
return myProjectInfoService.findList(myProjectInfo);
|
List<MyProjectInfo> list = myProjectInfoService.findList(myProjectInfo);
|
||||||
}
|
String fileName = "项目" + DateUtils.getDate("yyyyMMddHHmmss") + ".xlsx";
|
||||||
|
try (ExcelExport ee = new ExcelExport("项目", MyProjectInfo.class)) {
|
||||||
|
ee.setDataList(list).write(response, fileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 下载模板
|
||||||
|
*/
|
||||||
|
@RequiresPermissions("biz:myProjectInfo:view")
|
||||||
|
@RequestMapping(value = "importTemplate")
|
||||||
|
public void importTemplate(HttpServletResponse response) {
|
||||||
|
MyProjectInfo myProjectInfo = new MyProjectInfo();
|
||||||
|
List<MyProjectInfo> list = ListUtils.newArrayList(myProjectInfo);
|
||||||
|
String fileName = "项目模板.xlsx";
|
||||||
|
try (ExcelExport ee = new ExcelExport("项目", MyProjectInfo.class, Type.IMPORT)) {
|
||||||
|
ee.setDataList(list).write(response, fileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导入数据
|
||||||
|
*/
|
||||||
|
@ResponseBody
|
||||||
|
@RequiresPermissions("biz:myProjectInfo:edit")
|
||||||
|
@PostMapping(value = "importData")
|
||||||
|
public String importData(MultipartFile file) {
|
||||||
|
try {
|
||||||
|
String message = myProjectInfoService.importData(file);
|
||||||
|
return renderResult(Global.TRUE, "posfull:" + message);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
return renderResult(Global.FALSE, "posfull:" + ex.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除数据
|
||||||
|
*/
|
||||||
|
@RequiresPermissions("biz:myProjectInfo:edit")
|
||||||
|
@RequestMapping(value = "delete")
|
||||||
|
@ResponseBody
|
||||||
|
public String delete(MyProjectInfo myProjectInfo) {
|
||||||
|
myProjectInfoService.delete(myProjectInfo);
|
||||||
|
return renderResult(Global.TRUE, text("删除项目成功!"));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 列表数据
|
||||||
|
*/
|
||||||
|
@RequestMapping(value = "listAll")
|
||||||
|
@ResponseBody
|
||||||
|
public List<MyProjectInfo> listAll(MyProjectInfo myProjectInfo) {
|
||||||
|
return myProjectInfoService.findList(myProjectInfo);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 列表数据
|
||||||
|
*/
|
||||||
|
@RequestMapping(value = "projectList")
|
||||||
|
@ResponseBody
|
||||||
|
public PageResult<MyProjectInfo> getProjectList(MyProjectParams myProjectParams) {
|
||||||
|
MyProjectInfo myProjectInfo = new MyProjectInfo();
|
||||||
|
myProjectInfo.setProjectName(myProjectParams.getProjectName());
|
||||||
|
myProjectInfo.setProjectType(myProjectParams.getProjectType());
|
||||||
|
myProjectInfo.setProjectStatus(myProjectParams.getProjectStatus());
|
||||||
|
List<MyProjectInfo> list = myProjectInfoService.findList(myProjectInfo);
|
||||||
|
PageUtil<MyProjectInfo> util = new PageUtil<>(myProjectParams.getPageNum(), myProjectParams.getPageSize(), list);
|
||||||
|
return new PageResult<>(
|
||||||
|
util.OkData(),
|
||||||
|
util.getCurPage(),
|
||||||
|
util.getPageSize(),
|
||||||
|
util.getTotalCount()
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,7 @@ package com.jeesite.modules.erp.web;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import com.jeesite.modules.apps.Module.ErpFlowParams;
|
import com.jeesite.modules.apps.Module.Table.ErpFlowParams;
|
||||||
import com.jeesite.modules.apps.Module.PageResult;
|
import com.jeesite.modules.apps.Module.PageResult;
|
||||||
import com.jeesite.modules.utils.PageUtil;
|
import com.jeesite.modules.utils.PageUtil;
|
||||||
import jakarta.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
|||||||
@@ -31,12 +31,31 @@ export interface MyProjectInfo extends BasicModel<MyProjectInfo> {
|
|||||||
updateTime?: string; // 更新时间
|
updateTime?: string; // 更新时间
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export interface MyProjectParams extends BasicModel<MyProjectParams> {
|
||||||
|
pageNum: number; // 当前页
|
||||||
|
pageSize: number; // 每页条数
|
||||||
|
projectName: string; // 项目名称
|
||||||
|
projectType: string; // 项目类型
|
||||||
|
projectStatus: string; // 项目状态
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface PageResult<T> extends BasicModel<PageResult<T>> {
|
||||||
|
list: T[]; // 对应后端 List<T> list
|
||||||
|
currentPage: number; // 当前页
|
||||||
|
pageSize: number; // 每页条数
|
||||||
|
total: number; // 总条数
|
||||||
|
}
|
||||||
|
|
||||||
export const myProjectInfoList = (params?: MyProjectInfo | any) =>
|
export const myProjectInfoList = (params?: MyProjectInfo | any) =>
|
||||||
defHttp.get<MyProjectInfo>({ url: adminPath + '/biz/myProjectInfo/list', params });
|
defHttp.get<MyProjectInfo>({ url: adminPath + '/biz/myProjectInfo/list', params });
|
||||||
|
|
||||||
export const myProjectInfoListAll = (params?: MyProjectInfo | any) =>
|
export const myProjectInfoListAll = (params?: MyProjectInfo | any) =>
|
||||||
defHttp.get<MyProjectInfo[]>({ url: adminPath + '/biz/myProjectInfo/listAll', params });
|
defHttp.get<MyProjectInfo[]>({ url: adminPath + '/biz/myProjectInfo/listAll', params });
|
||||||
|
|
||||||
|
export const myProjectInfoPageList = (params?: MyProjectParams | any) =>
|
||||||
|
defHttp.get<PageResult<MyProjectInfo>>({ url: adminPath + '/biz/myProjectInfo/projectList', params });
|
||||||
|
|
||||||
export const myProjectInfoListData = (params?: MyProjectInfo | any) =>
|
export const myProjectInfoListData = (params?: MyProjectInfo | any) =>
|
||||||
defHttp.post<Page<MyProjectInfo>>({ url: adminPath + '/biz/myProjectInfo/listData', params });
|
defHttp.post<Page<MyProjectInfo>>({ url: adminPath + '/biz/myProjectInfo/listData', params });
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,211 @@
|
|||||||
|
<template>
|
||||||
|
<div class="biz-apps-card">
|
||||||
|
<div class="card-title">
|
||||||
|
<span>常用应用</span>
|
||||||
|
</div>
|
||||||
|
<div class="card-content">
|
||||||
|
<button v-for="item in appList" :key="item.id" class="biz-apps-item" type="button" @click="handleOpen(item)">
|
||||||
|
<div class="biz-apps-item__main">
|
||||||
|
<div class="biz-apps-item__pane biz-apps-item__pane--left">左侧区域</div>
|
||||||
|
<div class="biz-apps-item__pane biz-apps-item__pane--right">右侧区域</div>
|
||||||
|
</div>
|
||||||
|
<div class="biz-apps-item__name">{{ item.name }}</div>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ElMessage } from 'element-plus';
|
||||||
|
import { ref } from 'vue';
|
||||||
|
|
||||||
|
interface BizAppItem {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
url: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
const appList = ref<BizAppItem[]>([
|
||||||
|
{
|
||||||
|
id: 'oa',
|
||||||
|
name: '协同办公',
|
||||||
|
url: '/oa',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'erp',
|
||||||
|
name: 'ERP系统',
|
||||||
|
url: '/erp',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'mes',
|
||||||
|
name: 'MES平台',
|
||||||
|
url: '/mes',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'crm',
|
||||||
|
name: 'CRM系统',
|
||||||
|
url: '/crm',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'hr',
|
||||||
|
name: '人资门户',
|
||||||
|
url: '/hr',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 'bi',
|
||||||
|
name: '数据驾驶舱',
|
||||||
|
url: '/bi',
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
|
||||||
|
function handleOpen(item: BizAppItem) {
|
||||||
|
ElMessage.success(`准备进入:${item.name}`);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less">
|
||||||
|
.biz-apps-card {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
overflow: hidden;
|
||||||
|
background: rgb(255, 255, 255);
|
||||||
|
|
||||||
|
.card-title {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
height: 37px;
|
||||||
|
padding: 8px 16px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
flex-shrink: 0;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
|
line-height: 20px;
|
||||||
|
color: rgb(51 65 85);
|
||||||
|
border-bottom: 1px solid rgb(226 232 240);
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-content {
|
||||||
|
flex: 1;
|
||||||
|
min-height: 0;
|
||||||
|
padding: 8px 12px 12px;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(6, minmax(0, 1fr));
|
||||||
|
grid-template-rows: minmax(0, 1fr);
|
||||||
|
gap: 8px;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.biz-apps-item {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
min-width: 0;
|
||||||
|
min-height: 0;
|
||||||
|
padding: 8px;
|
||||||
|
border: 1px solid rgb(226 232 240);
|
||||||
|
border-radius: 10px;
|
||||||
|
background: rgb(255, 255, 255);
|
||||||
|
box-shadow: 0 8px 24px rgb(148 163 184 / 14%);
|
||||||
|
cursor: pointer;
|
||||||
|
transition:
|
||||||
|
transform 0.2s ease,
|
||||||
|
box-shadow 0.2s ease,
|
||||||
|
border-color 0.2s ease;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
border-color: rgb(147 197 253);
|
||||||
|
box-shadow: 0 12px 28px rgb(96 165 250 / 20%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&__main {
|
||||||
|
display: flex;
|
||||||
|
flex: 1;
|
||||||
|
width: 100%;
|
||||||
|
min-height: 0;
|
||||||
|
padding: 8px;
|
||||||
|
gap: 8px;
|
||||||
|
overflow: hidden;
|
||||||
|
border-radius: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__pane {
|
||||||
|
flex: 1 1 0;
|
||||||
|
min-width: 0;
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
border-radius: 8px;
|
||||||
|
background: rgb(255, 255, 255);
|
||||||
|
color: rgb(51 65 85);
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 16px;
|
||||||
|
box-shadow: 0 8px 24px rgb(148 163 184 / 14%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&__name {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
width: 100%;
|
||||||
|
min-height: 28px;
|
||||||
|
margin-top: 2px;
|
||||||
|
padding-top: 4px;
|
||||||
|
border-top: 1px solid rgb(226 232 240);
|
||||||
|
color: rgb(51 65 85);
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 16px;
|
||||||
|
text-align: center;
|
||||||
|
word-break: break-word;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme='dark'] .biz-apps-card {
|
||||||
|
background: rgb(20, 20, 20);
|
||||||
|
|
||||||
|
.card-title {
|
||||||
|
color: rgb(203 213 225);
|
||||||
|
border-bottom-color: rgb(51 65 85);
|
||||||
|
}
|
||||||
|
|
||||||
|
.biz-apps-item {
|
||||||
|
border-color: rgb(51 65 85);
|
||||||
|
background: rgb(20, 20, 20);
|
||||||
|
box-shadow: 0 10px 24px rgb(0 0 0 / 24%);
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
border-color: rgb(96 165 250);
|
||||||
|
box-shadow: 0 14px 32px rgb(37 99 235 / 22%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&__pane,
|
||||||
|
&__pane--left,
|
||||||
|
&__pane--right {
|
||||||
|
background: linear-gradient(180deg, rgb(20, 20, 20) 0%, rgb(28 28 28) 100%);
|
||||||
|
color: rgb(226 232 240);
|
||||||
|
box-shadow: 0 10px 24px rgb(0 0 0 / 24%);
|
||||||
|
}
|
||||||
|
|
||||||
|
&__name {
|
||||||
|
border-top-color: rgb(51 65 85);
|
||||||
|
color: rgb(226 232 240);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.biz-apps-card {
|
||||||
|
.card-content {
|
||||||
|
grid-template-columns: repeat(3, minmax(0, 1fr));
|
||||||
|
grid-template-rows: repeat(2, minmax(0, 1fr));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -283,12 +283,16 @@
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
background: rgb(255, 255, 255);
|
||||||
|
|
||||||
.card-title {
|
.card-title {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
height: 37px;
|
||||||
padding: 8px 16px;
|
padding: 8px 16px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
flex-shrink: 0;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
@@ -322,7 +326,7 @@
|
|||||||
.card-content {
|
.card-content {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
padding: 16px;
|
padding: 8px 12px 12px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
background: transparent;
|
background: transparent;
|
||||||
}
|
}
|
||||||
@@ -330,7 +334,7 @@
|
|||||||
.host-overview {
|
.host-overview {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||||
gap: 12px;
|
gap: 8px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
align-items: stretch;
|
align-items: stretch;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
@@ -343,9 +347,9 @@
|
|||||||
min-width: 0;
|
min-width: 0;
|
||||||
min-height: 160px;
|
min-height: 160px;
|
||||||
padding: 8px;
|
padding: 8px;
|
||||||
border-radius: 14px;
|
border-radius: 10px;
|
||||||
background: rgb(248, 250, 252);
|
background: rgb(255, 255, 255);
|
||||||
box-shadow: 0 10px 28px rgb(148 163 184 / 16%);
|
box-shadow: 0 8px 24px rgb(148 163 184 / 14%);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -361,7 +365,7 @@
|
|||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||||
grid-template-rows: repeat(2, minmax(0, 1fr));
|
grid-template-rows: repeat(2, minmax(0, 1fr));
|
||||||
gap: 10px;
|
gap: 8px;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
background: transparent;
|
background: transparent;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
@@ -376,9 +380,9 @@
|
|||||||
justify-content: center;
|
justify-content: center;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
padding: 10px 12px;
|
padding: 8px;
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
background: rgb(248, 250, 252);
|
background: rgb(255, 255, 255);
|
||||||
box-shadow: 0 8px 24px rgb(148 163 184 / 14%);
|
box-shadow: 0 8px 24px rgb(148 163 184 / 14%);
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
transition:
|
transition:
|
||||||
@@ -387,7 +391,7 @@
|
|||||||
background 0.2s ease;
|
background 0.2s ease;
|
||||||
|
|
||||||
&__label {
|
&__label {
|
||||||
margin-top: 6px;
|
margin-top: 4px;
|
||||||
color: rgb(71 85 105);
|
color: rgb(71 85 105);
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
line-height: 16px;
|
line-height: 16px;
|
||||||
@@ -397,8 +401,8 @@
|
|||||||
|
|
||||||
&__chart {
|
&__chart {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 72px;
|
height: 68px;
|
||||||
min-height: 72px;
|
min-height: 68px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
@@ -409,6 +413,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
html[data-theme='dark'] .host-card {
|
html[data-theme='dark'] .host-card {
|
||||||
|
background: rgb(20, 20, 20);
|
||||||
|
|
||||||
.card-title {
|
.card-title {
|
||||||
color: rgb(203 213 225);
|
color: rgb(203 213 225);
|
||||||
border-bottom-color: rgb(51 65 85);
|
border-bottom-color: rgb(51 65 85);
|
||||||
@@ -433,7 +439,7 @@
|
|||||||
|
|
||||||
.host-gauge-panel {
|
.host-gauge-panel {
|
||||||
background: linear-gradient(180deg, rgb(20, 20, 20) 0%, rgb(28 28 28) 100%);
|
background: linear-gradient(180deg, rgb(20, 20, 20) 0%, rgb(28 28 28) 100%);
|
||||||
box-shadow: 0 12px 30px rgb(0 0 0 / 28%);
|
box-shadow: 0 10px 24px rgb(0 0 0 / 24%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.metric-item {
|
.metric-item {
|
||||||
@@ -445,7 +451,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
box-shadow: 0 14px 32px rgb(37 99 235 / 22%);
|
box-shadow: 0 12px 28px rgb(96 165 250 / 20%);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -215,12 +215,16 @@
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
background: rgb(255, 255, 255);
|
||||||
|
|
||||||
.card-title {
|
.card-title {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
height: 37px;
|
||||||
padding: 8px 16px;
|
padding: 8px 16px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
flex-shrink: 0;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
@@ -283,7 +287,7 @@
|
|||||||
.el-table {
|
.el-table {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
--el-table-border-color: transparent;
|
--el-table-border-color: transparent;
|
||||||
--el-table-header-bg-color: rgb(248, 250, 252);
|
--el-table-header-bg-color: rgb(255, 255, 255);
|
||||||
--el-table-tr-bg-color: transparent;
|
--el-table-tr-bg-color: transparent;
|
||||||
--el-table-row-hover-bg-color: rgb(241 245 249);
|
--el-table-row-hover-bg-color: rgb(241 245 249);
|
||||||
--el-table-text-color: rgb(71 85 105);
|
--el-table-text-color: rgb(71 85 105);
|
||||||
@@ -305,7 +309,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
th.el-table__cell {
|
th.el-table__cell {
|
||||||
background: rgb(248, 250, 252);
|
background: rgb(255, 255, 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
td.el-table__cell,
|
td.el-table__cell,
|
||||||
@@ -350,15 +354,15 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&__divider {
|
&__divider {
|
||||||
margin: 16px 0;
|
margin: 12px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__content-panel,
|
&__content-panel,
|
||||||
&__attachments-panel {
|
&__attachments-panel {
|
||||||
padding: 2px;
|
padding: 4px;
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: 8px;
|
border-radius: 10px;
|
||||||
background: rgb(248 252 255);
|
background: rgb(255, 255, 255);
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -366,7 +370,7 @@
|
|||||||
margin-top: 16px;
|
margin-top: 16px;
|
||||||
padding: 12px;
|
padding: 12px;
|
||||||
border: 1px solid rgb(219 234 254);
|
border: 1px solid rgb(219 234 254);
|
||||||
background: rgb(248 252 255);
|
background: rgb(255, 255, 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
&__title {
|
&__title {
|
||||||
@@ -402,7 +406,7 @@
|
|||||||
max-height: 320px;
|
max-height: 320px;
|
||||||
padding: 14px 16px;
|
padding: 14px 16px;
|
||||||
border: 1px solid rgb(191 219 254);
|
border: 1px solid rgb(191 219 254);
|
||||||
border-radius: 6px;
|
border-radius: 10px;
|
||||||
background: rgb(255 255 255);
|
background: rgb(255 255 255);
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
@@ -452,8 +456,8 @@
|
|||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
padding: 0 12px;
|
padding: 0 12px;
|
||||||
border: none;
|
border: none;
|
||||||
border-radius: 6px;
|
border-radius: 10px;
|
||||||
background: rgb(239 246 255);
|
background: rgb(255, 255, 255);
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
color: rgb(51 65 85);
|
color: rgb(51 65 85);
|
||||||
@@ -492,9 +496,9 @@
|
|||||||
gap: 12px;
|
gap: 12px;
|
||||||
padding: 10px 12px;
|
padding: 10px 12px;
|
||||||
border: 1px solid rgb(219 234 254);
|
border: 1px solid rgb(219 234 254);
|
||||||
border-radius: 6px;
|
border-radius: 10px;
|
||||||
background: linear-gradient(180deg, rgb(255 255 255) 0%, rgb(248 250 252) 100%);
|
background: rgb(255, 255, 255);
|
||||||
box-shadow: 0 6px 16px rgb(148 163 184 / 12%);
|
box-shadow: 0 8px 24px rgb(148 163 184 / 14%);
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
color: rgb(71 85 105);
|
color: rgb(71 85 105);
|
||||||
transition:
|
transition:
|
||||||
@@ -549,8 +553,8 @@
|
|||||||
&__attachment-item:hover {
|
&__attachment-item:hover {
|
||||||
transform: translateY(-2px);
|
transform: translateY(-2px);
|
||||||
border-color: rgb(147 197 253);
|
border-color: rgb(147 197 253);
|
||||||
background: linear-gradient(180deg, rgb(239 246 255) 0%, rgb(219 234 254) 100%);
|
background: rgb(255, 255, 255);
|
||||||
box-shadow: 0 10px 22px rgb(96 165 250 / 18%);
|
box-shadow: 0 12px 28px rgb(96 165 250 / 20%);
|
||||||
color: rgb(30 41 59);
|
color: rgb(30 41 59);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -570,13 +574,13 @@
|
|||||||
|
|
||||||
.el-dialog__header {
|
.el-dialog__header {
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
padding: 12px 12px 10px;
|
padding: 12px 16px;
|
||||||
border-bottom: 1px solid rgb(226 232 240) !important;
|
border-bottom: 1px solid rgb(226 232 240) !important;
|
||||||
background: rgb(255 255 255) !important;
|
background: rgb(255 255 255) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-dialog__body {
|
.el-dialog__body {
|
||||||
padding: 2px;
|
padding: 4px 16px 16px;
|
||||||
background: rgb(255 255 255) !important;
|
background: rgb(255 255 255) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -587,6 +591,7 @@
|
|||||||
|
|
||||||
html[data-theme='dark'] .notice-card {
|
html[data-theme='dark'] .notice-card {
|
||||||
box-shadow: none;
|
box-shadow: none;
|
||||||
|
background: rgb(20, 20, 20);
|
||||||
|
|
||||||
.card-title {
|
.card-title {
|
||||||
color: rgb(203 213 225);
|
color: rgb(203 213 225);
|
||||||
@@ -663,7 +668,7 @@
|
|||||||
&__attachments-empty {
|
&__attachments-empty {
|
||||||
border-color: rgb(71 85 105);
|
border-color: rgb(71 85 105);
|
||||||
background: rgb(20, 20, 20);
|
background: rgb(20, 20, 20);
|
||||||
box-shadow: 0 6px 16px rgb(2 6 23 / 26%);
|
box-shadow: 0 10px 24px rgb(0 0 0 / 24%);
|
||||||
color: rgb(226 232 240);
|
color: rgb(226 232 240);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -682,7 +687,7 @@
|
|||||||
&__attachment-item:hover {
|
&__attachment-item:hover {
|
||||||
border-color: rgb(96 165 250);
|
border-color: rgb(96 165 250);
|
||||||
background: rgb(37 99 235 / 22%);
|
background: rgb(37 99 235 / 22%);
|
||||||
box-shadow: 0 10px 24px rgb(59 130 246 / 20%);
|
box-shadow: 0 14px 32px rgb(37 99 235 / 22%);
|
||||||
color: rgb(241 245 249);
|
color: rgb(241 245 249);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,685 @@
|
|||||||
|
<template>
|
||||||
|
<div class="oper-log-card">
|
||||||
|
<div class="card-title">
|
||||||
|
<span>项目信息</span>
|
||||||
|
</div>
|
||||||
|
<div class="card-content">
|
||||||
|
<div class="query-panel">
|
||||||
|
<el-form :model="searchForm" inline class="query-form" @submit.prevent>
|
||||||
|
<el-form-item label="项目名称">
|
||||||
|
<el-input v-model="searchForm.projectName" placeholder="请输入项目名称" clearable />
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="项目类型">
|
||||||
|
<el-select v-model="searchForm.projectType" placeholder="请选择项目类型" clearable>
|
||||||
|
<el-option label="新增" value="新增" />
|
||||||
|
<el-option label="修改" value="修改" />
|
||||||
|
<el-option label="删除" value="删除" />
|
||||||
|
<el-option label="导出" value="导出" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="项目状态">
|
||||||
|
<el-select v-model="searchForm.projectStatus" placeholder="请选择项目状态" clearable>
|
||||||
|
<el-option label="成功" value="成功" />
|
||||||
|
<el-option label="失败" value="失败" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item class="query-form__actions">
|
||||||
|
<el-button type="primary" :icon="Search" @click="handleSearch">查询</el-button>
|
||||||
|
<el-button :icon="RefreshRight" @click="handleReset">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="table-panel">
|
||||||
|
<div class="table-panel__body">
|
||||||
|
<el-table
|
||||||
|
v-loading="loading"
|
||||||
|
:data="sourceData"
|
||||||
|
height="100%"
|
||||||
|
:border="false"
|
||||||
|
:show-header="true"
|
||||||
|
show-summary
|
||||||
|
:summary-method="getSummaries"
|
||||||
|
>
|
||||||
|
<el-table-column prop="projectCode" label="项目编码" min-width="100" show-overflow-tooltip />
|
||||||
|
<el-table-column prop="projectName" label="项目名称" min-width="120" show-overflow-tooltip />
|
||||||
|
<el-table-column prop="projectType" label="项目类型" width="120" show-overflow-tooltip />
|
||||||
|
<el-table-column prop="priority" label="项目级别" width="100" show-overflow-tooltip />
|
||||||
|
<el-table-column prop="projectStatus" label="项目状态" width="100" />
|
||||||
|
<el-table-column prop="budget" label="项目预算" width="120" show-overflow-tooltip />
|
||||||
|
<el-table-column prop="startDate" label="开始日期" width="150" show-overflow-tooltip />
|
||||||
|
<el-table-column prop="endDate" label="结束日期" width="150" show-overflow-tooltip />
|
||||||
|
</el-table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pagination-panel">
|
||||||
|
<el-pagination
|
||||||
|
v-model:current-page="currentPage"
|
||||||
|
v-model:page-size="pageSize"
|
||||||
|
:total="total"
|
||||||
|
:page-sizes="[10, 20, 50, 99]"
|
||||||
|
layout="total, sizes, prev, pager, next, jumper"
|
||||||
|
size="small"
|
||||||
|
@size-change="handleSizeChange"
|
||||||
|
@current-change="handleCurrentChange"
|
||||||
|
background
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { RefreshRight, Search } from '@element-plus/icons-vue';
|
||||||
|
import type { TableColumnCtx } from 'element-plus';
|
||||||
|
import { onMounted, reactive, ref } from 'vue';
|
||||||
|
import { MyProjectInfo, myProjectInfoPageList } from '@jeesite/biz/api/biz/myProjectInfo';
|
||||||
|
|
||||||
|
const sourceData = ref<MyProjectInfo[]>([]);
|
||||||
|
const loading = ref(false);
|
||||||
|
|
||||||
|
const searchForm = reactive({
|
||||||
|
projectName: '',
|
||||||
|
projectType: '',
|
||||||
|
projectStatus: '',
|
||||||
|
});
|
||||||
|
|
||||||
|
const currentPage = ref(1);
|
||||||
|
const pageSize = ref(20);
|
||||||
|
const total = ref(0);
|
||||||
|
|
||||||
|
const handleSearch = () => {
|
||||||
|
currentPage.value = 1;
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleReset = () => {
|
||||||
|
Object.assign(searchForm, {
|
||||||
|
projectName: '',
|
||||||
|
projectType: '',
|
||||||
|
projectStatus: '',
|
||||||
|
});
|
||||||
|
currentPage.value = 1;
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleSizeChange = (val: number) => {
|
||||||
|
pageSize.value = val;
|
||||||
|
currentPage.value = 1;
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleCurrentChange = (val: number) => {
|
||||||
|
currentPage.value = val;
|
||||||
|
getList();
|
||||||
|
};
|
||||||
|
|
||||||
|
async function getList() {
|
||||||
|
loading.value = true;
|
||||||
|
try {
|
||||||
|
const reqParmas = {
|
||||||
|
...searchForm,
|
||||||
|
pageNum: currentPage.value,
|
||||||
|
pageSize: pageSize.value,
|
||||||
|
};
|
||||||
|
const res = await myProjectInfoPageList(reqParmas);
|
||||||
|
total.value = res?.total || 0;
|
||||||
|
sourceData.value = res?.list || [];
|
||||||
|
} catch (error) {
|
||||||
|
sourceData.value = [];
|
||||||
|
total.value = 0;
|
||||||
|
console.error('获取数据失败:', error);
|
||||||
|
} finally {
|
||||||
|
loading.value = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
|
||||||
|
function getSummaries({ columns, data }: { columns: TableColumnCtx<MyProjectInfo>[]; data: MyProjectInfo[] }) {
|
||||||
|
return columns.map((column, index) => {
|
||||||
|
if (index === 0) return '合计';
|
||||||
|
if (column.property !== 'budget') return '';
|
||||||
|
const totalBudget = data.reduce((sum, row) => {
|
||||||
|
const budget = Number(row.budget || 0);
|
||||||
|
return Number.isFinite(budget) ? sum + budget : sum;
|
||||||
|
}, 0);
|
||||||
|
return totalBudget.toLocaleString('zh-CN');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less">
|
||||||
|
.oper-log-card {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
box-sizing: border-box;
|
||||||
|
overflow: hidden;
|
||||||
|
background: rgb(255, 255, 255);
|
||||||
|
|
||||||
|
.card-title {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: space-between;
|
||||||
|
height: 37px;
|
||||||
|
padding: 8px 16px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
flex-shrink: 0;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: 500;
|
||||||
|
line-height: 20px;
|
||||||
|
color: rgb(51 65 85);
|
||||||
|
border-bottom: 1px solid rgb(226 232 240);
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-content {
|
||||||
|
flex: 1;
|
||||||
|
min-height: 0;
|
||||||
|
padding: 8px 12px 12px;
|
||||||
|
color: rgb(71 85 105);
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 22px;
|
||||||
|
overflow: hidden;
|
||||||
|
background: transparent;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.query-panel,
|
||||||
|
.table-panel {
|
||||||
|
border-radius: 10px;
|
||||||
|
background: rgb(255, 255, 255);
|
||||||
|
box-shadow: 0 8px 24px rgb(148 163 184 / 14%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.query-panel {
|
||||||
|
flex-shrink: 0;
|
||||||
|
padding: 10px 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.query-form {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, minmax(0, 1fr)) auto;
|
||||||
|
align-items: end;
|
||||||
|
gap: 12px;
|
||||||
|
|
||||||
|
.el-form-item {
|
||||||
|
margin-bottom: 0;
|
||||||
|
margin-right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-input,
|
||||||
|
.el-select {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-input),
|
||||||
|
:deep(.el-select) {
|
||||||
|
--el-fill-color-blank: rgb(255, 255, 255);
|
||||||
|
--el-bg-color: rgb(255, 255, 255);
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-input__wrapper),
|
||||||
|
:deep(.el-select__wrapper) {
|
||||||
|
--el-fill-color-blank: rgb(255, 255, 255);
|
||||||
|
--el-bg-color: rgb(255, 255, 255);
|
||||||
|
background: rgb(255, 255, 255);
|
||||||
|
box-shadow: 0 0 0 1px rgb(226 232 240) inset;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-input__inner),
|
||||||
|
:deep(.el-select__selected-item),
|
||||||
|
:deep(.el-select__placeholder),
|
||||||
|
:deep(.el-input__inner::placeholder) {
|
||||||
|
background: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__actions {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-end;
|
||||||
|
gap: 8px;
|
||||||
|
min-width: 172px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-panel {
|
||||||
|
flex: 1;
|
||||||
|
min-height: 0;
|
||||||
|
padding: 8px 12px 0;
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
&__body {
|
||||||
|
flex: 1;
|
||||||
|
min-height: 0;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-table {
|
||||||
|
width: 100%;
|
||||||
|
--el-table-border-color: transparent;
|
||||||
|
--el-table-header-bg-color: rgb(255, 255, 255);
|
||||||
|
--el-table-tr-bg-color: transparent;
|
||||||
|
--el-table-row-hover-bg-color: rgb(241 245 249);
|
||||||
|
--el-table-text-color: rgb(71 85 105);
|
||||||
|
--el-table-header-text-color: rgb(51 65 85);
|
||||||
|
background: transparent;
|
||||||
|
|
||||||
|
&::before,
|
||||||
|
&::after,
|
||||||
|
.el-table__inner-wrapper::before,
|
||||||
|
.el-table__border-left-patch {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
th.el-table__cell,
|
||||||
|
td.el-table__cell {
|
||||||
|
border-right: none;
|
||||||
|
border-left: none;
|
||||||
|
border-bottom: 1px solid rgb(226 232 240);
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-table__footer-wrapper td.el-table__cell {
|
||||||
|
background: rgb(255, 255, 255);
|
||||||
|
border-top: 1px solid rgb(226 232 240);
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-table__footer-wrapper .cell {
|
||||||
|
color: rgb(51 65 85);
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
th.el-table__cell {
|
||||||
|
background: rgb(255, 255, 255);
|
||||||
|
}
|
||||||
|
|
||||||
|
td.el-table__cell,
|
||||||
|
th.el-table__cell {
|
||||||
|
padding: 8px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cell {
|
||||||
|
line-height: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination-panel {
|
||||||
|
flex-shrink: 0;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
padding: 8px 12px;
|
||||||
|
margin-top: auto;
|
||||||
|
border-top: 1px solid rgb(226 232 240);
|
||||||
|
background: rgb(255, 255, 255);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme='dark'] .oper-log-card {
|
||||||
|
background: rgb(20, 20, 20);
|
||||||
|
|
||||||
|
.card-title {
|
||||||
|
color: rgb(203 213 225);
|
||||||
|
border-bottom-color: rgb(51 65 85);
|
||||||
|
}
|
||||||
|
|
||||||
|
.query-panel,
|
||||||
|
.table-panel {
|
||||||
|
background: linear-gradient(180deg, rgb(20, 20, 20) 0%, rgb(28 28 28) 100%);
|
||||||
|
box-shadow: 0 10px 24px rgb(0 0 0 / 24%);
|
||||||
|
}
|
||||||
|
|
||||||
|
.query-form {
|
||||||
|
:deep(.el-form-item__label) {
|
||||||
|
color: rgb(148 163 184);
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-input__wrapper),
|
||||||
|
:deep(.el-select__wrapper) {
|
||||||
|
--el-fill-color-blank: rgb(20, 20, 20);
|
||||||
|
--el-bg-color: rgb(20, 20, 20);
|
||||||
|
background: rgb(20, 20, 20);
|
||||||
|
box-shadow: 0 0 0 1px rgb(71 85 105) inset;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-input),
|
||||||
|
:deep(.el-select) {
|
||||||
|
--el-fill-color-blank: rgb(20, 20, 20);
|
||||||
|
--el-bg-color: rgb(20, 20, 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-select-dropdown),
|
||||||
|
:deep(.el-popper),
|
||||||
|
:deep(.el-select__popper.el-popper) {
|
||||||
|
background: rgb(20, 20, 20);
|
||||||
|
border-color: rgb(51 65 85);
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-select-dropdown__item) {
|
||||||
|
color: rgb(226 232 240);
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-select-dropdown__item.hover),
|
||||||
|
:deep(.el-select-dropdown__item:hover),
|
||||||
|
:deep(.el-select-dropdown__item.is-hovering) {
|
||||||
|
background: rgb(30 41 59);
|
||||||
|
color: rgb(241 245 249);
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-select-dropdown__item.is-selected) {
|
||||||
|
color: rgb(147 197 253);
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-input__inner),
|
||||||
|
:deep(.el-input__inner::placeholder),
|
||||||
|
:deep(.el-select__selected-item),
|
||||||
|
:deep(.el-select__placeholder) {
|
||||||
|
color: rgb(226 232 240);
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-input__wrapper.is-focus),
|
||||||
|
:deep(.el-select__wrapper.is-focused) {
|
||||||
|
box-shadow: 0 0 0 1px rgb(96 165 250) inset;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-select__caret),
|
||||||
|
:deep(.el-input__icon),
|
||||||
|
:deep(.el-select__suffix),
|
||||||
|
:deep(.el-input__suffix),
|
||||||
|
:deep(.el-input__clear),
|
||||||
|
:deep(.el-select__caret.el-icon),
|
||||||
|
:deep(.el-select__caret .el-icon) {
|
||||||
|
color: rgb(148 163 184);
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-input__clear:hover),
|
||||||
|
:deep(.el-select__caret:hover),
|
||||||
|
:deep(.el-input__suffix-inner:hover) {
|
||||||
|
color: rgb(191 219 254);
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-button) {
|
||||||
|
--el-fill-color-blank: rgb(30 41 59);
|
||||||
|
--el-bg-color: rgb(30 41 59);
|
||||||
|
border-color: rgb(71 85 105);
|
||||||
|
background: rgb(30 41 59);
|
||||||
|
color: rgb(226 232 240);
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-button:hover) {
|
||||||
|
border-color: rgb(96 165 250);
|
||||||
|
background: rgb(37 99 235 / 22%);
|
||||||
|
color: rgb(241 245 249);
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-button--primary) {
|
||||||
|
border-color: rgb(59 130 246);
|
||||||
|
background: rgb(37 99 235);
|
||||||
|
color: rgb(248 250 252);
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-button--primary:hover) {
|
||||||
|
border-color: rgb(96 165 250);
|
||||||
|
background: rgb(59 130 246);
|
||||||
|
color: rgb(248 250 252);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-panel {
|
||||||
|
.el-table {
|
||||||
|
--el-table-border-color: transparent;
|
||||||
|
--el-table-header-bg-color: rgb(20, 20, 20);
|
||||||
|
--el-table-tr-bg-color: transparent;
|
||||||
|
--el-table-row-hover-bg-color: rgb(30 41 59);
|
||||||
|
--el-table-text-color: rgb(148 163 184);
|
||||||
|
--el-table-header-text-color: rgb(226 232 240);
|
||||||
|
background: transparent;
|
||||||
|
|
||||||
|
th.el-table__cell {
|
||||||
|
background: rgb(20, 20, 20);
|
||||||
|
}
|
||||||
|
|
||||||
|
th.el-table__cell,
|
||||||
|
td.el-table__cell {
|
||||||
|
border-bottom-color: rgb(51 65 85);
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-table__footer-wrapper td.el-table__cell {
|
||||||
|
background: rgb(20, 20, 20);
|
||||||
|
border-top: 1px solid rgb(51 65 85);
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-table__footer-wrapper .cell {
|
||||||
|
color: rgb(226 232 240);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination-panel {
|
||||||
|
border-top: 1px solid rgb(51 65 85);
|
||||||
|
background: transparent;
|
||||||
|
|
||||||
|
:deep(.el-pagination) {
|
||||||
|
--el-pagination-text-color: rgb(226 232 240);
|
||||||
|
--el-pagination-button-color: rgb(226 232 240);
|
||||||
|
--el-pagination-button-bg-color: rgb(30 41 59);
|
||||||
|
--el-pagination-hover-color: rgb(147 197 253);
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.btn-prev),
|
||||||
|
:deep(.btn-next),
|
||||||
|
:deep(.el-pager li),
|
||||||
|
:deep(.el-pagination button) {
|
||||||
|
background: rgb(30 41 59) !important;
|
||||||
|
color: rgb(226 232 240) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-pager li.is-active) {
|
||||||
|
background: rgb(37 99 235) !important;
|
||||||
|
color: rgb(248 250 252) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-pagination__total),
|
||||||
|
:deep(.el-pagination__jump),
|
||||||
|
:deep(.el-pagination__sizes) {
|
||||||
|
color: rgb(226 232 240) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-pagination .el-input__wrapper),
|
||||||
|
:deep(.el-pagination .el-select__wrapper) {
|
||||||
|
--el-fill-color-blank: rgb(20, 20, 20);
|
||||||
|
--el-bg-color: rgb(20, 20, 20);
|
||||||
|
background: rgb(20, 20, 20) !important;
|
||||||
|
box-shadow: 0 0 0 1px rgb(71 85 105) inset !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-pagination .el-input__inner),
|
||||||
|
:deep(.el-pagination .el-select__selected-item),
|
||||||
|
:deep(.el-pagination .el-input__inner::placeholder) {
|
||||||
|
color: rgb(226 232 240) !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme='dark'] .el-select__popper,
|
||||||
|
html[data-theme='dark'] .el-popper,
|
||||||
|
html[data-theme='dark'] .el-select-dropdown {
|
||||||
|
--el-bg-color-overlay: rgb(20, 20, 20);
|
||||||
|
--el-fill-color-blank: rgb(20, 20, 20);
|
||||||
|
background: rgb(20, 20, 20) !important;
|
||||||
|
border-color: rgb(51 65 85) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme='dark'] .el-popper__arrow::before,
|
||||||
|
html[data-theme='dark'] .el-select__popper .el-popper__arrow::before {
|
||||||
|
background: rgb(20, 20, 20) !important;
|
||||||
|
border-color: rgb(51 65 85) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme='dark'] .el-select-dropdown__item {
|
||||||
|
color: rgb(226 232 240) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme='dark'] .el-select-dropdown__item.hover,
|
||||||
|
html[data-theme='dark'] .el-select-dropdown__item:hover,
|
||||||
|
html[data-theme='dark'] .el-select-dropdown__item.is-hovering {
|
||||||
|
background: rgb(30 41 59) !important;
|
||||||
|
color: rgb(241 245 249) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme='dark'] .el-select-dropdown__item.is-selected {
|
||||||
|
color: rgb(147 197 253) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme='dark'] .el-pagination .btn-prev,
|
||||||
|
html[data-theme='dark'] .el-pagination .btn-next,
|
||||||
|
html[data-theme='dark'] .el-pagination .el-pager li,
|
||||||
|
html[data-theme='dark'] .el-pagination button {
|
||||||
|
background: rgb(30 41 59) !important;
|
||||||
|
color: rgb(226 232 240) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme='dark'] .el-pagination .el-pager li.is-active {
|
||||||
|
background: rgb(37 99 235) !important;
|
||||||
|
color: rgb(248 250 252) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme='dark'] .el-pagination .el-input__wrapper,
|
||||||
|
html[data-theme='dark'] .el-pagination .el-select__wrapper {
|
||||||
|
--el-fill-color-blank: rgb(20, 20, 20);
|
||||||
|
--el-bg-color: rgb(20, 20, 20);
|
||||||
|
background: rgb(20, 20, 20) !important;
|
||||||
|
box-shadow: 0 0 0 1px rgb(71 85 105) inset !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme='dark'] .oper-log-card .el-input__wrapper,
|
||||||
|
html[data-theme='dark'] .oper-log-card .el-select__wrapper,
|
||||||
|
html[data-theme='dark'] .oper-log-card .el-textarea__wrapper,
|
||||||
|
html[data-theme='dark'] .oper-log-card .el-input-group__prepend,
|
||||||
|
html[data-theme='dark'] .oper-log-card .el-input-group__append {
|
||||||
|
--el-fill-color-blank: rgb(20, 20, 20) !important;
|
||||||
|
--el-bg-color: rgb(20, 20, 20) !important;
|
||||||
|
background: rgb(20, 20, 20) !important;
|
||||||
|
box-shadow: 0 0 0 1px rgb(71 85 105) inset !important;
|
||||||
|
border-color: rgb(71 85 105) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme='dark'] .oper-log-card .el-input__inner,
|
||||||
|
html[data-theme='dark'] .oper-log-card .el-textarea__inner,
|
||||||
|
html[data-theme='dark'] .oper-log-card .el-select__selected-item,
|
||||||
|
html[data-theme='dark'] .oper-log-card .el-select__placeholder,
|
||||||
|
html[data-theme='dark'] .oper-log-card .el-input__inner::placeholder,
|
||||||
|
html[data-theme='dark'] .oper-log-card .el-textarea__inner::placeholder {
|
||||||
|
background: transparent !important;
|
||||||
|
color: rgb(226 232 240) !important;
|
||||||
|
-webkit-text-fill-color: rgb(226 232 240) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme='dark'] .oper-log-card .el-input.is-disabled .el-input__wrapper,
|
||||||
|
html[data-theme='dark'] .oper-log-card .el-select.is-disabled .el-select__wrapper {
|
||||||
|
background: rgb(30 41 59) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme='dark'] .oper-log-card .el-input__suffix,
|
||||||
|
html[data-theme='dark'] .oper-log-card .el-input__prefix,
|
||||||
|
html[data-theme='dark'] .oper-log-card .el-input__icon,
|
||||||
|
html[data-theme='dark'] .oper-log-card .el-select__caret,
|
||||||
|
html[data-theme='dark'] .oper-log-card .el-input__clear {
|
||||||
|
color: rgb(148 163 184) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme='dark'] .oper-log-card .query-form__actions .el-button {
|
||||||
|
--el-button-bg-color: rgb(30 41 59) !important;
|
||||||
|
--el-button-border-color: rgb(71 85 105) !important;
|
||||||
|
--el-button-text-color: rgb(226 232 240) !important;
|
||||||
|
--el-button-hover-bg-color: rgb(37 99 235 / 22%) !important;
|
||||||
|
--el-button-hover-border-color: rgb(96 165 250) !important;
|
||||||
|
--el-button-hover-text-color: rgb(241 245 249) !important;
|
||||||
|
--el-button-active-bg-color: rgb(37 99 235 / 28%) !important;
|
||||||
|
--el-button-active-border-color: rgb(96 165 250) !important;
|
||||||
|
--el-button-active-text-color: rgb(241 245 249) !important;
|
||||||
|
background: rgb(30 41 59) !important;
|
||||||
|
border-color: rgb(71 85 105) !important;
|
||||||
|
color: rgb(226 232 240) !important;
|
||||||
|
box-shadow: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme='dark'] .oper-log-card .query-form__actions .el-button:hover,
|
||||||
|
html[data-theme='dark'] .oper-log-card .query-form__actions .el-button:focus {
|
||||||
|
background: rgb(37 99 235 / 22%) !important;
|
||||||
|
border-color: rgb(96 165 250) !important;
|
||||||
|
color: rgb(241 245 249) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme='dark'] .oper-log-card .query-form__actions .el-button--primary {
|
||||||
|
--el-button-bg-color: rgb(37 99 235) !important;
|
||||||
|
--el-button-border-color: rgb(59 130 246) !important;
|
||||||
|
--el-button-text-color: rgb(248 250 252) !important;
|
||||||
|
--el-button-hover-bg-color: rgb(59 130 246) !important;
|
||||||
|
--el-button-hover-border-color: rgb(96 165 250) !important;
|
||||||
|
--el-button-hover-text-color: rgb(248 250 252) !important;
|
||||||
|
background: rgb(37 99 235) !important;
|
||||||
|
border-color: rgb(59 130 246) !important;
|
||||||
|
color: rgb(248 250 252) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme='dark'] .oper-log-card .query-form__actions .el-button--primary:hover,
|
||||||
|
html[data-theme='dark'] .oper-log-card .query-form__actions .el-button--primary:focus {
|
||||||
|
background: rgb(59 130 246) !important;
|
||||||
|
border-color: rgb(96 165 250) !important;
|
||||||
|
color: rgb(248 250 252) !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 1200px) {
|
||||||
|
.oper-log-card {
|
||||||
|
.query-form {
|
||||||
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||||
|
|
||||||
|
&__actions {
|
||||||
|
grid-column: 1 / -1;
|
||||||
|
justify-content: flex-end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.oper-log-card {
|
||||||
|
.query-form {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
|
||||||
|
.el-form-item {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.el-input,
|
||||||
|
.el-select {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__actions {
|
||||||
|
grid-column: auto;
|
||||||
|
width: 100%;
|
||||||
|
justify-content: flex-start;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.pagination-panel {
|
||||||
|
justify-content: flex-start;
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -3,7 +3,6 @@
|
|||||||
<div class="card-title">
|
<div class="card-title">
|
||||||
<span>快捷登录</span>
|
<span>快捷登录</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="card-content">
|
<div class="card-content">
|
||||||
<el-button
|
<el-button
|
||||||
class="quick-login-nav quick-login-nav--left"
|
class="quick-login-nav quick-login-nav--left"
|
||||||
@@ -103,8 +102,8 @@
|
|||||||
},
|
},
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const itemWidth = 104;
|
const itemWidth = 136;
|
||||||
const gapWidth = 2;
|
const gapWidth = 8;
|
||||||
const stepWidth = itemWidth + gapWidth;
|
const stepWidth = itemWidth + gapWidth;
|
||||||
const visibleCount = ref(1);
|
const visibleCount = ref(1);
|
||||||
const currentIndex = ref(0);
|
const currentIndex = ref(0);
|
||||||
@@ -194,12 +193,16 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
background: rgb(255, 255, 255);
|
||||||
|
|
||||||
.card-title {
|
.card-title {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
height: 37px;
|
||||||
padding: 8px 16px;
|
padding: 8px 16px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
flex-shrink: 0;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
@@ -211,12 +214,12 @@
|
|||||||
.card-content {
|
.card-content {
|
||||||
flex: 1;
|
flex: 1;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
padding: 6px;
|
padding: 8px 12px 12px;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
background: transparent;
|
background: transparent;
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: stretch;
|
align-items: stretch;
|
||||||
gap: 2px;
|
gap: 8px;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -240,7 +243,7 @@
|
|||||||
|
|
||||||
.quick-login-track {
|
.quick-login-track {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 2px;
|
gap: 8px;
|
||||||
align-items: stretch;
|
align-items: stretch;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
@@ -249,19 +252,19 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.quick-login-item {
|
.quick-login-item {
|
||||||
flex: 0 0 104px;
|
flex: 0 0 136px;
|
||||||
width: 104px;
|
width: 136px;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
padding: 4px 4px 3px;
|
padding: 8px;
|
||||||
border: 1px solid rgb(226 232 240);
|
border: 1px solid rgb(226 232 240);
|
||||||
border-radius: 10px;
|
border-radius: 10px;
|
||||||
background: rgb(248 250 252);
|
background: rgb(255, 255, 255);
|
||||||
box-shadow: 0 8px 22px rgb(148 163 184 / 14%);
|
box-shadow: 0 8px 24px rgb(148 163 184 / 14%);
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
transition:
|
transition:
|
||||||
transform 0.2s ease,
|
transform 0.2s ease,
|
||||||
@@ -271,7 +274,7 @@
|
|||||||
&:hover {
|
&:hover {
|
||||||
transform: translateY(-2px);
|
transform: translateY(-2px);
|
||||||
border-color: rgb(147 197 253);
|
border-color: rgb(147 197 253);
|
||||||
box-shadow: 0 12px 28px rgb(96 165 250 / 18%);
|
box-shadow: 0 12px 28px rgb(96 165 250 / 20%);
|
||||||
}
|
}
|
||||||
|
|
||||||
&__image-wrap {
|
&__image-wrap {
|
||||||
@@ -282,13 +285,15 @@
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
min-height: 0;
|
min-height: 0;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
padding: 8px;
|
||||||
|
border-radius: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__image {
|
&__image {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
border-radius: 8px;
|
border-radius: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__name {
|
&__name {
|
||||||
@@ -296,14 +301,14 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
max-width: 100%;
|
max-width: 100%;
|
||||||
min-height: 26px;
|
min-height: 28px;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
margin-top: 2px;
|
margin-top: 2px;
|
||||||
padding-top: 2px;
|
padding-top: 4px;
|
||||||
border-top: 1px solid rgb(226 232 240);
|
border-top: 1px solid rgb(226 232 240);
|
||||||
color: rgb(51 65 85);
|
color: rgb(51 65 85);
|
||||||
font-size: 11px;
|
font-size: 12px;
|
||||||
line-height: 14px;
|
line-height: 16px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
word-break: break-word;
|
word-break: break-word;
|
||||||
}
|
}
|
||||||
@@ -311,6 +316,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
html[data-theme='dark'] .quick-login-card {
|
html[data-theme='dark'] .quick-login-card {
|
||||||
|
background: rgb(20, 20, 20);
|
||||||
|
|
||||||
.card-title {
|
.card-title {
|
||||||
color: rgb(203 213 225);
|
color: rgb(203 213 225);
|
||||||
border-bottom-color: rgb(51 65 85);
|
border-bottom-color: rgb(51 65 85);
|
||||||
@@ -323,7 +330,7 @@
|
|||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
border-color: rgb(96 165 250);
|
border-color: rgb(96 165 250);
|
||||||
box-shadow: 0 14px 30px rgb(37 99 235 / 20%);
|
box-shadow: 0 14px 32px rgb(37 99 235 / 22%);
|
||||||
}
|
}
|
||||||
|
|
||||||
&__name {
|
&__name {
|
||||||
@@ -336,12 +343,12 @@
|
|||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
.quick-login-card {
|
.quick-login-card {
|
||||||
.card-content {
|
.card-content {
|
||||||
padding: 8px;
|
padding: 8px 12px 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.quick-login-item {
|
.quick-login-item {
|
||||||
flex-basis: 100px;
|
flex-basis: 120px;
|
||||||
width: 100px;
|
width: 120px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.quick-login-nav {
|
.quick-login-nav {
|
||||||
|
|||||||
@@ -262,12 +262,16 @@
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
background: rgb(255, 255, 255);
|
||||||
|
|
||||||
.card-title {
|
.card-title {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
height: 37px;
|
||||||
padding: 8px 16px;
|
padding: 8px 16px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
flex-shrink: 0;
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
@@ -330,7 +334,7 @@
|
|||||||
.el-table {
|
.el-table {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
--el-table-border-color: transparent;
|
--el-table-border-color: transparent;
|
||||||
--el-table-header-bg-color: rgb(248, 250, 252);
|
--el-table-header-bg-color: rgb(255, 255, 255);
|
||||||
--el-table-tr-bg-color: transparent;
|
--el-table-tr-bg-color: transparent;
|
||||||
--el-table-row-hover-bg-color: rgb(241 245 249);
|
--el-table-row-hover-bg-color: rgb(241 245 249);
|
||||||
--el-table-text-color: rgb(71 85 105);
|
--el-table-text-color: rgb(71 85 105);
|
||||||
@@ -352,7 +356,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
th.el-table__cell {
|
th.el-table__cell {
|
||||||
background: rgb(248, 250, 252);
|
background: rgb(255, 255, 255);
|
||||||
}
|
}
|
||||||
|
|
||||||
td.el-table__cell,
|
td.el-table__cell,
|
||||||
@@ -419,14 +423,14 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
&__divider {
|
&__divider {
|
||||||
margin: 16px 0;
|
margin: 12px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__content-panel,
|
&__content-panel,
|
||||||
&__form-panel {
|
&__form-panel {
|
||||||
padding: 2px;
|
padding: 4px;
|
||||||
border-radius: 8px;
|
border-radius: 10px;
|
||||||
background: rgb(248 252 255);
|
background: rgb(255, 255, 255);
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -441,8 +445,8 @@
|
|||||||
min-height: 36px;
|
min-height: 36px;
|
||||||
margin-bottom: 12px;
|
margin-bottom: 12px;
|
||||||
padding: 0 12px;
|
padding: 0 12px;
|
||||||
border-radius: 6px;
|
border-radius: 10px;
|
||||||
background: rgb(239 246 255);
|
background: rgb(255, 255, 255);
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
font-weight: 600;
|
font-weight: 600;
|
||||||
color: rgb(51 65 85);
|
color: rgb(51 65 85);
|
||||||
@@ -454,7 +458,7 @@
|
|||||||
max-height: 320px;
|
max-height: 320px;
|
||||||
padding: 14px 16px;
|
padding: 14px 16px;
|
||||||
border: 1px solid rgb(191 219 254);
|
border: 1px solid rgb(191 219 254);
|
||||||
border-radius: 6px;
|
border-radius: 10px;
|
||||||
background: rgb(255 255 255);
|
background: rgb(255 255 255);
|
||||||
font-size: 14px;
|
font-size: 14px;
|
||||||
line-height: 24px;
|
line-height: 24px;
|
||||||
@@ -499,7 +503,7 @@
|
|||||||
&__textarea :deep(.el-textarea__inner) {
|
&__textarea :deep(.el-textarea__inner) {
|
||||||
min-height: 140px !important;
|
min-height: 140px !important;
|
||||||
padding: 14px 16px;
|
padding: 14px 16px;
|
||||||
border-radius: 6px;
|
border-radius: 10px;
|
||||||
border-color: rgb(191 219 254);
|
border-color: rgb(191 219 254);
|
||||||
background: rgb(255 255 255);
|
background: rgb(255 255 255);
|
||||||
color: rgb(51 65 85);
|
color: rgb(51 65 85);
|
||||||
@@ -509,7 +513,7 @@
|
|||||||
&__footer {
|
&__footer {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
padding-top: 6px;
|
padding-top: 12px;
|
||||||
border-top: 1px solid rgb(226 232 240);
|
border-top: 1px solid rgb(226 232 240);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -535,18 +539,18 @@
|
|||||||
|
|
||||||
.el-dialog__header {
|
.el-dialog__header {
|
||||||
margin-right: 0;
|
margin-right: 0;
|
||||||
padding: 12px 12px 10px;
|
padding: 12px 16px;
|
||||||
border-bottom: 1px solid rgb(226 232 240) !important;
|
border-bottom: 1px solid rgb(226 232 240) !important;
|
||||||
background: rgb(255 255 255) !important;
|
background: rgb(255 255 255) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-dialog__body {
|
.el-dialog__body {
|
||||||
padding: 2px;
|
padding: 4px 16px 16px;
|
||||||
background: rgb(255 255 255) !important;
|
background: rgb(255 255 255) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-dialog__footer {
|
.el-dialog__footer {
|
||||||
padding: 0 8px 4px;
|
padding: 0 16px 16px;
|
||||||
background: rgb(255 255 255) !important;
|
background: rgb(255 255 255) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -564,6 +568,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
html[data-theme='dark'] .notice-card {
|
html[data-theme='dark'] .notice-card {
|
||||||
|
background: rgb(20, 20, 20);
|
||||||
|
|
||||||
.card-title {
|
.card-title {
|
||||||
color: rgb(203 213 225);
|
color: rgb(203 213 225);
|
||||||
border-bottom-color: rgb(51 65 85);
|
border-bottom-color: rgb(51 65 85);
|
||||||
|
|||||||
@@ -19,9 +19,13 @@
|
|||||||
<section class="analysis-panel">
|
<section class="analysis-panel">
|
||||||
<QuickLogin />
|
<QuickLogin />
|
||||||
</section>
|
</section>
|
||||||
<section class="analysis-panel">右上-2</section>
|
<section class="analysis-panel">
|
||||||
|
<BizApps />
|
||||||
|
</section>
|
||||||
</div>
|
</div>
|
||||||
<section class="analysis-panel">右下</section>
|
<section class="analysis-panel">
|
||||||
|
<ProjectInfo />
|
||||||
|
</section>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -30,10 +34,12 @@
|
|||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup name="Analysis">
|
<script lang="ts" setup name="Analysis">
|
||||||
import { PageWrapper } from '@jeesite/core/components/Page';
|
import { PageWrapper } from '@jeesite/core/components/Page';
|
||||||
|
import BizApps from './components/BizApps.vue'
|
||||||
import HostInfo from './components/HostInfo.vue';
|
import HostInfo from './components/HostInfo.vue';
|
||||||
import TodoInfo from './components/TodoInfo.vue';
|
import TodoInfo from './components/TodoInfo.vue';
|
||||||
import NoticeInfo from './components/NoticeInfo.vue';
|
import NoticeInfo from './components/NoticeInfo.vue';
|
||||||
import QuickLogin from './components/QuickLogin.vue';
|
import QuickLogin from './components/QuickLogin.vue';
|
||||||
|
import ProjectInfo from './components/ProjectInfo.vue'
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
<style lang="less">
|
<style lang="less">
|
||||||
|
|||||||
@@ -44,6 +44,12 @@
|
|||||||
baseColProps: { md: 8, lg: 6 },
|
baseColProps: { md: 8, lg: 6 },
|
||||||
labelWidth: 90,
|
labelWidth: 90,
|
||||||
schemas: [
|
schemas: [
|
||||||
|
{
|
||||||
|
label: t('操作时间'),
|
||||||
|
field: 'dateRange',
|
||||||
|
component: 'RangePicker',
|
||||||
|
componentProps: {},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
label: t('日志类型'),
|
label: t('日志类型'),
|
||||||
field: 'logType',
|
field: 'logType',
|
||||||
@@ -89,17 +95,6 @@
|
|||||||
field: 'bizType',
|
field: 'bizType',
|
||||||
component: 'Input',
|
component: 'Input',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
label: t('业务主键'),
|
|
||||||
field: 'bizKey',
|
|
||||||
component: 'Input',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: t('操作时间'),
|
|
||||||
field: 'dateRange',
|
|
||||||
component: 'RangePicker',
|
|
||||||
componentProps: {},
|
|
||||||
},
|
|
||||||
],
|
],
|
||||||
fieldMapToTime: [['dateRange', ['createDate_gte', 'createDate_lte']]],
|
fieldMapToTime: [['dateRange', ['createDate_gte', 'createDate_lte']]],
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user