v1
This commit is contained in:
30
.gitignore
vendored
Normal file
30
.gitignore
vendored
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
|
||||||
|
node_modules
|
||||||
|
.DS_Store
|
||||||
|
dist
|
||||||
|
dist-ssr
|
||||||
|
coverage
|
||||||
|
*.local
|
||||||
|
|
||||||
|
/cypress/videos/
|
||||||
|
/cypress/screenshots/
|
||||||
|
|
||||||
|
# Editor directories and files
|
||||||
|
.vscode/*
|
||||||
|
!.vscode/extensions.json
|
||||||
|
.idea
|
||||||
|
*.suo
|
||||||
|
*.ntvs*
|
||||||
|
*.njsproj
|
||||||
|
*.sln
|
||||||
|
*.sw?
|
||||||
|
|
||||||
|
*.tsbuildinfo
|
||||||
3
.vscode/extensions.json
vendored
Normal file
3
.vscode/extensions.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"recommendations": ["Vue.volar"]
|
||||||
|
}
|
||||||
29
README.md
Normal file
29
README.md
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
# bettergi-scripts-web
|
||||||
|
|
||||||
|
This template should help get you started developing with Vue 3 in Vite.
|
||||||
|
|
||||||
|
## Recommended IDE Setup
|
||||||
|
|
||||||
|
[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur).
|
||||||
|
|
||||||
|
## Customize configuration
|
||||||
|
|
||||||
|
See [Vite Configuration Reference](https://vitejs.dev/config/).
|
||||||
|
|
||||||
|
## Project Setup
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm install
|
||||||
|
```
|
||||||
|
|
||||||
|
### Compile and Hot-Reload for Development
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
### Compile and Minify for Production
|
||||||
|
|
||||||
|
```sh
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
13
index.html
Normal file
13
index.html
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<link rel="icon" href="/favicon.ico">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Vite App</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="app"></div>
|
||||||
|
<script type="module" src="/src/main.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
8
jsconfig.json
Normal file
8
jsconfig.json
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"paths": {
|
||||||
|
"@/*": ["./src/*"]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"exclude": ["node_modules", "dist"]
|
||||||
|
}
|
||||||
1137
package-lock.json
generated
Normal file
1137
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
19
package.json
Normal file
19
package.json
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"name": "bettergi-scripts-web",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"private": true,
|
||||||
|
"type": "module",
|
||||||
|
"scripts": {
|
||||||
|
"dev": "vite",
|
||||||
|
"build": "vite build",
|
||||||
|
"preview": "vite preview"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"vue": "^3.4.29"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@arco-design/web-vue": "^2.56.2",
|
||||||
|
"@vitejs/plugin-vue": "^5.0.5",
|
||||||
|
"vite": "^5.3.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
public/favicon.ico
Normal file
BIN
public/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 166 KiB |
130
src/App.vue
Normal file
130
src/App.vue
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
<template>
|
||||||
|
<a-layout>
|
||||||
|
<a-layout-content :style="{ padding: '0 50px', marginTop: '20px' }">
|
||||||
|
<a-space direction="vertical" size="large" fill>
|
||||||
|
<a-select
|
||||||
|
v-model="selectedRepo"
|
||||||
|
placeholder="选择仓库"
|
||||||
|
style="width: 320px"
|
||||||
|
@change="fetchRepoData"
|
||||||
|
>
|
||||||
|
<a-option value="repo1">仓库 1</a-option>
|
||||||
|
<a-option value="repo2">仓库 2</a-option>
|
||||||
|
<a-option value="repo3">仓库 3</a-option>
|
||||||
|
</a-select>
|
||||||
|
|
||||||
|
<a-tabs v-if="repoData.length">
|
||||||
|
<a-tab-pane v-for="category in repoData" :key="category.type" :title="getTabTitle(category.type)">
|
||||||
|
<a-table :columns="columns" :data="category.list" :pagination="{ pageSize: 20 }">
|
||||||
|
<template #name="{ record }">
|
||||||
|
<a-typography-paragraph copyable>
|
||||||
|
{{ record.name }}
|
||||||
|
</a-typography-paragraph>
|
||||||
|
</template>
|
||||||
|
<template #tags="{ record }">
|
||||||
|
<a-space wrap>
|
||||||
|
<a-tag v-for="tag in record.tags" :key="tag" color="blue">{{ tag }}</a-tag>
|
||||||
|
</a-space>
|
||||||
|
</template>
|
||||||
|
<template #operations="{ record }">
|
||||||
|
<a-space>
|
||||||
|
<a-button type="primary" size="mini" @click="downloadScript(record)">
|
||||||
|
下载
|
||||||
|
</a-button>
|
||||||
|
<a-button size="mini" @click="showDetails(record)">
|
||||||
|
详情
|
||||||
|
</a-button>
|
||||||
|
</a-space>
|
||||||
|
</template>
|
||||||
|
</a-table>
|
||||||
|
</a-tab-pane>
|
||||||
|
</a-tabs>
|
||||||
|
|
||||||
|
<a-empty v-else description="请选择一个仓库" />
|
||||||
|
</a-space>
|
||||||
|
</a-layout-content>
|
||||||
|
|
||||||
|
<a-drawer
|
||||||
|
:visible="drawerVisible"
|
||||||
|
@cancel="closeDrawer"
|
||||||
|
@ok="closeDrawer"
|
||||||
|
unmountOnClose
|
||||||
|
>
|
||||||
|
<template #title>
|
||||||
|
脚本详情
|
||||||
|
</template>
|
||||||
|
<a-descriptions :data="drawerData" layout="vertical" bordered />
|
||||||
|
</a-drawer>
|
||||||
|
</a-layout>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref, computed } from 'vue';
|
||||||
|
import { Message } from '@arco-design/web-vue';
|
||||||
|
|
||||||
|
const selectedRepo = ref('');
|
||||||
|
const repoData = ref([]);
|
||||||
|
const drawerVisible = ref(false);
|
||||||
|
const drawerData = ref([]);
|
||||||
|
|
||||||
|
const columns = [
|
||||||
|
{ title: '名称', dataIndex: 'name', slotName: 'name' },
|
||||||
|
{ title: '作者', dataIndex: 'author' },
|
||||||
|
{ title: '版本', dataIndex: 'version' },
|
||||||
|
{ title: '标签', dataIndex: 'tags', slotName: 'tags' },
|
||||||
|
{ title: '操作', slotName: 'operations' },
|
||||||
|
];
|
||||||
|
|
||||||
|
const getTabTitle = (type) => {
|
||||||
|
const titles = {
|
||||||
|
js: 'JS脚本',
|
||||||
|
pathing: '地图追踪',
|
||||||
|
macro: '键鼠脚本',
|
||||||
|
combat: '战斗策略',
|
||||||
|
tcg: '七圣召唤策略',
|
||||||
|
onekey: '一键宏',
|
||||||
|
};
|
||||||
|
return titles[type] || type;
|
||||||
|
};
|
||||||
|
|
||||||
|
const fetchRepoData = async () => {
|
||||||
|
if (!selectedRepo.value) return;
|
||||||
|
|
||||||
|
try {
|
||||||
|
// 这里替换为实际的 API 端点
|
||||||
|
const response = await fetch(`https://raw.githubusercontent.com/babalae/bettergi-scripts-list/refs/heads/main/repo/items.json`);
|
||||||
|
const data = await response.json();
|
||||||
|
repoData.value = data;
|
||||||
|
} catch (error) {
|
||||||
|
Message.error('获取仓库数据失败');
|
||||||
|
console.error('Error fetching repo data:', error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const downloadScript = (script) => {
|
||||||
|
// 实现下载逻辑
|
||||||
|
console.log('Downloading script:', script.name);
|
||||||
|
Message.success(`正在下载 ${script.name}`);
|
||||||
|
};
|
||||||
|
|
||||||
|
const showDetails = (script) => {
|
||||||
|
drawerData.value = [
|
||||||
|
{ label: '名称', value: script.name },
|
||||||
|
{ label: '作者', value: script.author },
|
||||||
|
{ label: '版本', value: script.version },
|
||||||
|
{ label: '描述', value: script.description || '无描述' },
|
||||||
|
{ label: '路径', value: script.path },
|
||||||
|
{ label: '标签', value: script.tags.join(', ') },
|
||||||
|
{ label: 'Hash', value: script.hash },
|
||||||
|
];
|
||||||
|
drawerVisible.value = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
const closeDrawer = () => {
|
||||||
|
drawerVisible.value = false;
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
||||||
0
src/assets/main.css
Normal file
0
src/assets/main.css
Normal file
13
src/main.js
Normal file
13
src/main.js
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import './assets/main.css'
|
||||||
|
|
||||||
|
import { createApp } from 'vue'
|
||||||
|
import App from './App.vue'
|
||||||
|
|
||||||
|
import ArcoVue from '@arco-design/web-vue';
|
||||||
|
import ArcoVueIcon from '@arco-design/web-vue/es/icon';
|
||||||
|
import '@arco-design/web-vue/dist/arco.css';
|
||||||
|
|
||||||
|
const app = createApp(App);
|
||||||
|
app.use(ArcoVue);
|
||||||
|
app.use(ArcoVueIcon);
|
||||||
|
app.mount('#app');
|
||||||
16
vite.config.js
Normal file
16
vite.config.js
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import { fileURLToPath, URL } from 'node:url'
|
||||||
|
|
||||||
|
import { defineConfig } from 'vite'
|
||||||
|
import vue from '@vitejs/plugin-vue'
|
||||||
|
|
||||||
|
// https://vitejs.dev/config/
|
||||||
|
export default defineConfig({
|
||||||
|
plugins: [
|
||||||
|
vue(),
|
||||||
|
],
|
||||||
|
resolve: {
|
||||||
|
alias: {
|
||||||
|
'@': fileURLToPath(new URL('./src', import.meta.url))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user