Merge remote-tracking branch 'origin/zhuo_dev' into leng_dev

# Conflicts:
#	src/views/gen/table/preview.vue
This commit is contained in:
lbw 2023-04-03 22:47:25 +08:00
commit 2249bb2c7a
4 changed files with 141 additions and 99 deletions

View File

@ -308,6 +308,12 @@
padding: 15px 20px;
}
// 日历
.el-calendar-table .el-calendar-day {
height: 50px;
padding: 0;
}
/* Table 表格 element plus 2.2.0 版本
------------------------------- */
// 表格修改默认颜色

View File

@ -1,54 +1,58 @@
<template>
<el-dialog title="代码预览" v-model="visible" width="90%" top="3vh" append-to-body :close-on-click-modal="false">
<splitpanes>
<pane size="25">
<el-scrollbar height="calc(100vh - 300px)" class="mt20">
<el-tree
ref="treeRef"
node-key="id"
:data="preview.fileTree"
:expand-on-click-node="false"
highlight-current
@node-click="handleNodeClick"
/>
</el-scrollbar>
</pane>
<pane>
<el-tabs v-model="preview.activeName">
<el-tab-pane
v-for="item in previewCodegen"
:label="item.codePath.substring(item.codePath.lastIndexOf('/') + 1)"
:name="item.codePath"
:key="item.codePath"
>
<el-scrollbar height="calc(100vh - 300px)">
<highlightjs autodetect :code="item.code"/>
</el-scrollbar>
</el-tab-pane>
</el-tabs>
</pane>
</splitpanes>
</el-dialog>
<el-dialog title="代码预览" v-model="visible" width="90%" top="3vh" append-to-body :close-on-click-modal="false">
<splitpanes>
<pane size="25">
<el-scrollbar height="calc(100vh - 300px)" class="mt20">
<el-tree
ref="treeRef"
node-key="id"
:data="preview.fileTree"
:expand-on-click-node="false"
highlight-current
@node-click="handleNodeClick"
/>
</el-scrollbar>
</pane>
<pane>
<el-tabs v-model="preview.activeName">
<el-tab-pane
v-for="item in previewCodegen"
:label="item.codePath.substring(item.codePath.lastIndexOf('/') + 1)"
:name="item.codePath"
:key="item.codePath"
>
<el-button style="position: absolute; top: 10px; right: 20px; z-index: 9" type="primary" @click="copyText(item.code)">复制代码</el-button>
<el-scrollbar height="calc(100vh - 300px)">
<highlightjs autodetect :code="item.code" />
</el-scrollbar>
</el-tab-pane>
</el-tabs>
</pane>
</splitpanes>
</el-dialog>
</template>
<script setup lang="ts" name="preview">
import {useGeneratorPreviewApi} from '/@/api/gen/table';
import {handleTree} from '/@/utils/other';
import { useGeneratorPreviewApi } from '/@/api/gen/table';
import { handleTree } from '/@/utils/other';
import commonFunction from '/@/utils/commonFunction';
const { copyText } = commonFunction();
const visible = ref(false);
// ======== ========
const preview = reactive({
open: false,
titel: '代码预览',
fileTree: [],
activeName: '',
open: false,
titel: '代码预览',
fileTree: [],
activeName: '',
});
const previewCodegen = ref([]);
const fileTreeOriginal = ref([] as any[]);
const openDialog = async (id: string) => {
await getGenCodeFile(id);
visible.value = true;
await getGenCodeFile(id);
visible.value = true;
};
const loading = ref(false);
@ -58,29 +62,29 @@ const loading = ref(false);
* @param id 需要渲染的资源 ID
*/
const getGenCodeFile = (id: string) => {
loading.value = true;
fileTreeOriginal.value = [];
useGeneratorPreviewApi(id)
.then((res: any) => {
previewCodegen.value = res;
for (let index in res) {
fileTreeOriginal.value.push(res[index].codePath);
}
//
preview.activeName = res[0].codePath;
const files = handleFiles(fileTreeOriginal);
preview.fileTree = handleTree(files, 'id', 'parentId', 'children', '/');
})
.finally(() => {
loading.value = false;
});
loading.value = true;
fileTreeOriginal.value = [];
useGeneratorPreviewApi(id)
.then((res: any) => {
previewCodegen.value = res;
for (let index in res) {
fileTreeOriginal.value.push(res[index].codePath);
}
//
preview.activeName = res[0].codePath;
const files = handleFiles(fileTreeOriginal);
preview.fileTree = handleTree(files, 'id', 'parentId', 'children', '/');
})
.finally(() => {
loading.value = false;
});
};
const handleNodeClick = async (data: any, node: any) => {
if (node && !node.isLeaf) {
return false;
}
preview.activeName = data.id;
if (node && !node.isLeaf) {
return false;
}
preview.activeName = data.id;
};
/**
@ -89,41 +93,41 @@ const handleNodeClick = async (data: any, node: any) => {
* @returns {*[]}
*/
const handleFiles = (fileTreeOriginal: any) => {
const exists = {};
const files = [] as any[];
const exists = {};
const files = [] as any[];
//
for (const data of fileTreeOriginal.value) {
let paths = [];
if (data.includes('\\')) {
paths = data.split('\\');
} else {
paths = data.split('/');
}
let fullPath = ''; // id
// path
for (let i = 0; i < paths.length; i++) {
// files
const oldFullPath = fullPath;
// replaceAll tabs replaceAll
fullPath = fullPath.length === 0 ? paths[i] : fullPath.replaceAll('.', '/') + '/' + paths[i];
if (exists[fullPath]) {
continue;
}
// files
exists[fullPath] = true;
files.push({
id: fullPath,
label: paths[i],
parentId: oldFullPath || '/',
templateName: data.k,
});
}
}
return files;
//
for (const data of fileTreeOriginal.value) {
let paths = [];
if (data.includes('\\')) {
paths = data.split('\\');
} else {
paths = data.split('/');
}
let fullPath = ''; // id
// path
for (let i = 0; i < paths.length; i++) {
// files
const oldFullPath = fullPath;
// replaceAll tabs replaceAll
fullPath = fullPath.length === 0 ? paths[i] : fullPath.replaceAll('.', '/') + '/' + paths[i];
if (exists[fullPath]) {
continue;
}
// files
exists[fullPath] = true;
files.push({
id: fullPath,
label: paths[i],
parentId: oldFullPath || '/',
templateName: data.k,
});
}
}
return files;
};
defineExpose({
openDialog,
openDialog,
});
</script>

View File

@ -6,8 +6,10 @@
</div>
</template>
<el-row :gutter="10" v-if="favoriteRoutes.length > 0">
<el-col :span="6" :key="shortcut.id" v-for="shortcut in favoriteRoutes">
<el-col class="shortcutCard" :span="6" :key="shortcut.id" v-for="(shortcut, index) in favoriteRoutes">
<div class="shortcutCardClose" @click="handleCloseFavorite(shortcut)">×</div>
<shortcutCard :icon="shortcut.meta?.icon" :label="shortcut.name" @click="handleRoute(shortcut.path)" />
<!-- <el-icon v-if="index == currentIndex"><CircleCloseFilled /></el-icon> -->
</el-col>
</el-row>
<el-empty :description="$t('home.addFavoriteRoutesTip')" v-else />
@ -44,4 +46,31 @@ const handleRoute = (path: string) => {
const handleCloseFavorite = (item: any) => {
storesTagsViewRoutes.delFavoriteRoutes(item); //
};
/* */
let currentIndex = ref();
/* */
const handleShowCloseBtn = (item: any, index: any) => {
currentIndex.value = index;
};
/* */
const handleHideCloseBtn = () => {
currentIndex.value = null;
};
</script>
<style lang="scss" scoped>
.shortcutCard {
position: relative;
.shortcutCardClose {
position: absolute;
top: 0;
right: 50%;
font-weight: 700;
font-size: 20px;
cursor: pointer;
color: #6d6b6b;
}
}
</style>

View File

@ -1,12 +1,15 @@
<template>
<el-calendar v-model="calendar">
<template #date-cell="{ data }">
<div class="calendar-cell" @click="handleSchedule(data)">
{{ data.day.split('-').slice(2).join('-') }}
<div class="box-yello" v-if="filterCellSelected(data)"></div>
</div>
</template>
</el-calendar>
<el-card class="box-card" style="height: 100%; overflow: auto">
<template #header> 日程 </template>
<el-calendar v-model="calendar">
<template #date-cell="{ data }">
<div class="calendar-cell" @click="handleSchedule(data)">
{{ data.day.split('-').slice(2).join('-') }}
<div class="box-yello" v-if="filterCellSelected(data)"></div>
</div>
</template>
</el-calendar>
</el-card>
<!-- 新增日程的表单 -->
<schedule-form ref="scheduleFormRef" @refresh="initscheduleList(formatDate(calendar, 'YYYY-mm'))" />