feat: wow

This commit is contained in:
ex_zhangwenlei@exiot.cmcc
2024-01-12 00:20:21 +08:00
parent 2ba3bb036b
commit 2897dd03f9
5 changed files with 3 additions and 150 deletions

View File

@@ -30,6 +30,7 @@ log-lottery是一个可配置可定制化的抽奖应用炫酷3D球体
- pinia - pinia
- daisyui - daisyui
> 项目思路来源于 https://github.com/moshang-xc/lottery
## License ## License
[MIT](http://opensource.org/licenses/MIT) [MIT](http://opensource.org/licenses/MIT)

View File

@@ -25,7 +25,6 @@
"theme-change": "^2.5.0", "theme-change": "^2.5.0",
"three": "^0.160.0", "three": "^0.160.0",
"three-css3d": "^1.0.6", "three-css3d": "^1.0.6",
"three-trackballcontrols": "^0.9.0",
"vue": "^3.3.8", "vue": "^3.3.8",
"vue-router": "^4.2.5", "vue-router": "^4.2.5",
"vue-toast-notification": "^3", "vue-toast-notification": "^3",

1
src/components.d.ts vendored
View File

@@ -15,7 +15,6 @@ declare module 'vue' {
RouterView: typeof import('vue-router')['RouterView'] RouterView: typeof import('vue-router')['RouterView']
StarsBackground: typeof import('./components/StarsBackground/index.vue')['default'] StarsBackground: typeof import('./components/StarsBackground/index.vue')['default']
SvgIcon: typeof import('./components/SvgIcon/index.vue')['default'] SvgIcon: typeof import('./components/SvgIcon/index.vue')['default']
Table: typeof import('./components/Table/index.vue')['default']
ToTop: typeof import('./components/ToTop/index.vue')['default'] ToTop: typeof import('./components/ToTop/index.vue')['default']
} }
} }

View File

@@ -1,146 +0,0 @@
<script setup lang="ts">
import type { PropType } from 'vue';
import { TableItemType } from '@/types/table';
const props = defineProps({
tableHeader: {
type: Array as PropType<TableItemType[]>,
default: () => [],
},
tableData: {
type: Array,
default: () => [],
},
listLoading: {
type: Boolean,
default: false,
},
pagination: {
type: Boolean,
default: true,
},
pageSize: {
type: Number,
default: 10,
},
currentPage: {
type: Number,
default: 1,
},
total: {
type: Number,
default: 100,
},
});
const emit = defineEmits(['handelSelect', 'handlePagination']);
// 选择
const handleSelectionChange = (val: []) => {
emit('handelSelect', val);
};
// 改变分页
const handleSizeChange = (val: number) => {
emit('handlePagination', { pageSize: val, currentPage: props.currentPage });
};
const handleCurrentChange = (val: number) => {
emit('handlePagination', {
pageSize: props.pageSize,
currentPage: val,
});
};
</script>
<template>
<el-table
:data="tableData"
:header-cell-style="{
background: '#f5f6fa',
color: '#555',
fontWeight: 'normal',
fontSize: '12px',
}"
:cell-style="{ fontSize: '12px' }"
@selection-change="handleSelectionChange"
>
<!-- 复选框 -->
<el-table-column type="selection" width="55" />
<!-- 数据 -->
<template v-for="(item, index) in tableHeader" :key="index">
<!-- 编辑按钮 -->
<el-table-column
v-if="item.actions"
:prop="item.prop"
:label="item.label"
:width="item.width"
fixed="right"
>
<template #default="scope">
<!-- 操作按钮 -->
<div>
<el-button
text
size="small"
v-for="(action, index) in item.actions"
:key="index"
:type="action.type"
@click="action.func(scope.row)"
>{{ action.name }}</el-button
>
</div>
</template>
</el-table-column>
<!-- 图片展示 -->
<el-table-column
v-else-if="item.image"
:label="item.label"
:width="item.width"
>
<template #default="{ row }">
<div v-if="row[item.prop]">
<el-image
preview-teleported
:hide-on-click-modal="true"
:preview-src-list="[row[item.prop!]]"
:src="row[item.prop!]"
fit="cover"
style="width: 40px; height: 40px; border-radius: 8px"
/>
</div>
<div v-else>暂无图片</div>
</template>
</el-table-column>
<!-- formatter信息展示-->
<el-table-column
v-else-if="item.formatter"
:label="item.label"
:width="item.width"
:align="item.aligen || 'center'"
>
<template #default="{ row }">
<el-tag :type="item.getType!(row)"> {{ item.formatter(row) }}</el-tag>
</template></el-table-column
>
<!--普通信息展示 -->
<el-table-column
v-else
:label="item.label"
:prop="item.prop"
:width="item.width"
:align="item.aligen || 'center'"
></el-table-column>
</template>
</el-table>
<div v-if="pagination" class="float-right">
<el-pagination
background
:small="true"
layout="sizes,prev, pager, next"
:total="total"
:currentPage="currentPage"
:page-size="pageSize"
:page-sizes="[10, 20, 30, 50]"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</div>
</template>
<style></style>

View File

@@ -13,8 +13,8 @@ import { Scene, PerspectiveCamera, Object3D, Vector3 } from 'three'
// CSS3DRenderer, CSS3DObject // CSS3DRenderer, CSS3DObject
// } from 'three/examples/jsm/renderers/CSS3DRenderer.js'; // } from 'three/examples/jsm/renderers/CSS3DRenderer.js';
import { CSS3DRenderer, CSS3DObject } from 'three-css3d' import { CSS3DRenderer, CSS3DObject } from 'three-css3d'
// import { TrackballControls } from 'three/examples/jsm/controls/TrackballControls.js'; import { TrackballControls } from 'three/examples/jsm/controls/TrackballControls.js';
import TrackballControls from 'three-trackballcontrols'; // import TrackballControls from 'three-trackballcontrols';
// import TWEEN from 'three/examples/jsm/libs/tween.module.js'; // import TWEEN from 'three/examples/jsm/libs/tween.module.js';
import * as TWEEN from '@tweenjs/tween.js' import * as TWEEN from '@tweenjs/tween.js'
import useStore from '@/store' import useStore from '@/store'