feat 新增测试页面

master
管理员 12 months ago
parent 4b38019237
commit bf0a8ba598

@ -1,13 +1,11 @@
<template>
<div>
<svg-icon icon-class="github" @click="goto" />
<div v-if="env == 'development'">
<svg-icon icon-class="bug" @click="router.push({ path: '/test/index' })" />
</div>
</template>
<script setup>
const url = ref('https://gitee.com/JavaLionLi/RuoYi-Vue-Plus');
function goto() {
window.open(url.value)
}
import { useRouter } from "vue-router";
const router = useRouter();
const env = import.meta.env.VITE_APP_ENV;
</script>

@ -15,6 +15,9 @@
<el-tooltip content="文档地址" effect="dark" placement="bottom">
<ruo-yi-doc id="ruoyi-doc" class="right-menu-item hover-effect" />
</el-tooltip> -->
<el-tooltip content="示例代码" effect="dark" placement="bottom">
<ruo-yi-git class="right-menu-item hover-effect" />
</el-tooltip>
<screenfull id="screenfull" class="right-menu-item hover-effect" />

@ -24,6 +24,17 @@ import Layout from '@/layout'
}
*/
const env = import.meta.env.VITE_APP_ENV;
const children = []
if (env == 'development') {
const files = import.meta.glob('@/views/test/*.vue');//异步导入
for (let fileName in files) {
let moduleName = fileName.replace(/^.*\/(\w+)\.vue$/, "$1");
children.push({ path: moduleName, component: files[fileName] })
}
}
console.debug(children)
// 公共路由
export const constantRoutes = [
{
@ -83,9 +94,20 @@ export const constantRoutes = [
meta: { title: '个人中心', icon: 'user' }
}
]
}, {
path: '/test',
component: () => import('@/views/test'),
hidden: true,
redirect: '/test/index',
children
}
]
// 动态路由,基于用户权限动态去加载
export const dynamicRoutes = [
{

@ -0,0 +1,102 @@
<template>
<div class="w-test">
<div>
<div>
<router-link to="/">系统首页</router-link>
<router-link v-for="(path,index) in list" :to="'./'+path" :key="index">{{ path }}</router-link>
</div>
</div>
<div>
<div>
<router-view />
</div>
</div>
</div>
</template>
<script setup>
import { ref } from "vue";
const list = ref([]);
let files = import.meta.glob("@/views/test/*.vue");
for (let fileName in files) {
let moduleName = fileName.replace(/^.*\/(\w+)\.vue$/, "$1");
// if (moduleName == "index") {
// continue;
// }
list.value.push(moduleName);
}
</script>
<style lang="scss" scoped>
.w-test {
width: 100vw;
height: 100vh;
display: grid;
grid-template-columns: 10rem 1fr;
gap: 2rem;
& > div {
position: relative;
& > div {
position: absolute;
width: 100%;
height: 100%;
}
&:last-child > div {
overflow: auto;
}
&:first-child {
background-image: linear-gradient(to right, #fff 70%, #0001);
& > div {
padding: 1rem 0;
& > a {
display: flex;
font-size: 0.9rem;
position: relative;
height: 2rem;
align-items: center;
justify-content: center;
transition: all 0.5s;
margin: 0.3rem 0;
color: var(--el-color-primary-dark-2);
border: solid 0.1rem #0000;
&:not(.router-link-exact-active):hover {
background-color: #fff;
color: var(--el-color-primary-dark-3);
border: solid 0.1rem var(--el-color-primary-dark-3);
transform: scale(0.95);
}
&::after {
content: "";
position: absolute;
box-sizing: border-box;
right: 0rem;
width: 1rem;
height: 2rem;
border: solid 1rem #0000;
border-right-width: 0;
border-left-color: var(--c, #0000);
transition: all 0.5s;
}
&.router-link-exact-active {
--c: var(--el-color-primary-dark-2);
background-color: var(--c);
color: #fff;
transform: scale(1.05);
&:hover {
--c: var(--el-color-primary-dark-3);
}
&::after {
right: -1rem;
}
}
}
}
}
}
}
</style>

@ -0,0 +1,11 @@
<template>
<div>
<h1>示例首页</h1>
<div>直接在@/views/test/下创建vue文件</div>
</div>
</template>
<script setup>
</script>
<style lang="scss" scoped>
</style>

@ -0,0 +1,164 @@
<template>
<div style="margin: 1rem;">
<el-tabs type="border-card">
<el-tab-pane label="图片上传组件">
<div style="padding: 1rem;">
<div>
图片上传组件说明
<ol style="font-size: .8rem; line-height: 1.8;">
<li>基础用法 &lt;w-image-uploader v-model="value" :getUploadKey="getUploadKey" max="1"
v-model:uploading="uploading" /&gt;</li>
<li>属性getUploadKey获取上传凭证的方法需要使用者提供开发模式下提供:<br />
前端示例<br />
<pre class="code">
const getUploadKey =async () => {
let r = await request.get("/file/upload/getUploadKey")
return r.data
} </pre>
后端示例<br />
<pre class="code"> @GetMapping("getUploadKey")
public R getUploadKey() {
return R.ok().setData(FileUtils.getUploadKey());
}</pre>
</li>
<li>属性v-model双向绑定上传的文件URL,max=1是类型为String,否则为Array</li>
<li>属性v-model:uploading双向绑定是否上传中,PS: 上传完成后才允许业务表单提交</li>
<li>属性max允许上传的文件数量0表示没有限制,默认0</li>
<li>属性prefix上传路径前缀默认default</li>
<li>属性disabled禁止上传图片预览模式 默认false</li>
<li>属性text按钮文字默认上传图片</li>
<li>属性maxSize允许上传的文件最大大小,0表示不限制默认0</li>
<li>属性threadNum并行上传数量默认2</li>
<li>属性retry重试次数默认3 </li>
<li>属性saveSrc是否保存图片原文件如果true则下载时下载原图zip文件否则下载大图片默认false </li>
<li>属性saveMin是否保存缩略图如果true则列表时显示缩略图否则显示大图默认true </li>
<li>属性watermark是否添加水印默认true </li>
<li>属性noEffect是否无效果本质设置css属性默认false </li>
<li>css属性--image-size图片显示大小默认 10em </li>
<li>css属性--image-border-radius图片显示圆角默认 .4em</li>
<li>css属性--image-margin图片外边距默认 .5em .5em 0 0</li>
<li>css属性--image-border图片边框默认 #FFF solid 2px </li>
<li>css属性--image-box-shadow图片阴影默认 0 0 .2em #0005</li>
<li>插槽button上传按钮插槽</li>
<li>插槽default图片列表插槽作用域list不建议定义</li>
<li>事件changemodelValue发送了变化</li>
</ol>
</div>
<el-divider>单图片上传</el-divider>
<w-image-uploader v-model="imgs[0]" saveSrc max="1" v-model:uploading="imging" />
<pre>绑定值{{ imgs[0] }}</pre>
<div>{{ imging ? '上传中' : '没有上传' }}
<w-image-view ref="imgView" />
<el-button @click="proxy.$refs.imgView.open(imgs[0])"></el-button>
</div>
<el-divider>9张图片上传</el-divider>
<div style="width: 50em;"><w-image-uploader v-model="imgs[1]" saveSrc max="9" text="9张图片上传"
style="--image-size:15em;" /></div>
<pre>绑定值{{ imgs[1] }}</pre>
<el-divider>预览模式</el-divider>
<w-image-uploader style="width: 35em;" disabled :modelValue="[
'/files/default/2024/10/24/d0wt3m3j4tud.webp',
'/files/default/2024/10/24/4x53htt9v8j1.webp',
'/files/default/2024/10/24/1trnacdjxeoju.webp',
'/files/default/2024/10/24/742tvr5pq526.webp',
'/files/default/2024/10/24/1dg74ibgi0xbj.webp',
'/files/default/2024/10/24/1bgesfnixpfvt.webp',
'/files/default/2024/10/24/h1legy4o8tko.webp',
'/files/default/2024/10/24/9xe6yyoed9dj.webp'
]" />
</div>
</el-tab-pane>
<el-tab-pane label="文件上传组件">
<div style="padding: 1rem;">
<div>
文件上传组件说明
<ol style="font-size: .8rem; line-height: 1.8;">
<li>基础用法 &lt;w-file-uploader v-model="value" :getUploadKey="getUploadKey" max="1"
v-model:uploading="uploading" /&gt;</li>
<li>大小大于chunksize的大文件上传会自动分片上传</li>
<li>属性getUploadKey获取上传凭证的方法需要使用者提供开发模式下提供:<br />
前端示例<br />
<pre class="code">
const getUploadKey =async () => {
let r = await request.get("/file/upload/getUploadKey")
return r.data
} </pre>
后端示例<br />
<pre class="code"> @GetMapping("getUploadKey")
public R getUploadKey() {
return R.ok().setData(FileUtils.getUploadKey());
}</pre>
</li>
<li>属性v-model双向绑定上传的文件URL,max=1是类型为String,否则为Array</li>
<li>属性v-model:uploading双向绑定是否上传中,PS: 上传完成后才允许业务表单提交</li>
<li>属性max允许上传的文件数量0表示没有限制,默认0</li>
<li>属性prefix上传路径前缀默认default</li>
<li>属性keepFilename是否保留文件名, 默认true</li>
<li>属性disabled禁止上传文件预览模式 默认false</li>
<li>属性text按钮文字默认上传文件</li>
<li>属性accept允许上传的文件扩展名列表默认'' ,office:'.doc,.docx,.ppt,.pptx,.xls,.xlsx'</li>
<li>属性maxSize允许上传的文件最大大小,0表示不限制默认0</li>
<li>属性threadNum并行上传数量默认2</li>
<li>属性retry重试次数默认3 </li>
<li>属性chunksize分片大小默认5Mb不建议修改</li>
<li>属性border文件项是否显示边框默认true</li>
<li>插槽button上传按钮插槽</li>
<li>插槽default文件列表作用域list不建议定义</li>
<li>事件changemodelValue发送了变化</li>
</ol>
</div>
<el-divider>单文件上传</el-divider>
<w-file-uploader v-model="data[0]" max="1" v-model:uploading="uploading" />
<pre>绑定值{{ data[0] }}</pre>
<div>{{ uploading ? '上传中' : '没有上传' }}</div>
<el-divider>预览模式</el-divider>
<w-file-uploader v-model="data[0]" max="1" :border="false" disabled />
<el-divider>单word文件小于10kb上传</el-divider>
<w-file-uploader v-model="data[1]" max="1" accept=".docx,.doc" text="单word文件小于10kb上传" :max-size="10240" />
<pre>绑定值{{ data[1] }}</pre>
<el-divider>多文件上传</el-divider>
<w-file-uploader v-model="data[2]" max="2" />
<pre>绑定值{{ data[2] }}</pre>
</div>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script setup>
import { ref, getCurrentInstance } from 'vue'
const { proxy } = getCurrentInstance()
const data = ref(['/files/default/2024/10/24/2nhdirb2ujey/5mb.txt'])
const uploading = ref(false)
const imgs = ref(['/files/default/2024/10/24/d0wt3m3j4tud.webp'])
const imging = ref(false)
</script>
<style lang="scss" scoped>
.code {
border: solid 1px #0001;
margin: .5rem;
padding: .5rem;
border-radius: .3rem;
}
</style>
Loading…
Cancel
Save