Revert "style: 样式调整"

This reverts commit aceb043332.
This commit is contained in:
zhengkunwang223 2022-09-09 11:05:20 +08:00
parent aceb043332
commit b8c7c52e1f
79 changed files with 513 additions and 704 deletions

1
.gitignore vendored
View file

@ -14,4 +14,3 @@
# Dependency directories (remove the comment below to include it)
# vendor/
/pkg/

View file

@ -101,7 +101,7 @@ func (f FileService) GetContent(op dto.FileOption) (dto.FileInfo, error) {
if err != nil {
return dto.FileInfo{}, err
}
return dto.FileInfo{FileInfo: *info}, nil
return dto.FileInfo{*info}, nil
}
func (f FileService) SaveContent(edit dto.FileEdit) error {
@ -169,7 +169,7 @@ func (f FileService) FileDownload(d dto.FileDownload) (string, error) {
func getUuid() string {
b := make([]byte, 16)
_, _ = io.ReadFull(rand.Reader, b)
io.ReadFull(rand.Reader, b)
b[6] = (b[6] & 0x0f) | 0x40
b[8] = (b[8] & 0x3f) | 0x80
return fmt.Sprintf("%x-%x-%x-%x-%x", b[0:4], b[4:6], b[6:8], b[8:10], b[10:])

View file

@ -55,7 +55,7 @@ func (c *Cache) Get(key string) ([]byte, error) {
result = append([]byte{}, val...)
return nil
})
return err
return nil
})
return result, err
}

View file

@ -1,6 +1,7 @@
package cache
import (
"fmt"
"github.com/1Panel-dev/1Panel/global"
"github.com/1Panel-dev/1Panel/init/cache/badger_db"
"github.com/dgraph-io/badger/v3"
@ -50,4 +51,25 @@ func Init() {
}
global.CACHE = badger_db.NewCacheDB(cache)
err = cache.View(func(txn *badger.Txn) error {
opts := badger.DefaultIteratorOptions
opts.PrefetchValues = false
it := txn.NewIterator(opts)
defer it.Close()
for it.Rewind(); it.Valid(); it.Next() {
item := it.Item()
k := item.Key()
fmt.Printf("key=%s\n", k)
}
return nil
})
if err != nil {
panic(err)
}
fmt.Printf("run gc")
err = cache.RunValueLogGC(0.01)
if err != nil {
fmt.Printf(err.Error())
}
}

View file

@ -28,7 +28,7 @@ func (p *PSession) Get(sessionID string) (SessionUser, error) {
if err != nil {
return result, err
}
_ = json.Unmarshal(item, &result)
json.Unmarshal(item, &result)
return result, nil
}

View file

@ -50,7 +50,10 @@ func (f FileOp) DeleteDir(dst string) error {
func (f FileOp) Stat(dst string) bool {
info, _ := f.Fs.Stat(dst)
return info != nil
if info != nil {
return true
}
return false
}
func (f FileOp) DeleteFile(dst string) error {

View file

@ -22,7 +22,6 @@ type FileInfo struct {
Size int64 `json:"size"`
IsDir bool `json:"isDir"`
IsSymlink bool `json:"isSymlink"`
IsHidden bool `json:"isHidden"`
LinkPath string `json:"linkPath"`
Type string `json:"type"`
Mode string `json:"mode"`
@ -34,11 +33,10 @@ type FileInfo struct {
}
type FileOption struct {
Path string `json:"path"`
Search string `json:"search"`
Expand bool `json:"expand"`
Dir bool `json:"dir"`
ShowHidden bool `json:"showHidden"`
Path string `json:"path"`
Search string `json:"search"`
Expand bool `json:"expand"`
Dir bool `json:"dir"`
}
func NewFileInfo(op FileOption) (*FileInfo, error) {
@ -59,7 +57,6 @@ func NewFileInfo(op FileOption) (*FileInfo, error) {
Size: info.Size(),
IsSymlink: IsSymlink(info.Mode()),
Extension: filepath.Ext(info.Name()),
IsHidden: IsHidden(op.Path),
Mode: fmt.Sprintf("%04o", info.Mode().Perm()),
User: GetUsername(info.Sys().(*syscall.Stat_t).Uid),
Group: GetGroup(info.Sys().(*syscall.Stat_t).Gid),
@ -67,10 +64,13 @@ func NewFileInfo(op FileOption) (*FileInfo, error) {
}
if file.IsSymlink {
file.LinkPath = GetSymlink(op.Path)
}
if op.Search != "" {
}
if op.Expand {
if file.IsDir {
if err := file.listChildren(op.Dir, op.ShowHidden); err != nil {
if err := file.listChildren(op.Dir); err != nil {
return nil, err
}
return file, nil
@ -83,7 +83,7 @@ func NewFileInfo(op FileOption) (*FileInfo, error) {
return file, nil
}
func (f *FileInfo) listChildren(dir, showHidden bool) error {
func (f *FileInfo) listChildren(dir bool) error {
afs := &afero.Afero{Fs: f.Fs}
files, err := afs.ReadDir(f.Path)
if err != nil {
@ -98,10 +98,6 @@ func (f *FileInfo) listChildren(dir, showHidden bool) error {
name := df.Name()
fPath := path.Join(f.Path, df.Name())
if !showHidden && IsHidden(name) {
continue
}
isSymlink, isInvalidLink := false, false
if IsSymlink(df.Mode()) {
isSymlink = true
@ -121,7 +117,6 @@ func (f *FileInfo) listChildren(dir, showHidden bool) error {
FileMode: df.Mode(),
IsDir: df.IsDir(),
IsSymlink: isSymlink,
IsHidden: IsHidden(fPath),
Extension: filepath.Ext(name),
Path: fPath,
Mode: fmt.Sprintf("%04o", df.Mode().Perm()),

View file

@ -42,9 +42,3 @@ func GetSymlink(path string) string {
}
return linkPath
}
const dotCharacter = 46
func IsHidden(path string) bool {
return path[0] == dotCharacter
}

View file

@ -29,9 +29,9 @@ module.exports = {
// 不需要自动在文件开头插入 @prettier
insertPragma: false,
// 使用默认的折行标准
proseWrap: 'never',
proseWrap: 'preserve',
// 根据显示样式决定 html 要不要折行
htmlWhitespaceSensitivity: 'ignore',
htmlWhitespaceSensitivity: 'css',
// 换行符使用 lf
endOfLine: 'auto',
};

View file

@ -23,7 +23,6 @@ export namespace File {
search?: string;
expand: boolean;
dir?: boolean;
showHidden?: boolean;
}
export interface FileTree {

View file

@ -1,9 +1,9 @@
@font-face {
font-family: "panel"; /* Project id 3575356 */
src: url('iconfont.woff2?t=1662692062751') format('woff2'),
url('iconfont.woff?t=1662692062751') format('woff'),
url('iconfont.ttf?t=1662692062751') format('truetype'),
url('iconfont.svg?t=1662692062751#panel') format('svg');
src: url('iconfont.woff2?t=1661325242934') format('woff2'),
url('iconfont.woff?t=1661325242934') format('woff'),
url('iconfont.ttf?t=1661325242934') format('truetype'),
url('iconfont.svg?t=1661325242934#panel') format('svg');
}
.panel {
@ -14,72 +14,12 @@
-moz-osx-font-smoothing: grayscale;
}
.p-logout:before {
content: "\e8fe";
}
.p-terminal2:before {
content: "\e82a";
}
.p-yingwen:before {
content: "\e6c3";
}
.p-zhongwen:before {
content: "\e6c8";
}
.p-plan:before {
content: "\e746";
}
.p-database:before {
content: "\e754";
}
.p-rejected-order:before {
content: "\e75e";
}
.p-toolbox:before {
content: "\e769";
}
.p-website:before {
content: "\e781";
}
.p-config:before {
content: "\e78e";
}
.p-appstore1:before {
content: "\e792";
}
.p-log:before {
content: "\e793";
}
.p-host:before {
content: "\e7b1";
.p-arrow-right:before {
content: "\e665";
}
.p-home:before {
content: "\e7c6";
}
.p-appstore:before {
content: "\eb65";
}
.p-docker:before {
content: "\e659";
}
.p-arrow-right:before {
content: "\e665";
content: "\e615";
}
.p-terminal:before {

File diff suppressed because one or more lines are too long

View file

@ -14,40 +14,10 @@
/>
<missing-glyph />
<glyph glyph-name="logout" unicode="&#59646;" d="M610.87695313-11.5078125L149.45117213-11.5078125c-19.77539063 0-32.95898463 13.18359399-32.95898463 32.95898463L116.4921875 746.54882787c0 19.77539063 13.18359399 32.95898463 32.95898463 32.95898463l461.425781 0c19.77539063 0 32.95898463-13.18359399 32.95898462-32.95898463l0-230.71289088c0-19.77539063-13.18359399-32.95898463-32.95898462-32.95898464s-32.95898463 13.18359399-32.95898463 32.95898464L577.9179685 713.589844 182.410156 713.589844l0-659.17968724 395.5078125 0 0 197.75390625c0 19.77539063 13.18359399 32.95898463 32.95898463 32.95898464s32.95898463-13.18359399 32.95898462-32.95898464l0-230.71289088C643.83593775 1.675781499999971 630.65234375-11.5078125 610.87695313-11.5078125zM874.54882787 351.04101536999997L380.16406225 351.04101536999997c-19.77539063 0-32.95898463 13.18359399-32.95898464 32.95898463s13.18359399 32.95898463 32.95898464 32.95898463l494.38476562 0c19.77539063 0 32.95898463-13.18359399 32.95898463-32.95898463S894.3242185 351.04101536999997 874.54882787 351.04101536999997zM874.54882787 351.04101536999997c-9.88769531 0-16.47949193 3.29589869-23.07128931 9.88769531l-131.83593778 131.83593776c-13.18359399 13.18359399-13.18359399 32.95898463 0 46.14257787s32.95898463 13.18359399 46.14257788 0l131.83593775-131.83593774c13.18359399-13.18359399 13.18359399-32.95898463 0-46.14257789C891.02832057 354.33691406 884.43652318 351.04101536999997 874.54882787 351.04101536999997zM742.71289088 219.20507838000003c-9.88769531 0-16.47949193 3.29589869-23.07128932 9.88769531-13.18359399 13.18359399-13.18359399 32.95898463 0 46.14257787l131.83593776 131.83593776c13.18359399 13.18359399 32.95898463 13.18359399 46.14257787 0s13.18359399-32.95898463 0-46.14257787l-131.83593776-131.83593776C759.19238281 222.50097631000006 752.60058619 219.20507838000003 742.71289088 219.20507838000003z" horiz-adv-x="1024" />
<glyph glyph-name="terminal2" unicode="&#59434;" d="M366.272 334.272l-266.272-266.272q-5.728-5.728-13.152-5.728t-13.152 5.728l-28.576 28.576q-5.728 5.728-5.728 13.152t5.728 13.152l224.576 224.576-224.576 224.576q-5.728 5.728-5.728 13.152t5.728 13.152l28.576 28.576q5.728 5.728 13.152 5.728t13.152-5.728l266.272-266.272q5.728-5.728 5.728-13.152t-5.728-13.152zM982.848 73.152l0-36.576q0-8-5.152-13.152t-13.152-5.152l-548.576 0q-8 0-13.152 5.152t-5.152 13.152l0 36.576q0 8 5.152 13.152t13.152 5.152l548.576 0q8 0 13.152-5.152t5.152-13.152z" horiz-adv-x="1024" />
<glyph glyph-name="yingwen" unicode="&#59075;" d="M827.446642 168.450665h-80.351338v155.002256c0 32.799081-1.717712 54.027541-5.13146 63.654674a44.548518 44.548518 0 0 1-16.758075 22.435012 47.68411 47.68411 0 0 1-27.895204 8.019601c-13.911478 0-26.358114-3.802085-37.448282-11.45683-11.057656-7.611395-18.672664-17.713563-22.742069-30.306503-4.096499-12.594746-6.142942-35.880486-6.142942-69.78136v-137.56685H550.625935V472.182188h74.640081v-44.620767c26.50803 34.334365 59.854395 51.468133 100.078832 51.468133 17.758718 0 33.938804-3.186166 48.614311-9.55669 14.686345-6.404843 25.812637-14.529204 33.319272-24.45075 7.542759-9.91974 12.811492-21.159824 15.73395-33.75457 2.935101-12.594746 4.436067-30.602722 4.436067-54.07089l-0.001806-188.745989zM197.680437 168.450665V587.720425h310.875109v-70.910245H282.319732v-92.980402h210.491026v-70.659181H282.319732v-114.062557h234.255414v-70.657375h-318.85136z" horiz-adv-x="1024" />
<glyph glyph-name="zhongwen" unicode="&#59080;" d="M555.231787 565.796571v107.997284h-68.202727v-108.038827H263.433935v-273.457531H487.02906v-210.976899h68.202727V292.29569h224.21827V565.796571H555.231787z m-68.202727-209.074952h-157.337694v144.605675h157.335888v-144.605675z m226.131053 0H555.195662v144.605675h157.962645v-144.605675z" horiz-adv-x="1024" />
<glyph glyph-name="plan" unicode="&#59206;" d="M234.666667 682.666667h57.706666v-63.978667L234.666667 618.666667v-106.666667h554.666666v106.666667h-55.232v64H789.333333a64 64 0 0 0 64-64v-512a64 64 0 0 0-64-64H234.666667a64 64 0 0 0-64 64V618.666667a64 64 0 0 0 64 64z m554.666666-234.666667H234.666667v-341.333333h554.666666V448z m-384-192v-64h-106.666666v64h106.666666z m160 0v-64h-106.666666v64h106.666666z m160 0v-64h-106.666666v64h106.666666z m-320 128v-64h-106.666666v64h106.666666z m160 0v-64h-106.666666v64h106.666666z m160 0v-64h-106.666666v64h106.666666zM697.728 725.333333v-106.666666h-64.021333V725.333333h64z m-104.170667-42.666666v-64l-160.618666 0.021333V682.666667h160.618666z m-197.013333 42.666666v-106.666666h-64V725.333333h64z" horiz-adv-x="1024" />
<glyph glyph-name="database" unicode="&#59220;" d="M94.64086164 251.18037332999995l146.54173153-70.34521008 270.97275142-131.24028917 261.3154951 126.60584297 156.27666015 74.85020205a77.6722963 77.6722963 0 0 0-36.35063467-103.12291791l-347.37639939-168.23819378a77.6722963 77.6722963 0 0 0-67.73024237 0L130.91382401 147.92800119000003A77.6722963 77.6722963 0 0 0 94.64086164 251.18037332999995z m834.77005866 162.54222578a77.6722963 77.6722963 0 0 0-36.01405513-103.82196978L545.99457541 141.66243555000005a77.6722963 77.6722963 0 0 0-67.73024236 0L130.91382401 309.90062933A77.6722963 77.6722963 0 0 0 93.08741571 409.63185778l384.73677392-181.46837451 34.33115496-16.62187141 347.3763994 168.23819378-0.18123496 0.0776723 70.06041127 33.83922961zM546.02046578 779.89569422l347.35050904-168.21230341a77.6722963 77.6722963 0 0 0 0-139.81013334l-347.35050904-168.23819378a77.6722963 77.6722963 0 0 0-67.73024237 0L130.91382401 471.87325747a77.6722963 77.6722963 0 0 0 0 139.81013334L478.29022341 779.86980386a77.6722963 77.6722963 0 0 0 67.73024237 0z m-33.86512119-69.90506667l-347.3763994-168.21230341 347.3763994-168.23819378 347.3763994 168.23819378-347.3763994 168.21230341z" horiz-adv-x="1024" />
<glyph glyph-name="rejected-order" unicode="&#59230;" d="M810.666667 256a64 64 0 0 0 64-64v-128a64 64 0 0 0-64-64h-149.333334a64 64 0 0 0-64 64v128a64 64 0 0 0 64 64h149.333334zM298.666667 704h42.666666v-63.978667L298.666667 640v-533.333333h256v-64H298.666667a64 64 0 0 0-64 64V640a64 64 0 0 0 64 64z m512-512h-149.333334v-128h149.333334v128z m-21.333334-32v-64h-105.898666v64H789.333333zM725.333333 704a64 64 0 0 0 64-64v-341.333333h-64V640h-42.666666V704h42.666666z m-170.666666-341.333333v-64h-192v64h192z m106.666666 128v-64H362.666667v64h298.666666zM576 768a64 64 0 0 0 64-64v-42.666667a64 64 0 0 0-64-64h-128a64 64 0 0 0-64 64V704a64 64 0 0 0 64 64h128z m0-64h-128v-42.666667h128V704z" horiz-adv-x="1024" />
<glyph glyph-name="toolbox" unicode="&#59241;" d="M261.68888853 611.5555552000001v-68.26666667h-68.26666666v-113.77777706h637.15555626v113.77777706h-68.26666666v68.26666667h68.26666666a68.26666667 68.26666667 0 0 0 68.26666667-68.26666667v-455.1111104a68.26666667 68.26666667 0 0 0-68.26666667-68.26666666H193.42222187a68.26666667 68.26666667 0 0 0-68.26666667 68.26666666V543.28888853a68.26666667 68.26666667 0 0 0 68.26666667 68.26666667h68.26666666z m568.8888896-250.3111104h-204.8v-136.53333333H398.22222187v136.53333333h-204.8v-273.06666667h637.15555626V361.2444448z m-273.06666666 0h-91.02222294v-68.26666667h91.02222294v68.26666667z m91.02222186 409.6a68.26666667 68.26666667 0 0 0 68.26666667-68.26666667v-159.2888896H307.2v159.2888896a68.26666667 68.26666667 0 0 0 68.26666667 68.26666667h273.06666666z m0-68.26666667H375.46666667v-91.02222293h273.06666666v91.02222293z" horiz-adv-x="1024" />
<glyph glyph-name="website" unicode="&#59265;" d="M854.4 95.10000000000002c0.2 0.3 0.5 0.6 0.7 0.9C920.6 173.89999999999998 960 274.29999999999995 960 384s-39.4 210.1-104.8 288c-0.2 0.3-0.5 0.5-0.7 0.8-1.1 1.3-2.1 2.5-3.2 3.7-0.4 0.5-0.8 0.9-1.2 1.4-1.4 1.6-2.7 3.1-4.1 4.7l-0.1 0.1c-1.5 1.7-3.1 3.4-4.6 5.1l-0.1 0.1c-3.2 3.4-6.4 6.8-9.7 10.1l-0.1 0.1-4.8 4.8-0.3 0.3c-1.5 1.5-3 2.9-4.5 4.3-0.5 0.5-1 1-1.6 1.5-1 1-2 1.9-3 2.8-0.3 0.3-0.7 0.6-1 1C736.4 786.8 629.5 832 512 832s-224.4-45.2-304.3-119.2c-0.3-0.3-0.7-0.6-1-1-1-0.9-2-1.9-3-2.9-0.5-0.5-1-1-1.6-1.5-1.5-1.4-3-2.9-4.5-4.3l-0.3-0.3-4.8-4.8-0.1-0.1c-3.3-3.3-6.5-6.7-9.7-10.1l-0.1-0.1c-1.6-1.7-3.1-3.4-4.6-5.1l-0.1-0.1c-1.4-1.5-2.8-3.1-4.1-4.7-0.4-0.5-0.8-0.9-1.2-1.4-1.1-1.2-2.1-2.5-3.2-3.7-0.2-0.3-0.5-0.5-0.7-0.8C103.4 594.1 64 493.7 64 384s39.4-210.1 104.8-288c0.2-0.3 0.5-0.6 0.7-0.9 1-1.2 2.1-2.5 3.1-3.7 0.4-0.5 0.8-0.9 1.2-1.4 1.4-1.6 2.7-3.1 4.1-4.7 0-0.1 0.1-0.1 0.1-0.2 1.5-1.7 3-3.4 4.6-5l0.1-0.1c3.2-3.4 6.4-6.8 9.6-10.1l0.1-0.1c1.6-1.6 3.1-3.2 4.7-4.7l0.3-0.3c3.3-3.3 6.7-6.5 10.1-9.6 80.1-74 187-119.2 304.5-119.2s224.4 45.2 304.3 119.2c3.4 3.1 6.7 6.3 10 9.6l0.3 0.3c1.6 1.6 3.2 3.1 4.7 4.7l0.1 0.1c3.3 3.3 6.5 6.7 9.6 10.1l0.1 0.1c1.5 1.7 3.1 3.3 4.6 5 0 0.1 0.1 0.1 0.1 0.2 1.4 1.5 2.8 3.1 4.1 4.7 0.4 0.5 0.8 0.9 1.2 1.4 1.2 1.3 2.3 2.5 3.3 3.7z m4.1 142.6c-13.8-32.6-32-62.8-54.2-90.2-24.9 21.5-52.2 40.3-81.5 55.9 11.6 46.9 18.8 98.4 20.7 152.6H887c-3-40.9-12.6-80.6-28.5-118.3zM887 412H743.5c-1.9 54.2-9.1 105.7-20.7 152.6 29.3 15.6 56.6 34.4 81.5 55.9 22.2-27.4 40.4-57.6 54.2-90.2C874.4 492.6 884 452.9 887 412zM658.3 730.5c39.7-16.8 75.8-40 107.6-69.2-18.5-15.8-38.4-29.7-59.4-41.8-15.7 45-35.8 84.1-59.2 115.4 3.7-1.4 7.4-2.9 11-4.4z m-90.6-700.6c-9.2-7.2-18.4-12.7-27.7-16.4V199c39.9-2.8 78.6-11.6 115.7-26.2-8.3-24.6-17.9-47.3-29-67.8-17.4-32.4-37.8-58.3-59-75.1z m59 633.1c11-20.6 20.7-43.3 29-67.8-37.1-14.6-75.8-23.4-115.7-26.2V754.4c9.2-3.7 18.5-9.1 27.7-16.4 21.2-16.7 41.6-42.6 59-75zM540 255.10000000000002V356h147.5c-1.6-44.2-7.1-87.1-16.3-127.8l-0.3-1.2c-41.1 15.6-85.1 25.3-130.9 28.1z m0 156.9V512.9c45.8 2.8 89.8 12.5 130.9 28.1l0.3-1.2c9.2-40.7 14.7-83.5 16.3-127.8H540z m-56-56v-100.9c-45.8-2.8-89.8-12.5-130.9-28.1l-0.3 1.2c-9.2 40.7-14.7 83.5-16.3 127.8H484z m-147.5 56c1.6 44.2 7.1 87.1 16.3 127.8l0.3 1.2c41.1-15.6 85-25.3 130.9-28.1V412H336.5zM484 199v-185.4c-9.2 3.7-18.5 9.1-27.7 16.4-21.2 16.7-41.7 42.7-59.1 75.1-11 20.6-20.7 43.3-29 67.8 37.2 14.6 75.9 23.3 115.8 26.1z m0 370c-39.9 2.8-78.6 11.6-115.7 26.2 8.3 24.6 17.9 47.3 29 67.8 17.4 32.4 37.8 58.4 59.1 75.1 9.2 7.2 18.4 12.7 27.7 16.4V569zM365.7 730.5c3.7 1.5 7.3 3 11 4.4-23.4-31.3-43.5-70.4-59.2-115.4-21 12-40.9 26-59.4 41.8 31.8 29.2 67.9 52.4 107.6 69.2zM165.5 530.3c13.8 32.6 32 62.8 54.2 90.2 24.9-21.5 52.2-40.3 81.5-55.9-11.6-46.9-18.8-98.4-20.7-152.6H137c3 40.9 12.6 80.6 28.5 118.3zM137 356h143.5c1.9-54.2 9.1-105.7 20.7-152.6-29.3-15.6-56.6-34.4-81.5-55.9-22.2 27.4-40.4 57.6-54.2 90.2C149.6 275.4 140 315.1 137 356z m228.7-318.5c-39.7 16.8-75.8 40-107.6 69.2 18.5 15.8 38.4 29.7 59.4 41.8 15.7-45 35.8-84.1 59.2-115.4-3.7 1.4-7.4 2.9-11 4.4z m292.6 0c-3.7-1.5-7.3-3-11-4.4 23.4 31.3 43.5 70.4 59.2 115.4 21-12 40.9-26 59.4-41.8-31.8-29.2-67.9-52.4-107.6-69.2z" horiz-adv-x="1024" />
<glyph glyph-name="config" unicode="&#59278;" d="M924.8 270.29999999999995l-65.5 56c3.1 19 4.7 38.4 4.7 57.8s-1.6 38.8-4.7 57.8l65.5 56c10.1 8.6 13.8 22.6 9.3 35.2l-0.9 2.6c-18.1 50.5-44.9 96.9-79.7 137.9l-1.8 2.1c-8.6 10.1-22.5 13.9-35.1 9.5l-81.3-28.9c-30 24.6-63.5 44-99.7 57.6l-15.7 85c-2.4 13.1-12.7 23.3-25.8 25.7l-2.7 0.5c-52.1 9.4-106.9 9.4-159 0l-2.7-0.5c-13.1-2.4-23.4-12.6-25.8-25.7l-15.8-85.4c-35.9-13.6-69.2-32.9-99-57.4l-81.9 29.1c-12.5 4.4-26.5 0.7-35.1-9.5l-1.8-2.1c-34.8-41.1-61.6-87.5-79.7-137.9l-0.9-2.6c-4.5-12.5-0.8-26.5 9.3-35.2l66.3-56.6c-3.1-18.8-4.6-38-4.6-57.1 0-19.2 1.5-38.4 4.6-57.1L99 270.5c-10.1-8.6-13.8-22.6-9.3-35.2l0.9-2.6c18.1-50.4 44.9-96.9 79.7-137.9l1.8-2.1c8.6-10.1 22.5-13.9 35.1-9.5l81.9 29.1c29.8-24.5 63.1-43.9 99-57.4l15.8-85.4c2.4-13.1 12.7-23.3 25.8-25.7l2.7-0.5c26.1-4.7 52.8-7.1 79.5-7.1 26.7 0 53.5 2.4 79.5 7.1l2.7 0.5c13.1 2.4 23.4 12.6 25.8 25.7l15.7 85c36.2 13.6 69.7 32.9 99.7 57.6l81.3-28.9c12.5-4.4 26.5-0.7 35.1 9.5l1.8 2.1c34.8 41.1 61.6 87.5 79.7 137.9l0.9 2.6c4.5 12.3 0.8 26.3-9.3 35zM788.3 430.1c2.5-15.1 3.8-30.6 3.8-46.1s-1.3-31-3.8-46.1l-6.6-40.1 74.7-63.9c-11.3-26.1-25.6-50.7-42.6-73.6L721 193.20000000000005l-31.4-25.8c-23.9-19.6-50.5-35-79.3-45.8l-38.1-14.3-17.9-97c-28.1-3.2-56.8-3.2-85 0l-17.9 97.2-37.8 14.5c-28.5 10.8-55 26.2-78.7 45.7l-31.4 25.9-93.4-33.2c-17 22.9-31.2 47.6-42.6 73.6l75.5 64.5-6.5 40c-2.4 14.9-3.7 30.3-3.7 45.5 0 15.3 1.2 30.6 3.7 45.5l6.5 40-75.5 64.5c11.3 26.1 25.6 50.7 42.6 73.6l93.4-33.2 31.4 25.9c23.7 19.5 50.2 34.9 78.7 45.7l37.9 14.3 17.9 97.2c28.1 3.2 56.8 3.2 85 0l17.9-97 38.1-14.3c28.7-10.8 55.4-26.2 79.3-45.8l31.4-25.8 92.8 32.9c17-22.9 31.2-47.6 42.6-73.6L781.8 470l6.5-39.9zM512 570c-97.2 0-176-78.8-176-176s78.8-176 176-176 176 78.8 176 176-78.8 176-176 176z m79.2-255.2C570 293.70000000000005 541.9 282 512 282c-29.9 0-58 11.7-79.2 32.8C411.7 336 400 364.1 400 394c0 29.9 11.7 58 32.8 79.2C454 494.4 482.1 506 512 506c29.9 0 58-11.6 79.2-32.8C612.3 452 624 423.9 624 394c0-29.9-11.7-58-32.8-79.2z" horiz-adv-x="1024" />
<glyph glyph-name="appstore1" unicode="&#59282;" d="M464 752H160c-8.8 0-16-7.2-16-16v-304c0-8.8 7.2-16 16-16h304c8.8 0 16 7.2 16 16V736c0 8.8-7.2 16-16 16z m-52-268H212V684h200v-200zM864 752H560c-8.8 0-16-7.2-16-16v-304c0-8.8 7.2-16 16-16h304c8.8 0 16 7.2 16 16V736c0 8.8-7.2 16-16 16z m-52-268H612V684h200v-200zM464 352H160c-8.8 0-16-7.2-16-16v-304c0-8.8 7.2-16 16-16h304c8.8 0 16 7.2 16 16V336c0 8.8-7.2 16-16 16z m-52-268H212V284h200v-200zM864 352H560c-8.8 0-16-7.2-16-16v-304c0-8.8 7.2-16 16-16h304c8.8 0 16 7.2 16 16V336c0 8.8-7.2 16-16 16z m-52-268H612V284h200v-200z" horiz-adv-x="1024" />
<glyph glyph-name="log" unicode="&#59283;" d="M857 759H167c-16.59375 0-30-13.40625-30-30v-690c0-16.59375 13.40625-30 30-30h690c16.59375 0 30 13.40625 30 30V729c0 16.59375-13.40625 30-30 30z m-37.5-682.5H204.5V691.5h615v-615zM493.25 489h172.5c4.125 0 7.5 3.375 7.5 7.5v45c0 4.125-3.375 7.5-7.5 7.5H493.25c-4.125 0-7.5-3.375-7.5-7.5v-45c0-4.125 3.375-7.5 7.5-7.5zM493.25 354h172.5c4.125 0 7.5 3.375 7.5 7.5v45c0 4.125-3.375 7.5-7.5 7.5H493.25c-4.125 0-7.5-3.375-7.5-7.5v-45c0-4.125 3.375-7.5 7.5-7.5zM493.25 219h172.5c4.125 0 7.5 3.375 7.5 7.5v45c0 4.125-3.375 7.5-7.5 7.5H493.25c-4.125 0-7.5-3.375-7.5-7.5v-45c0-4.125 3.375-7.5 7.5-7.5zM388.25 519m-37.5 0a37.5 37.5 0 1 1 75 0 37.5 37.5 0 1 1-75 0ZM388.25 384m-37.5 0a37.5 37.5 0 1 1 75 0 37.5 37.5 0 1 1-75 0ZM388.25 249m-37.5 0a37.5 37.5 0 1 1 75 0 37.5 37.5 0 1 1-75 0Z" horiz-adv-x="1024" />
<glyph glyph-name="host" unicode="&#59313;" d="M832 832H192c-17.7 0-32-14.3-32-32v-832c0-17.7 14.3-32 32-32h640c17.7 0 32 14.3 32 32V800c0 17.7-14.3 32-32 32z m-600-72h560v-208H232V760z m560-480H232V488h560v-208z m0-272H232V216h560v-208zM496 688H312c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8h184c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8zM312 352h184c4.4 0 8 3.6 8 8v48c0 4.4-3.6 8-8 8H312c-4.4 0-8-3.6-8-8v-48c0-4.4 3.6-8 8-8zM680 108m-40 0a40 40 0 1 1 80 0 40 40 0 1 1-80 0Z" horiz-adv-x="1024" />
<glyph glyph-name="home" unicode="&#59334;" d="M946.5 391L560.1 777.2l-25.9 25.9c-12.3 12.2-32.1 12.2-44.4 0L77.5 391c-12.3-12.3-18.9-28.6-18.8-46 0.4-35.2 29.7-63.3 64.9-63.3h42.5V-44h691.8V281.70000000000005h43.4c17.1 0 33.2 6.7 45.3 18.8 12.1 12.1 18.7 28.2 18.7 45.3 0 17-6.7 33.1-18.8 45.2zM568 28H456V232h112v-204z m217.9 325.7V28H632V256c0 22.1-17.9 40-40 40H432c-22.1 0-40-17.9-40-40v-228H238.1V353.70000000000005h-96l370 369.7 23.1-23.1L882 353.70000000000005h-96.1z" horiz-adv-x="1024" />
<glyph glyph-name="appstore" unicode="&#60261;" d="M464 752H160c-8.8 0-16-7.2-16-16v-304c0-8.8 7.2-16 16-16h304c8.8 0 16 7.2 16 16V736c0 8.8-7.2 16-16 16z m-52-268H212V684h200v-200z m452 268H560c-8.8 0-16-7.2-16-16v-304c0-8.8 7.2-16 16-16h304c8.8 0 16 7.2 16 16V736c0 8.8-7.2 16-16 16z m-52-268H612V684h200v-200zM464 352H160c-8.8 0-16-7.2-16-16v-304c0-8.8 7.2-16 16-16h304c8.8 0 16 7.2 16 16V336c0 8.8-7.2 16-16 16z m-52-268H212V284h200v-200z m452 268H560c-8.8 0-16-7.2-16-16v-304c0-8.8 7.2-16 16-16h304c8.8 0 16 7.2 16 16V336c0 8.8-7.2 16-16 16z m-52-268H612V284h200v-200z" horiz-adv-x="1024" />
<glyph glyph-name="docker" unicode="&#58969;" d="M205.653333 158.933333c-29.184 0-55.637333 23.893333-55.637333 52.906667s23.893333 53.034667 55.68 53.034667c31.914667 0 55.893333-23.893333 55.893333-52.992s-26.538667-52.906667-55.68-52.906667z m683.178667 288.554667c-5.76 42.325333-32 76.8-66.56 103.253333l-13.44 10.666667-10.837333-13.226667c-21.077333-23.893333-29.44-66.261333-26.88-97.92 2.56-23.978667 10.24-47.786667 23.637333-66.304-10.837333-5.546667-24.234667-10.666667-34.56-16.085333a225.706667 225.706667 0 0 0-71.68-10.666667H4.138667l-2.56-15.786666a297.813333 297.813333 0 0 1 23.978666-151.04l10.410667-18.56v-2.56c64-105.941333 177.92-153.6 301.994667-153.6 238.677333 0 434.432 103.253333 527.232 325.674666 60.8-2.645333 122.197333 13.226667 151.04 71.509334l7.68 13.226666-12.8 7.978667c-34.56 21.077333-81.92 23.893333-121.6 13.226667l-0.768-0.085334z m-341.674667 42.325333h-103.594666v-103.253333h103.68V489.898667l-0.085334-0.128z m0 129.834667h-103.594666v-103.253333h103.68V619.52l-0.085334 0.128z m0 132.437333h-103.594666v-103.253333h103.68v103.253333h-0.085334z m126.72-262.272H570.88v-103.253333h103.253333V489.898667l-0.298666-0.128z m-383.914666 0H187.008v-103.253333h103.338667V489.898667l-0.426667-0.128z m129.28 0h-102.4v-103.253333H419.84V489.898667l-0.64-0.128z m-257.28 0H59.733333v-103.253333h103.594667V489.898667l-1.28-0.128z m257.28 129.834667h-102.4v-103.253333H419.84V619.52l-0.64 0.128z m-129.92 0H187.178667v-103.253333H290.133333V619.52l-0.682666 0.128z" horiz-adv-x="1024" />
<glyph glyph-name="arrow-right" unicode="&#58981;" d="M320 10.666667c-8.533333 0-17.066667 4.266667-23.466667 10.666666-12.8 12.8-10.666667 34.133333 2.133334 44.8L654.933333 384 298.666667 701.866667c-12.8 10.666667-14.933333 32-2.133334 44.8 10.666667 12.8 32 14.933333 44.8 2.133333l384-341.333333c6.4-6.4 10.666667-14.933333 10.666667-23.466667 0-8.533333-4.266667-17.066667-10.666667-23.466667l-384-341.333333c-6.4-6.4-12.8-8.533333-21.333333-8.533333z" horiz-adv-x="1024" />
<glyph glyph-name="home" unicode="&#58901;" d="M952.425495 660.2478590000001L536.893002 889.551637a51.586902 51.586902 0 0 1-49.781361 0L70.54741 660.2478590000001a51.586902 51.586902 0 0 1-25.793451-45.396474v-691.264483a51.586902 51.586902 0 0 1 51.586901-51.586902h210.216625a51.586902 51.586902 0 0 1 51.586902 51.586902V188.48564199999998a51.586902 51.586902 0 0 0 51.586902 51.586902h204.284131a51.586902 51.586902 0 0 0 51.586901-51.586902V-76.41309799999999a51.586902 51.586902 0 0 1 51.586902-51.586902h210.474559a51.586902 51.586902 0 0 1 51.586902 51.586902V614.8513849999999a51.586902 51.586902 0 0 1-26.825189 45.396474z" horiz-adv-x="1024" />
<glyph glyph-name="terminal" unicode="&#59492;" d="M89.6 89.6h844.8V678.4H89.6v-588.8zM0 768h1024v-768H0V768z m242.816-577.536L192 241.28l154.304 154.368L192 549.952l50.816 50.816L448 395.648l-205.184-205.184z m584.32-13.248H512V256h315.072v-78.72z" horiz-adv-x="1024" />
<glyph glyph-name="terminal1" unicode="&#58979;" d="M89.6 89.6h844.8V678.4H89.6v-588.8zM0 768h1024v-768H0V768z m242.816-577.536L192 241.28l154.304 154.368L192 549.952l50.816 50.816L448 395.648 242.816 190.464z m584.32-13.248H512V256h315.072v-78.72z" horiz-adv-x="1024" />

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 723 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5 KiB

View file

@ -3,7 +3,7 @@
<slot></slot>
</div>
<div class="footer flx-center">
<a href="http://www.spicyboy.cn/" target="_blank">2022 © 1Panel By 飞致云.</a>
<a href="http://www.spicyboy.cn/" target="_blank"> 2022 © 1Panel By 飞致云. </a>
</div>
</template>

View file

@ -0,0 +1,69 @@
<template>
<el-dropdown trigger="click">
<div class="avatar">
<img src="@/assets/images/avatar.gif" alt="avatar" />
</div>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="openDialog('infoRef')">{{
$t('commons.header.personalData')
}}</el-dropdown-item>
<el-dropdown-item @click="openDialog('passwordRef')">{{
$t('commons.header.changePassword')
}}</el-dropdown-item>
<el-dropdown-item @click="logout" divided>{{ $t('commons.header.logout') }}</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<InfoDialog ref="infoRef"></InfoDialog>
<PasswordDialog ref="passwordRef"></PasswordDialog>
</template>
<script setup lang="ts">
import { ref } from 'vue';
import InfoDialog from './info-dialog.vue';
import PasswordDialog from './password-dialog.vue';
import { ElMessageBox, ElMessage } from 'element-plus';
import { useRouter } from 'vue-router';
import { GlobalStore } from '@/store';
import { logOutApi } from '@/api/modules/login';
import i18n from '@/lang';
const router = useRouter();
const globalStore = GlobalStore();
const logout = () => {
ElMessageBox.confirm(i18n.global.t('commons.msg.sureLogOut'), i18n.global.t('commons.msg.infoTitle'), {
confirmButtonText: i18n.global.t('commons.button.confirm'),
cancelButtonText: i18n.global.t('commons.button.cancel'),
type: 'warning',
}).then(() => {
systemLogOut();
router.push({ name: 'login' });
globalStore.setLogStatus(false);
ElMessage({
type: 'success',
message: i18n.global.t('commons.msg.operationSuccess'),
});
});
};
const systemLogOut = async () => {
await logOutApi();
};
interface DialogExpose {
openDialog: () => void;
}
const infoRef = ref<null | DialogExpose>(null);
const passwordRef = ref<null | DialogExpose>(null);
const openDialog = (refName: string) => {
if (refName == 'infoRef') return infoRef.value?.openDialog();
passwordRef.value?.openDialog();
};
</script>
<style scoped lang="scss">
@import '../index.scss';
</style>

View file

@ -1,5 +1,5 @@
<template>
<el-icon :size="25" class="collapse-icon" @click="menuStore.setCollapse()">
<el-icon class="collapse-icon" @click="menuStore.setCollapse()">
<component :is="isCollapse ? 'expand' : 'fold'"></component>
</el-icon>
</template>
@ -12,9 +12,5 @@ const isCollapse = computed((): boolean => menuStore.isCollapse);
</script>
<style scoped lang="scss">
// @import '../index.scss';
.collapse-icon {
cursor: pointer;
}
@import '../index.scss';
</style>

View file

@ -0,0 +1,19 @@
<template>
<el-dialog v-model="dialogVisible" :title="$t('commons.header.personalData')" width="500px" draggable>
<span>This is userInfo</span>
</el-dialog>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const dialogVisible = ref(false);
// openDialog
const openDialog = () => {
dialogVisible.value = true;
};
defineExpose({
openDialog,
});
</script>

View file

@ -0,0 +1,44 @@
<template>
<el-dropdown trigger="click" @command="handleSetLanguage">
<span>
<el-tooltip effect="dark" :content="$t('commons.header.language')" placement="bottom">
<i :class="'panel p-language'" class="icon-style"></i>
</el-tooltip>
</span>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item :disabled="language && language === 'zh'" command="zh">{{
$t('commons.header.zh')
}}</el-dropdown-item>
<el-dropdown-item :disabled="language === 'en'" command="en">{{
$t('commons.header.en')
}}</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</template>
<script setup lang="ts">
import { computed, onMounted } from 'vue';
import { useI18n } from 'vue-i18n';
import { GlobalStore } from '@/store';
import { getBrowserLang } from '@/utils/util';
const i18n = useI18n();
const globalStore = GlobalStore();
const language = computed((): string => globalStore.language);
//
const handleSetLanguage = (lang: string) => {
i18n.locale.value = lang;
globalStore.updateLanguage(lang);
};
onMounted(() => {
handleSetLanguage(language.value || getBrowserLang());
});
</script>
<style scoped lang="scss">
@import '../index.scss';
</style>

View file

@ -10,11 +10,8 @@
</el-divider>
<div class="theme-item">
<span>{{ $t('commons.header.themeColor') }}</span>
<el-color-picker
v-model="themeConfig.primary"
:predefine="colorList"
@change="changePrimary"
></el-color-picker>
<el-color-picker v-model="themeConfig.primary" :predefine="colorList" @change="changePrimary">
</el-color-picker>
</div>
<div class="theme-item">
<span>{{ $t('commons.header.darkTheme') }}</span>

View file

@ -0,0 +1,25 @@
<template>
<el-dialog v-model="dialogVisible" :title="$t('commons.header.changePassword')" width="500px" draggable>
<span>This is Password</span>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogVisible = false">{{ $t('commons.button.cancel') }}</el-button>
<el-button type="primary" @click="dialogVisible = false">{{ $t('commons.button.confirm') }}</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts">
import { ref } from 'vue';
const dialogVisible = ref(false);
// openDialog
const openDialog = () => {
dialogVisible.value = true;
};
defineExpose({
openDialog,
});
</script>

View file

@ -4,12 +4,27 @@
<CollapseIcon id="collapseIcon"></CollapseIcon>
<Breadcrumb id="breadcrumb" v-if="themeConfig.breadcrumb"></Breadcrumb>
</div>
<div class="header-ri flx-center">
<div class="header-icon">
<!-- Language -->
<Language id="language"></Language>
<!-- Theme -->
<Theme id="theme"></Theme>
</div>
<!-- User name -->
<span class="username">1Panel</span>
<!-- Avatar -->
<Avatar></Avatar>
</div>
</div>
</template>
<script setup lang="ts">
import { computed } from 'vue';
import CollapseIcon from './components/collapseicon.vue';
import Breadcrumb from './components/breadcrumb.vue';
import Language from './components/language.vue';
import Theme from './components/theme.vue';
import Avatar from './components/avatar.vue';
import { GlobalStore } from '@/store';
const globalStore = GlobalStore();

View file

@ -3,23 +3,29 @@
<el-sub-menu v-if="subItem.children && subItem.children.length > 1" :index="subItem.path">
<template #title>
<el-icon>
<SvgIcon :iconName="(subItem.meta?.icon as string)" :className="'svg-icon'"></SvgIcon>
<component :is="subItem.meta?.icon"></component>
</el-icon>
<span>{{ $t(subItem.meta?.title as string) }}</span>
<span>{{ subItem.meta?.title }}</span>
</template>
<SubItem :menuList="subItem.children" />
</el-sub-menu>
<el-menu-item v-else-if="subItem.children && subItem.children.length === 1" :index="subItem.children[0].path">
<el-icon>
<SvgIcon :iconName="(subItem.meta?.icon as string)" :className="'svg-icon'"></SvgIcon>
<component :is="subItem.meta?.icon"></component>
</el-icon>
<template #title>
<template v-if="!subItem.meta?.isLink" #title>
<span>{{ $t(subItem.meta?.title as string) }}</span>
</template>
</el-menu-item>
<el-menu-item v-else :index="subItem.path">
<template #title>
<span style="margin-left: 10px">{{ $t(subItem.meta?.title as string) }}</span>
<el-icon>
<component :is="subItem.meta?.icon"></component>
</el-icon>
<template v-if="!subItem.meta?.isLink" #title>
<span>{{ subItem.meta?.title }}</span>
</template>
<template v-else #title>
<a class="menu-href" :href="subItem.isLink" target="_blank">{{ subItem.meta?.title }}</a>
</template>
</el-menu-item>
</template>
@ -27,7 +33,6 @@
<script setup lang="ts">
import { RouteRecordRaw } from 'vue-router';
import SvgIcon from '@/components/svg-icon/svg-icon.vue';
defineProps<{ menuList: RouteRecordRaw[] }>();
</script>

View file

@ -1,7 +1,7 @@
<template>
<div
class="menu"
:style="{ width: isCollapse ? '65px' : '180px' }"
:style="{ width: isCollapse ? '65px' : '220px' }"
element-loading-text="Loading..."
:element-loading-spinner="loadingSvg"
element-loading-svg-view-box="-10, -10, 50, 50"
@ -20,14 +20,6 @@
active-text-color="#fff"
>
<SubItem :menuList="routerMenus"></SubItem>
<el-menu-item>
<el-icon>
<SvgIcon :iconName="'p-logout'" :className="'svg-icon'"></SvgIcon>
</el-icon>
<template #title>
<span @click="logout">{{ $t('commons.header.logout') }}</span>
</template>
</el-menu-item>
</el-menu>
</el-scrollbar>
</div>
@ -40,14 +32,9 @@ import { MenuStore } from '@/store/modules/menu';
import { loadingSvg } from '@/utils/svg';
import Logo from './components/logo.vue';
import SubItem from './components/sub-item.vue';
import router, { menuList } from '@/routers/router';
import { logOutApi } from '@/api/modules/login';
import i18n from '@/lang';
import { ElMessageBox, ElMessage } from 'element-plus';
import { GlobalStore } from '@/store';
import { menuList } from '@/routers/router';
const route = useRoute();
const menuStore = MenuStore();
const globalStore = GlobalStore();
onMounted(async () => {
menuStore.setMenuList(menuList);
@ -75,26 +62,6 @@ const listeningWindow = () => {
};
};
listeningWindow();
const logout = () => {
ElMessageBox.confirm(i18n.global.t('commons.msg.sureLogOut'), i18n.global.t('commons.msg.infoTitle'), {
confirmButtonText: i18n.global.t('commons.button.confirm'),
cancelButtonText: i18n.global.t('commons.button.cancel'),
type: 'warning',
}).then(() => {
systemLogOut();
router.push({ name: 'login' });
globalStore.setLogStatus(false);
ElMessage({
type: 'success',
message: i18n.global.t('commons.msg.operationSuccess'),
});
});
};
const systemLogOut = async () => {
await logOutApi();
};
</script>
<style scoped lang="scss">

View file

@ -1,7 +1,6 @@
<template>
<div class="bread-crumbs-item">
<el-link><slot></slot></el-link>
<i v-if="!props.right" :class="'panel p-arrow-right'"></i>
<el-link><slot></slot></el-link> <i v-if="!props.right" :class="'panel p-arrow-right'"></i>
</div>
</template>

View file

@ -11,13 +11,12 @@
:key="key"
@click="jump(key)"
:right="key == paths.length - 1"
>{{ item }}</BreadCrumbItem
>
{{ item }}
</BreadCrumbItem>
</BreadCrumbs>
</div>
<div>
<el-input :prefix-icon="Search"></el-input>
<el-input :prefix-icon="Search"> </el-input>
<el-table :data="data" highlight-current-row height="40vh">
<el-table-column width="40" fix>
<template #default="{ row }">

View file

@ -1,6 +1,6 @@
<template>
<svg :class="svgClass" aria-hidden="true">
<use :xlink:href="iconClassName" />
<use :xlink:href="iconClassName" :fill="color" />
</svg>
</template>
<script setup lang="ts">
@ -33,15 +33,15 @@ const svgClass = computed(() => {
</script>
<style scoped>
.svg-icon {
width: 2.5em;
height: 2.5em;
width: 1.5em;
height: 1.5em;
position: relative;
fill: currentColor;
vertical-align: -2px;
padding-top: 0.1em;
padding-bottom: 0.1em;
padding-left: 0.1em;
padding-right: 0.1em;
padding-top: 0.3em;
padding-bottom: 0.3em;
padding-left: 0.3em;
padding-right: 0.3em;
}
.table-icon {
width: 1.5em;

View file

@ -82,23 +82,11 @@ export default {
},
},
menu: {
home: 'Overview',
demo: 'Example',
terminal: 'Terminal',
apps: 'App Store',
website: 'Website',
project: 'Project',
config: 'Config',
firewall: 'Firewall',
database: 'Database',
container: 'Container',
plan: 'Planned Task',
host: 'Host',
security: 'Security',
systemConfig: 'Panel Settings',
toolbox: 'Toolbox',
home: 'Dashboard',
demo: 'Demo',
monitor: 'Monitor',
operations: 'Operation Records',
terminal: 'Terminal',
operations: 'Operation logs',
files: 'File Management',
},
home: {

View file

@ -32,7 +32,7 @@ export default {
delete: '此操作不可回滚,是否继续',
deleteTitle: '删除',
deleteSuccess: '删除成功',
loginSuccess: '成功',
loginSuccess: '成功',
operationSuccess: '操作成功',
requestTimeout: '请求超时,请稍后重试',
infoTitle: '提示',
@ -84,19 +84,7 @@ export default {
menu: {
home: '概览',
demo: '样例',
terminal: '终端',
apps: '应用商店',
website: '网站',
project: '项目',
config: '配置',
firewall: '防火墙',
database: '数据库',
container: '容器',
plan: '计划任务',
host: '主机',
security: '安全',
systemConfig: '面板设置',
toolbox: '工具箱',
terminal: '终端管理',
monitor: '监控',
operations: '操作记录',
files: '文件管理',

View file

@ -16,25 +16,25 @@
<View></View>
</Content>
</el-main>
<!-- <el-footer v-if="themeConfig.footer">
<el-footer v-if="themeConfig.footer">
<Footer>
<slot name="footer"></slot>
</Footer>
</el-footer> -->
</el-footer>
</el-container>
</el-container>
</template>
<script setup lang="ts">
// import { computed } from 'vue';
import { computed } from 'vue';
import Menu from './layout-menu.vue';
import Header from './layout-header.vue';
// import Footer from './layout-footer.vue';
import Footer from './layout-footer.vue';
import View from './layout-view.vue';
import Content from './layout-content.vue';
// import { GlobalStore } from '@/store';
// const globalStore = GlobalStore();
// const themeConfig = computed(() => globalStore.themeConfig);
import { GlobalStore } from '@/store';
const globalStore = GlobalStore();
const themeConfig = computed(() => globalStore.themeConfig);
</script>
<style scoped lang="scss">

View file

@ -9,7 +9,7 @@
:header="header"
v-if="showBack"
></back-button>
<span v-else>{{ header }}</span>
<span v-else> {{ header }}</span>
</slot>
</div>
<div class="content-container__toolbar" v-if="slots.toolbar">

View file

@ -0,0 +1,25 @@
import { Layout } from '@/routers/constant';
// demo
const demoRouter = {
sort: 3,
path: '/files',
component: Layout,
redirect: '/files',
meta: {
icon: 'files',
title: 'menu.files',
},
children: [
{
path: '/files',
name: 'File',
component: () => import('@/views/file-management/index.vue'),
meta: {
keepAlive: true,
},
},
],
};
export default demoRouter;

View file

@ -1,23 +0,0 @@
import { Layout } from '@/routers/constant';
// demo
const appStoreRouter = {
sort: 2,
path: '/apps',
component: Layout,
redirect: '/apps',
meta: {
icon: 'p-appstore',
title: 'menu.apps',
},
children: [
{
path: '/apps',
name: 'App',
component: () => import('@/views/app-store/index.vue'),
meta: {},
},
],
};
export default appStoreRouter;

View file

@ -1,22 +0,0 @@
import { Layout } from '@/routers/constant';
const systemConfigRouter = {
sort: 8,
path: '/configs',
component: Layout,
redirect: '/configs',
meta: {
icon: 'p-config',
title: 'menu.systemConfig',
},
children: [
{
path: '/configs',
name: 'SystemConfig',
component: () => import('@/views/system-config/index.vue'),
meta: {},
},
],
};
export default systemConfigRouter;

View file

@ -1,22 +0,0 @@
import { Layout } from '@/routers/constant';
const containerRouter = {
sort: 5,
path: '/containers',
component: Layout,
redirect: '/containers',
meta: {
icon: 'p-docker',
title: 'menu.container',
},
children: [
{
path: '/containers',
name: 'Container',
component: () => import('@/views/container/index.vue'),
meta: {},
},
],
};
export default containerRouter;

View file

@ -1,22 +0,0 @@
import { Layout } from '@/routers/constant';
const databaseRouter = {
sort: 4,
path: '/database',
component: Layout,
redirect: '/database',
meta: {
icon: 'p-database',
title: 'menu.database',
},
children: [
{
path: '/database',
name: 'Database',
component: () => import('@/views/database/index.vue'),
meta: {},
},
],
};
export default databaseRouter;

View file

@ -1,49 +0,0 @@
import { Layout } from '@/routers/constant';
const hostRouter = {
sort: 7,
path: '/hosts',
component: Layout,
redirect: '/hosts/security',
meta: {
icon: 'p-host',
title: 'menu.host',
},
children: [
{
path: '/hosts/security',
name: 'Security',
component: () => import('@/views/host/security/index.vue'),
meta: {
title: 'menu.security',
},
},
{
path: '/hosts/files',
name: 'File',
component: () => import('@/views/host/file-management/index.vue'),
meta: {
title: 'menu.files',
},
},
{
path: '/hosts/monitor',
name: 'Monitor',
component: () => import('@/views/monitor/index.vue'),
meta: {
title: 'menu.monitor',
},
},
{
path: '/host/terminal',
name: 'Terminal',
component: () => import('@/views/host/terminal/index.vue'),
meta: {
title: 'menu.terminal',
keepAlive: true,
},
},
],
};
export default hostRouter;

View file

@ -0,0 +1,28 @@
import { Layout } from '@/routers/constant';
const monitorRouter = {
sort: 2,
path: '/monitors',
component: Layout,
redirect: '/monitor',
meta: {
title: 'menu.monitor',
icon: 'monitor',
},
children: [
{
path: '/monitors/monitor',
name: 'Monitor',
component: () => import('@/views/monitor/index.vue'),
meta: {
requiresAuth: true,
key: 'Monitor',
title: 'menu.monitor',
icon: 'Connection',
activeMenu: '/monitors',
},
},
],
};
export default monitorRouter;

View file

@ -1,20 +1,23 @@
import { Layout } from '@/routers/constant';
const operationRouter = {
sort: 10,
sort: 3,
path: '/operations',
component: Layout,
redirect: '/operation',
meta: {
title: 'menu.operations',
icon: 'p-log',
icon: 'notebook',
},
children: [
{
path: '/operation',
name: 'OperationLog',
component: () => import('@/views/operation-log/index.vue'),
meta: {},
meta: {
requiresAuth: true,
key: 'OperationLog',
},
},
],
};

View file

@ -1,22 +0,0 @@
import { Layout } from '@/routers/constant';
const planRouter = {
sort: 6,
path: '/plans',
component: Layout,
redirect: '/plans',
meta: {
icon: 'p-plan',
title: 'menu.plan',
},
children: [
{
path: '/plans',
name: 'Plan',
component: () => import('@/views/plan/index.vue'),
meta: {},
},
],
};
export default planRouter;

View file

@ -0,0 +1,28 @@
import { Layout } from '@/routers/constant';
const terminalRouter = {
sort: 2,
path: '/terminals',
component: Layout,
redirect: '/terminal',
meta: {
title: 'menu.terminal',
icon: 'monitor',
},
children: [
{
path: '/terminals/terminal',
name: 'Terminal',
component: () => import('@/views/terminal/index.vue'),
meta: {
requiresAuth: true,
key: 'Terminal',
title: 'terminal.conn',
icon: 'Connection',
activeMenu: '/terminals',
},
},
],
};
export default terminalRouter;

View file

@ -1,22 +0,0 @@
import { Layout } from '@/routers/constant';
const toolBoxRouter = {
sort: 9,
path: '/toolbox',
component: Layout,
redirect: '/toolbox',
meta: {
icon: 'p-toolbox',
title: 'menu.toolbox',
},
children: [
{
path: '/toolbox',
name: 'ToolBox',
component: () => import('@/views/toolbox/index.vue'),
meta: {},
},
],
};
export default toolBoxRouter;

View file

@ -1,40 +0,0 @@
import { Layout } from '@/routers/constant';
const webSiteRouter = {
sort: 3,
path: '/websites',
component: Layout,
redirect: '/websites',
meta: {
icon: 'p-website',
title: 'menu.website',
},
children: [
{
path: '/websites',
name: 'Website',
component: () => import('@/views/website/project/index.vue'),
meta: {
title: 'menu.project',
},
},
{
path: '/websites/config',
name: 'Config',
component: () => import('@/views/website/config/index.vue'),
meta: {
title: 'menu.config',
},
},
{
path: '/websites/firewall',
name: 'Firewall',
component: () => import('@/views/website/project/index.vue'),
meta: {
title: 'menu.firewall',
},
},
],
};
export default webSiteRouter;

View file

@ -10,7 +10,7 @@ const homeRouter: RouteRecordRaw = {
meta: {
keepAlive: true,
title: 'menu.home',
icon: 'p-home',
icon: 'home-filled',
},
children: [
{

View file

@ -182,11 +182,11 @@
.row-box {
display: flex;
flex-flow: wrap;
}
}
.row-box .el-card {
min-width: 100%;
height: 100%;
margin-right: 20px;
border: 0;
// box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);
min-width: 100%;
height: 100%;
margin-right: 20px;
border: 0;
// box-shadow: 0 2px 12px 0 rgb(0 0 0 / 10%);
}

View file

@ -1,7 +0,0 @@
<template>
<LayoutContent></LayoutContent>
</template>
<script lang="ts" setup>
import LayoutContent from '@/layout/layout-content.vue';
</script>

View file

@ -1,7 +0,0 @@
<template>
<LayoutContent></LayoutContent>
</template>
<script lang="ts" setup>
import LayoutContent from '@/layout/layout-content.vue';
</script>

View file

@ -1,7 +0,0 @@
<template>
<LayoutContent></LayoutContent>
</template>
<script lang="ts" setup>
import LayoutContent from '@/layout/layout-content.vue';
</script>

View file

@ -4,9 +4,9 @@
<template #toolbar>
<el-button type="primary" @click="openOperate(null)">{{ $t('commons.button.create') }}</el-button>
<el-button type="primary" plain>{{ '其他操作' }}</el-button>
<el-button type="danger" plain :disabled="selects.length === 0" @click="batchDelete(null)">
{{ $t('commons.button.delete') }}
</el-button>
<el-button type="danger" plain :disabled="selects.length === 0" @click="batchDelete(null)">{{
$t('commons.button.delete')
}}</el-button>
</template>
<el-table-column type="selection" fix />
<el-table-column label="ID" min-width="100" prop="id" fix />

View file

@ -14,9 +14,9 @@
</el-form>
<div class="form-button">
<el-button @click="router.back()">{{ $t('commons.button.cancel') }}</el-button>
<el-button type="primary" @click="submitForm(ruleFormRef)">
{{ $t('commons.button.confirm') }}
</el-button>
<el-button type="primary" @click="submitForm(ruleFormRef)">{{
$t('commons.button.confirm')
}}</el-button>
</div>
</template>
</LayoutContent>

View file

@ -1,6 +1,14 @@
<template>
<el-dialog v-model="open" :before-close="handleClose" :title="$t('file.setRole')" width="30%" @open="onOpen">
<FileRole v-loading="loading" :mode="mode" @get-mode="getMode"></FileRole>
<el-dialog
v-model="open"
:before-close="handleClose"
:title="$t('file.setRole')"
width="30%"
@open="onOpen"
v-loading="loading"
destory-on-close
>
<FileRole :mode="mode" @get-mode="getMode"></FileRole>
<template #footer>
<span class="dialog-footer">
<el-button @click="handleClose">{{ $t('commons.button.cancel') }}</el-button>

View file

@ -1,13 +1,6 @@
<template>
<el-dialog v-model="open" :title="title" :before-close="handleClose" width="30%" @open="onOpen">
<el-form
ref="fileForm"
label-position="left"
:model="form"
label-width="100px"
:rules="rules"
v-loading="loading"
>
<el-dialog v-model="open" :title="title" :before-close="handleClose" width="30%" @open="onOpen" v-loading="loading">
<el-form ref="fileForm" label-position="left" :model="form" label-width="100px" :rules="rules">
<el-form-item :label="$t('file.compressType')" prop="type">
<el-select v-model="form.type">
<el-option v-for="item in options" :key="item" :label="item" :value="item" />
@ -15,13 +8,13 @@
</el-form-item>
<el-form-item :label="$t('file.name')" prop="name">
<el-input v-model="form.name">
<template #append>{{ extension }}</template>
</el-input>
<template #append>{{ extension }}</template></el-input
>
</el-form-item>
<el-form-item :label="$t('file.compressDst')" prop="dst">
<el-input v-model="form.dst">
<template #append><FileList :path="props.dst" @choose="getLinkPath"></FileList></template>
</el-input>
<template #append> <FileList :path="props.dst" @choose="getLinkPath"></FileList> </template
></el-input>
</el-form-item>
<el-form-item>
<el-checkbox v-model="form.replace" :label="$t('file.replace')"></el-checkbox>

View file

@ -5,20 +5,14 @@
:title="$t('commons.button.create')"
width="30%"
@open="onOpen"
v-loading="loading"
>
<el-form
ref="fileForm"
label-position="left"
:model="addForm"
label-width="100px"
:rules="rules"
v-loading="loading"
>
<el-form-item :label="$t('file.path')" prop="path"><el-input v-model="getPath" disabled /></el-form-item>
<el-form-item :label="$t('file.name')" prop="name"><el-input v-model="addForm.name" /></el-form-item>
<el-form ref="fileForm" label-position="left" :model="addForm" label-width="100px" :rules="rules">
<el-form-item :label="$t('file.path')" prop="path"> <el-input v-model="getPath" disabled /></el-form-item>
<el-form-item :label="$t('file.name')" prop="name"> <el-input v-model="addForm.name" /></el-form-item>
<el-form-item v-if="!addForm.isDir">
<el-checkbox v-model="addForm.isLink" :label="$t('file.link')"></el-checkbox>
</el-form-item>
<el-checkbox v-model="addForm.isLink" :label="$t('file.link')"></el-checkbox
></el-form-item>
<el-form-item :label="$t('file.linkType')" v-if="addForm.isLink" prop="linkType">
<el-radio-group v-model="addForm.isSymlink">
<el-radio :label="true">{{ $t('file.softLink') }}</el-radio>

View file

@ -1,31 +1,29 @@
<template>
<div>
<el-dialog v-model="open" :title="$t('file.deCompress')" :before-close="handleClose" width="30%" @open="onOpen">
<el-form
ref="fileForm"
label-position="left"
:model="form"
label-width="100px"
:rules="rules"
v-loading="loading"
>
<el-form-item :label="$t('file.name')">
<el-input v-model="name" disabled></el-input>
</el-form-item>
<el-form-item :label="$t('file.deCompressDst')" prop="dst">
<el-input v-model="form.dst">
<template #append><FileList :path="props.dst" @choose="getLinkPath"></FileList></template>
</el-input>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="handleClose">{{ $t('commons.button.cancel') }}</el-button>
<el-button type="primary" @click="submit(fileForm)">{{ $t('commons.button.confirm') }}</el-button>
</span>
</template>
</el-dialog>
</div>
<el-dialog
v-model="open"
:title="$t('file.deCompress')"
:before-close="handleClose"
width="30%"
@open="onOpen"
v-loading="loading"
>
<el-form ref="fileForm" label-position="left" :model="form" label-width="100px" :rules="rules">
<el-form-item :label="$t('file.name')">
<el-input v-model="name" disabled></el-input>
</el-form-item>
<el-form-item :label="$t('file.deCompressDst')" prop="dst">
<el-input v-model="form.dst">
<template #append> <FileList :path="props.dst" @choose="getLinkPath"></FileList> </template
></el-input>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="handleClose">{{ $t('commons.button.cancel') }}</el-button>
<el-button type="primary" @click="submit(fileForm)">{{ $t('commons.button.confirm') }}</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts">

View file

@ -1,33 +1,31 @@
<template>
<div>
<el-dialog v-model="open" :title="$t('file.download')" :before-close="handleClose" width="30%" @open="onOpen">
<el-form
ref="fileForm"
label-position="left"
:model="addForm"
label-width="100px"
:rules="rules"
v-loading="loading"
>
<el-form-item :label="$t('file.compressType')" prop="type">
<el-select v-model="addForm.type">
<el-option v-for="item in options" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item :label="$t('file.name')" prop="name">
<el-input v-model="addForm.name">
<template #append>{{ extension }}</template>
</el-input>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="handleClose">{{ $t('commons.button.cancel') }}</el-button>
<el-button type="primary" @click="submit(fileForm)">{{ $t('commons.button.confirm') }}</el-button>
</span>
</template>
</el-dialog>
</div>
<el-dialog
v-model="open"
:title="$t('file.download')"
:before-close="handleClose"
width="30%"
@open="onOpen"
v-loading="loading"
>
<el-form ref="fileForm" label-position="left" :model="addForm" label-width="100px" :rules="rules">
<el-form-item :label="$t('file.compressType')" prop="type">
<el-select v-model="addForm.type">
<el-option v-for="item in options" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item :label="$t('file.name')" prop="name">
<el-input v-model="addForm.name">
<template #append>{{ extension }}</template></el-input
>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="handleClose">{{ $t('commons.button.cancel') }}</el-button>
<el-button type="primary" @click="submit(fileForm)">{{ $t('commons.button.confirm') }}</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts">

View file

@ -33,9 +33,8 @@
:key="key"
@click="jump(key)"
:right="key == paths.length - 1"
>{{ item }}</BreadCrumbItem
>
{{ item }}
</BreadCrumbItem>
</BreadCrumbs>
</div>
<ComplexTable
@ -45,46 +44,34 @@
v-loading="loading"
>
<template #toolbar>
<el-button-group>
<el-dropdown split-button type="primary" @command="handleCreate">
{{ $t('commons.button.create') }}
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item command="dir">
<svg-icon iconName="p-file-folder"></svg-icon>
{{ $t('file.dir') }}
</el-dropdown-item>
<el-dropdown-item command="file">
<svg-icon iconName="p-file-normal"></svg-icon>
{{ $t('file.file') }}
</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</el-button-group>
<el-button-group style="margin-left: 5px">
<el-button type="primary" plain @click="openUpload">{{ $t('file.upload') }}</el-button>
<!-- <el-button type="primary" plain> {{ $t('file.search') }}</el-button> -->
<el-button type="primary" plain @click="openWget">{{ $t('file.remoteFile') }}</el-button>
<el-button type="primary" plain @click="openMove('copy')" :disabled="selects.length === 0">
{{ $t('file.copy') }}
</el-button>
<el-button type="primary" plain @click="openMove('cut')" :disabled="selects.length === 0">
{{ $t('file.move') }}
</el-button>
<el-button
type="primary"
plain
@click="openCompress(selects)"
:disabled="selects.length === 0"
>
{{ $t('file.compress') }}
</el-button>
<el-button type="primary" plain @click="openDownload" :disabled="selects.length === 0">
{{ $t('file.download') }}
</el-button>
</el-button-group>
<el-dropdown split-button type="primary" @command="handleCreate">
{{ $t('commons.button.create') }}
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item command="dir">
<svg-icon iconName="p-file-folder"></svg-icon>{{ $t('file.dir') }}
</el-dropdown-item>
<el-dropdown-item command="file">
<svg-icon iconName="p-file-normal"></svg-icon>{{ $t('file.file') }}
</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<el-button type="primary" plain @click="openUpload"> {{ $t('file.upload') }}</el-button>
<!-- <el-button type="primary" plain> {{ $t('file.search') }}</el-button> -->
<el-button type="primary" plain @click="openWget"> {{ $t('file.remoteFile') }}</el-button>
<el-button type="primary" plain @click="openMove('copy')" :disabled="selects.length === 0">
{{ $t('file.copy') }}</el-button
>
<el-button type="primary" plain @click="openMove('cut')" :disabled="selects.length === 0">
{{ $t('file.move') }}</el-button
>
<el-button type="primary" plain @click="openCompress(selects)" :disabled="selects.length === 0">
{{ $t('file.compress') }}</el-button
>
<el-button type="primary" plain @click="openDownload" :disabled="selects.length === 0">
{{ $t('file.download') }}</el-button
>
<!-- <el-button type="primary" plain> {{ $t('file.sync') }}</el-button>
<el-button type="primary" plain> {{ $t('file.terminal') }}</el-button>
<el-button type="primary" plain> {{ $t('file.shareList') }}</el-button> -->
@ -95,7 +82,7 @@
<svg-icon v-if="row.isDir" className="table-icon" iconName="p-file-folder"></svg-icon>
<svg-icon v-else className="table-icon" iconName="p-file-normal"></svg-icon>
<el-link :underline="false" @click="open(row)">{{ row.name }}</el-link>
<span v-if="row.isSymlink">-> {{ row.linkPath }}</span>
<span v-if="row.isSymlink"> -> {{ row.linkPath }}</span>
</template>
</el-table-column>
<el-table-column :label="$t('file.mode')" prop="mode">
@ -103,16 +90,17 @@
<el-link :underline="false" @click="openMode(row)">{{ row.mode }}</el-link>
</template>
</el-table-column>
<el-table-column :label="$t('file.user')" prop="user"></el-table-column>
<el-table-column :label="$t('file.group')" prop="group"></el-table-column>
<el-table-column :label="$t('file.size')" prop="size"></el-table-column>
<el-table-column :label="$t('file.user')" prop="user"> </el-table-column>
<el-table-column :label="$t('file.group')" prop="group"> </el-table-column>
<el-table-column :label="$t('file.size')" prop="size"> </el-table-column>
<el-table-column
:label="$t('file.updateTime')"
prop="modTime"
:formatter="dateFromat"
min-width="100"
show-overflow-tooltip
></el-table-column>
>
</el-table-column>
<fu-table-operations
:ellipsis="1"
@ -193,7 +181,7 @@ import Download from './download/index.vue';
const data = ref();
const selects = ref<any>([]);
const req = reactive({ path: '/', expand: true, showHidden: false });
const req = reactive({ path: '/', expand: true });
const loading = ref(false);
const treeLoading = ref(false);
const paths = ref<string[]>([]);

View file

@ -10,16 +10,16 @@
>
<el-form-item :label="$t('file.path')" prop="newPath">
<el-input v-model="addForm.newPath">
<template #append><FileList @choose="getPath" :dir="true"></FileList></template>
<template #append> <FileList @choose="getPath" :dir="true"></FileList> </template>
</el-input>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="handleClose" :disabled="loading">{{ $t('commons.button.cancel') }}</el-button>
<el-button type="primary" @click="submit(fileForm)" :disabled="loading">
{{ $t('commons.button.confirm') }}
</el-button>
<el-button type="primary" @click="submit(fileForm)" :disabled="loading">{{
$t('commons.button.confirm')
}}</el-button>
</span>
</template>
</el-dialog>

View file

@ -1,18 +1,18 @@
<template>
<el-dialog v-model="open" :before-close="handleClose" :title="$t('file.setRole')" width="30%" @open="onOpen">
<el-form
ref="fileForm"
label-position="left"
:model="addForm"
label-width="100px"
:rules="rules"
v-loading="loading"
>
<el-dialog
v-model="open"
:before-close="handleClose"
:title="$t('file.setRole')"
width="30%"
@open="onOpen"
v-loading="loading"
>
<el-form ref="fileForm" label-position="left" :model="addForm" label-width="100px" :rules="rules">
<el-form-item :label="$t('file.path')" prop="path">
<el-input v-model="props.path" disabled />
</el-form-item>
<el-form-item :label="$t('file.name')" prop="newName"><el-input v-model="addForm.newName" /></el-form-item>
</el-form>
<el-input v-model="props.path" disabled
/></el-form-item>
<el-form-item :label="$t('file.name')" prop="newName"> <el-input v-model="addForm.newName" /></el-form-item
></el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="handleClose">{{ $t('commons.button.cancel') }}</el-button>

View file

@ -5,6 +5,7 @@
<el-button type="primary">{{ $t('file.selectFile') }}</el-button>
</template>
</el-upload>
<template #footer>
<span class="dialog-footer">
<el-button @click="handleClose">{{ $t('commons.button.cancel') }}</el-button>

View file

@ -13,8 +13,8 @@
</el-form-item>
<el-form-item :label="$t('file.path')" prop="path">
<el-input v-model="addForm.path">
<template #append><FileList :path="path" @choose="getPath"></FileList></template>
</el-input>
<template #append> <FileList :path="path" @choose="getPath"></FileList> </template
></el-input>
</el-form-item>
<el-form-item :label="$t('file.name')" prop="name">
<el-input v-model="addForm.name"></el-input>
@ -23,9 +23,9 @@
<template #footer>
<span class="dialog-footer">
<el-button @click="handleClose" :disabled="loading">{{ $t('commons.button.cancel') }}</el-button>
<el-button type="primary" @click="submit(fileForm)" :disabled="loading">
{{ $t('commons.button.confirm') }}
</el-button>
<el-button type="primary" @click="submit(fileForm)" :disabled="loading">{{
$t('commons.button.confirm')
}}</el-button>
</span>
</template>
</el-dialog>
@ -37,7 +37,6 @@ import { Rules } from '@/global/form-rues';
import i18n from '@/lang';
import { ElMessage, FormInstance, FormRules } from 'element-plus';
import { reactive, ref, toRefs } from 'vue';
import FileList from '@/components/file-list/index.vue';
const props = defineProps({
open: {

View file

@ -1,7 +0,0 @@
<template>
<LayoutContent></LayoutContent>
</template>
<script lang="ts" setup>
import LayoutContent from '@/layout/layout-content.vue';
</script>

View file

@ -15,7 +15,8 @@
:end-placeholder="$t('commons.search.timeEnd')"
:shortcuts="shortcuts"
style="float: right; right: 20px"
></el-date-picker>
>
</el-date-picker>
</template>
<div id="loadLoadChart" style="width: 100%; height: 400px"></div>
</el-card>
@ -36,7 +37,8 @@
:end-placeholder="$t('commons.search.timeEnd')"
:shortcuts="shortcuts"
style="float: right; right: 20px"
></el-date-picker>
>
</el-date-picker>
</template>
<div id="loadCPUChart" style="width: 100%; height: 400px"></div>
</el-card>
@ -55,7 +57,8 @@
:end-placeholder="$t('commons.search.timeEnd')"
:shortcuts="shortcuts"
style="float: right; right: 20px"
></el-date-picker>
>
</el-date-picker>
</template>
<div id="loadMemoryChart" style="width: 100%; height: 400px"></div>
</el-card>
@ -76,7 +79,8 @@
:end-placeholder="$t('commons.search.timeEnd')"
:shortcuts="shortcuts"
style="float: right; right: 20px"
></el-date-picker>
>
</el-date-picker>
</template>
<div id="loadIOChart" style="width: 100%; height: 400px"></div>
</el-card>
@ -106,7 +110,8 @@
:end-placeholder="$t('commons.search.timeEnd')"
:shortcuts="shortcuts"
style="float: right; right: 20px"
></el-date-picker>
>
</el-date-picker>
</template>
<div id="loadNetworkChart" style="width: 100%; height: 400px"></div>
</el-card>

View file

@ -1,7 +0,0 @@
<template>
<LayoutContent></LayoutContent>
</template>
<script lang="ts" setup>
import LayoutContent from '@/layout/layout-content.vue';
</script>

View file

@ -1,7 +0,0 @@
<template>
<LayoutContent></LayoutContent>
</template>
<script lang="ts" setup>
import LayoutContent from '@/layout/layout-content.vue';
</script>

View file

@ -3,9 +3,9 @@
<ComplexTable :pagination-config="paginationConfig" v-model:selects="selects" :data="data" @search="search">
<template #toolbar>
<el-button @click="onCreate()">{{ $t('commons.button.create') }}</el-button>
<el-button type="danger" plain :disabled="selects.length === 0" @click="batchDelete(null)">
{{ $t('commons.button.delete') }}
</el-button>
<el-button type="danger" plain :disabled="selects.length === 0" @click="batchDelete(null)">{{
$t('commons.button.delete')
}}</el-button>
</template>
<el-table-column type="selection" fix />
<el-table-column :label="$t('commons.table.name')" min-width="100" prop="name" fix />

View file

@ -30,7 +30,7 @@
<el-icon style="margin-top: 1px" color="#F56C6C" v-if="item.status === 'closed'">
<circleClose />
</el-icon>
<span>&nbsp;{{ item.title }}&nbsp;&nbsp;</span>
<span> &nbsp;{{ item.title }}&nbsp;&nbsp;</span>
</span>
</template>
<Terminal

View file

@ -1,7 +0,0 @@
<template>
<LayoutContent></LayoutContent>
</template>
<script lang="ts" setup>
import LayoutContent from '@/layout/layout-content.vue';
</script>

View file

@ -1,7 +0,0 @@
<template>
<LayoutContent></LayoutContent>
</template>
<script lang="ts" setup>
import LayoutContent from '@/layout/layout-content.vue';
</script>

View file

@ -1,7 +0,0 @@
<template>
<LayoutContent></LayoutContent>
</template>
<script lang="ts" setup>
import LayoutContent from '@/layout/layout-content.vue';
</script>

View file

@ -1,7 +0,0 @@
<template>
<LayoutContent></LayoutContent>
</template>
<script lang="ts" setup>
import LayoutContent from '@/layout/layout-content.vue';
</script>