add embed ui

This commit is contained in:
2025-07-15 01:41:18 +07:00
parent 88de56c140
commit 6707967fb5
17 changed files with 32 additions and 5 deletions
+18 -2
View File
@@ -2,11 +2,13 @@ package main
import (
"context"
"embed"
"evening_detective/internal/app"
"evening_detective/internal/config"
"evening_detective/internal/services"
"evening_detective/internal/services/story_service"
proto "evening_detective/proto"
"io/fs"
"log"
"net"
"net/http"
@@ -17,6 +19,12 @@ import (
"google.golang.org/grpc/metadata"
)
//go:embed static/user/*
var userFS embed.FS
//go:embed static/admin/*
var adminFS embed.FS
func main() {
// Create a listener on TCP port
lis, err := net.Listen("tcp", ":8080")
@@ -91,7 +99,11 @@ func main() {
}()
muxUser := http.NewServeMux()
fileServerUser := http.FileServer(http.Dir("./static/user"))
subUserFS, err := fs.Sub(userFS, "static/user")
if err != nil {
log.Fatalln(err)
}
fileServerUser := http.FileServer(http.FS(subUserFS))
muxUser.Handle("/", fileServerUser)
// Serve user web server
@@ -101,7 +113,11 @@ func main() {
}()
muxAdmin := http.NewServeMux()
fileServerAdmin := http.FileServer(http.Dir("./static/admin"))
subAdminFS, err := fs.Sub(adminFS, "static/admin")
if err != nil {
log.Fatalln(err)
}
fileServerAdmin := http.FileServer(http.FS(subAdminFS))
muxAdmin.Handle("/", fileServerAdmin)
// Serve admin web server
@@ -0,0 +1 @@
:root{--vt-c-white: #ffffff;--vt-c-white-soft: #f8f8f8;--vt-c-white-mute: #f2f2f2;--vt-c-black: #181818;--vt-c-black-soft: #222222;--vt-c-black-mute: #282828;--vt-c-indigo: #2c3e50;--vt-c-divider-light-1: rgba(60, 60, 60, .29);--vt-c-divider-light-2: rgba(60, 60, 60, .12);--vt-c-divider-dark-1: rgba(84, 84, 84, .65);--vt-c-divider-dark-2: rgba(84, 84, 84, .48);--vt-c-text-light-1: var(--vt-c-indigo);--vt-c-text-light-2: rgba(60, 60, 60, .66);--vt-c-text-dark-1: var(--vt-c-white);--vt-c-text-dark-2: rgba(235, 235, 235, .64);--main-color: rgba(34, 50, 60, 1);--second-color: rgb(136, 105, 31);--main-back-color: rgba(240, 240, 240, 1);--main-back-item-color: rgba(254, 254, 254, 1)}:root{--color-background: var(--vt-c-white);--color-background-soft: var(--vt-c-white-soft);--color-background-mute: var(--vt-c-white-mute);--color-border: var(--vt-c-divider-light-2);--color-border-hover: var(--vt-c-divider-light-1);--color-heading: var(--vt-c-text-light-1);--color-text: var(--vt-c-text-light-1);--section-gap: 160px}*,*:before,*:after{box-sizing:border-box;margin:0;font-weight:400}body{min-height:100dvh;color:var(--color-text);background:var(--main-back-color);transition:color .5s,background-color .5s;line-height:1.6;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:15px;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.input-custom{width:100%;box-sizing:border-box;margin-bottom:15px}.button-custom{margin-left:auto;background-color:var(--main-color);font-weight:600;color:#fff}.button-custom-inline{margin:10px;background-color:var(--main-color);font-weight:600;color:#fff;padding:6px 8px;border:1px solid #ddd;border-radius:15px;font-size:14px}.button-custom:hover,.button-custom-inline:hover{background-color:var(--second-color)}.input-custom,.button-custom{padding:12px 16px;border:1px solid #ddd;border-radius:15px;font-size:16px}.button-container{display:flex}.center-message{display:flex;justify-content:center;align-items:center;height:calc(100dvh - 100px);text-align:center}.qr[data-v-666b8d35]{position:absolute;top:130px;right:30px;text-align:center;width:120px}.header-block[data-v-5b6894ef]{background-color:var(--main-color);font-size:large;color:#fff;vertical-align:middle;padding:10px 0 10px 16px;font-weight:700}.buttons-block[data-v-4d8d73b6]{padding-top:5px}.button-menu[data-v-4d8d73b6]{margin:5px 10px 5px 0}table[data-v-4d8d73b6]{width:700px;border-collapse:collapse;margin:30px auto;border:1px solid #444444}th[data-v-4d8d73b6],td[data-v-4d8d73b6]{padding:12px;text-align:left}th[data-v-4d8d73b6]{background-color:var(--main-color);color:#fff;font-weight:700}tr[data-v-4d8d73b6]:nth-child(odd){background-color:#efefef}tr[data-v-4d8d73b6]:nth-child(2n){background-color:#fff}tr[data-v-4d8d73b6]:hover{background-color:#cfcfcf}.time[data-v-4d8d73b6]{white-space:nowrap}.team-name[data-v-4d8d73b6]{font-weight:600}.link-button[data-v-4d8d73b6]{display:inline;border:none;background:none;padding:0;margin:0;font:inherit;cursor:pointer;color:var(--main-color);text-decoration:underline;font-weight:600;-webkit-appearance:none;-moz-appearance:none;appearance:none;line-height:inherit;text-align:left}.link-button[data-v-4d8d73b6]:hover{color:var(--second-color);text-decoration:none}.link-button[data-v-4d8d73b6]:active{color:#036}.link-button[data-v-4d8d73b6]:focus{outline:none;text-decoration:none;box-shadow:0 0 0 2px #0066cc4d}.form-block[data-v-4d8d73b6]{width:700px;margin:0 auto}a[data-v-4d8d73b6]{color:var(--second-color);text-decoration:none;transition:all .2s ease;cursor:pointer}a[data-v-4d8d73b6]:hover{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}a[data-v-4d8d73b6]:focus-visible{outline:2px solid #3182ce;outline-offset:2px;border-radius:2px}a[disabled][data-v-4d8d73b6]{color:#a0aec0;pointer-events:none;cursor:not-allowed}.button-container[data-v-4d8d73b6]{margin-bottom:30px}.cell-center[data-v-4d8d73b6]{text-align:center}.three-columns[data-v-1112068b]{display:grid;grid-template-columns:1fr 2fr 1fr;gap:20px;height:100%}.column[data-v-1112068b]{border:1px solid #e0e0e0;padding:20px;margin:5px}
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ВД Админка</title>
<script type="module" crossorigin src="/assets/index-Tp3gHO58.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-JqNLMpQx.css">
</head>
<body>
<div id="app"></div>
</body>
</html>
@@ -0,0 +1 @@
@media (min-width: 1024px){.about{min-height:100vh;display:flex;align-items:center}}
@@ -0,0 +1 @@
import{_ as o,c as s,a as t,o as a}from"./index-DkrD2ASU.js";const n={},c={class:"about"};function r(_,e){return a(),s("div",c,e[0]||(e[0]=[t("h1",null,"This is an about page",-1)]))}const l=o(n,[["render",r]]);export{l as default};
@@ -0,0 +1 @@
:root{--vt-c-white: #ffffff;--vt-c-white-soft: #f8f8f8;--vt-c-white-mute: #f2f2f2;--vt-c-black: #181818;--vt-c-black-soft: #222222;--vt-c-black-mute: #282828;--vt-c-indigo: #2c3e50;--vt-c-divider-light-1: rgba(60, 60, 60, .29);--vt-c-divider-light-2: rgba(60, 60, 60, .12);--vt-c-divider-dark-1: rgba(84, 84, 84, .65);--vt-c-divider-dark-2: rgba(84, 84, 84, .48);--vt-c-text-light-1: var(--vt-c-indigo);--vt-c-text-light-2: rgba(60, 60, 60, .66);--vt-c-text-dark-1: var(--vt-c-white);--vt-c-text-dark-2: rgba(235, 235, 235, .64);--main-color: rgba(34, 50, 60, 1);--second-color: rgb(136, 105, 31);--main-back-color: rgba(240, 240, 240, 1);--main-back-item-color: rgba(254, 254, 254, 1)}:root{--color-background: var(--vt-c-white);--color-background-soft: var(--vt-c-white-soft);--color-background-mute: var(--vt-c-white-mute);--color-border: var(--vt-c-divider-light-2);--color-border-hover: var(--vt-c-divider-light-1);--color-heading: var(--vt-c-text-light-1);--color-text: var(--vt-c-text-light-1);--section-gap: 160px}*,*:before,*:after{box-sizing:border-box;margin:0;font-weight:400}body{min-height:100dvh;color:var(--color-text);background:var(--main-back-color);transition:color .5s,background-color .5s;line-height:1.6;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;font-size:15px;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.header-block{height:60px;background-color:var(--main-color);font-size:large;color:#fff;vertical-align:middle;padding:15px 0 10px 16px;font-weight:700}.input-custom{width:100%;box-sizing:border-box;margin-bottom:15px}.button-custom{margin-left:auto;background-color:var(--main-color);font-weight:600;color:#fff}.button-custom:hover{background-color:var(--main-color);opacity:.9}.button-custom:disabled{opacity:.5}.input-custom,.button-custom{padding:12px 16px;border:1px solid #ddd;border-radius:15px;font-size:16px}.button-container{display:flex}.center-message{display:flex;justify-content:center;align-items:center;height:calc(100dvh - 100px);text-align:center}header[data-v-913ef6b1]{line-height:1.5;max-height:100vh}.logo[data-v-913ef6b1]{display:block;margin:0 auto 2rem}nav[data-v-913ef6b1]{width:100%;font-size:12px;text-align:center;margin-top:2rem}nav a.router-link-exact-active[data-v-913ef6b1]{color:var(--color-text)}nav a.router-link-exact-active[data-v-913ef6b1]:hover{background-color:transparent}nav a[data-v-913ef6b1]{display:inline-block;padding:0 1rem;border-left:1px solid var(--color-border)}nav a[data-v-913ef6b1]:first-of-type{border:0}@media (min-width: 1024px){header[data-v-913ef6b1]{display:flex;place-items:center;padding-right:calc(var(--section-gap) / 2)}.logo[data-v-913ef6b1]{margin:0 2rem 0 0}header .wrapper[data-v-913ef6b1]{display:flex;place-items:flex-start;flex-wrap:wrap}nav[data-v-913ef6b1]{text-align:left;margin-left:-1rem;font-size:1rem;padding:1rem 0;margin-top:1rem}}body[data-v-5146ce3d]{overflow:hidden}.hr[data-v-5146ce3d]{margin:7px 0}.body-custom[data-v-5146ce3d]{font-size:medium}.info-custom[data-v-5146ce3d]{padding-left:15px}.logo[data-v-5146ce3d]{float:left;margin:10px}.logo-right[data-v-5146ce3d]{float:right;margin:12px}.second-color[data-v-5146ce3d]{color:var(--second-color)}.form-custom[data-v-5146ce3d]{border:1px solid #444444;background-color:var(--main-back-color);position:fixed;bottom:0;left:0;width:100%;padding:20px;color:#fff}.message-cloud[data-v-5146ce3d]{border:1px solid #444444;border-radius:15px;margin:12px 10px;padding:16px;background-color:var(--main-back-item-color)}.message-header[data-v-5146ce3d]{font-size:large;font-weight:200}.message-content[data-v-5146ce3d]{font-weight:500;white-space:pre-line}.message-footer[data-v-5146ce3d]{font-weight:400;color:var(--second-color)}.form-block[data-v-5146ce3d]{height:140px}.messages-block[data-v-5146ce3d]{height:calc(100dvh - 200px);overflow-y:auto;scrollbar-width:none}@media (min-width: 1025px){.center-block-custom[data-v-5146ce3d]{width:700px;margin:0 auto}}.center-message[data-v-5146ce3d]{height:calc(100dvh - 140px)}.qr[data-v-5146ce3d]{text-align:center;width:200px}.error-message[data-v-13746d20]{color:brown;margin:16px 0}
File diff suppressed because one or more lines are too long
Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="UTF-8">
<link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Вечерний детектив</title>
<script type="module" crossorigin src="/assets/index-DkrD2ASU.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-BJbIgyMb.css">
</head>
<body>
<div id="app"></div>
</body>
</html>