初始化项目

This commit is contained in:
2026-03-26 22:56:08 +08:00
parent fa16e6d546
commit 0a427d9d58
16 changed files with 1222 additions and 197 deletions

View File

@@ -31,12 +31,31 @@ export interface MyProjectInfo extends BasicModel<MyProjectInfo> {
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) =>
defHttp.get<MyProjectInfo>({ url: adminPath + '/biz/myProjectInfo/list', params });
export const myProjectInfoListAll = (params?: MyProjectInfo | any) =>
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) =>
defHttp.post<Page<MyProjectInfo>>({ url: adminPath + '/biz/myProjectInfo/listData', params });

View File

@@ -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>

View File

@@ -283,12 +283,16 @@
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;
@@ -322,7 +326,7 @@
.card-content {
flex: 1;
min-height: 0;
padding: 16px;
padding: 8px 12px 12px;
overflow: hidden;
background: transparent;
}
@@ -330,7 +334,7 @@
.host-overview {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 12px;
gap: 8px;
height: 100%;
align-items: stretch;
min-height: 0;
@@ -343,9 +347,9 @@
min-width: 0;
min-height: 160px;
padding: 8px;
border-radius: 14px;
background: rgb(248, 250, 252);
box-shadow: 0 10px 28px rgb(148 163 184 / 16%);
border-radius: 10px;
background: rgb(255, 255, 255);
box-shadow: 0 8px 24px rgb(148 163 184 / 14%);
overflow: hidden;
}
@@ -361,7 +365,7 @@
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
grid-template-rows: repeat(2, minmax(0, 1fr));
gap: 10px;
gap: 8px;
padding: 0;
background: transparent;
min-width: 0;
@@ -376,9 +380,9 @@
justify-content: center;
min-width: 0;
min-height: 0;
padding: 10px 12px;
padding: 8px;
border-radius: 10px;
background: rgb(248, 250, 252);
background: rgb(255, 255, 255);
box-shadow: 0 8px 24px rgb(148 163 184 / 14%);
overflow: hidden;
transition:
@@ -387,7 +391,7 @@
background 0.2s ease;
&__label {
margin-top: 6px;
margin-top: 4px;
color: rgb(71 85 105);
font-size: 12px;
line-height: 16px;
@@ -397,8 +401,8 @@
&__chart {
width: 100%;
height: 72px;
min-height: 72px;
height: 68px;
min-height: 68px;
}
&:hover {
@@ -409,6 +413,8 @@
}
html[data-theme='dark'] .host-card {
background: rgb(20, 20, 20);
.card-title {
color: rgb(203 213 225);
border-bottom-color: rgb(51 65 85);
@@ -433,7 +439,7 @@
.host-gauge-panel {
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 {
@@ -445,7 +451,7 @@
}
&:hover {
box-shadow: 0 14px 32px rgb(37 99 235 / 22%);
box-shadow: 0 12px 28px rgb(96 165 250 / 20%);
}
}
}

View File

@@ -215,12 +215,16 @@
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;
@@ -283,7 +287,7 @@
.el-table {
width: 100%;
--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-row-hover-bg-color: rgb(241 245 249);
--el-table-text-color: rgb(71 85 105);
@@ -305,7 +309,7 @@
}
th.el-table__cell {
background: rgb(248, 250, 252);
background: rgb(255, 255, 255);
}
td.el-table__cell,
@@ -350,15 +354,15 @@
}
&__divider {
margin: 16px 0;
margin: 12px 0;
}
&__content-panel,
&__attachments-panel {
padding: 2px;
padding: 4px;
border: none;
border-radius: 8px;
background: rgb(248 252 255);
border-radius: 10px;
background: rgb(255, 255, 255);
box-sizing: border-box;
}
@@ -366,7 +370,7 @@
margin-top: 16px;
padding: 12px;
border: 1px solid rgb(219 234 254);
background: rgb(248 252 255);
background: rgb(255, 255, 255);
}
&__title {
@@ -402,7 +406,7 @@
max-height: 320px;
padding: 14px 16px;
border: 1px solid rgb(191 219 254);
border-radius: 6px;
border-radius: 10px;
background: rgb(255 255 255);
font-size: 14px;
line-height: 24px;
@@ -452,8 +456,8 @@
margin-bottom: 12px;
padding: 0 12px;
border: none;
border-radius: 6px;
background: rgb(239 246 255);
border-radius: 10px;
background: rgb(255, 255, 255);
font-size: 14px;
font-weight: 600;
color: rgb(51 65 85);
@@ -492,9 +496,9 @@
gap: 12px;
padding: 10px 12px;
border: 1px solid rgb(219 234 254);
border-radius: 6px;
background: linear-gradient(180deg, rgb(255 255 255) 0%, rgb(248 250 252) 100%);
box-shadow: 0 6px 16px rgb(148 163 184 / 12%);
border-radius: 10px;
background: rgb(255, 255, 255);
box-shadow: 0 8px 24px rgb(148 163 184 / 14%);
font-size: 13px;
color: rgb(71 85 105);
transition:
@@ -549,8 +553,8 @@
&__attachment-item:hover {
transform: translateY(-2px);
border-color: rgb(147 197 253);
background: linear-gradient(180deg, rgb(239 246 255) 0%, rgb(219 234 254) 100%);
box-shadow: 0 10px 22px rgb(96 165 250 / 18%);
background: rgb(255, 255, 255);
box-shadow: 0 12px 28px rgb(96 165 250 / 20%);
color: rgb(30 41 59);
}
@@ -570,13 +574,13 @@
.el-dialog__header {
margin-right: 0;
padding: 12px 12px 10px;
padding: 12px 16px;
border-bottom: 1px solid rgb(226 232 240) !important;
background: rgb(255 255 255) !important;
}
.el-dialog__body {
padding: 2px;
padding: 4px 16px 16px;
background: rgb(255 255 255) !important;
}
@@ -587,6 +591,7 @@
html[data-theme='dark'] .notice-card {
box-shadow: none;
background: rgb(20, 20, 20);
.card-title {
color: rgb(203 213 225);
@@ -663,7 +668,7 @@
&__attachments-empty {
border-color: rgb(71 85 105);
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);
}
@@ -682,7 +687,7 @@
&__attachment-item:hover {
border-color: rgb(96 165 250);
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);
}

View File

@@ -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>

View File

@@ -3,7 +3,6 @@
<div class="card-title">
<span>快捷登录</span>
</div>
<div class="card-content">
<el-button
class="quick-login-nav quick-login-nav--left"
@@ -103,8 +102,8 @@
},
]);
const itemWidth = 104;
const gapWidth = 2;
const itemWidth = 136;
const gapWidth = 8;
const stepWidth = itemWidth + gapWidth;
const visibleCount = ref(1);
const currentIndex = ref(0);
@@ -194,12 +193,16 @@
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;
@@ -211,12 +214,12 @@
.card-content {
flex: 1;
min-height: 0;
padding: 6px;
padding: 8px 12px 12px;
overflow: hidden;
background: transparent;
display: flex;
align-items: stretch;
gap: 2px;
gap: 8px;
height: 100%;
}
@@ -240,7 +243,7 @@
.quick-login-track {
display: flex;
gap: 2px;
gap: 8px;
align-items: stretch;
height: 100%;
min-height: 0;
@@ -249,19 +252,19 @@
}
.quick-login-item {
flex: 0 0 104px;
width: 104px;
flex: 0 0 136px;
width: 136px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
min-height: 0;
height: 100%;
padding: 4px 4px 3px;
padding: 8px;
border: 1px solid rgb(226 232 240);
border-radius: 10px;
background: rgb(248 250 252);
box-shadow: 0 8px 22px rgb(148 163 184 / 14%);
background: rgb(255, 255, 255);
box-shadow: 0 8px 24px rgb(148 163 184 / 14%);
cursor: pointer;
transition:
transform 0.2s ease,
@@ -271,7 +274,7 @@
&:hover {
transform: translateY(-2px);
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 {
@@ -282,13 +285,15 @@
width: 100%;
min-height: 0;
overflow: hidden;
padding: 8px;
border-radius: 8px;
}
&__image {
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 8px;
border-radius: 6px;
}
&__name {
@@ -296,14 +301,14 @@
align-items: center;
justify-content: center;
max-width: 100%;
min-height: 26px;
min-height: 28px;
width: 100%;
margin-top: 2px;
padding-top: 2px;
padding-top: 4px;
border-top: 1px solid rgb(226 232 240);
color: rgb(51 65 85);
font-size: 11px;
line-height: 14px;
font-size: 12px;
line-height: 16px;
text-align: center;
word-break: break-word;
}
@@ -311,6 +316,8 @@
}
html[data-theme='dark'] .quick-login-card {
background: rgb(20, 20, 20);
.card-title {
color: rgb(203 213 225);
border-bottom-color: rgb(51 65 85);
@@ -323,7 +330,7 @@
&:hover {
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 {
@@ -336,12 +343,12 @@
@media (max-width: 768px) {
.quick-login-card {
.card-content {
padding: 8px;
padding: 8px 12px 12px;
}
.quick-login-item {
flex-basis: 100px;
width: 100px;
flex-basis: 120px;
width: 120px;
}
.quick-login-nav {

View File

@@ -262,12 +262,16 @@
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;
@@ -330,7 +334,7 @@
.el-table {
width: 100%;
--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-row-hover-bg-color: rgb(241 245 249);
--el-table-text-color: rgb(71 85 105);
@@ -352,7 +356,7 @@
}
th.el-table__cell {
background: rgb(248, 250, 252);
background: rgb(255, 255, 255);
}
td.el-table__cell,
@@ -419,14 +423,14 @@
}
&__divider {
margin: 16px 0;
margin: 12px 0;
}
&__content-panel,
&__form-panel {
padding: 2px;
border-radius: 8px;
background: rgb(248 252 255);
padding: 4px;
border-radius: 10px;
background: rgb(255, 255, 255);
box-sizing: border-box;
}
@@ -441,8 +445,8 @@
min-height: 36px;
margin-bottom: 12px;
padding: 0 12px;
border-radius: 6px;
background: rgb(239 246 255);
border-radius: 10px;
background: rgb(255, 255, 255);
font-size: 14px;
font-weight: 600;
color: rgb(51 65 85);
@@ -454,7 +458,7 @@
max-height: 320px;
padding: 14px 16px;
border: 1px solid rgb(191 219 254);
border-radius: 6px;
border-radius: 10px;
background: rgb(255 255 255);
font-size: 14px;
line-height: 24px;
@@ -499,7 +503,7 @@
&__textarea :deep(.el-textarea__inner) {
min-height: 140px !important;
padding: 14px 16px;
border-radius: 6px;
border-radius: 10px;
border-color: rgb(191 219 254);
background: rgb(255 255 255);
color: rgb(51 65 85);
@@ -509,7 +513,7 @@
&__footer {
display: flex;
justify-content: flex-end;
padding-top: 6px;
padding-top: 12px;
border-top: 1px solid rgb(226 232 240);
}
@@ -535,18 +539,18 @@
.el-dialog__header {
margin-right: 0;
padding: 12px 12px 10px;
padding: 12px 16px;
border-bottom: 1px solid rgb(226 232 240) !important;
background: rgb(255 255 255) !important;
}
.el-dialog__body {
padding: 2px;
padding: 4px 16px 16px;
background: rgb(255 255 255) !important;
}
.el-dialog__footer {
padding: 0 8px 4px;
padding: 0 16px 16px;
background: rgb(255 255 255) !important;
}
@@ -564,6 +568,8 @@
}
html[data-theme='dark'] .notice-card {
background: rgb(20, 20, 20);
.card-title {
color: rgb(203 213 225);
border-bottom-color: rgb(51 65 85);

View File

@@ -19,9 +19,13 @@
<section class="analysis-panel">
<QuickLogin />
</section>
<section class="analysis-panel">右上-2</section>
<section class="analysis-panel">
<BizApps />
</section>
</div>
<section class="analysis-panel">右下</section>
<section class="analysis-panel">
<ProjectInfo />
</section>
</div>
</div>
</div>
@@ -30,10 +34,12 @@
</template>
<script lang="ts" setup name="Analysis">
import { PageWrapper } from '@jeesite/core/components/Page';
import BizApps from './components/BizApps.vue'
import HostInfo from './components/HostInfo.vue';
import TodoInfo from './components/TodoInfo.vue';
import NoticeInfo from './components/NoticeInfo.vue';
import QuickLogin from './components/QuickLogin.vue';
import ProjectInfo from './components/ProjectInfo.vue'
</script>
<style lang="less">

View File

@@ -44,6 +44,12 @@
baseColProps: { md: 8, lg: 6 },
labelWidth: 90,
schemas: [
{
label: t('操作时间'),
field: 'dateRange',
component: 'RangePicker',
componentProps: {},
},
{
label: t('日志类型'),
field: 'logType',
@@ -89,17 +95,6 @@
field: 'bizType',
component: 'Input',
},
{
label: t('业务主键'),
field: 'bizKey',
component: 'Input',
},
{
label: t('操作时间'),
field: 'dateRange',
component: 'RangePicker',
componentProps: {},
},
],
fieldMapToTime: [['dateRange', ['createDate_gte', 'createDate_lte']]],
};