@@ -4,6 +4,7 @@ | |||
"demi", | |||
"iconify", | |||
"intlify", | |||
"mingcute", | |||
"pinia", | |||
"pnpm", | |||
"pyinstaller", | |||
@@ -1,3 +1,7 @@ | |||
Personalization: | |||
Annotations: label | |||
Collect: collection | |||
Train: train | |||
Settings: | |||
Advanced: Advanced Settings | |||
Personalization: Personalization | |||
@@ -15,3 +15,7 @@ not-found: 未找到页面 | |||
Settings: | |||
Advanced: 高级设置 | |||
Personalization: 个性化设置 | |||
Personalization: | |||
Collect: 采集 | |||
Annotations: 标注 | |||
Train: 训练 |
@@ -41,9 +41,11 @@ | |||
"devDependencies": { | |||
"@antfu/eslint-config": "^0.31.0", | |||
"@iconify-json/carbon": "^1.1.11", | |||
"@iconify/json": "^2.1.147", | |||
"@intlify/vite-plugin-vue-i18n": "^6.0.3", | |||
"@types/markdown-it-link-attributes": "^3.0.1", | |||
"@types/nprogress": "^0.2.0", | |||
"@unocss/preset-icons": "^0.47.5", | |||
"@unocss/vite": "^0.47.5", | |||
"@vitejs/plugin-vue": "^3.2.0", | |||
"@vue-macros/volar": "^0.5.4", | |||
@@ -3,9 +3,11 @@ lockfileVersion: 5.3 | |||
specifiers: | |||
'@antfu/eslint-config': ^0.31.0 | |||
'@iconify-json/carbon': ^1.1.11 | |||
'@iconify/json': ^2.1.147 | |||
'@intlify/vite-plugin-vue-i18n': ^6.0.3 | |||
'@types/markdown-it-link-attributes': ^3.0.1 | |||
'@types/nprogress': ^0.2.0 | |||
'@unocss/preset-icons': ^0.47.5 | |||
'@unocss/reset': ^0.47.5 | |||
'@unocss/vite': ^0.47.5 | |||
'@vitejs/plugin-vue': ^3.2.0 | |||
@@ -67,9 +69,11 @@ dependencies: | |||
devDependencies: | |||
'@antfu/eslint-config': 0.31.0_eslint@8.28.0+typescript@4.9.3 | |||
'@iconify-json/carbon': 1.1.11 | |||
'@iconify/json': 2.1.147 | |||
'@intlify/vite-plugin-vue-i18n': 6.0.3_vite@3.2.4+vue-i18n@9.2.2 | |||
'@types/markdown-it-link-attributes': 3.0.1 | |||
'@types/nprogress': 0.2.0 | |||
'@unocss/preset-icons': 0.47.5 | |||
'@unocss/vite': 0.47.5_vite@3.2.4 | |||
'@vitejs/plugin-vue': 3.2.0_vite@3.2.4+vue@3.2.45 | |||
'@vue-macros/volar': 0.5.4_vue-tsc@1.0.9+vue@3.2.45 | |||
@@ -1449,6 +1453,13 @@ packages: | |||
'@iconify/types': 2.0.0 | |||
dev: true | |||
/@iconify/json/2.1.147: | |||
resolution: {integrity: sha512-3aXxKtbbu+i/L6PKHlnzf37nMg3UXhds54l7QmVx4XAWcDIHt/eTECiz5KPXfYCySSpi4wy+JKSU/mObhZJPvw==} | |||
dependencies: | |||
'@iconify/types': 2.0.0 | |||
pathe: 0.3.9 | |||
dev: true | |||
/@iconify/types/2.0.0: | |||
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} | |||
dev: true | |||
@@ -6383,6 +6394,10 @@ packages: | |||
engines: {node: '>=8'} | |||
dev: true | |||
/pathe/0.3.9: | |||
resolution: {integrity: sha512-6Y6s0vT112P3jD8dGfuS6r+lpa0qqNrLyHPOwvXMnyNTQaYiwgau2DP3aNDsR13xqtGj7rrPo+jFUATpU6/s+g==} | |||
dev: true | |||
/pathe/1.0.0: | |||
resolution: {integrity: sha512-nPdMG0Pd09HuSsr7QOKUXO2Jr9eqaDiZvDwdyIhNG5SHYujkQHYKDfGQkulBxvbDHz8oHLsTgKN86LSwYzSHAg==} | |||
dev: true | |||
@@ -3,7 +3,7 @@ | |||
</script> | |||
<template> | |||
<select class="select select-bordered "> | |||
<select class="select select-bordered select-primary"> | |||
<option selected> | |||
嘴控 | |||
</option> | |||
@@ -16,7 +16,7 @@ defineProps({ | |||
<div> | |||
<label class="flex items-center cursor-pointer justify-center "> | |||
<span class="label-text pr-2 text-lg">{{ text }}</span> | |||
<input type="checkbox" class="toggle" checked :disabled="$props.disabled"> | |||
<input type="checkbox" class="toggle toggle-primary" checked :disabled="$props.disabled"> | |||
</label> | |||
</div> | |||
</template> | |||
@@ -5,13 +5,13 @@ router.currentRoute.value.path === '/index.html' && router.push('/') // redirect | |||
</script> | |||
<template> | |||
<main p="x4 y10" text="center teal-700 dark:gray-200"> | |||
<main p="x4 y10" text="center dark:gray-200"> | |||
<div text-4xl> | |||
<div i-carbon-warning inline-block /> | |||
</div> | |||
<RouterView /> | |||
<div> | |||
<button class="btn" text-sm m="3 t8" @click="router.back"> | |||
<button class="btn btn-primary btn-sm" text-sm m="3 t8" @click="router.back"> | |||
{{ t('button.back') }} | |||
</button> | |||
</div> | |||
@@ -1,5 +1,5 @@ | |||
<template> | |||
<main class="px-4 py-10 text-center text-gray-700 dark:text-gray-200"> | |||
<main class="px-4 text-center text-gray-700 dark:text-gray-200"> | |||
<RouterView /> | |||
<Footer /> | |||
<!-- <div class="mt-5 mx-auto text-center opacity-75 dark:opacity-50 text-sm"> | |||
@@ -17,7 +17,7 @@ const messages = Object.fromEntries( | |||
export const install: UserModule = ({ app }) => { | |||
const i18n = createI18n({ | |||
legacy: false, | |||
locale: 'en', | |||
locale: 'zh-CN', | |||
messages, | |||
}) | |||
@@ -76,7 +76,7 @@ const otherSetting = [ | |||
<template> | |||
<div> | |||
<div class="hero"> | |||
<div class="hero-content flex-col items-end lg:flex-row-reverse "> | |||
<div class="hero-content flex-col items-end"> | |||
<div class="text-3xl flex items-center"> | |||
<router-link to="/"> | |||
<div i-carbon-arrow-left class="mr-2 hover:bg-primary" /> | |||
@@ -0,0 +1,206 @@ | |||
<script setup> | |||
const { t } = useI18n() | |||
</script> | |||
<template> | |||
<div> | |||
<div class="hero justify-start"> | |||
<div class="hero-content flex-col items-end"> | |||
<div class=" flex"> | |||
<!-- <router-link to="/" class="text-3xl"> | |||
<div i-carbon-arrow-left class="mr-2 hover:bg-primary" /> | |||
</router-link> --> | |||
<div> | |||
<ul class="steps"> | |||
<li class="step step-primary"> | |||
{{ t('Personalization.Collect') }} | |||
</li> | |||
<li class="step step-primary"> | |||
{{ t('Personalization.Annotations') }} | |||
</li> | |||
<li class="step"> | |||
{{ t('Personalization.Train') }} | |||
</li> | |||
</ul> | |||
</div> | |||
</div> | |||
<!-- <div class="text-gray-500"> | |||
修改后重启生效 | |||
</div> --> | |||
</div> | |||
</div> | |||
<div class="flex justify-center flex-col items-center"> | |||
<div text-3xl class="label-title"> | |||
图像标注 | |||
</div> | |||
<div flex items-center mt-4> | |||
<div class="label-left mr-4"> | |||
<div> | |||
<ul class="menu bg-base-100 p-1 py-2 rounded-box shadow"> | |||
<li class="menu-title"> | |||
<span>标注类别-眼睛</span> | |||
</li> | |||
<li> | |||
<a class="active"><div i-mingcute-eye-line />眼睛开</a> | |||
</li> | |||
<li><a><div i-mingcute-eye-close-fill />眼睛闭</a></li> | |||
<li class="menu-title"> | |||
<span>标注类别-嘴巴</span> | |||
</li> | |||
<li><a><div i-icon-park-outline-surprised-face-with-open-big-mouth />嘴巴开</a></li> | |||
<li><a><div i-icon-park-outline-face-without-mouth />嘴巴闭</a></li> | |||
</ul> | |||
</div> | |||
<div /> | |||
<div class="stats stats-vertical shadow mt-4"> | |||
<div class="stat"> | |||
<div class="stat-title flex items-center"> | |||
<div i-ri-quill-pen-fill />已标记 | |||
</div> | |||
<div class="stat-value"> | |||
200 | |||
</div> | |||
</div> | |||
<div class="stat"> | |||
<div class="stat-title flex items-center"> | |||
<div i-ep-warn-triangle-filled />未标记 | |||
</div> | |||
<div class="stat-value"> | |||
18 | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="label-center flex "> | |||
<img class="max-w-full h-100 rounded-lg bg-contain bg-clip-border" src="/Snipaste_2022-12-01_22-59-42.png" alt="image description"> | |||
</div> | |||
<div class="label-right ml-4 shadow"> | |||
<div class="label-imgs h-96 carousel carousel-vertical rounded-md"> | |||
<div class="carousel-item h-2/5 indicator hover:cursor-pointer"> | |||
<span class="indicator-item badge badge-primary indicator-start indicator-bottom "><div i-carbon:checkmark-filled />已标注</span> | |||
<img src="/Snipaste_2022-12-01_22-59-42.png"> | |||
</div> | |||
<div class="carousel-item h-2/5 mt-1"> | |||
<img src="/Snipaste_2022-12-01_22-59-42.png"> | |||
</div> | |||
<div class="carousel-item h-2/5 mt-1"> | |||
<img src="/Snipaste_2022-12-01_22-59-42.png"> | |||
</div> | |||
<div class="carousel-item h-2/5 mt-1"> | |||
<img src="/Snipaste_2022-12-01_22-59-42.png"> | |||
</div> | |||
<div class="carousel-item h-2/5 mt-1"> | |||
<img src="/Snipaste_2022-12-01_22-59-42.png"> | |||
</div> | |||
<div class="carousel-item h-2/5 mt-1"> | |||
<img src="/Snipaste_2022-12-01_22-59-42.png"> | |||
</div> | |||
<div class="carousel-item h-2/5 mt-1"> | |||
<img src="/Snipaste_2022-12-01_22-59-42.png"> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="w-full flex justify-around mt-4"> | |||
<div class="flex-col items-end"> | |||
<div class=" flex"> | |||
<router-link to="/Personalization"> | |||
<button class="btn btn-primary "> | |||
<div i-carbon-arrow-left />采集 | |||
</button> | |||
</router-link> | |||
</div> | |||
</div> | |||
<div class="flex-col items-end"> | |||
<div class="btn-group"> | |||
<button class="btn hover:btn-primary"> | |||
<router-link to="/Personalization/train" class="flex items-center"> | |||
<div i-mingcute-cloud-line />云端训练 | |||
</router-link> | |||
</button> | |||
<button class="btn hover:btn-primary"> | |||
<router-link to="/Personalization/train" class="flex items-center"> | |||
<div i-mingcute-computer-line />本地训练 | |||
</router-link> | |||
</button> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</template> | |||
<style scoped> | |||
.indicator { | |||
position: relative; | |||
display: inline-flex; | |||
width: max-content; | |||
} | |||
.indicator :where(.indicator-item) { | |||
z-index: 1; | |||
position: absolute; | |||
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); | |||
} | |||
.indicator :where(.indicator-item) { | |||
right: 0px; | |||
left: auto; | |||
top: 0px; | |||
bottom: auto; | |||
--tw-translate-x: 50%; | |||
--tw-translate-y: -50%; | |||
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); | |||
} | |||
.indicator :where(.indicator-item.indicator-start) { | |||
right: auto; | |||
left: 0px; | |||
--tw-translate-x: 0%; | |||
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); | |||
} | |||
.indicator :where(.indicator-item.indicator-center) { | |||
right: 50%; | |||
left: 50%; | |||
--tw-translate-x: -50%; | |||
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); | |||
} | |||
.indicator :where(.indicator-item.indicator-end) { | |||
right: 0px; | |||
left: auto; | |||
--tw-translate-x: 50%; | |||
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); | |||
} | |||
.indicator :where(.indicator-item.indicator-bottom) { | |||
top: auto; | |||
bottom: 0px; | |||
--tw-translate-y: -15%; | |||
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); | |||
} | |||
.indicator :where(.indicator-item.indicator-middle) { | |||
top: 50%; | |||
bottom: 50%; | |||
--tw-translate-y: -50%; | |||
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); | |||
} | |||
.indicator :where(.indicator-item.indicator-top) { | |||
top: 0px; | |||
bottom: auto; | |||
--tw-translate-y: -50%; | |||
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); | |||
} | |||
.stat { | |||
display: inline-grid; | |||
width: 100%; | |||
grid-template-columns: repeat(1, 1fr); | |||
-moz-column-gap: 1rem; | |||
column-gap: 1rem; | |||
border-color: hsl(var(--bc) / var(--tw-border-opacity)); | |||
--tw-border-opacity: 0.1; | |||
padding-left: 1.5rem; | |||
padding-right: 1.5rem; | |||
padding-top: .5rem; | |||
padding-bottom: .5rem; | |||
} | |||
</style> |
@@ -0,0 +1,201 @@ | |||
<script setup> | |||
const { t } = useI18n() | |||
</script> | |||
<template> | |||
<div> | |||
<div class="hero justify-start"> | |||
<div class="hero-content flex-col items-end"> | |||
<div class=" flex"> | |||
<router-link to="/" class="text-3xl"> | |||
<div i-carbon-arrow-left class="mr-2 hover:bg-primary" /> | |||
</router-link> | |||
<div> | |||
<ul class="steps"> | |||
<li class="step step-primary"> | |||
{{ t('Personalization.Collect') }} | |||
</li> | |||
<li class="step"> | |||
{{ t('Personalization.Annotations') }} | |||
</li> | |||
<li class="step"> | |||
{{ t('Personalization.Train') }} | |||
</li> | |||
</ul> | |||
</div> | |||
</div> | |||
<!-- <div class="text-gray-500"> | |||
修改后重启生效 | |||
</div> --> | |||
</div> | |||
</div> | |||
<div class="flex justify-center flex-col items-center"> | |||
<div class="collect-title flex items-end"> | |||
<div text-3xl> | |||
实时图像 | |||
</div> | |||
<div flex items-center ml-3> | |||
<div class="badge badge-primary"> | |||
已采集999张图片 | |||
</div> | |||
<div> | |||
<select class="select select-sm max-w-xs"> | |||
<option selected> | |||
不裁剪 | |||
</option> | |||
<option> | |||
居中裁剪成224*224 | |||
</option> | |||
<option> | |||
居中裁剪成320*320 | |||
</option> | |||
</select> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="collect-imgs stack mt-4"> | |||
<div class="collect-img"> | |||
<img class="max-w-full h-100 rounded-lg bg-contain bg-clip-border" src="/Snipaste_2022-12-01_22-59-42.png" alt="image description"> | |||
</div> | |||
<div class="collect-img"> | |||
<img class="max-w-full h-100 rounded-lg bg-contain bg-clip-border" src="/Snipaste_2022-12-01_22-59-42.png" alt="image description"> | |||
</div> | |||
<div class="collect-img"> | |||
<img class="max-w-full h-100 rounded-lg bg-contain bg-clip-border" src="/Snipaste_2022-12-01_22-59-42.png" alt="image description"> | |||
</div> | |||
</div> | |||
<div flex mt-10> | |||
<button class="btn btn-primary"> | |||
截图 | |||
</button> | |||
<button class="btn btn-primary ml-10"> | |||
打开文件夹 | |||
</button> | |||
</div> | |||
</div> | |||
<div class="hero justify-end"> | |||
<div class="hero-content flex-col items-end"> | |||
<div class=" flex"> | |||
<router-link to="/Personalization/annotations"> | |||
<button class="btn btn-primary "> | |||
标注<div i-carbon-arrow-right /> | |||
</button> | |||
</router-link> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</template> | |||
<style scoped> | |||
.hero { | |||
display: grid; | |||
width: 100%; | |||
place-items: center; | |||
background-size: cover; | |||
background-position: center; | |||
} | |||
.hero > * { | |||
grid-column-start: 1; | |||
grid-row-start: 1; | |||
} | |||
.hero-content { | |||
z-index: 0; | |||
display: flex; | |||
align-items: left; | |||
justify-content: center; | |||
max-width: 80rem/* 1280px */; | |||
gap: 1rem/* 16px */; | |||
padding: 1rem/* 16px */; | |||
} | |||
.input-group > *, | |||
.input-group > .input, | |||
.input-group > .select { | |||
border-radius: 0px; | |||
} | |||
.select { | |||
display: inline-flex; | |||
flex-shrink: 0; | |||
cursor: pointer; | |||
user-select: none; | |||
appearance: none; | |||
height: 3rem/* 48px */; | |||
padding-left: 1rem/* 16px */; | |||
padding-right: 2.5rem/* 40px */; | |||
padding-right: 2.5rem/* 40px */; | |||
font-size: 0.875rem/* 14px */; | |||
line-height: 1.25rem/* 20px */; | |||
line-height: 2; | |||
min-height: 3rem/* 48px */; | |||
border-width: 1px; | |||
border-color: hsl(var(--bc) / var(--tw-border-opacity)); | |||
--tw-border-opacity: 0; | |||
--tw-bg-opacity: 1; | |||
background-color: hsl(var(--b1) / var(--tw-bg-opacity)); | |||
font-weight: 600; | |||
transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter; | |||
transition-duration: 200ms; | |||
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); | |||
border-radius: var(--rounded-btn, 0.5rem); | |||
background-image: linear-gradient(45deg, transparent 50%, currentColor 50%), linear-gradient(135deg, currentColor 50%, transparent 50%); | |||
background-position: calc(100% - 20px) calc(1px + 50%), calc(100% - 16px) calc(1px + 50%); | |||
background-size: 4px 4px, 4px 4px; | |||
background-repeat: no-repeat; | |||
} | |||
.select[multiple] { | |||
height: auto; | |||
} | |||
.select:focus { | |||
outline: 0px solid hsla(var(--bc) / 0.2); | |||
outline-offset: 2px; | |||
} | |||
.select-disabled, | |||
.select[disabled] { | |||
cursor: not-allowed; | |||
--tw-border-opacity: 1; | |||
border-color: hsl(var(--b2, var(--b1)) / var(--tw-border-opacity)); | |||
--tw-bg-opacity: 1; | |||
background-color: hsl(var(--b2, var(--b1)) / var(--tw-bg-opacity)); | |||
--tw-text-opacity: 0.2; | |||
} | |||
.select-disabled::placeholder, | |||
.select[disabled]::placeholder { | |||
color: hsl(var(--bc) / var(--tw-placeholder-opacity)); | |||
--tw-placeholder-opacity: 0.2; | |||
} | |||
.select-multiple, | |||
.select[multiple], | |||
.select[size].select:not([size="1"]) { | |||
background-image: none; | |||
padding-right: 1rem/* 16px */; | |||
} | |||
.select-multiple, | |||
.select[multiple], | |||
.select[size].select:not([size="1"]) { | |||
background-image: none; | |||
padding-right: 1rem/* 16px */; | |||
} | |||
.select-multiple, | |||
.select[multiple], | |||
.select[size].select:not([size="1"]) { | |||
background-image: none; | |||
padding-right: 1rem/* 16px */; | |||
} | |||
.select-sm { | |||
height: 2rem/* 32px */; | |||
padding-left: 0.75rem/* 12px */; | |||
padding-right: 2rem/* 32px */; | |||
font-size: 0.875rem/* 14px */; | |||
line-height: 2rem/* 32px */; | |||
min-height: 2rem/* 32px */; | |||
} | |||
[dir="rtl"] .select-sm { | |||
padding-right: 0.75rem/* 12px */; | |||
padding-left: 2rem/* 32px */; | |||
} | |||
</style> |
@@ -0,0 +1,154 @@ | |||
<script setup> | |||
const { t } = useI18n() | |||
</script> | |||
<template> | |||
<div> | |||
<div class="hero justify-start"> | |||
<div class="hero-content flex-col items-end"> | |||
<div class=" flex"> | |||
<!-- <router-link to="/" class="text-3xl"> | |||
<div i-carbon-arrow-left class="mr-2 hover:bg-primary" /> | |||
</router-link> --> | |||
<div> | |||
<ul class="steps"> | |||
<li class="step step-primary"> | |||
{{ t('Personalization.Collect') }} | |||
</li> | |||
<li class="step step-primary"> | |||
{{ t('Personalization.Annotations') }} | |||
</li> | |||
<li class="step step-primary"> | |||
{{ t('Personalization.Train') }} | |||
</li> | |||
</ul> | |||
</div> | |||
</div> | |||
<!-- <div class="text-gray-500"> | |||
修改后重启生效 | |||
</div> --> | |||
</div> | |||
</div> | |||
<div class="flex justify-center flex-col items-center"> | |||
<div text-3xl class="label-title"> | |||
图像标注(云端) | |||
</div> | |||
<div mt-4> | |||
<div flex items-center> | |||
<div ml-1 text-lg> | |||
进度: | |||
</div> | |||
<progress class="progress ml-3" /> | |||
</div> | |||
<div flex flex-col items-start mt-1> | |||
<div class="ml-1 text-lg"> | |||
输出日志: | |||
</div> | |||
<div class="mockup-code flex flex-col items-start mt-2"> | |||
<pre data-prefix="$"><code>loading annotations into memory...</code></pre> | |||
<pre data-prefix=">" class="text-warning"><code>[11/30 10:54:19] INFO: Epoch: [110] [ 0/40] loss: 1.585057 </code></pre> | |||
<pre data-prefix=">" class="text-success"><code>[11/30 10:56:32] INFO: Epoch: [110] [ 1/40] loss: 1.580321</code></pre> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
<div class="w-full flex justify-around mt-4"> | |||
<div class="flex-col items-end"> | |||
<div class=" flex"> | |||
<router-link to="/Personalization/annotations"> | |||
<button class="btn btn-primary "> | |||
<div i-carbon-arrow-left />标注 | |||
</button> | |||
</router-link> | |||
</div> | |||
</div> | |||
<div class="flex-col items-end"> | |||
<div class=""> | |||
<button class="btn hover:btn-primary"> | |||
<router-link to="/Personalization/deploy" class="flex items-center"> | |||
<div i-material-symbols-cloud-download-outline />本地部署 | |||
</router-link> | |||
</button> | |||
</div> | |||
</div> | |||
</div> | |||
</div> | |||
</template> | |||
<style scoped> | |||
.mockup-code { | |||
position: relative; | |||
overflow: hidden; | |||
overflow-x: auto; | |||
min-width: 30rem/* 288px */; | |||
--tw-bg-opacity: 1; | |||
background-color: hsl(var(--n) / var(--tw-bg-opacity)); | |||
padding-top: 1.25rem/* 20px */; | |||
padding-bottom: 1.25rem/* 20px */; | |||
--tw-text-opacity: 1; | |||
color: hsl(var(--nc) / var(--tw-text-opacity)); | |||
border-radius: var(--rounded-box, 1rem); | |||
} | |||
.mockup-code pre[data-prefix]:before { | |||
content: attr(data-prefix); | |||
content: attr(data-prefix); | |||
display: inline-block; | |||
text-align: right; | |||
width: 2rem/* 32px */; | |||
opacity: 0.5; | |||
} | |||
.mockup-code:before { | |||
content: ""; | |||
margin-bottom: 1rem/* 16px */; | |||
display: block; | |||
height: 0.75rem/* 12px */; | |||
width: 0.75rem/* 12px */; | |||
border-radius: 9999px; | |||
opacity: 0.3; | |||
box-shadow: 1.4em 0, 2.8em 0, 4.2em 0; | |||
} | |||
.mockup-code pre { | |||
padding-right: 1.25rem/* 20px */; | |||
} | |||
.mockup-code pre:before { | |||
content: ""; | |||
margin-right: 2ch; | |||
} | |||
.progress { | |||
position: relative; | |||
width: 24.5rem; | |||
appearance: none; | |||
overflow: hidden; | |||
height: 0.5rem/* 8px */; | |||
border-radius: var(--rounded-box, 1rem); | |||
} | |||
.progress::-moz-progress-bar { | |||
--tw-bg-opacity: 1; | |||
background-color: hsl(var(--n) / var(--tw-bg-opacity)); | |||
} | |||
.progress:indeterminate::after { | |||
--tw-bg-opacity: 1; | |||
background-color: hsl(var(--n) / var(--tw-bg-opacity)); | |||
content: ""; | |||
position: absolute; | |||
top: 0px; | |||
bottom: 0px; | |||
left: -40%; | |||
width: 33.333333%; | |||
border-radius: var(--rounded-box, 1rem); | |||
animation: progress-loading 5s infinite ease-in-out; | |||
} | |||
.progress::-webkit-progress-bar { | |||
background-color: hsl(var(--n) / var(--tw-bg-opacity)); | |||
--tw-bg-opacity: 0.2; | |||
border-radius: var(--rounded-box, 1rem); | |||
} | |||
.progress::-webkit-progress-value { | |||
--tw-bg-opacity: 1; | |||
background-color: hsl(var(--nf, var(--n)) / var(--tw-bg-opacity)); | |||
border-radius: var(--rounded-box, 1rem); | |||
} | |||
</style> |
@@ -1,47 +0,0 @@ | |||
<script setup lang="ts"> | |||
const props = defineProps<{ name: string }>() | |||
const router = useRouter() | |||
const user = useUserStore() | |||
const { t } = useI18n() | |||
watchEffect(() => { | |||
user.setNewName(props.name) | |||
}) | |||
</script> | |||
<template> | |||
<div> | |||
<div text-4xl> | |||
<div i-carbon-pedestrian inline-block /> | |||
</div> | |||
<p> | |||
{{ t('intro.hi', { name: props.name }) }} | |||
</p> | |||
<p text-sm opacity-75> | |||
<em>{{ t('intro.dynamic-route') }}</em> | |||
</p> | |||
<template v-if="user.otherNames.length"> | |||
<p text-sm mt-4> | |||
<span opacity-75>{{ t('intro.aka') }}:</span> | |||
<ul> | |||
<li v-for="otherName in user.otherNames" :key="otherName"> | |||
<router-link :to="`/hi/${otherName}`" replace> | |||
{{ otherName }} | |||
</router-link> | |||
</li> | |||
</ul> | |||
</p> | |||
</template> | |||
<div> | |||
<button | |||
btn m="3 t6" text-sm | |||
@click="router.back()" | |||
> | |||
{{ t('button.back') }} | |||
</button> | |||
</div> | |||
</div> | |||
</template> |
@@ -32,7 +32,7 @@ const { t } = useI18n() | |||
<div class="flex justify-center "> | |||
<div class=""> | |||
<div class="pr-9"> | |||
<div class="text-5xl bg-clip-text text-transparent bg-gradient-to-r from-cyan-500 to-sky-800 font-extrabold"> | |||
<div class="text-5xl bg-clip-text text-transparent bg-gradient-to-r from-cyan-500 to-sky-400 font-extrabold"> | |||
EMC | |||
</div> | |||
<div class="text-gray-400"> | |||
@@ -40,8 +40,8 @@ const { t } = useI18n() | |||
</div> | |||
<div class="bg-gray-100 p-3 rounded-md mt-4"> | |||
<div>实时情况:</div> | |||
<d-toggle text="闭眼" class="pt-2" :disabled="true" /> | |||
<d-toggle text="张嘴" class="pt-2" :disabled="true" /> | |||
<d-toggle text="眼开" class="pt-2" :disabled="true" /> | |||
<d-toggle text="嘴张" class="pt-2" :disabled="true" /> | |||
</div> | |||
<d-toggle text="启用" class="pt-4" /> | |||
<d-toggle text="触发提醒" class="pt-4" /> | |||
@@ -49,12 +49,12 @@ const { t } = useI18n() | |||
</div> | |||
<div class="item-center flex flex-col pr-9 mt-5"> | |||
<div> | |||
<router-link to="/AdvancedSettings" class="hover:underline"> | |||
<router-link to="/AdvancedSettings" class="hover:underline hover:link-primary"> | |||
{{ t('Settings.Advanced') }} | |||
</router-link> | |||
</div> | |||
<div> | |||
<router-link to="/Personalization" class="hover:underline mt-3"> | |||
<router-link to="/Personalization" class="hover:underline mt-3 hover:link-primary"> | |||
{{ t('Settings.Personalization') }} | |||
</router-link> | |||
</div> | |||
@@ -19,6 +19,7 @@ export default defineConfig({ | |||
presetIcons({ | |||
scale: 1.2, | |||
warn: true, | |||
cdn: 'https://esm.sh/', | |||
}), | |||
presetTypography(), | |||
presetWebFonts({ | |||