[add] app custom admin route support (#176)

* [add] app custom admin route support

* [fix] bindata fmt

* [fix] adminRoot replace bug

* [fix] admin root replace bug

* [fix] bindata fmt
This commit is contained in:
Max 2022-09-29 13:31:28 +08:00 committed by GitHub
parent 7aa198e962
commit 800ae72e8b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 219 additions and 59 deletions

3
.gitignore vendored
View file

@ -31,4 +31,5 @@ env.*.sh
xgen/v0.9/*
xgen/v1.0/*
!xgen/v0.9/index.html
!xgen/v1.0/index.html
!xgen/v1.0/index.html
!xgen/v1.0/umi.js

View file

@ -6,6 +6,7 @@ VETPACKAGES ?= $(shell $(GO) list ./... | grep -v /examples/)
GOFILES := $(shell find . -name "*.go")
VERSION := $(shell grep 'const VERSION =' share/const.go |awk '{print $$4}' |sed 's/\"//g')
COMMIT := $(shell git log | head -n 1 | awk '{print substr($$2, 0, 12)}')
NOW := $(shell date +"%FT%T%z")
# ROOT_DIR := $(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
TESTFOLDER := $(shell $(GO) list ./... | grep -vE 'examples|tests*|config|widgets')
@ -155,10 +156,9 @@ artifacts-linux: clean
cd ../xgen-v0.9 && npm install && npm run build
# Building XGEN v1.0
export XGEN_BASE=yao
export BASE=yao
export NODE_ENV=production
rm -f ../xgen-v1.0/pnpm-lock.yaml
echo "BASE=__yao_admin_root" > ../xgen-v1.0/packages/xgen/.env
cd ../xgen-v1.0 && pnpm install && pnpm run build
# Packing
@ -171,7 +171,7 @@ artifacts-linux: clean
rm -rf .tmp/data
# Replace PRVERSION
sed -ie "s/const PRVERSION = \"DEV\"/const PRVERSION = \"${COMMIT}\"/g" share/const.go
sed -ie "s/const PRVERSION = \"DEV\"/const PRVERSION = \"${COMMIT}-${NOW}\"/g" share/const.go
# Making artifacts
mkdir -p dist
@ -199,10 +199,9 @@ artifacts-macos: clean
cd ../xgen-v0.9 && npm install && npm run build
# Building XGEN v1.0
export XGEN_BASE=yao
export BASE=yao
export NODE_ENV=production
rm -f ../xgen-v1.0/pnpm-lock.yaml
echo "BASE=__yao_admin_root" > ../xgen-v1.0/packages/xgen/.env
cd ../xgen-v1.0 && pnpm install && pnpm run build
# Packing
@ -215,7 +214,7 @@ artifacts-macos: clean
rm -rf .tmp/data
# Replace PRVERSION
sed -ie "s/const PRVERSION = \"DEV\"/const PRVERSION = \"${COMMIT}\"/g" share/const.go
sed -ie "s/const PRVERSION = \"DEV\"/const PRVERSION = \"${COMMIT}-${NOW}\"/g" share/const.go
# Making artifacts
mkdir -p dist
@ -245,7 +244,7 @@ debug: clean
# Replace PRVERSION
sed -ie "s/const PRVERSION = \"DEV\"/const PRVERSION = \"${COMMIT}-debug\"/g" share/const.go
sed -ie "s/const PRVERSION = \"DEV\"/const PRVERSION = \"${COMMIT}-${NOW}-debug\"/g" share/const.go
# Making artifacts
mkdir -p dist
@ -262,31 +261,27 @@ release: clean
mkdir .tmp
# Building XGEN v0.9
# git clone https://github.com/YaoApp/xgen.git .tmp/xgen/v0.9
# sed -ie "s/url('\/icon/url('\/xiang\/icon/g" .tmp/xgen/v0.9/public/icon/md_icon.css
# cd .tmp/xgen/v0.9 && npm install && npm run build
mkdir -p .tmp/xgen/v0.9
cp -r xgen/v0.9 .tmp/xgen/v0.9/dist
mkdir -p .tmp/xgen/v0.9/dist
echo "XGEN v0.9" > .tmp/xgen/v0.9/dist/index.html
# Building XGEN v1.0
export XGEN_BASE=yao
export BASE=yao
export NODE_ENV=production
git clone https://github.com/YaoApp/xgen-next.git .tmp/xgen/v1.0
echo "BASE=__yao_admin_root" > .tmp/xgen/v1.0/packages/xgen/.env
cd .tmp/xgen/v1.0 && pnpm install && pnpm run build
# Packing
mkdir -p .tmp/data/xgen
cp -r ./ui .tmp/data/ui
cp -r ./yao .tmp/data/yao
cp -r .tmp/xgen/v0.9/dist .tmp/data/xgen/v0.9
cp -r .tmp/xgen/v1.0/packages/xgen/dist .tmp/data/xgen/v1.0
cp -r yao .tmp/data/
go-bindata -fs -pkg data -o data/bindata.go -prefix ".tmp/data/" .tmp/data/...
rm -rf .tmp/data
rm -rf .tmp/xgen
# Replace PRVERSION
sed -ie "s/const PRVERSION = \"DEV\"/const PRVERSION = \"${COMMIT}\"/g" share/const.go
sed -ie "s/const PRVERSION = \"DEV\"/const PRVERSION = \"${COMMIT}-${NOW}\"/g" share/const.go
# Making artifacts
mkdir -p dist
@ -310,19 +305,18 @@ linux-release: clean
cp -r xgen/v0.9 .tmp/xgen/v0.9/dist
# Building XGEN v1.0
export XGEN_BASE=yao
export BASE=yao
export NODE_ENV=production
git clone https://github.com/YaoApp/xgen-next.git .tmp/xgen/v1.0
rm -f .tmp/xgen/v1.0/pnpm-lock.yaml
echo "BASE=__yao_admin_root" > .tmp/xgen/v1.0/packages/xgen/.env
cd .tmp/xgen/v1.0 && pnpm install && pnpm run build
# Packing
mkdir -p .tmp/data/xgen
cp -r ./ui .tmp/data/ui
cp -r ./yao .tmp/data/yao
cp -r .tmp/xgen/v0.9/dist .tmp/data/xgen/v0.9
cp -r .tmp/xgen/v1.0/packages/xgen/dist .tmp/data/xgen/v1.0
cp -r yao .tmp/data/
go-bindata -fs -pkg data -o data/bindata.go -prefix ".tmp/data/" .tmp/data/...
rm -rf .tmp/data
rm -rf .tmp/xgen

View file

@ -69,9 +69,10 @@ var startCmd = &cobra.Command{
}
if share.App.XGen == "1.0" {
root, _ := adminRoot()
fmt.Println(color.WhiteString(L(" XGen")), color.GreenString(" 1.0"))
fmt.Println(color.WhiteString(L("Frontend")), color.GreenString(" http://%s%s/", host, port))
fmt.Println(color.WhiteString(L("Dashboard")), color.GreenString(" http://%s%s/yao/login/admin", host, port))
fmt.Println(color.WhiteString(L("Dashboard")), color.GreenString(" http://%s%s%slogin/admin", host, port, root))
fmt.Println(color.WhiteString(L("API")), color.GreenString(" http://%s%s/api", host, port))
fmt.Println(color.WhiteString(L("Listening")), color.GreenString(" %s:%d", config.Conf.Host, config.Conf.Port))
@ -125,6 +126,17 @@ var startCmd = &cobra.Command{
},
}
func adminRoot() (string, int) {
adminRoot := "/yao/"
if root, ok := share.App.Optional["adminRoot"].(string); ok && root != "" {
root = strings.TrimPrefix(root, "/")
root = strings.TrimSuffix(root, "/")
adminRoot = fmt.Sprintf("/%s/", root)
}
adminRootLen := len(adminRoot)
return adminRoot, adminRootLen
}
func printConnectors(silent bool) {
if len(connector.Connectors) == 0 {

View file

@ -3,6 +3,7 @@
// .tmp/data/ui/index.html
// .tmp/data/xgen/v0.9/index.html
// .tmp/data/xgen/v1.0/index.html
// .tmp/data/xgen/v1.0/umi.js
// .tmp/data/yao/apis/README.md
// .tmp/data/yao/apis/chart.http.json
// .tmp/data/yao/apis/import.http.json
@ -207,7 +208,7 @@ func uiIndexHtml() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "ui/index.html", size: 11, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "ui/index.html", size: 11, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -227,12 +228,12 @@ func xgenV09IndexHtml() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "xgen/v0.9/index.html", size: 14, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "xgen/v0.9/index.html", size: 14, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
var _xgenV10IndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x52\x56\x88\x70\x77\xf5\x53\x28\x33\xd4\x33\xd0\x33\xe4\x02\x04\x00\x00\xff\xff\x13\xe4\x6e\x5b\x0e\x00\x00\x00")
var _xgenV10IndexHtml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x52\x56\x88\x70\x77\xf5\x53\x28\x33\xd4\x33\xd0\x33\xe4\xe2\xb2\x49\xb2\x53\x56\x56\x08\xf2\xf7\x0f\x51\xd0\x8f\x8f\xaf\x4c\xcc\x8f\x4f\x4c\xc9\xcd\xcc\x8b\x2f\xca\xcf\x2f\xd1\x57\xb0\xd1\x4f\xb2\xe3\x02\x04\x00\x00\xff\xff\xb5\x26\x94\x2e\x32\x00\x00\x00")
func xgenV10IndexHtmlBytes() ([]byte, error) {
return bindataRead(
@ -247,7 +248,27 @@ func xgenV10IndexHtml() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "xgen/v1.0/index.html", size: 14, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "xgen/v1.0/index.html", size: 50, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
var _xgenV10UmiJs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xb2\x81\x00\x05\x0f\x57\x47\x17\xae\xb2\xc4\x22\x85\x82\xc4\x92\x0c\x05\x5b\x05\x25\xfd\xf8\xf8\xca\xc4\xfc\xf8\xc4\x94\xdc\xcc\xbc\xf8\xa2\xfc\xfc\x12\x7d\x25\x6b\xb0\x82\xb4\xfc\x7c\x05\x5b\x85\xe4\xfc\xbc\xe4\xc4\x12\x0d\x25\x74\x55\x4a\x9a\xd6\x5c\xb6\x10\x80\xa4\x1a\xb7\x69\x49\x89\x45\x20\x79\x0c\x63\xac\xb9\xec\x20\x40\x21\x25\x25\xd1\x30\xcd\xd0\x52\x41\x23\x3a\x2d\xb3\x22\x56\x01\xac\x46\x01\xa4\x46\xa1\x28\xb5\x20\x27\x31\x39\x55\x21\xa9\x34\x5d\x93\x0b\x10\x00\x00\xff\xff\xcc\x4c\x1b\x91\xc9\x00\x00\x00")
func xgenV10UmiJsBytes() ([]byte, error) {
return bindataRead(
_xgenV10UmiJs,
"xgen/v1.0/umi.js",
)
}
func xgenV10UmiJs() (*asset, error) {
bytes, err := xgenV10UmiJsBytes()
if err != nil {
return nil, err
}
info := bindataFileInfo{name: "xgen/v1.0/umi.js", size: 201, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -267,7 +288,7 @@ func yaoApisReadmeMd() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/apis/README.md", size: 13, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/apis/README.md", size: 13, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -287,7 +308,7 @@ func yaoApisChartHttpJson() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/apis/chart.http.json", size: 624, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/apis/chart.http.json", size: 624, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -307,7 +328,7 @@ func yaoApisImportHttpJson() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/apis/import.http.json", size: 1676, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/apis/import.http.json", size: 1676, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -327,7 +348,7 @@ func yaoApisPageHttpJson() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/apis/page.http.json", size: 609, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/apis/page.http.json", size: 609, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -347,7 +368,7 @@ func yaoApisStorageHttpJson() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/apis/storage.http.json", size: 1026, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/apis/storage.http.json", size: 1026, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -367,7 +388,7 @@ func yaoApisTableHttpJson() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/apis/table.http.json", size: 3213, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/apis/table.http.json", size: 3213, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -387,7 +408,7 @@ func yaoApisUserHttpJson() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/apis/user.http.json", size: 1453, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/apis/user.http.json", size: 1453, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -407,7 +428,7 @@ func yaoApisXiangHttpJson() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/apis/xiang.http.json", size: 1239, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/apis/xiang.http.json", size: 1239, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -427,7 +448,7 @@ func yaoDataAppJson() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/data/app.json", size: 277, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/data/app.json", size: 277, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -447,7 +468,7 @@ func yaoDataIcons404Png() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/data/icons/404.png", size: 9342, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/data/icons/404.png", size: 9342, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -467,7 +488,7 @@ func yaoDataIconsIconIcns() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/data/icons/icon.icns", size: 67465, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/data/icons/icon.icns", size: 67465, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -487,7 +508,7 @@ func yaoDataIconsIconIco() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/data/icons/icon.ico", size: 54993, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/data/icons/icon.ico", size: 54993, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -507,7 +528,7 @@ func yaoDataIconsIconPng() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/data/icons/icon.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/data/icons/icon.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -527,7 +548,7 @@ func yaoDataIndexHtml() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/data/index.html", size: 282, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/data/index.html", size: 282, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -547,7 +568,7 @@ func yaoFlowsReadmeMd() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/flows/README.md", size: 12, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/flows/README.md", size: 12, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -567,7 +588,7 @@ func yaoFlowsAdminGuardFlowJson() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/flows/admin/guard.flow.json", size: 559, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/flows/admin/guard.flow.json", size: 559, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -587,7 +608,7 @@ func yaoFlowsMenuFlowJson() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/flows/menu.flow.json", size: 1045, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/flows/menu.flow.json", size: 1045, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -607,7 +628,7 @@ func yaoFlowsUserFindFlowJson() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/flows/user/find.flow.json", size: 328, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/flows/user/find.flow.json", size: 328, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -627,7 +648,7 @@ func yaoLangsEnUsJson() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/langs/en-US.json", size: 66, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/langs/en-US.json", size: 66, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -647,7 +668,7 @@ func yaoModelsReadmeMd() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/models/README.md", size: 15, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/models/README.md", size: 15, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -667,7 +688,7 @@ func yaoModelsMenuModJson() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/models/menu.mod.json", size: 2378, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/models/menu.mod.json", size: 2378, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -687,7 +708,7 @@ func yaoModelsUserModJson() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/models/user.mod.json", size: 8826, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/models/user.mod.json", size: 8826, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -707,7 +728,7 @@ func yaoModelsWorkflowModJson() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/models/workflow.mod.json", size: 3333, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/models/workflow.mod.json", size: 3333, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -727,7 +748,7 @@ func yaoTablesReadmeMd() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/tables/README.md", size: 15, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/tables/README.md", size: 15, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -747,7 +768,7 @@ func yaoTablesMenuTabJson() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/tables/menu.tab.json", size: 10471, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/tables/menu.tab.json", size: 10471, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -767,7 +788,7 @@ func yaoTablesUserTabJson() (*asset, error) {
return nil, err
}
info := bindataFileInfo{name: "yao/tables/user.tab.json", size: 2357, mode: os.FileMode(420), modTime: time.Unix(1664292946, 0)}
info := bindataFileInfo{name: "yao/tables/user.tab.json", size: 2357, mode: os.FileMode(420), modTime: time.Unix(1664428475, 0)}
a := &asset{bytes: bytes, info: info}
return a, nil
}
@ -827,6 +848,7 @@ var _bindata = map[string]func() (*asset, error){
"ui/index.html": uiIndexHtml,
"xgen/v0.9/index.html": xgenV09IndexHtml,
"xgen/v1.0/index.html": xgenV10IndexHtml,
"xgen/v1.0/umi.js": xgenV10UmiJs,
"yao/apis/README.md": yaoApisReadmeMd,
"yao/apis/chart.http.json": yaoApisChartHttpJson,
"yao/apis/import.http.json": yaoApisImportHttpJson,
@ -905,6 +927,7 @@ var _bintree = &bintree{nil, map[string]*bintree{
}},
"v1.0": {nil, map[string]*bintree{
"index.html": {xgenV10IndexHtml, map[string]*bintree{}},
"umi.js": {xgenV10UmiJs, map[string]*bintree{}},
}},
}},
"yao": {nil, map[string]*bintree{

View file

@ -1,7 +1,10 @@
package data
import (
"bytes"
"compress/gzip"
"os"
"strings"
assetfs "github.com/elazarl/go-bindata-assetfs"
)
@ -29,3 +32,58 @@ func XgenV1() *assetfs.AssetFS {
}
panic("unreachable")
}
// ReplaceXGen bindata file
func ReplaceXGen(search, replace string) error {
err := replaceXGenIndex(search, replace)
if err != nil {
return err
}
return replaceXGenUmi(search, replace)
}
// ReplaceXGenIndex bindata file
func replaceXGenIndex(search, replace string) error {
content, err := bindataRead(_xgenV10IndexHtml, "xgen/v1.0/index.html")
if err != nil {
return err
}
new := strings.ReplaceAll(string(content), search, replace)
var b bytes.Buffer
gz := gzip.NewWriter(&b)
if _, err := gz.Write([]byte(new)); err != nil {
return err
}
if err := gz.Close(); err != nil {
return err
}
_xgenV10IndexHtml = b.Bytes()
return nil
}
// replaceXGenUmi bindata file
func replaceXGenUmi(search, replace string) error {
content, err := bindataRead(_xgenV10UmiJs, "xgen/v1.0/umi.js")
if err != nil {
return err
}
new := strings.ReplaceAll(string(content), search, replace)
var b bytes.Buffer
gz := gzip.NewWriter(&b)
if _, err := gz.Write([]byte(new)); err != nil {
return err
}
if err := gz.Close(); err != nil {
return err
}
_xgenV10UmiJs = b.Bytes()
return nil
}

25
data/data_test.go Normal file
View file

@ -0,0 +1,25 @@
package data
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestReplaceXGenIndex(t *testing.T) {
err := ReplaceXGen("__yao_admin_root", "Admin-Replaced")
if err != nil {
t.Fatal(err)
}
content, err := bindataRead(_xgenV10IndexHtml, "index.html")
if err != nil {
t.Fatal(err)
}
content, err = bindataRead(_xgenV10UmiJs, "umi.js")
if err != nil {
t.Fatal(err)
}
assert.Contains(t, string(content), "Admin-Replaced")
}

View file

@ -1,6 +1,7 @@
package service
import (
"fmt"
"net/http"
"path/filepath"
"strings"
@ -36,13 +37,18 @@ func BinStatic(c *gin.Context) {
c.Next()
return
} else if share.App.XGen == "1.0" && length >= 5 && c.Request.URL.Path[0:5] == "/yao/" {
c.Request.URL.Path = strings.TrimPrefix(c.Request.URL.Path, "/yao")
XGenFileServerV1.ServeHTTP(c.Writer, c.Request)
c.Abort()
return
} else if share.App.XGen == "1.0" {
// Xgen 1.0
adminRoot, adminRootLen := adminRoot()
if length >= adminRootLen && c.Request.URL.Path[0:adminRootLen] == adminRoot {
c.Request.URL.Path = strings.TrimPrefix(c.Request.URL.Path, c.Request.URL.Path[0:adminRootLen-1])
XGenFileServerV1.ServeHTTP(c.Writer, c.Request)
c.Abort()
return
}
} else if share.App.XGen == "" && length >= 7 && c.Request.URL.Path[0:7] == "/xiang/" { // 数据管理后台
} else if share.App.XGen == "" && length >= 7 && c.Request.URL.Path[0:7] == "/xiang/" {
// Xgen 0.9
c.Request.URL.Path = strings.TrimPrefix(c.Request.URL.Path, "/xiang")
XGenFileServerV0.ServeHTTP(c.Writer, c.Request)
c.Abort()
@ -54,3 +60,14 @@ func BinStatic(c *gin.Context) {
AppFileServer.ServeHTTP(c.Writer, c.Request)
c.Abort()
}
func adminRoot() (string, int) {
adminRoot := "/yao/"
if root, ok := share.App.Optional["adminRoot"].(string); ok && root != "" {
root = strings.TrimPrefix(root, "/")
root = strings.TrimSuffix(root, "/")
adminRoot = fmt.Sprintf("/%s/", root)
}
adminRootLen := len(adminRoot)
return adminRoot, adminRootLen
}

View file

@ -5,12 +5,14 @@ import (
"io/ioutil"
"os"
"path/filepath"
"strings"
jsoniter "github.com/json-iterator/go"
"github.com/yaoapp/gou"
"github.com/yaoapp/gou/lang"
"github.com/yaoapp/kun/exception"
"github.com/yaoapp/yao/config"
"github.com/yaoapp/yao/data"
"github.com/yaoapp/yao/share"
"github.com/yaoapp/yao/widgets/login"
)
@ -52,10 +54,16 @@ func Load(cfg config.Config) error {
return err
}
dsl := &DSL{}
dsl := &DSL{Optional: OptionalDSL{}}
err = jsoniter.Unmarshal(data, dsl)
if err != nil {
return nil
return err
}
// Replace Admin Root
err = dsl.replaceAdminRoot()
if err != nil {
return err
}
// Apply a language pack
@ -200,3 +208,20 @@ func (dsl *DSL) Lang(trans func(widget string, inst string, value *string) bool)
trans(widget, "app", &dsl.Short)
trans(widget, "app", &dsl.Description)
}
// replaceAdminRoot
func (dsl *DSL) replaceAdminRoot() error {
if dsl.Optional.AdminRoot == "" {
dsl.Optional.AdminRoot = "yao"
}
root := strings.TrimPrefix(dsl.Optional.AdminRoot, "/")
root = strings.TrimSuffix(root, "/")
err := data.ReplaceXGen("/__yao_admin_root/", fmt.Sprintf("/%s/", root))
if err != nil {
return err
}
return data.ReplaceXGen("\"__yao_admin_root\"", fmt.Sprintf("\"%s\"", root))
}

View file

@ -21,5 +21,6 @@ type MenuDSL struct {
type OptionalDSL struct {
HideNotification bool `json:"hideNotification,omitempty"`
HideSetting bool `json:"hideSetting,omitempty"`
AdminRoot string `json:"adminRoot,omitempty"`
Setting string `json:"setting,omitempty"` // custom setting process
}

View file

@ -1 +1,3 @@
# XGEN v1.0.1
<b>## ROOT /__yao_admin_root/ </b>

2
xgen/v1.0/umi.js Normal file
View file

@ -0,0 +1,2 @@
var path = "/__yao_admin_root/";
var foo = concat("__yao_admin_root");