Compare commits

...

25 Commits

Author SHA1 Message Date
shy
2c2060c8a8 add some 2025-05-04 08:49:40 +08:00
shy
3a382468f7 add some 2025-05-04 08:48:49 +08:00
shy
592013abfd add some 2025-05-02 01:36:32 +08:00
shy
388b648a7a opt some 2025-04-29 00:56:49 +08:00
shy
2662b68051 opt some 2025-03-22 12:55:41 +08:00
shy
9e8c340277 opt some 2025-03-15 20:41:24 +08:00
shy
3de26dcb69 add some 2025-03-15 20:26:58 +08:00
shy
b1345a0313 add some 2025-03-15 13:16:13 +08:00
shy
b62ec45b1d opt some 2025-03-10 18:51:50 +08:00
shy
e5cc156f7e add some 2025-03-10 18:38:47 +08:00
shy
1f02345f88 add some 2025-03-08 08:38:28 +08:00
shy
f8eca1a0a1 opt some 2025-03-05 17:48:10 +08:00
shy
12d4b0e24f opt some 2025-03-03 19:49:49 +08:00
shy
8671bbd6f2 add some 2025-03-03 07:52:47 +08:00
shy
b39d8aa887 opt some 2025-02-28 21:27:37 +08:00
shy
78dac8b525 opt some 2025-02-28 14:23:34 +08:00
shy
54359bf597 add some 2025-02-27 18:32:49 +08:00
shy
9b6f6cbb6e add some 2025-02-27 18:17:48 +08:00
shy
5d99b3884c add some 2025-02-27 18:06:08 +08:00
shy
b546493b39 add some 2025-02-27 16:27:25 +08:00
shy
f02e0b56e8 add some 2025-02-27 14:37:47 +08:00
shy
8f5e2cf1f6 opt some 2025-02-26 22:24:48 +08:00
shy
8ab9bd6bc4 opt some 2025-02-26 22:04:31 +08:00
shy
d6536290e2 add some 2025-02-25 22:51:39 +08:00
shy
b00f4dbaf6 opt some 2025-02-25 22:13:45 +08:00
60 changed files with 717 additions and 475 deletions

View File

@ -1,6 +1,6 @@
MIT License
Copyright (c) 2020 shylinux
Copyright (c) 2017-2025 shylinux
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
SOFTWARE.

View File

@ -1,12 +1,11 @@
binarys = bin/ice.bin
version = src/version.go
binpack = src/binpack.go
option = src/option.go
flags = -ldflags "-w -s" -v
all: def
@date +"%Y-%m-%d %H:%M:%S"
go build ${flags} -o ${binarys} src/main.go ${option} ${version} ${binpack} && ./${binarys} forever restart &>/dev/null
go build ${flags} -o ${binarys} src/main.go src/option.go ${version} ${binpack} && ./${binarys} forever restart &>/dev/null
def:
@[ -f ${version} ] || echo "package main">${version}

View File

@ -1,11 +1,11 @@
# Community
Community 通过模块化、集群化、自动化的方式,只用一个 20M 大小的程序文件,就可以在各种设备上,一键启动完整的云计算服务与云研发环境。
# ContextOS
ContextOS 通过集群化、模块化、自动化的方式,只用一个 20M 大小的程序文件,就可以在各种设备上,一键启动完整的云计算服务与云研发环境。
## 源码安装
### 克隆编译
## 安装系统
### 下载编译
```sh
git clone https://shylinux.com/x/community
cd community; source etc/miss.sh
git clone https://shylinux.com/x/ContextOS
cd ContextOS; source etc/miss.sh
```
### 启动服务
@ -13,7 +13,5 @@ cd community; source etc/miss.sh
ish_miss_serve
```
### 访问网页
```sh
open http://localhost:9020
```
### 管理后台
打开管理后台 [http://localhost:9020](http://localhost:9020)

46
go.mod
View File

@ -2,18 +2,16 @@ module shylinux.com/x/community
go 1.21
toolchain go1.23.4
require (
shylinux.com/x/enterprise v0.0.10
shylinux.com/x/golang-story v0.0.26
shylinux.com/x/mysql-story v0.6.27
shylinux.com/x/enterprise v0.0.14
shylinux.com/x/golang-story v0.0.32
shylinux.com/x/mysql-story v0.6.32
)
require (
shylinux.com/x/ice v1.5.65
shylinux.com/x/icebergs v1.9.67
shylinux.com/x/toolkits v1.0.18
shylinux.com/x/ice v1.5.74
shylinux.com/x/icebergs v1.9.76
shylinux.com/x/toolkits v1.0.19
)
require (
@ -23,23 +21,35 @@ require (
)
require (
filippo.io/edwards25519 v1.1.0 // indirect
github.com/emersion/go-imap v1.2.1 // indirect
github.com/emersion/go-message v0.15.0 // indirect
github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21 // indirect
github.com/emersion/go-textwrapper v0.0.0-20200911093747-65d896831594 // indirect
github.com/go-sql-driver/mysql v1.9.0 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/mattn/go-sqlite3 v1.14.22 // indirect
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1095
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ocr v1.0.1046
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/smh v1.0.1051
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms v1.0.1047
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke v1.0.1095
github.com/wechatpay-apiv3/wechatpay-go v0.2.20
)
require (
filippo.io/edwards25519 v1.1.0 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/emersion/go-imap v1.2.1 // indirect
github.com/emersion/go-message v0.15.0 // indirect
github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21 // indirect
github.com/emersion/go-textwrapper v0.0.0-20200911093747-65d896831594 // indirect
github.com/glebarez/go-sqlite v1.21.2 // indirect
github.com/glebarez/sqlite v1.11.0 // indirect
github.com/go-sql-driver/mysql v1.9.0 // indirect
github.com/google/uuid v1.3.0 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/mattn/go-isatty v0.0.17 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
golang.org/x/sys v0.21.0 // indirect
golang.org/x/text v0.22.0 // indirect
gorm.io/driver/mysql v1.5.7 // indirect
gorm.io/driver/sqlite v1.5.6 // indirect
gorm.io/gorm v1.25.12 // indirect
modernc.org/libc v1.22.5 // indirect
modernc.org/mathutil v1.5.0 // indirect
modernc.org/memory v1.5.0 // indirect
modernc.org/sqlite v1.23.1 // indirect
)

146
go.sum
View File

@ -1,23 +1,16 @@
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/PuerkitoBio/goquery v1.9.1/go.mod h1:cW1n6TmIMDoORQU5IU/P1T3tGFunOeXEpGP2WHRwkbY=
github.com/agiledragon/gomonkey v2.0.2+incompatible h1:eXKi9/piiC3cjJD1658mEE2o3NjkJ5vDLgYjCQu0Xlw=
github.com/agiledragon/gomonkey v2.0.2+incompatible/go.mod h1:2NGfXu1a80LLr2cmWXGBDaHEjb1idR6+FVlX5T3D9hw=
github.com/andybalholm/cascadia v1.3.2/go.mod h1:7gtRlve5FxPPgIgX36uWBX58OdBsSS6lUvCFb+h7KvU=
github.com/bgould/http v0.0.0-20190627042742-d268792bdee7/go.mod h1:BTqvVegvwifopl4KTEDth6Zezs9eR+lCWhvGKvkxJHE=
github.com/chzyer/logex v1.2.0/go.mod h1:9+9sk7u7pGNWYMkh0hdiL++6OeibzJccyQU4p4MedaY=
github.com/chzyer/readline v1.5.0/go.mod h1:x22KAscuvRqlLoK9CsoYsmxoXZMMFVyOl86cAH8qUic=
github.com/chzyer/test v0.0.0-20210722231415-061457976a23/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dhowden/itl v0.0.0-20170329215456-9fbe21093131/go.mod h1:eVWQJVQ67aMvYhpkDwaH2Goy2vo6v8JCMfGXfQ9sPtw=
github.com/dhowden/plist v0.0.0-20141002110153-5db6e0d9931a/go.mod h1:sLjdR6uwx3L6/Py8F+QgAfeiuY87xuYGwCDqRFrvCzw=
github.com/dhowden/tag v0.0.0-20240417053706-3d75831295e8/go.mod h1:apkPC/CR3s48O2D7Y++n1XWEpgPNNCjXYga3PPbJe2E=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/eclipse/paho.mqtt.golang v1.2.0/go.mod h1:H9keYFcgq3Qr5OUJm/JZI/i6U7joQ8SYLhZwfeOo6Ts=
github.com/emersion/go-imap v1.2.1 h1:+s9ZjMEjOB8NzZMVTM3cCenz2JrQIGGo5j1df19WjTA=
github.com/emersion/go-imap v1.2.1/go.mod h1:Qlx1FSx2FTxjnjWpIlVNEuX+ylerZQNFE5NsmKFSejY=
github.com/emersion/go-message v0.15.0 h1:urgKGqt2JAc9NFJcgncQcohHdiYb803YTH9OQwHBHIY=
@ -26,26 +19,20 @@ github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21 h1:OJyUGMJTzHTd1X
github.com/emersion/go-sasl v0.0.0-20200509203442-7bfe0ed36a21/go.mod h1:iL2twTeMvZnrg54ZoPDNfJaJaqy0xIQFuBdrLsmspwQ=
github.com/emersion/go-textwrapper v0.0.0-20200911093747-65d896831594 h1:IbFBtwoTQyw0fIM5xv1HF+Y+3ZijDR839WMulgxCcUY=
github.com/emersion/go-textwrapper v0.0.0-20200911093747-65d896831594/go.mod h1:aqO8z8wPrjkscevZJFVE1wXJrLpC5LtJG7fqLOsPb2U=
github.com/frankban/quicktest v1.10.2/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s=
github.com/glebarez/go-sqlite v1.21.2 h1:3a6LFC4sKahUunAmynQKLZceZCOzUthkRkEAl9gAXWo=
github.com/glebarez/go-sqlite v1.21.2/go.mod h1:sfxdZyhQjTM2Wry3gVYWaW072Ri1WMdWJi0k6+3382k=
github.com/glebarez/sqlite v1.11.0 h1:wSG0irqzP6VurnMEpFGer5Li19RpIRi2qvQz++w0GMw=
github.com/glebarez/sqlite v1.11.0/go.mod h1:h8/o8j5wiAsqSPoWELDUdJXhjAhsVliSn7bWZjOhrgQ=
github.com/glerchundi/subcommands v0.0.0-20181212083838-923a6ccb11f8/go.mod h1:r0g3O7Y5lrWXgDfcFBRgnAKzjmPgTzwoMC2ieB345FY=
github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
github.com/go-sql-driver/mysql v1.9.0 h1:Y0zIbQXhQKmQgTp44Y1dp3wTXcn804QoTptLZT1vtvo=
github.com/go-sql-driver/mysql v1.9.0/go.mod h1:pDetrLJeA3oMujJuvXc8RJoasr589B6A9fwzD3QMrqw=
github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ=
github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo=
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/hajimehoshi/go-jisx0208 v1.0.0/go.mod h1:yYxEStHL7lt9uL+AbdWgW9gBumwieDoZCiB1f/0X0as=
github.com/ianlancetaylor/demangle v0.0.0-20220319035150-800ac71e25c2/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
@ -53,45 +40,23 @@ github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
github.com/pelletier/go-toml v1.6.0/go.mod h1:5N711Q9dKgbdkxHL+MEfF31hpT7l0S0s/t2kKREewys=
github.com/peterbourgon/ff/v3 v3.1.2/go.mod h1:XNJLY8EIl6MjMVjBS4F0+G0LYoAqs0DTa4rmHHukKDE=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/sago35/go-bdf v0.0.0-20200313142241-6c17821c91c4/go.mod h1:rOebXGuMLsXhZAC6mF/TjxONsm45498ZyzVhel++6KM=
github.com/saltosystems/winrt-go v0.0.0-20240509164145-4f7860a3bd2b/go.mod h1:CIltaIm7qaANUIvzr0Vmz71lmQMAIbGJ7cvgzX7FMfA=
github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/sirupsen/logrus v1.5.0/go.mod h1:+F7Ogzej0PZc/94MaYx/nvG9jOFMD2osvC3s+Squfpo=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/soypat/cyw43439 v0.0.0-20240609122733-da9153086796/go.mod h1:1Otjk6PRhfzfcVHeWMEeku/VntFqWghUwuSQyivb2vE=
github.com/soypat/natiu-mqtt v0.5.1/go.mod h1:xEta+cwop9izVCW7xOx2W+ct9PRMqr0gNVkvBPnQTc4=
github.com/soypat/saleae v0.0.0-20230402180913-3584b7515dae/go.mod h1:9SV+w6E9YK/BePxdxYGXthkrRztHJCQlojWOjAxW3M4=
github.com/soypat/seqs v0.0.0-20240527012110-1201bab640ef/go.mod h1:oCVCNGCHMKoBj97Zp9znLbQ1nHxpkmOY9X+UAGzOxc8=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tdakkota/win32metadata v0.1.0/go.mod h1:77e6YvX0LIVW+O81fhWLnXAxxcyu/wdZdG7iwed7Fyk=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1046/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1047/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1051/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
@ -105,36 +70,20 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms v1.0.1047 h1:FF8uER
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms v1.0.1047/go.mod h1:3tgFFSlybx6XyhvLWpnSjWYFMedTyQC9oyh8CH1Ak28=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke v1.0.1095 h1:l7SQnVkft1vPdfE/gv/ee2wBj54+hacPzchjs4gnGgw=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/tke v1.0.1095/go.mod h1:7V6/Y6tPk0jL21YAevsuDSBSN3nU5XFRBR6CFsTLhJE=
github.com/tinygo-org/cbgo v0.0.4/go.mod h1:7+HgWIHd4nbAz0ESjGlJ1/v9LDU1Ox8MGzP9mah/fLk=
github.com/tinygo-org/pio v0.0.0-20231216154340-cd888eb58899/go.mod h1:LU7Dw00NJ+N86QkeTGjMLNkYcEYMor6wTDpTCu0EaH8=
github.com/tklauser/go-sysconf v0.3.13/go.mod h1:zwleP4Q4OehZHGn4CYZDipCgg9usW5IJePewFCGVEa0=
github.com/tklauser/numcpus v0.7.0/go.mod h1:bb6dMVcj8A42tSE7i32fsIUCbQNllK5iDguyOZRUzAY=
github.com/valyala/fastjson v1.6.3/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY=
github.com/wechatpay-apiv3/wechatpay-go v0.2.20 h1:gS8oFn1bHGnyapR2Zb4aqTV6l4kJWgbtqjCq6k1L9DQ=
github.com/wechatpay-apiv3/wechatpay-go v0.2.20/go.mod h1:A254AUBVB6R+EqQFo3yTgeh7HtyqRRtN2w9hQSOrd4Q=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/yuin/goldmark v1.5.5/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc=
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
golang.org/x/exp v0.0.0-20230728194245-b0cb94b80691/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
golang.org/x/image v0.0.0-20220617043117-41969df76e82/go.mod h1:doUCurBvlfPMKfmIpRIywoHmhN3VyhnoFDbvIEWF4hY=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
@ -142,21 +91,14 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk=
golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
@ -164,50 +106,36 @@ golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws=
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU=
golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU=
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
@ -217,9 +145,7 @@ golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
@ -228,17 +154,12 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gorm.io/driver/mysql v1.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo=
gorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
gorm.io/driver/sqlite v1.5.6 h1:fO/X46qn5NUEEOZtnjJRWRzZMe8nqJiQ9E+0hi+hKQE=
gorm.io/driver/sqlite v1.5.6/go.mod h1:U+J8craQU6Fzkcvu8oLeAQmi50TkwPEhHDEjQZXDah4=
gorm.io/gorm v1.25.7-0.20240204074919-46816ad31dde/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
gorm.io/gorm v1.25.11/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
gorm.io/gorm v1.25.12 h1:I0u8i2hWQItBq1WfE0o2+WuL9+8L21K9e2HHSTE/0f8=
gorm.io/gorm v1.25.12/go.mod h1:xh7N7RHfYlNc5EmcI/El95gXusucDrQnHXe0+CgWcLQ=
lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
@ -253,56 +174,41 @@ modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM=
modernc.org/libc v1.17.4/go.mod h1:WNg2ZH56rDEwdropAJeZPQkXmDwh+JCA1s/htl6r2fA=
modernc.org/libc v1.20.3/go.mod h1:ZRfIaEkgrYgZDl6pa4W39HgN5G/yDW+NRmNKZBDFrk0=
modernc.org/libc v1.21.4/go.mod h1:przBsL5RDOZajTVslkugzLBj1evTue36jEomFQOoYuI=
modernc.org/libc v1.22.5 h1:91BNch/e5B0uPbJFgqbxXuOnxBQjlS//icfQEGmvyjE=
modernc.org/libc v1.22.5/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY=
modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ=
modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
modernc.org/memory v1.3.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
modernc.org/memory v1.4.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds=
modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
modernc.org/sqlite v1.23.1 h1:nrSBg4aRQQwq59JpvGEQ15tNxoO5pX/kUjcRNwSAGQM=
modernc.org/sqlite v1.23.1/go.mod h1:OrDj17Mggn6MhE+iPbBNf7RGKODDE9NFT0f3EwDzJqk=
modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw=
modernc.org/tcl v1.15.2/go.mod h1:3+k/ZaEbKrC8ePv8zJWPtBSW0V7Gg9g8rkmhI1Kfs3c=
modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
modernc.org/z v1.7.3/go.mod h1:Ipv4tsdxZRbQyLq9Q1M6gdbkxYzdlrciF2Hi/lS7nWE=
shylinux.com/x/enterprise v0.0.10 h1:Pl0bhydypEuCCVwa/PGfHOkDs8LHGG1qMik8I8CCtus=
shylinux.com/x/enterprise v0.0.10/go.mod h1:mgh/zLFxQGQ755yGgwy1gqalsfOvkEd1XdnbKp/5VpM=
shylinux.com/x/enterprise v0.0.14 h1:gxxAtMt4sLy8+HN10jJipZ6xa0it/rllZZGKwWILJ2Q=
shylinux.com/x/enterprise v0.0.14/go.mod h1:RR4LfgQMgy8ckZuga6pEvEl9TxF3gbfHN+Mh3Jhk1GI=
shylinux.com/x/go-git/v5 v5.6.7 h1:WD5QSco7m3QooPCgdvQ6/GyGIFPun8C+hex5N41LYlk=
shylinux.com/x/go-git/v5 v5.6.7/go.mod h1:Qb0lA+uIrofZg8NQerhYcJHgGWixFqvS6p3aJ/L5Nlk=
shylinux.com/x/go-qrcode v0.0.3 h1:RMo+Vidbgq3HatLBj7DDXcTbTLFUwzis5K7TqBkD38U=
shylinux.com/x/go-qrcode v0.0.3/go.mod h1:KAbtU+KwiiABMZ/CJ0zh9PI2AX82Uf9rRYcQ4ODm4po=
shylinux.com/x/go-sql-mysql v0.0.2/go.mod h1:lHjRMZz5Lii6U+49fhkbCWgsnL+yux54SYJYWqASN8Y=
shylinux.com/x/golang-story v0.0.26 h1:CBP34sygh6Pc4nDZnM27RCJ2eTxENBS0qMRaamXMQeY=
shylinux.com/x/golang-story v0.0.26/go.mod h1:elamEBuhuzD1XFHpncYA3nAiuUlIKFBX+Y33Na5A+1c=
shylinux.com/x/ice v1.5.48/go.mod h1:aDG7yzDlX3NsWEoIjIoiV3sQPec4APZGbYsSJFtcI4I=
shylinux.com/x/ice v1.5.52/go.mod h1:/JB9G+x9aDy5fX+gbXImnfumPzy+g1gNV9TIf0nRJ30=
shylinux.com/x/ice v1.5.65 h1:LALedqPzN4rxmzYWsDkrzO/uElahwmUsFoGT5WnOzLo=
shylinux.com/x/ice v1.5.65/go.mod h1:iMhKyRiIlBOKwl/oP817mpZf3vB9frMl2CBDyy4Z09s=
shylinux.com/x/icebergs v1.9.48/go.mod h1:wM3PkomBSeASTekVjxuOP8Y28HYq84MxUZ3d5BZEN74=
shylinux.com/x/icebergs v1.9.52/go.mod h1:d8sN77l5UZA+h8/swZ9OzqRCruoSYHWYjg5qKWnQI2s=
shylinux.com/x/icebergs v1.9.67 h1:GYC2BcWLDGW/uTm7gqsvJm5xl138QchWfM9SHjQ/qBo=
shylinux.com/x/icebergs v1.9.67/go.mod h1:+4bl7yJRMFtlTQRDLd+xh6b0hwXkqWaHLmx63Jeewwk=
shylinux.com/x/mysql-story v0.6.26 h1:F7W/u8FL3gHZUoqf10WTPdKTQdIQvT9JydePTn9ZV/4=
shylinux.com/x/mysql-story v0.6.26/go.mod h1:gB1XbC94jPjS8szv60V3b3/NWzro1ndFwVzZBalDN+4=
shylinux.com/x/mysql-story v0.6.27 h1:ePHSrAUc2WdUyfW/SIdA82lLv2WcqDiLfGFriwzRUqQ=
shylinux.com/x/mysql-story v0.6.27/go.mod h1:PO3VT3oejD9+U1wGD7KIZ7itw+AZV+ysuecGMpbJiGw=
shylinux.com/x/golang-story v0.0.32 h1:7xu28iREL2cuZzf80luJwI9BWptow+ME00L1lgyjmDI=
shylinux.com/x/golang-story v0.0.32/go.mod h1:NsI5fULu3q7o2b+VzZ5tiJ3+0pUTjE9DdQxa870htmw=
shylinux.com/x/ice v1.5.73/go.mod h1:uGI73gYkk+FiJt5qmy/aYhoKRJ4wobcJk3WrPGh8Waw=
shylinux.com/x/ice v1.5.74 h1:5hTPmchO79b1d2+/DwBDLiG2WkTL65G/hOEAcGJVeB8=
shylinux.com/x/ice v1.5.74/go.mod h1:/XAib8Ha+z6jzLRs2Pig+qxDx4C8dT8Vfaq2InJ/lkU=
shylinux.com/x/icebergs v1.9.75/go.mod h1:3Bdp3tjzw+hUKJF+kR8pfsrbjAf72DVZmCaE8/MPFtk=
shylinux.com/x/icebergs v1.9.76 h1:SHOTbiO+jh09GEFzoo8t8kmR1BCu+zkNCpdfxPCLeu0=
shylinux.com/x/icebergs v1.9.76/go.mod h1:3Bdp3tjzw+hUKJF+kR8pfsrbjAf72DVZmCaE8/MPFtk=
shylinux.com/x/mysql-story v0.6.32 h1:Q274WFJ09ocnf8nhlQnKr02FMMdPYBLWqu2IjTVqGiM=
shylinux.com/x/mysql-story v0.6.32/go.mod h1:8HCeDUV6ghaIeJD1IEhSeSOfVC9wEI93y2G9QBLtJJY=
shylinux.com/x/toolkits v0.7.10/go.mod h1:CHDJarGlDkg60kVsvMLYL/a5hAnRLEOShiEsMOuEp0Q=
shylinux.com/x/toolkits v1.0.15/go.mod h1:CHDJarGlDkg60kVsvMLYL/a5hAnRLEOShiEsMOuEp0Q=
shylinux.com/x/toolkits v1.0.16/go.mod h1:CHDJarGlDkg60kVsvMLYL/a5hAnRLEOShiEsMOuEp0Q=
shylinux.com/x/toolkits v1.0.18 h1:jtQZhmvU10Ajegc87tU0cYFUBSviaODo5TsCXpYb2O4=
shylinux.com/x/toolkits v1.0.18/go.mod h1:CHDJarGlDkg60kVsvMLYL/a5hAnRLEOShiEsMOuEp0Q=
shylinux.com/x/toolkits v1.0.19 h1:Nrx0xYRc5ph1WS66EZ1hJUCe+2FdSWQ4QP6tBlguikQ=
shylinux.com/x/toolkits v1.0.19/go.mod h1:CHDJarGlDkg60kVsvMLYL/a5hAnRLEOShiEsMOuEp0Q=
shylinux.com/x/websocket v0.0.4 h1:AJpwblePoOpiE6C8NrvgNYpKTotXMLrDDX2chTvx44Q=
shylinux.com/x/websocket v0.0.4/go.mod h1:3UGWkjTu3ie5NAZen7J+uLPBrO7DFeKloj6Jxo13Oiw=
tinygo.org/x/bluetooth v0.10.0/go.mod h1:t/Vm2a/rslsBoqFQKCBsWQw/cmRicQq+8Tl3tj5RCRI=
tinygo.org/x/drivers v0.14.0/go.mod h1:uT2svMq3EpBZpKkGO+NQHjxjGf1f42ra4OnMMwQL2aI=
tinygo.org/x/drivers v0.15.1/go.mod h1:uT2svMq3EpBZpKkGO+NQHjxjGf1f42ra4OnMMwQL2aI=
tinygo.org/x/drivers v0.16.0/go.mod h1:uT2svMq3EpBZpKkGO+NQHjxjGf1f42ra4OnMMwQL2aI=
tinygo.org/x/drivers v0.19.0/go.mod h1:uJD/l1qWzxzLx+vcxaW0eY464N5RAgFi1zTVzASFdqI=
tinygo.org/x/drivers v0.25.0/go.mod h1:v+mXaA4cgpz/YZJ3ZPm/86bYQJAXTaYtMkHlVwbodbw=
tinygo.org/x/drivers v0.26.1-0.20230922160320-ed51435c2ef6/go.mod h1:X7utcg3yfFUFuKLOMTZD56eztXMjpkcf8OHldfTBsjw=
tinygo.org/x/tinyfont v0.2.1/go.mod h1:eLqnYSrFRjt5STxWaMeOWJTzrKhXqpWw7nU3bPfKOAM=
tinygo.org/x/tinyfont v0.3.0/go.mod h1:+TV5q0KpwSGRWnN+ITijsIhrWYJkoUCp9MYELjKpAXk=
tinygo.org/x/tinyfont v0.4.0/go.mod h1:7nVj3j3geqBoPDzpFukAhF1C8AP9YocMsZy0HSAcGCA=
tinygo.org/x/tinyfs v0.1.0/go.mod h1:ysc8Y92iHfhTXeyEM9+c7zviUQ4fN9UCFgSOFfMWv20=
tinygo.org/x/tinyterm v0.1.0/go.mod h1:/DDhNnGwNF2/tNgHywvyZuCGnbH3ov49Z/6e8LPLRR4=
tinygo.org/x/tinyterm v0.3.0/go.mod h1:F1pQjxEwNZQIc5czeJSBtk57ucEvbR4u7vHaLhWhHtg=

View File

@ -1,7 +1,7 @@
spark project "云时代的新型操作系统,既要完全自给自足,又要任意互联互通" `
<b>用户场景:</b>管理用户场景,如居住场所、办公场所。
<b>认证授权:</b>认证与授权,平台、城市、公司、服务、个人。
<b>约号系统:</b>约号系统。
<b>活动组织:</b>活动组织。
<b>用户场景:</b>
<b>认证授权:</b>
<b>约号系统:</b>
<b>活动组织:</b>
`
spark product

11
src/document/index.shy Normal file
View File

@ -0,0 +1,11 @@
navmenu `
"{{ .Title }}" /
_
"下 载" download/
"文 档" started/
"开 发" development/
_
"应 用" "https://web.shylinux.com/s/20240724-community"
"源 码" "https://git.shylinux.com/web/community"
"社 区" "https://bbs.shylinux.com"
`

View File

@ -0,0 +1,2 @@
$output div.item.card div.title span.role { margin-left:auto; }
$output div.item.card div.title div.action { top:24px; }

View File

@ -19,8 +19,7 @@ type allow struct {
func (s allow) Create(m *ice.Message, arg ...string) {
s.Insert(m.Spawn(), arg...)
s.GetCommandUID(m)
s.SendMessage(m, m.Option(model.FROM_USER_UID), "")
s.SendMessage(s.GetCommandUID(m), m.Option(model.FROM_USER_UID), "")
s.SendTemplate(m, "", "", m.Trans("please allow", "权限审批 请处理"))
}
func (s allow) List(m *ice.Message, arg ...string) {
@ -30,13 +29,15 @@ func (s allow) List(m *ice.Message, arg ...string) {
s.AS(s.Key(s, model.UID), model.ALLOW_UID), model.ALLOW_STATUS,
)
if len(arg) == 1 {
s.Select(m, s.Key(s, model.PLACE_UID), arg[0], s.Key(s, model.USER_UID), m.Option(model.USER_UID)).Action()
// s.Select(m, s.Key(s, model.PLACE_UID), arg[0], s.Key(s, model.USER_UID), m.Option(model.USER_UID)).Action()
s.Select(m, s.Key(s, model.PLACE_UID), arg[0]).Action()
if m.Length() == 0 {
m.Cmdy(s.Prefix(m, qrcode{}), qrcode{}.ApplyQRCode, arg[0]).SetAppend().Action()
return
}
} else if len(arg) == 2 {
s.SelectDetail(m, s.Key(s, model.PLACE_UID), arg[0], s.Key(s, model.USER_UID), m.Option(model.USER_UID), s.Key(s.apply, model.UID), arg[1])
// s.SelectDetail(m, s.Key(s, model.PLACE_UID), arg[0], s.Key(s, model.USER_UID), m.Option(model.USER_UID), s.Key(s.apply, model.UID), arg[1])
s.SelectDetail(m, s.Key(s, model.PLACE_UID), arg[0], s.Key(s.apply, model.UID), arg[1])
m.Table(func(value ice.Maps) {
if AllowStatus(kit.Int(value[model.ALLOW_STATUS])) != AllowCreate {
s.DoneMessage(m)
@ -53,7 +54,7 @@ func (s allow) List(m *ice.Message, arg ...string) {
}
})
s.SelectJoinUser(m)
s.DisplayBase(m, "")
s.DisplayBase(m, "").DisplayCSS("")
}
func (s allow) Reject(m *ice.Message, arg ...string) {
s.process(m, AllowCreate, AllowRejected, "❌", m.Trans("allow rejected", "权限审批 已驳回"))
@ -73,10 +74,15 @@ func (s allow) process(m *ice.Message, from, to AllowStatus, icon string, title
s.DoneMessage(m)
}
func (s allow) changeStatus(m *ice.Message, from, to AllowStatus, arg ...string) *ice.Message {
msg := s.Select(m.Spawn(), model.UID, m.Option(model.ALLOW_UID), model.USER_UID, m.Option(model.USER_UID))
// msg := s.Select(m.Spawn(), model.UID, m.Option(model.ALLOW_UID), model.USER_UID, m.Option(model.USER_UID))
args := []string{model.UID, m.Option(model.ALLOW_UID), model.USER_UID, m.Option(model.USER_UID)}
if s.IsLeader(m) {
args = []string{model.UID, m.Option(model.ALLOW_UID)}
}
msg := s.Select(m.Spawn(), args...)
if !m.WarnNotFound(msg.Length() == 0, m.Option(model.ALLOW_UID)) {
if status := AllowStatus(kit.Int(msg.Append(model.STATUS))); !m.WarnNotValid(status != from, status.String()) {
s.Update(m, kit.Dict(model.STATUS, to), model.UID, m.Option(model.ALLOW_UID), model.USER_UID, m.Option(model.USER_UID))
s.Update(m.Spawn(), kit.Dict(model.STATUS, to), args...)
}
}
return msg

BIN
src/gonganxitong/allow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -32,8 +32,7 @@ func (s apply) Create(m *ice.Message, arg ...string) {
}
func (s apply) List(m *ice.Message, arg ...string) {
s.FieldsWithCreatedAT(m, s, model.USER_UID, model.APPLY_STATUS,
s.AS(s.Key(s, model.ROLE), s.Keys(s.UserPlace, model.ROLE)), model.BEGIN_TIME, model.END_TIME,
)
s.AS(s.Key(s, model.ROLE), s.Keys(s.UserPlace, model.ROLE)), model.BEGIN_TIME, model.END_TIME)
if len(arg) == 1 {
s.Select(m, model.PLACE_UID, arg[0], model.USER_UID, m.Option(model.USER_UID))
if m.Length() == 0 {
@ -59,6 +58,20 @@ func (s apply) List(m *ice.Message, arg ...string) {
func (s apply) Cancel(m *ice.Message, arg ...string) {
s.changeStatus(m, ApplyCreate, ApplyCancel)
}
func (s apply) ApplyCreate(m *ice.Message, arg ...string) {
m.Option(model.UID, m.Cmdy("", s.Create, s.Keys(s.UserPlace, model.ROLE), "3").Result())
m.Cmdy("", s.Submit)
}
func (s Table) ApplyCreate(m *ice.Message, arg ...string) {
m.Cmdy(s.Prefix(m, apply{}), s.ApplyCreate)
}
func (s Table) ApplyCheck(m *ice.Message, arg ...string) {
if m.Cmd(s.Prefix(m, apply{}), arg[0]).Length() == 0 {
m.EchoInfoButton("请申请加入团队", s.ApplyCreate)
} else {
m.Echo("\n「权限申请」已提交\n请等待「管理员」审批\n然后刷新界面查看最新状态")
}
}
func (s apply) Submit(m *ice.Message, arg ...string) {
msg := s.changeStatus(m, ApplyCreate, ApplySubmit)
if m.WarnNotValid(msg.IsErr()) {

BIN
src/gonganxitong/apply.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -71,7 +71,7 @@ func (s command) Cache(m *ice.Message, arg ...string) {
func (s command) List(m *ice.Message, arg ...string) *ice.Message {
s.Tables(m, s.service).Fields(m, s.Key(s, model.UPDATED_AT),
s.Key(s, model.INDEX), s.AS(s.Key(s.service, "`"+model.INDEX+"`"), model.PORTAL), s.AS(model.NODENAME, model.SPACE),
).Orders(m, "`space`,`commands`.`index`").Limit(m, 300).Select(m).Action(s.Cache, s.Autogen)
).Orders(m, "`space`,`commands`.`index`").Limit(m, 3000).Select(m).Action(s.Cache, s.Autogen)
return m
}

View File

@ -37,26 +37,35 @@ type Container interface {
type Table struct {
db.Table
UserPlace UserPlacer
Place Placer
Street Container
STREET_UID string
PLACE_UID string
checkRole string `name:"checkRole role"`
inputs string `name:"inputs" role:"void"`
list string `name:"list place_uid uid auto" role:"void"`
marketInsert string `name:"marketInsert domain_uid* title* content" role:"leader"`
memberList string `name:"memberList" role:"void"`
noticeList string `name:"noticeList" role:"void"`
UserPlace UserPlacer
Place Placer
Street Container
STREET_UID string
PLACE_UID string
checkRole string `name:"checkRole role"`
inputs string `name:"inputs" role:"void"`
list string `name:"list place_uid uid auto" role:"void"`
marketInsert string `name:"marketInsert domain_uid* title* content" style:"notice" role:"leader"`
pushPublic string `name:"pushPublic domain_uid* title* content" role:"leader"`
memberList string `name:"memberList" role:"void"`
noticeList string `name:"noticeList" role:"void"`
marketPlaceInfo string `name:"marketPlaceInfo" role:"void"`
messagePlaceInfo string `name:"messagePlaceInfo" role:"void"`
// applyCreate string `name:"applyCreate" role:"void"`
}
func (s Table) LoadTrans(m *ice.Message, arg ...string) {
// m.Option("_iconslib", "https://img.icons8.com/officel/80/")
p := kit.FileLine(1, 100)
if m.PrefixKey() != api.GONGANXITONG_PORTAL {
ice.LoadTrans(m.Spawn(kit.Dict("_template", path.Join(path.Dir(p), "portal.json"))).Message, m.CommandKey(), m.GetCommand().Command)
}
h := ctx.GetCmdFile(m.Message, m.PrefixKey())
kit.If(strings.HasPrefix(h, "/p/src/"), func() { h = strings.TrimPrefix(h, "/p/") })
nfs.Exists(m.Message, kit.ExtChange(h, "png"), func(p string) {
cmd := m.Target().Commands[m.CommandKey()]
cmd.Icon = m.Resource(p)
})
if path.Dir(h) != path.Dir(p) && m.CommandKey() != web.PORTAL {
ice.LoadTrans(m.Spawn(kit.Dict("_template", path.Join(path.Dir(h), "portal.json"))).Message, m.CommandKey(), m.GetCommand().Command)
}
@ -82,10 +91,19 @@ func (s Table) Inputs(m *ice.Message, arg ...string) {
s.InputsList(m, PlaceTypeList, arg...)
case model.DOMAIN_UID:
s.AutoCmdy(m, api.GONGANXITONG_DOMAIN).DisplayInputKeyNameIconTitle()
case model.FROM_USER_UID, model.TO_USER_UID:
m.Cmdy(s.Prefix(m, member{}), m.Option(model.PLACE_UID)).Cut(model.USER_UID, model.USER_NAME, model.USER_AVATAR)
m.RenameAppend(model.USER_UID, arg[0], model.NAME, model.USER_NAME, model.USER_AVATAR, mdb.ICONS)
m.DisplayInputKeyNameIconTitle()
default:
s.Table.Inputs(m, arg...)
}
}
func (s Table) InputsUID(m *ice.Message, arg []string, target ice.Any, args ...string) {
s.Fields(m, model.UID, model.TITLE)
m.Cmdy(target, s.Select, args).RenameAppend(model.UID, arg[0])
m.DisplayInputKeyNameIconTitle()
}
func (s Table) InputsList(m *ice.Message, list ice.Any, arg ...string) {
it := reflect.ValueOf(list).MapRange()
for it.Next() {
@ -119,6 +137,7 @@ func (s Table) InputsListValue(m *ice.Message, list ice.Any, key string) string
return ""
}
func (s Table) TransPrice(m *ice.Message, arg []string, field ...string) []string {
kit.If(len(field) == 0, func() { field = append(field, "price", "amount") })
for i := 0; i < len(arg)-1; i += 2 {
if kit.IndexOf(field, arg[i]) > -1 {
arg[i+1] = kit.Format(kit.Int(kit.Float(arg[i+1]) * 100))
@ -134,6 +153,7 @@ func (s Table) ValueModel(m *ice.Message, action ice.Any, arg ...string) *ice.Me
return m.Options(arg).Cmdy(s.PrefixPortal(m), action, arg)
}
func (s Table) ValueCreate(m *ice.Message, arg ...string) {
s.TransPrice(m, arg)
s.ValueModel(m, s.ValueCreate, arg...)
s.RecordEventWithName(m, "")
s.UserPlaceInit(m)
@ -143,6 +163,7 @@ func (s Table) ValueRemove(m *ice.Message, arg ...string) {
s.RecordEventWithName(m, "")
}
func (s Table) ValueModify(m *ice.Message, arg ...string) {
s.TransPrice(m, arg)
s.ValueModel(m, s.ValueModify, arg...)
s.RecordEventWithName(m, "")
}
@ -153,16 +174,12 @@ func (s Table) ValueList(m *ice.Message, arg []string, fields ...ice.Any) *ice.M
}
if s.ValueModel(m, s.ValueList, arg...); len(arg) == 1 {
s.UserPlaceInit(m)
if s.IsLeader(m) {
s.Button(m, "")
} else {
if m.Length() == 0 {
m.Echo("没有数据")
}
m.Action()
if s.IsWorker(m) {
s.Button(m, "", s.Create)
}
}
return s.SelectJoinUser(m)
return m
// return s.SelectJoinUser(m)
}
func (s Table) Create(m *ice.Message, arg ...string) { s.ValueCreate(m, arg...) }
func (s Table) Remove(m *ice.Message, arg ...string) { s.ValueRemove(m, arg...) }
@ -190,6 +207,9 @@ func (s Table) Select(m *ice.Message, arg ...string) *ice.Message {
kit.If(m.Length() > 0, func() { s.UserPlaceInit(m) })
return m
}
func (s Table) InsertIfNeed(m *ice.Message, arg ...string) {
kit.If(m.Cmd("", s.Select, arg).Length() == 0, func() { m.Cmd("", s.Insert, arg) })
}
func (s Table) InsertOrUpdate(m *ice.Message, arg []string, args ...string) {
if s.Select(m, args...).Length() > 0 {
s.Update(m, arg, args...)
@ -213,7 +233,7 @@ func (s Table) SelectJoinAuth(m *ice.Message, arg ...string) *ice.Message {
return m
}
kit.If(len(arg) == 0, func() {
arg = append(arg, model.NAME, model.INFO, model.AUTH_TYPE, model.AUTH_STATUS, model.AVATAR, model.BACKGROUND, model.DASHBOARD_UID)
arg = append(arg, model.NAME, model.INFO, model.TYPE, model.STATUS, model.AVATAR, model.BACKGROUND, model.DASHBOARD_UID)
})
defer s.SaveBack(m, ice.MSG_USERPOD, ice.MSG_USERROLE)()
return s.SelectJoin(m, s.findSpaceCmd(m, api.RENZHENGSHOUQUAN_AUTH), arg...)
@ -298,7 +318,7 @@ func (s Table) UploadCreate(m *ice.Message, field, uid string, arg ...string) st
}
func (s Table) ChangeStatus(m *ice.Message, place_uid, uid string, from, to int, arg ...string) *ice.Message {
msg := s.ValueList(m.Spawn(), []string{place_uid, uid}, model.STATUS)
if !m.WarnNotValid(msg.Length() == 0 || kit.Int(msg.Append(mdb.STATUS)) != int(from)) {
if !m.WarnNotValid(msg.Length() == 0 || from != kit.Int(msg.Append(mdb.STATUS)), kit.Format("%v != %v", from, kit.Int(msg.Append(mdb.STATUS)))) {
s.Update(m, kit.Dict(mdb.STATUS, to, arg), model.UID, uid)
}
return m
@ -313,6 +333,12 @@ func (s Table) IsVisitor(m *ice.Message) bool {
}
return false
}
func (s Table) IsCreator(m *ice.Message) bool {
if role := kit.Int(m.Option(model.USER_ROLE)); role == 1 {
return true
}
return false
}
func (s Table) IsLeader(m *ice.Message) bool {
if role := kit.Int(m.Option(model.USER_ROLE)); role == 1 || role == 2 {
return true
@ -345,7 +371,9 @@ func (s Table) RecordEventWithName(m *ice.Message, info string, arg ...string) {
info = "✅ " + info
case "placeRemove", mdb.REMOVE:
info = "❌ " + info
case "placeAuth":
case "placeAuth", mdb.MODIFY:
info = "🕑 " + info
default:
info = "🕑 " + info
}
})
@ -402,22 +430,39 @@ func (s Table) DashboardUpdate(m *ice.Message, arg ...string) {
}
m.Cmd(s.Prefix(m, Portal{}), s.DashboardUpdate)
}
func (s Table) MessagePlaceEnter(m *ice.Message, arg ...string) {
m.Cmdy(message{}, "placeEnter", arg)
}
func (s Table) MessagePlaceInfo(m *ice.Message, arg ...string) {
m.Cmdy(message{}, "placeInfo", arg)
}
func (s Table) MarketPlaceEnter(m *ice.Message, arg ...string) {
m.Cmdy(market{}, "placeEnter", arg)
}
func (s Table) MarketPlaceInfo(m *ice.Message, arg ...string) {
m.Cmdy(market{}, "placeInfo", arg)
}
func (s Table) MarketInsert(m *ice.Message, arg ...string) {
m.Cmdy(s.Prefix(m, Portal{}), s.MarketInsert, arg)
}
func (s Table) PushPublic(m *ice.Message, arg ...string) {
m.Cmdy(s.Prefix(m, Portal{}), s.PushPublic, arg)
}
func (s Table) ServiceList(m *ice.Message, arg ...string) *ice.Message {
return m.Cmd(s.Prefix(m, service{}), arg)
}
func (s Table) GetCommandUID(m *ice.Message, arg ...string) {
func (s Table) GetCommandUID(m *ice.Message, arg ...string) *ice.Message {
m.Option(model.COMMAND_UID, CommandUID(m, kit.Select(m.PrefixKey(), arg, 0)))
return m
}
func (s Table) SendMessage(m *ice.Message, from, to string, arg ...string) {
if m.IsErr() {
return
}
kit.If(len(arg) == 0, func() { arg = append(arg, m.Option(model.PLACE_UID), kit.Select(m.Option(model.UID), m.Result())) })
m.Spawn(ice.Maps{db.DB: ""}).Cmd(s.Prefix(m, message{}), s.Create,
model.FROM_USER_UID, kit.Select(m.Option(model.USER_UID), from), model.TO_USER_UID, kit.Select(m.Option(model.USER_UID), to),
m.OptionSimple(model.COMMAND_UID), model.ARGS, kit.Join(arg),
m.OptionSimple(model.COMMAND_UID), model.ARGS, kit.Join(arg), m.OptionSimple(model.TITLE, model.CONTENT),
)
}
func (s Table) DoneMessage(m *ice.Message, arg ...string) {
@ -467,7 +512,8 @@ func (s Table) Display(m *ice.Message, file string) *ice.Message {
}
if m.Template(file) == "" {
if m.CommandKey() == web.PORTAL {
file = m.Resource(path.Join(base, "portal.js"))
// file = m.Resource(path.Join(base, "portal.js"))
file = m.Resource(path.Join(sub, "portal.js"))
} else {
file = m.Resource(path.Join(base, "common.js"))
}
@ -565,12 +611,19 @@ func PortalCmd(portal ice.Any) {
return
}
cmd.RawHand = path.Join(path.Dir(h), name+".go")
what := kit.FileLine(1, 100)
// cmd.Icon = path.Join(path.Dir(what), name) + ".png"
nfs.Exists(ice.Pulse, path.Join(path.Dir(what), name)+".png", func(p string) {
cmd.Icon = "/p/src/gonganxitong/" + name + ".png?pod=20240724-community"
// ice.Pulse.Resource(p)
})
cmd.Actions[ice.CTX_INIT].Hand = icebergs.MergeHand(func(m *icebergs.Message, arg ...string) {
m.Design(mdb.LIST, "", kit.JoinWord(table.Keys(table.Place, model.UID), model.UID, ice.AUTO))
mdb.Config(m, db.DOMAIN, kit.PathName(1))
}, cmd.Actions[ice.CTX_INIT].Hand)
}
cmd("portal", portal)
cmd("goodslist", goodslist{Table: table})
cmd("quotalist", quotalist{Table: table})
cmd("spendlist", spendlist{Table: table})
@ -579,6 +632,7 @@ func PortalCmd(portal ice.Any) {
cmd("document", document{Table: table})
cmd("contract", contract{Table: table})
cmd("photo", photo{Table: table})
cmd("credit", credit{Tables: tables})
cmd("member", member{Tables: tables})
cmd("setting", setting{Table: table})

View File

@ -25,7 +25,7 @@ func (s credit) List(m *ice.Message, arg ...string) {
m.ProcessField(api.RENZHENGSHOUQUAN_PROFILE, msg.Append(model.AUTH_UID))
return
}
if !s.IsWorker(m) {
if !s.IsLeader(m) {
m.Echo("本服务暂未申请认证")
return
}

BIN
src/gonganxitong/credit.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -8,19 +8,24 @@ import (
type domain struct {
Table
fields string `name:"name,order"`
create string `name:"create name* info" role:"tech"`
remove string `name:"remove" role:"tech"`
list string `name:"list domain_uid auto" role:"void"`
}
func (s domain) Create(m *ice.Message, arg ...string) { s.Insert(m, arg...) }
func (s domain) Modify(m *ice.Message, arg ...string) {
s.Update(m, arg, model.UID, m.Option(model.DOMAIN_UID))
}
func (s domain) Remove(m *ice.Message, arg ...string) {
s.Delete(m.Options(model.UID, m.Option(model.DOMAIN_UID)))
}
func (s domain) List(m *ice.Message, arg ...string) {
s.Fields(m, model.UID, model.NAME)
s.Fields(m, model.UID, model.NAME, "order")
if len(arg) == 0 {
s.Select(m).RenameAppend(model.UID, model.DOMAIN_UID).Action()
m.SortInt("order")
} else if len(arg) == 1 {
s.SelectDetail(m, model.UID, arg[0])
}

BIN
src/gonganxitong/event.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1,6 @@
$output div.item.card div.output div.title {
margin-top:10px;
}
$output div.item.card div.output {
padding:20px 10px;
}

View File

@ -50,7 +50,7 @@ func (s market) List(m *ice.Message, arg ...string) {
s.SelectJoinRecent(m, model.PLACE_UID)
s.SelectJoinUser(m, model.NAME, model.AVATAR, model.AUTH_UID)
s.SelectJoinAuth(m)
s.DisplayBase(m, "")
s.DisplayBase(m, "").DisplayCSS("")
}
func (s market) ThumbToggle(m *ice.Message, arg ...string) {
m.OptionDefault(model.MARKET_UID, m.Option(model.UID))
@ -76,5 +76,21 @@ func (s market) FavorToggle(m *ice.Message, arg ...string) {
func (s market) ShareCreate(m *ice.Message, arg ...string) {
s.AddCount(m, model.SHARE_COUNT, "1")
}
func (s market) PlaceEnter(m *ice.Message, arg ...string) {
// m.ProcessField()
}
func (s market) PlaceInfo(m *ice.Message, arg ...string) {
s.Tables(m, s.command, s.service, s.LeftJoinValue(m, s.thumb, s), s.LeftJoinValue(m, s.favor, s)).FieldsWithCreatedAT(m, s,
s.Key(s, model.USER_UID), model.PLACE_UID, model.SERVICE_NAME, model.TITLE, model.CONTENT,
model.THUMB_COUNT, model.COMMENT_COUNT, model.FAVOR_COUNT, model.SHARE_COUNT, model.THUMB_STATUS, model.FAVOR_STATUS,
s.AS(model.NODENAME, model.SPACE), s.Key(s.command, model.INDEX), model.ARGS,
model.COMMAND_NAME,
)
s.Select(m, s.Key(s, model.UID), m.Option(model.MARKET_UID))
s.SelectJoinRecent(m, model.PLACE_UID)
s.SelectJoinUser(m, model.NAME, model.AVATAR, model.AUTH_UID)
s.SelectJoinAuth(m)
m.PushAction(s.MarketPlaceEnter)
}
func init() { ice.TeamCtxCmd(market{Table: newTable()}) }

View File

@ -5,7 +5,7 @@ Volcanos(chat.ONIMPORT, {
can.onmotion.select(can, can.ui.tabs, html.DIV_ITEM, event.target), can.run(event, [], function(msg) { can.onimport._data(can, msg) })
}}])
can.page.Append(can, can.ui.tabs, msg.Table(function(value) {
return {view: [[html.ITEM, value.uid == domain_uid? html.SELECT: ""], "", value.name], onclick: function(event) { can.misc.Cookie(can, "domain_uid", value.uid)
return {view: [[html.ITEM, value.domain_uid == domain_uid? html.SELECT: ""], "", value.name], onclick: function(event) { can.misc.Cookie(can, "domain_uid", value.domain_uid)
can.onmotion.select(can, can.ui.tabs, html.DIV_ITEM, event.target), can.run(event, [], function(msg) { can.onimport._data(can, msg) })
}}
}))
@ -17,13 +17,12 @@ Volcanos(chat.ONIMPORT, {
{text: [value.user_name, "", aaa.USERNAME]}, can.onimport.authView(can, value), can.onimport.timeView(can, value),
]},
{view: html.STATUS, list: [
// {text: [value.city_name, "", "city"]},
{text: [value.city_name, "", "city"]},
{text: [value.street_name, "", "street"]},
{text: [value.place_name, "", "place"]},
{text: [value.command_name, "", "command"]},
// {text: [value.service_name.split(" ")[0], "", "service"]},
{text: [value.service_name, "", "service"]},
]},
{view: html.OUTPUT, list: [value.title]},
{view: html.TITLE, list: [value.command_name, value.title]},
{view: html.OUTPUT, list: [value.content]},
{view: html.ACTION, list: [
{view: html.ITEM, list: [{icon: "bi bi-hand-thumbs-up"}, {text: value.thumb_count||"点赞"}], onclick: function(event) {

View File

@ -29,7 +29,7 @@ func (s meeting) Enter(m *ice.Message, arg ...string) { m.ProcessOpen(m.Option(
func (s meeting) List(m *ice.Message, arg ...string) {
if s.cmdy(m, s.MeetingList, arg[1:]...); m.Length() > 0 {
if len(arg) == 1 {
m.PushAction(s.Enter, s.Modify, s.Cancel).Action(s.Create).Display("")
m.PushAction(s.Enter, s.Modify, s.Cancel).Action(s.Create).Display("").DisplayCSS("")
s.SpendlistCheck(m, 0)
} else if m.IsMobileUA() {
m.EchoQRCode(m.Append(model.LINK)).Display("").DisplayCSS("")

View File

@ -1 +1,2 @@
$output>div.item.myself div.title span { font-weight:bold; }
$output>div.item.myself div.title span { font-weight:bold; }
$output>div.item.card div.title span.role { margin-left:auto; }

View File

@ -2,6 +2,7 @@ package gonganxitong
import (
"shylinux.com/x/ice"
"shylinux.com/x/icebergs/base/web/html"
kit "shylinux.com/x/toolkits"
"shylinux.com/x/community/src/gonganxitong/model"
@ -15,25 +16,44 @@ type member struct {
remove string `name:"remove" role:"void"`
enable string `name:"enable" role:"void"`
disable string `name:"disable" role:"void"`
promote string `name:"promote" role:"void"`
demote string `name:"demote" role:"void"`
}
func (s member) Remove(m *ice.Message, arg ...string) {
if s.IsLeader(m) {
m.Cmdy(s.UserPlace, s.Delete, s.option(m))
}
}
func (s member) Enable(m *ice.Message, arg ...string) {
if s.IsLeader(m) {
m.Cmdy(s.UserPlace, s.UpdateField, model.STATUS, MemberNormal, s.option(m))
m.Cmdy(s.UserPlace, s.Delete, s.option(m, model.ROLE, kit.Format(UserPlaceTenant), model.STATUS, kit.Format(MemberDisabled)))
s.recordEvent(m, "❌", m.Trans("remove member", "删除成员"), html.DANGER)
}
}
func (s member) Disable(m *ice.Message, arg ...string) {
if s.IsLeader(m) {
m.Cmdy(s.UserPlace, s.UpdateField, model.STATUS, MemberDisabled, s.option(m))
m.Cmdy(s.UserPlace, s.UpdateField, model.STATUS, MemberDisabled, s.option(m, model.ROLE, kit.Format(UserPlaceTenant)))
s.recordEvent(m, "❌", m.Trans("disable member", "禁用成员"), html.DANGER)
}
}
func (s member) Demote(m *ice.Message, arg ...string) {
if s.IsCreator(m) {
m.Cmdy(s.UserPlace, s.UpdateField, model.ROLE, kit.Format(UserPlaceTenant), s.option(m))
s.recordEvent(m, "❌", m.Trans("demote worker", "降级成为工作人员"), html.DANGER)
}
}
func (s member) Promote(m *ice.Message, arg ...string) {
if s.IsCreator(m) {
m.Cmdy(s.UserPlace, s.UpdateField, model.ROLE, kit.Format(UserPlaceLandlord), s.option(m))
s.recordEvent(m, "✅", m.Trans("promote leader", "升级成为管理人员"), html.NOTICE)
}
}
func (s member) Enable(m *ice.Message, arg ...string) {
if s.IsLeader(m) {
m.Cmdy(s.UserPlace, s.UpdateField, model.STATUS, MemberNormal, s.option(m, model.ROLE, kit.Format(UserPlaceTenant)))
s.recordEvent(m, "✅", m.Trans("enable member", "启用成员"), html.NOTICE)
}
}
func (s member) List(m *ice.Message, arg ...string) {
user_uid, isLeader := m.Option(model.USER_UID), s.IsLeader(m)
USER_PLACE_ROLE := s.Keys(s.UserPlace, model.ROLE)
s.Limit(m, 1000)
user_uid, isLeader, isCreator := m.Option(model.USER_UID), s.IsLeader(m), s.IsCreator(m)
s.FieldsWithCreatedAT(m, s.UserPlace, model.USER_UID, s.Keys(s.UserPlace, model.ROLE), s.AS(s.Key(s.UserPlace, model.STATUS), model.MEMBER_STATUS))
if len(arg) == 1 {
m.Cmdy(s.UserPlace, s.Select, s.Keys(s.Place, model.UID), arg[0]).Action()
@ -42,6 +62,7 @@ func (s member) List(m *ice.Message, arg ...string) {
} else {
return
}
defer m.Sort(kit.Fields(model.MEMBER_STATUS, USER_PLACE_ROLE, model.CREATED_AT))
m.Table(func(value ice.Maps) {
if !m.FieldsIsDetail() {
if user_uid == value[model.USER_UID] {
@ -50,29 +71,47 @@ func (s member) List(m *ice.Message, arg ...string) {
m.Push("who", "")
}
}
if isLeader {
if user_uid == value[model.USER_UID] {
m.PushButton()
} else {
if MemberStatus(kit.Int(value[model.MEMBER_STATUS])) == MemberNormal {
m.PushButton(s.Disable)
} else {
m.PushButton(s.Enable, s.Remove)
button := []ice.Any{}
if MemberStatus(kit.Int(value[model.MEMBER_STATUS])) == MemberNormal {
if isCreator {
switch kit.Int(value[USER_PLACE_ROLE]) {
case 2:
button = append(button, s.Demote)
case 3:
button = append(button, s.Promote)
}
}
if isLeader {
switch kit.Int(value[USER_PLACE_ROLE]) {
case 3:
button = append(button, s.Disable)
}
}
} else {
m.PushButton()
if isCreator {
button = append(button, s.Enable, s.Remove)
} else if isLeader {
switch kit.Int(value[USER_PLACE_ROLE]) {
case 3:
button = append(button, s.Enable, s.Remove)
}
}
}
m.PushButton(button...)
})
s.SelectJoinUser(m, model.NAME, model.INFO, model.AVATAR, model.AUTH_UID)
s.SelectJoinAuth(m)
s.DisplayBase(m, "").DisplayCSS("")
m.Echo("count: %d", m.Length())
}
func init() { ice.TeamCtxCmd(member{Tables: newTables()}) }
func (s member) option(m *ice.Message, arg ...string) []string {
return m.OptionSimple(s.Keys(s.Place, model.UID), model.UID)
return kit.Simple(m.OptionSimple(s.Keys(s.Place, model.UID), model.UID), arg)
}
func (s member) recordEvent(m *ice.Message, icon, title, style string, arg ...string) {
s.RecordEvent(m, kit.JoinWord(icon, title, kit.Cut(m.Option(model.UID), 6), s.TransRole(m, "", style), m.Option(model.USER_NAME)), m.Option(model.UID))
}
type MemberStatus int

View File

@ -6,9 +6,10 @@ Volcanos(chat.ONIMPORT, {
{view: html.TITLE, list: [value.user_name,
can.onimport.authView(can, value), can.onimport.textView(can, value, USER_PLACE_ROLE),
value.member_status != "normal" && can.onimport.textView(can, value, "member_status"),
can.onimport.titleAction(can, value),
// can.onimport.titleAction(can, value),
]},
{view: html.STATUS, list: [value.user_info]},
can.onimport.titleAction(can, value),
]
})
},

BIN
src/gonganxitong/member.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@ -35,6 +35,7 @@ func (s message) List(m *ice.Message, arg ...string) {
model.FROM_USER_UID, model.COMMAND_NAME, model.MESSAGE_STATUS, model.SCORE,
model.PLACE_UID, model.SERVICE_NAME,
s.AS(model.NODENAME, model.SPACE), s.Key(s.command, model.INDEX), model.ARGS,
model.TITLE, model.CONTENT,
)
if len(arg) < 2 {
args := []string{model.TO_USER_UID, m.Option(model.USER_UID)}
@ -63,8 +64,19 @@ func (s message) List(m *ice.Message, arg ...string) {
}).Action()
m.RenameAppend(model.FROM_USER_UID, model.USER_UID)
s.SelectJoinRecent(m, model.PLACE_UID)
s.SelectJoinUser(m)
// s.SelectJoinUser(m)
s.DisplayBase(m, "")
msg := m.Spawn()
s.Fields(msg, "status, count(*) AS count").Groups(msg, model.STATUS).Orders(msg, model.STATUS)
s.Select(msg, args...).Table(func(value ice.Maps) {
switch status := kit.Int(value[model.STATUS]); m.CommandKey() {
default:
m.Echo(MessageStatus(status).String()).Echo(": ")
m.Echo(value[model.COUNT]).Echo("\n")
}
})
} else if len(arg) == 2 {
msg := s.SelectDetail(m.Spawn(), model.TO_USER_UID, m.Option(model.USER_UID), s.Key(s, model.UID), arg[1])
s.ProcessPodCmd(m, msg, model.MESSAGE_UID, arg[1])
@ -85,6 +97,23 @@ func (s message) Sticky(m *ice.Message, arg ...string) {
func (s message) UnSticky(m *ice.Message, arg ...string) {
s.update(m, ice.Map{model.SCORE: 0})
}
func (s message) PlaceEnter(m *ice.Message, arg ...string) {
// m.ProcessField()
}
func (s message) PlaceInfo(m *ice.Message, arg ...string) {
s.Tables(m, s.command, s.service).FieldsWithCreatedAT(m, s,
model.FROM_USER_UID, model.COMMAND_NAME, model.MESSAGE_STATUS, model.SCORE,
model.PLACE_UID, model.SERVICE_NAME,
s.AS(model.NODENAME, model.SPACE), s.Key(s.command, model.INDEX), model.ARGS,
model.TITLE, model.CONTENT,
)
s.Select(m, s.Key(s, model.UID), m.Option(model.MESSAGE_UID))
m.RenameAppend(model.FROM_USER_UID, model.USER_UID)
s.SelectJoinRecent(m, model.PLACE_UID)
s.SelectJoinUser(m, model.NAME, model.AVATAR, model.AUTH_UID)
s.SelectJoinAuth(m)
m.PushAction(s.MessagePlaceEnter)
}
func init() { ice.TeamCtxCmd(message{Table: newTable()}) }

View File

@ -5,10 +5,15 @@ Volcanos(chat.ONIMPORT, {
can.onimport.myView(can, msg, function(value) { var args = can.core.Split(value.args)
value.icons = value.user_avatar||value.icons; if (value.score > 0) { value._style = ["sticky"] }
return [
{view: html.TITLE, list: [value.place_name, value.command_name, value.detail||(args[1]||"").slice(0, 6), can.onimport.textView(can, value)]},
{view: html.STATUS, list: [value.city_name, value.street_name, value.service_name]},
{view: html.STATUS, list: [can.onimport.timeView(can, value), value.user_name]},
value.info && {view: html.OUTPUT, list: [value.info]},
{view: html.TITLE, list: [
value.command_name, value.title, can.onimport.textView(can, value),
]},
{view: html.STATUS, list: [
value.detail||(args[1]||"").slice(0, 6),
can.onimport.timeView(can, value), value.user_name,
]},
{view: html.STATUS, list: [value.city_name, value.street_name, value.place_name, value.service_name]},
{view: html.OUTPUT, list: [value.content]},
]
})
},

View File

@ -163,6 +163,19 @@ type Goodslist struct {
Amount int `gorm:"default:0"`
ExpireTime db.Time
}
type Paymentlist struct {
db.ModelWithUID
PlaceUID string `gorm:"type:char(32);index"`
UserUID string `gorm:"type:char(32)"`
GoodslistUID string `gorm:"type:char(32)"`
VendorUID string `gorm:"type:char(32)"`
Vendor string `gorm:"type:varchar(128)"`
Title string `gorm:"type:varchar(128)"`
Content string `gorm:"type:varchar(128)"`
Amount int32 `gorm:"default:0"`
Status uint8 `gorm:"default:0"`
Type uint8 `gorm:"default:0"`
}
type Quotalist struct {
db.ModelWithUID
PlaceUID string `gorm:"type:char(32);index"`
@ -184,19 +197,6 @@ type Spendlist struct {
Count int `gorm:"default:0"`
ExpireTime db.Time
}
type Paymentlist struct {
db.ModelWithUID
PlaceUID string `gorm:"type:char(32);index"`
UserUID string `gorm:"type:char(32)"`
GoodslistUID string `gorm:"type:char(32)"`
VendorUID string `gorm:"type:char(32)"`
Vendor string `gorm:"type:varchar(128)"`
Title string `gorm:"type:varchar(128)"`
Content string `gorm:"type:varchar(128)"`
Amount int32 `gorm:"default:0"`
Status uint8 `gorm:"default:0"`
Type uint8 `gorm:"default:0"`
}
type Meeting struct {
db.ModelWithUID
PlaceUID string `gorm:"type:char(32);index"`
@ -225,6 +225,7 @@ type Photo struct {
Vendor string `gorm:"type:varchar(128)"`
ExpireTime db.Time
}
type Setting struct {
db.ModelWithUID
PlaceUID string `gorm:"type:char(32);index"`
@ -232,7 +233,6 @@ type Setting struct {
Name string `gorm:"type:varchar(64)"`
Value string `gorm:"type:varchar(255)"`
}
type Apply struct {
db.ModelWithUID
PlaceUID string `gorm:"type:char(32);index:idx_place"`
@ -260,15 +260,16 @@ type Notice struct {
PlaceUID string `gorm:"type:char(32);index"`
UserUID string `gorm:"type:char(32)"`
}
type Domain struct {
db.ModelNameInfo
Order int `gorm:"default:0"`
}
type Market struct {
db.ModelContent
DomainUID string `gorm:"type:char(32);index"`
PlaceUID string `gorm:"type:char(32)"`
UserUID string `gorm:"type:char(32)"`
CommandUID string `gorm:"type:char(32)"`
PlaceUID string `gorm:"type:char(32)"`
Args string `gorm:"type:varchar(128)"`
ThumbCount int `gorm:"default:0"`
CommentCount int `gorm:"default:0"`
@ -302,11 +303,11 @@ type Command struct {
Icon string `gorm:"type:varchar(128)"`
}
type Message struct {
db.ModelWithUID
PlaceUID string `gorm:"type:char(32)"`
db.ModelContent
FromUserUID string `gorm:"type:char(32)"`
ToUserUID string `gorm:"type:char(32);index"`
CommandUID string `gorm:"type:char(32)"`
PlaceUID string `gorm:"type:char(32)"`
Args string `gorm:"type:varchar(128)"`
Status uint `gorm:"default:0"`
Score uint `gorm:"default:0"`
@ -344,9 +345,9 @@ type Support struct {
func init() {
db.CmdModels("",
&Sess{}, &User{}, &UserPlace{}, &Place{}, &Street{}, &City{},
&Paymentlist{}, &Meeting{}, &Document{}, &Contract{}, &Photo{}, &Setting{},
&Goodslist{}, &Quotalist{}, &Spendlist{},
&Apply{}, &Allow{}, &Event{}, &Notice{},
&Goodslist{}, &Paymentlist{}, &Quotalist{}, &Spendlist{},
&Meeting{}, &Document{}, &Contract{}, &Photo{},
&Setting{}, &Apply{}, &Allow{}, &Event{}, &Notice{},
&Domain{}, &Market{}, &Thumb{}, &Comment{}, &Favor{},
&Command{}, &Message{}, &Recent{}, &Service{}, &Support{},
)

View File

@ -41,8 +41,9 @@ func (s notice) List(m *ice.Message, arg ...string) {
return
}
kit.If(s.IsLeader(m), func() {
m.PushAction(s.Remove)
s.Button(m, "")
if m.PushAction(s.Remove); m.Length() == 0 {
s.Button(m, "")
}
}, func() {
m.Action()
})

BIN
src/gonganxitong/notice.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

View File

@ -1,12 +1,13 @@
body.dark { --plugin-bg-color:#0d1117; --output-bg-color:#171a22; }
body.width1.light { --plugin-bg-color:#f4f5f9; --output-bg-color:#fefefd; }
body.width1.light { --plugin-bg-color:#f4f5f9; --output-bg-color:white; }
body.width1.light { --plugin-bg-color:#f3f3f4; --output-bg-color:white; --notice-bg-color:#006fff; }
body.width1 fieldset.Action div.input.float { position:static; }
body.width1 fieldset.Action div.input.float table { width:100%; }
body.width1 div.upload.float div.action { display:flex; }
body.width1 div.upload.float div.action div.item.upload { flex-grow:1; }
body.width1 div.upload.float div.action div.item.upload input { width:100%; }
$body:not(.mobile) { background-color:var(--notice-bg-color); }
$body.dark { --plugin-bg-color:#0d1117; --output-bg-color:#171a22; }
$body.width1.light { --plugin-bg-color:#f4f5f9; --output-bg-color:#fefefd; }
$body.width1.light { --plugin-bg-color:#f4f5f9; --output-bg-color:white; }
$body.width1.light { --plugin-bg-color:#f3f3f4; --output-bg-color:white; --notice-bg-color:#006fff; }
$body.width1 fieldset.Action div.input.float { position:static; }
$body.width1 fieldset.Action div.input.float table { width:100%; }
$body.width1 div.upload.float div.action { display:flex; }
$body.width1 div.upload.float div.action div.item.upload { flex-grow:1; }
$body.width1 div.upload.float div.action div.item.upload input { width:100%; }
$action { background-color:transparent; position:absolute; top:0; width:100%; z-index:1; }
$action div.item { margin-left:10px; margin-right:0; padding:0; height:48px; align-items:center; }
$action div.item.button input { border:none; background-color:var(--plugin-bg-color); color:var(--notice-bg-color); min-width:60px; display:unset; }
@ -15,32 +16,50 @@ $action div.item.button span { display:none; }
$action div.item.button i { display:none; }
$output div.title div.action div.item.notice input { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
$output { background-color:var(--plugin-bg-color); }
$output>div.header { background-image:linear-gradient(var(--notice-bg-color), var(--plugin-bg-color)); height:300px; width:100%; position:absolute; left:0; }
$output>div.header { background-image:linear-gradient(var(--notice-bg-color), var(--plugin-bg-color)); height:240px; width:100%; position:absolute; left:0; }
body.light $output>div.header { background-image:linear-gradient(#dbe7fe, var(--plugin-bg-color)); height:240px; width:100%; position:absolute; left:0; }
// body.light $output>div.header { background-image:url("/p/src/gonganxitong/portal-header.png?pod=20240724-community"); }
$output>div.header img { height:100%; width:100%; object-fit:cover; }
$output div.output>div.code { font-size:16px; position:relative; }
$output table.content.detail thead { display:none; }
$output div.output>div.code img.avatar { border-radius:10px; height:64px !important; width:64px !important; object-fit:cover; position:absolute; top:153px; left:calc(50% - 32px); }
body.width6 $output>div.output>div.code img.avatar { top:183px; }
$output>div.action>div.list { margin:0 10px; }
$output>div>div.code { margin-bottom:240px; display:flex; flex-direction:column; align-items:center; }
$output div.output>div.code { font-size:16px; position:relative; }
$output div.output>div.code img.avatar {
border-radius:10px; object-fit:cover; --qrcode-icon-height:48px;
height:var(--qrcode-icon-height) !important; width:var(--qrcode-icon-height) !important;
position:absolute; top:calc(50% - var(--qrcode-icon-height) / 2 - 16px); left:calc(50% - var(--qrcode-icon-height) / 2);
}
$output>div>div.code { margin-bottom:20px; display:flex; flex-direction:column; align-items:center; }
$output>div>div.list { border-radius:10px; background-color:var(--output-bg-color); padding:10px; margin:10px; }
$output>div>div.list.myplace>div.output { padding:0 10px; max-height:320px; }
$output>div>div.list.myplace>div.output>div.item>div.output div.title span.type { line-height:18px; }
$output>div>div.list.myplace>div.output>div.item>div.output div.title span.role { line-height:18px; }
$output>div>div.list.myplace>div.output>div.item>div.output div.title { margin-bottom:5px; }
$output>div>div.list.mynotice { cursor:pointer; }
$output>div>div.list.mynotice:not(.hide) { display:flex; align-items:center; }
$output>div>div.list.mynotice>span.title { flex-grow:1; margin:0 5px; }
$output>div>div.list.mynotice>span:not(.title) { white-space:pre; }
$output>div>div.list.mynotice>span:first-child { background-color:var(--hover-bg-color); color:var(--notice-bg-color); padding:0 5px; margin-right:5px; }
$output>div>div.list.mynotice>span:last-child { color:gray; }
$output>div>div.list>div.title { font-weight:bold; display:flex; align-items:center; }
$output>div>div.list.mylist>fieldset>div.output { max-height:none !important; }
$output>div>div.list>div.title {
font-weight:bold; display:flex; align-items:center;
border-left:var(--box-notice3); padding-left:10px;
}
body.mobile $output fieldset.story>div.output>div.place_info { min-height:68px; }
body.mobile $output fieldset.story>div.output>div.place_info>div.item>div.output { background-color:var(--plugin-bg-color); }
body.mobile $output fieldset.story>div.output>table.detail tr.user_name { display:none; }
body.mobile $output fieldset.story>div.output>table.detail tr.user_avatar { display:none; }
body.mobile $output fieldset.story>div.output>table.detail tr.created_at { display:none; }
$output>div>div.list.myallow>div.title { border-left:var(--box-danger3); padding-left:10px; }
$output>div>div.list.myorder>div.title { border-left:var(--box-danger3); padding-left:10px; }
$output>div>div.list>div.title span:first-child { flex-grow:1; }
$output>div>div.list>div.title div.action div.item.filter input:focus { width:320px; transition:width 0.5s; }
body.width1 $output>div>div.list>div.title div.action div.item.filter input:focus { width:200px; transition:width 0.5s; }
$output>div>div.list>div.title div.action div.item.filter input { transition:width 0.8s; }
$output>div>div.list>div.title div.action { overflow:hidden; }
$output>div>div.list>div.title div.action div.item { margin-right:5px; }
$output>div>div.list>div.title div.action div.item.button.icons input { display:none; }
$output>div>div.list>div.role:not(.hide) { display:flex; align-items:center; justify-content:space-around; }
$output>div>div.list>div.role span { padding:5px; cursor:pointer; white-space:pre; }
body:not(.mobile) $output>div>div.list>div.role span:hover { background-color:var(--hover-bg-color); }
$output>div>div.list>div.role span:not(.select) { color:gray; }
$output>div>div.list>div.role span.select { border-bottom:var(--box-notice); }
$output>div>div.list>div.role span.creator.select { border-bottom:var(--box-danger); }
@ -50,79 +69,97 @@ $output>div>div.list>div.role span.leader.select { border-bottom:var(--box-dange
$output>div>div.list>div.role span.boss.select { border-bottom:var(--box-danger); }
$output>div>div.list>div.output>div.item.index:not(.hide) { padding:5px 10px; display:flex; flex-direction:column; align-items:center; float:left; }
$output>div>div.list>div.output>div.item.index img { height:36px; width:36px; object-fit:contain; }
$output>div>div.list>div.output>div.item.index i { font-size:22px; padding:5px; }
$output>div>div.list>div.output>div.item.index span { font-size:12px; white-space:pre; max-width:80px; }
$output>div>div.list div.code { text-align:center; }
$output>div>div.list div.code input { background-color:var(--notice-bg-color); color:var(--notice-fg-color); font-size:18px; margin:auto; min-width:200px; display:block; margin-top:10px; }
// $output>div>div.list fieldset.story>div.output { background-color:var(--output-bg-color); }
$output div.head>img { height:200px; width:100%; object-fit:cover; }
$output div.head div.item.card img { border-radius:25px; }
$output div.head>div.item.card div.title div.item.button i { display:none; }
$output div.tabs { height:32px; display:flex; position:unset; }
$output div.tabs span { padding:5px 10px; }
body:not(.mobile) $output div.tabs span:hover { background-color:var(--hover-bg-color); }
$output div.tabs span.select { background-color:var(--output-bg-color); color:var(--hover-fg-color); }
$output div.item.card:not(:last-child) { margin-bottom:2px; }
body:not(.width1) $output div.item.card { flex-direction:row-reverse; }
body:not(.width1) $output div.item.card>div.action { position:static; flex-shrink:0; }
body:not(.width1) $output div.item.card>div.output { flex-grow:1; }
$output div.item.card>div.output>div { width:100%; width:calc(100% - 53px); overflow:hidden; }
$output div.item.card div.title { margin-bottom:5px; width:100%; display:flex; align-items:center; position:relative; }
$output div.item.card div.title span:first-child { word-break:break-all; }
$output div.item.card div.title span.auth { font-size:14px; }
$output div.item.card div.title { width:100%; display:flex; position:relative; }
$output div.item.card div.title span.type { line-height:22px; }
$output div.item.card div.title span.status { line-height:22px; }
$output div.item.card div.title span.price { color:var(--danger-bg-color); margin-left:auto; }
$output div.item.card div.title span.auth { font-size:14px; padding:3px; }
$output div.item.card div.title span.time { position:absolute; right:0; font-size:12px; color:gray; }
$output div.item.card div.title span:first-child { word-break:break-all; }
$output fieldset.story>div.item.card div.title span { line-height:26px; }
// $output div.item.card>div.output>div.container>div.title span { line-height:26px; }
// $output div.item.title { border-left:var(--box-notice3); margin-left:10px; padding:10px; background-color:var(--output-bg-color); }
$output div.item.title { border-left:var(--box-notice3); margin-left:10px; padding:10px; background-color:var(--plugin-bg-color); }
$output div.item.title.dealList { border-left:var(--box-danger3); }
$output div.item.title.meetList { border-left:var(--box-danger3); }
$body div.inputs>div.input.float>div.action { display:flex; }
$output div.item.card div.title div.action input { margin-right:0; }
$output div.item.card div.status span { word-break:break-all; }
$output div.item.card img { border-radius:5px; padding:0; margin:0; margin-right:10px; height:48px; width:48px; min-width:48px; object-fit:cover; }
$output div.item.card div.container img { margin-right:0; height:100%; width:100%; }
$output div.item.card div.container>div.action { position:relative; float:right; }
body:not(.mobile) $output div.item.card div.container>div.action { display:none; }
body.mobile $output div.item.card div.container>div.title>span.status { margin-left:auto; }
$output div.item.card.sticky>div.output { background-color:var(--plugin-bg-color); color:var(--notice-bg-color); }
$action div.item.notice input[type=button] { border:var(--box-notice); color:var(--notice-bg-color); }
body:not(.mobile) $action div.item.notice input[type=button]:hover { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
$action div.item.danger input[type=button] { border:var(--box-danger); color:var(--danger-bg-color); }
$output input.notice[type=button]:not(:hover) { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
$output input.notice[type=button]:hover { border:var(--box-notice); background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
// $output input.notice[type=button]:not(:hover) { border:var(--box-notice); background-color:transparent; color:var(--notice-bg-color); }
$output input.notice[type=button]:not(:hover) { background-color:transparent; color:var(--notice-bg-color); }
$output input.danger[type=button]:not(:hover) { color:var(--danger-bg-color); }
$output input.danger[type=button]:hover { background-color:var(--danger-bg-color); color:var(--danger-fg-color); }
$output input[type=button][name=submit] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
$output span.type { border:none; border-radius:5px; background-color:var(--hover-bg-color); color:var(--notice-bg-color); padding:2px 8px; }
$output span.role { border:none; border-radius:5px; background-color:var(--hover-bg-color); color:var(--notice-bg-color); padding:2px 8px; }
$output span.status { border:none; border-radius:5px; background-color:var(--hover-bg-color); color:var(--notice-bg-color); padding:2px 8px; }
$output span.type { border:none; border-radius:5px; background-color:var(--hover-bg-color); color:var(--notice-bg-color); font-size:var(--status-font-size); line-height:22px; padding:2px 8px; }
$output span.role { border:none; border-radius:5px; background-color:var(--hover-bg-color); color:var(--notice-bg-color); font-size:var(--status-font-size); line-height:22px; padding:2px 8px; }
$output span.level { border:none; border-radius:5px; background-color:var(--hover-bg-color); color:var(--notice-bg-color); font-size:var(--status-font-size); line-height:22px; padding:2px 8px; }
$output span.status { border:none; border-radius:5px; background-color:var(--hover-bg-color); color:var(--notice-bg-color); font-size:var(--status-font-size); line-height:22px; padding:2px 8px; }
$output span.type.danger { color:var(--danger-bg-color); }
$output span.role.danger { color:var(--danger-bg-color); }
$output span.level.danger { color:var(--danger-bg-color); }
$output span.status.danger { color:var(--danger-bg-color); }
$output table.content { background-color:var(--output-bg-color); }
$output table.content td.action input.icons { display:unset; }
$output table.content td.action i { display:none; }
$output table.content.detail thead { display:none; }
$output table.content.detail td.action input { padding:0 10px; min-width:60px; }
// $output table.content.detail td.action input { padding:0 20px; min-width:80px; }
$output table.content.detail tr.action input.icons { display:unset; }
$output table.content.detail tr.action i { display:none; }
$output table.content.detail tr.uid { display:none; }
$output table.content.detail input { border:none; }
$output>div.output>div.code { padding:10px; }
$output>fieldset.story { margin-top:48px; }
$output fieldset.story { box-shadow:none; }
$output fieldset.story>legend { display:none; }
$output fieldset.story>form.option { display:none; }
$output fieldset.story>div.action { display:none; }
$output fieldset.story>div.status { display:none; }
$output fieldset.story>div.output { background-color:var(--plugin-bg-color); }
$output>fieldset.story>div.output { background-color:var(--plugin-bg-color); }
$output fieldset.story>div.output div.code { padding:0; }
$output fieldset.story>div.output table.content td { box-shadow:none; }
$output fieldset.story>div.output table.content.detail td:last-child { text-align:left; }
$output fieldset.story>div.output table.content td img { max-width:100%; }
$output fieldset.story>div.output table.content tr.icon td img { max-height:128px; max-width:128px; }
$output fieldset.story>div.output table.content tr.user_avatar td img { max-height:128px; max-width:128px; }
$output fieldset.story>div.output table.content tr.auth_avatar td img { max-height:128px; max-width:128px; }
$output fieldset.story>div.output>div.code { text-align:center; }
$output fieldset.story>div.output>div.code { display:flex; flex-direction:column; row-gap:10px; }
$output fieldset.story>div.output>div.code>img { display:block; margin:auto; width:100%; max-width:390px; }
// $output fieldset.story>div.output>div.code>input[type=button] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); margin-right:10px; float:right; }
$output fieldset.story>div.output>div.code { display:flex; flex-direction:column; row-gap:10px; margin-top:20px; margin-bottom:20px; }
$output fieldset.story>div.output>div.code>img { display:block; margin:auto; width:100%; max-width:320px; }
$output fieldset.story>div.output>div.code>input[type=button] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); float:right; }
body:not(.mobile) $output fieldset.story>div.output>div.code>input[type=button]:hover { border:var(--box-notice); background-color:transparent; color:var(--notice-bg-color); }
$output fieldset.story>div.output>div.code>input[type=button].danger { border:var(--box-danger); background-color:transparent; color:var(--danger-bg-color); }
$output fieldset.story>div.output>div.code div.item.button { margin-top:20px; }
$output fieldset.story>div.output>div.code div.item.button input[type=button] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); font-size:18px; min-width:240px; height:36px; }
$output fieldset.story>div.output>div.code div.item.button input[type=button][name=cancel] { border:var(--box-border); background-color:var(--danger-bg-color); color:var(--danger-fg-color); }
$output fieldset.story>div.output>div.code div.item.button.danger input[type=button] { background-color:var(--danger-bg-color); color:var(--danger-fg-color); }
$output>fieldset.story>div.output div.item.card>div.output { padding:10px; width:100%; }
$output>fieldset.story>div.output div.item.card.loaded>div.output { background-color:var(--plugin-bg-color); }
$output>fieldset.story>div.output div.item.card>div.output div.output { padding:5px 0; white-space:pre-line; }
$output fieldset.story.form>div.output>div.code>input[type=button] { font-size:18px; margin:10px; height:36px; }
$output>fieldset.story.web.team.renzhengshouquan.profile { margin-top:0; }
$output>fieldset.story.web.team.credit { margin-top:0; }
$output>fieldset.story.web.team.credit>div.output>div.code { margin-top:32px; }
$output>fieldset.story.web.team.credit>div.output>div.code { margin-top:64px; }
$output>fieldset.message div.tabs span.select { border-top:var(--box-border); }
$output>fieldset.message div.tabs span.create.select { border-top:var(--box-danger); }
$output>fieldset.message div.tabs span.read.select { border-top:var(--box-notice); }
@ -131,27 +168,34 @@ $output>fieldset.market>div.output>div.tabs { display:flex; width:100%; overflow
$output>fieldset.market>div.output>div.tabs>div.item { padding:5px 10px; float:left; white-space:pre; }
$output>fieldset.market>div.output>div.tabs>div.item.select { border-top:var(--box-danger); background-color:var(--output-bg-color); color:var(--danger-bg-color); font-weight:bold; position:sticky; left:0; right:0; }
$output>fieldset.market>div.output>div.list div.item.card img { border-radius:50%; height:40px; width:40px; min-width:40px; }
$output>fieldset.market>div.output>div.list div.item.card div.status { font-size:14px; }
$output>fieldset.market>div.output>div.list div.item.card div.status { font-size:12px; }
$output>fieldset.market>div.output>div.list div.item.card div.status>span.username { color:var(--body-fg-color); font-size:14px; }
$output>fieldset.market>div.output>div.list div.item.card div.status>span.time { float:right; }
$output>fieldset.market>div.output>div.list div.item.card div.output div.action { color:gray; font-size:14px; width:100%; max-width:100%; display:flex; justify-content:space-around; position:relative; }
$output>fieldset.market>div.output>div.list div.item.card div.output div.action i { margin-right:5px; }
// $output>fieldset.market>div.output>div.list div.item.card div.output div.output { padding:10px 0; }
$output>fieldset.market>div.output>div.list div.item.card div.output div.action div.item.done { color:var(--notice-bg-color); }
$output.background>div.output { padding-top:120px; }
$output.background>div.output { padding-top:80px; }
$output.public>div>div.list:not(.mylist)>div.title { display:none; }
$output.public>div>div.list.myplace>div.output { padding:0; }
$output.public>div>div.list.myplace div.item.card div.output { padding:0; }
fieldset.web.team.storage.file div.item.card div.title span:first-child { flex-grow:1; }
fieldset.web.team.renzhengshouquan.profile>div.output div.code { margin-top:60px; margin-bottom:240px; }
body.dark $output>div>div.list.mynotice>span:first-child { background-color:var(--hover-bg-color); color:yellow; white-space:pre; }
body.width1 $output img.qrcode { width:100%; margin:0; }
body.width1 div.input.float { margin:0; width:100% !important; max-width:100% !important; }
// body.width1 div.input.float { position:absolute; top:0 !important; }
body.width1 div.input.float input[name=submit] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
body.width1 fieldset.panel.Action>div.output { background-color:var(--plugin-bg-color); }
body:not(.mobile) $output>fieldset.story>div.output div.item.card:not(:hover) { background-color:var(--output-bg-color); }
body.width1 div.input.float { margin:0; width:100% !important; max-width:100% !important; }
body.width1 div.input.float input[name=submit] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
// body.width1 $output img.qrcode { width:100%; margin:0; }
body.width1 $output>div>div.list>div.title div.action div.item.filter input:focus { width:200px; transition:width 0.5s; }
body.width6 $output>div.output>div.code img.avatar { top:183px; }
body:not(.width1) $output div.item.card { flex-direction:row-reverse; }
body:not(.width1) $output div.item.card>div.action { position:static; flex-shrink:0; }
body:not(.width1) $output div.item.card>div.output { flex-grow:1; }
body:not(.width1) $output div.item.card div.title div.action { display:none; }
body.en $output>fieldset table.content td:first-child { max-width:180px; width:unset;}
body:not(.mobile) $output>fieldset.story>div.output div.item.card:not(:hover) { background-color:var(--output-bg-color); }
body:not(.mobile) $output div.tabs span:hover { background-color:var(--hover-bg-color); }
body:not(.mobile) $output>div>div.list>div.role span:hover { background-color:var(--hover-bg-color); }
body:not(.mobile) $output fieldset.story>div.output>div.code>input[type=button]:hover { border:var(--box-notice); background-color:transparent; color:var(--notice-bg-color); }
body:not(.mobile) $action div.item.notice input[type=button]:hover { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
body.en $output>fieldset table.content td:first-child { max-width:190px; min-width:100px; width:unset;}
body.en $output>fieldset table.content td { padding: 10px 5px; }
fieldset.web.team.storage.file div.item.card div.title span:first-child { flex-grow:1; }
// fieldset.web.team.renzhengshouquan.profile>div.output div.code { margin-top:60px; margin-bottom:240px; }
$fieldset { box-shadow:none; }
$output>div.output>div.code { padding:10px; }

View File

@ -30,7 +30,7 @@ type Portal struct {
field string `data:"time,icons,name,index,order,enable,type,auth,role,view,init,portal"`
create string `name:"create index name icons"`
list string `name:"list place_uid index uid auto" role:"void"`
placeCreate string `name:"placeCreate city_name* street_name* place_name* place_type:select address" icon:"bi bi-plus-square-dotted" role:"void"`
placeCreate string `name:"placeCreate city_name* street_name* place_name* place_type:select address" icon:"bi bi-plus-circle" role:"void"`
placeRemove string `name:"placeRemove" role:"void"`
}
@ -77,6 +77,11 @@ func (s Portal) Command(m *ice.Message, arg ...string) {
}
}
func (s Portal) Run(m *ice.Message, arg ...string) {
if m.Option(model.MESSAGE_UID) != "" {
msg := m.Cmd(message{}, s.Table.Select, model.UID, m.Option(model.MESSAGE_UID))
m.Option(s.Keys(s.Place, model.UID), msg.Append(model.PLACE_UID))
m.Option(model.PLACE_UID, msg.Append(model.PLACE_UID))
}
if cmdPortal[arg[0]] != "" && cmdPortal[arg[0]] != m.PrefixKey() {
s.AutoCmdy(m, cmdPortal[arg[0]], ctx.ACTION, m.ActionKey(), arg)
return
@ -96,7 +101,10 @@ func (s Portal) Run(m *ice.Message, arg ...string) {
role = action.Role
} else {
m.Option(s.Keys(s.Place, model.UID), arg[1])
defer s.SelectJoinUser(m)
}
} else {
defer s.SelectJoinUser(m)
}
if action, ok := cmd.Actions["beforeAction"]; ok {
action.Hand(m.Message, arg[1:]...)
@ -126,7 +134,7 @@ func (s Portal) List(m *ice.Message, arg ...string) {
s.Hash.List(m, kit.Slice(arg, 1)...).PushAction(mdb.DETAIL, s.Hash.Remove).Action().SortInt(mdb.ORDER)
return
}
if m.Option(model.USER_UID) == "" || m.Cmd(s.user, s.Table.Select, model.UID, m.Option(model.USER_UID)).Length() == 0 {
if m.Option(model.USER_UID) == "" {
if msg := m.Cmd(s.user, s.Table.Select, model.OPEN_ID, m.Option(ice.MSG_USERNAME)); msg.Length() == 0 {
msg := m.Cmd(s.user, s.Table.Create, m.Option(ice.MSG_USERNAME), "", m.OptionDefault(ice.MSG_USERNICK, m.Option(ice.MSG_USERNAME)))
m.ProcessCookie(model.USER_UID, msg.Result())
@ -135,6 +143,9 @@ func (s Portal) List(m *ice.Message, arg ...string) {
}
return
}
if m.Cmd(s.user, s.Table.Select, model.UID, m.Option(model.USER_UID)).Length() == 0 {
m.Cmd(s.user, s.Table.Insert, model.UID, m.Option(model.USER_UID), model.OPEN_ID, m.Option(ice.MSG_USERNAME), model.NAME, m.OptionDefault(ice.MSG_USERNICK, m.Option(ice.MSG_USERNAME)))
}
m.Option(model.SERVICE_UID, ServiceUID(m))
if len(arg) == 0 {
m.Cmdy(m.PrefixKey(), s.PlaceList, m.Option(model.USER_UID)).PushAction(s.PlaceRemove).Action(s.PlaceCreate)
@ -146,8 +157,18 @@ func (s Portal) List(m *ice.Message, arg ...string) {
defer m.EchoQRCode(m.Cmdx("", s.Link, arg[0]))
}
s.Hash.List(m).SortInt(mdb.ORDER)
m.RewriteAppend(func(value, key string, index int) string {
if key == "icons" {
value = m.Resource(value)
}
return value
})
}
s.Place.RewriteAppend(m)
if true {
p := kit.ExtChange(m.Resource(ctx.GetCmdFile(m.Message, m.PrefixKey())), "js")
defer func() { m.Option(ice.MSG_DISPLAY, p+","+m.Option(ice.MSG_DISPLAY)) }()
}
s.DisplayBase(m, "").DisplayCSS("")
}
func (s Portal) PlaceListOption(m *ice.Message, arg ...string) *ice.Message {
@ -340,6 +361,11 @@ func (s Portal) RecordEvent(m *ice.Message, arg ...string) {
s.event.Record(m.Spawn(kit.Dict(model.PLACE_UID, m.Option(s.Keys(s.Place, model.UID)))), arg[0], arg[1:]...)
}
func (s Portal) MarketInsert(m *ice.Message, arg ...string) {
// m.Option(model.PLACE_UID, m.Option(s.Keys(s.Place, model.UID)))
m.Option(ctx.ARGS, kit.Join([]string{m.Option(model.PLACE_UID), m.Option(model.UID)}))
m.Cmdy(s.Prefix(m, market{}), s.Create, arg)
}
func (s Portal) PushPublic(m *ice.Message, arg ...string) {
m.Option(model.PLACE_UID, m.Option(s.Keys(s.Place, model.UID)))
m.Option(ctx.ARGS, kit.Join([]string{m.Option(model.PLACE_UID), m.Option(model.UID)}))
m.Cmdy(s.Prefix(m, market{}), s.Create, arg)
@ -425,8 +451,12 @@ func (s Portal) Link(m *ice.Message, arg ...string) *ice.Message {
if len(arg) == 0 {
return m.Echo(m.MergePodCmd("", s.Prefix(m, s)))
}
return m.Echo(m.MergePodCmd("", s.Prefix(m, s), s.Keys(s.Place, model.UID), arg[0]) +
"#" + kit.TrimSuffix(kit.Join([]string{arg[0], kit.Select("", arg, 1), kit.Select("", arg, 2)}, ":"), ":", ":"))
p := m.MergePodCmd("", s.Prefix(m, s), s.Keys(s.Place, model.UID), arg[0])
if len(arg) == 1 {
return m.Echo(p)
}
h := kit.TrimSuffix(kit.Join([]string{arg[0], kit.Select("", arg, 1), kit.Select("", arg, 2)}, ":"), ":", ":")
return m.Echo(p + "#" + h)
}
func init() { ice.TeamCtxCmd(Portal{Table: newTable()}) }

View File

@ -1,7 +1,30 @@
var UID = "uid", PLACE_UID = "place_uid", PLACE_NAME = "place_name", PLACE_TYPE = "place_type", STREET_NAME = "street_name", CITY_NAME = "city_name"
var USER_UID = "user_uid", USER_ROLE = "user_role", AUTH_UID = "auth_uid", AUTH_TYPE = "auth_type"
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) { can.onappend.style(can, html.OUTPUT), can.onimport.myPortal(can, msg) },
_init: function(can, msg) {
can.onappend.style(can, html.OUTPUT), can.onimport.myPortal(can, msg)
},
otherList: function(can, msg, action) { if (!msg.IsDetail()) { return } typeof action == "string" && (action = [action])
can.core.Next(action, function(action, next) {
can.run(can.request({}, {uid: msg.Append(UID)}), action, function(msg) { if (msg.Length() == 0) { return next() }
can.page.Append(can, can._output, [{view: [[html.ITEM, html.TITLE, action], "", can.user.trans(can, action)]}])
can.onappend.plugin(can, {index: can.ConfIndex()}, function(sub) { can.onimport.myField(can, sub)
sub.run = function(event, cmds, cb) {
if (!cmds || cmds.length == 0) { cb(msg) } else { can.run(event, cmds, cb) }
}, next()
sub.onexport.output = function(_sub, msg) {
_sub.onaction.carddetail = function(event, _sub, value) {
can.onimport.myStory(can, {index: msg.Option("_command"), args: [msg.Option("place_uid"), value.uid]})
return true
}
}
})
})
})
},
qrcode: function(can, msg, avatar, target) { target = target||can.ui.output, can.onappend.board(can, msg, target)
can.page.Append(can, can.page.SelectOne(can, target, "div.code"), [{img: can.misc.Resource(can, avatar||can.ConfIcons()||can.user.info.favicon), className: "avatar"}])
},
myValue: function(can, value) { return [
{view: html.TITLE, list: [value.auth_name||value._name, can.onimport.authView(can, value),
{text: [value.__type, "", [mdb.TYPE, value._type, value._type_style]]}, value._role != "visitor" && {text: [value.__role, "", [aaa.ROLE, value._role, value._role_style]]},
@ -21,9 +44,6 @@ Volcanos(chat.ONIMPORT, {
myTitle: function(can, name, help, target) {
can.page.Appends(can, target||can.ui.list, [{view: html.TITLE, list: [{text: can.user.trans(can, name, help)}]}])
},
qrcode: function(can, msg, avatar, target) { target = target||can.ui.output, can.onappend.board(can, msg, target)
can.page.Append(can, can.page.SelectOne(can, target, "div.code"), [{img: can.misc.Resource(can, avatar||can.ConfIcons()||can.user.info.favicon), className: "avatar"}])
},
myPortal: function(can, msg) { can.sup.current = {}
can.page.tagis(document.body, "body.width1") && (can.user.isMobile = true, can.sup.user.isMobile = true)
can.onmotion.delay(can, function() {
@ -57,7 +77,9 @@ Volcanos(chat.ONIMPORT, {
can.onimport.myOrder(can, msg, can.ui.myorder)
}
if (can.Option(PLACE_UID) == "") { var uid = can.onimport.myPlace(can, msg, can.ui.myplace)
if (msg.Length() > 0) { msg.Echo(can.ConfHelp()+" "+can.user.info.titles), can.onimport.qrcode(can, msg) }
if (msg.Length() > 0) { msg.Echo(can.ConfHelp()+" "+can.user.info.titles)
can.misc.isDebug(can) && can.onimport.qrcode(can, msg)
}
msg.Length() > 0? can.run({}, [uid], function(msg) { showIndex(can._index_msg = msg) }): can.run({}, [uid], function(msg) { can.onimport.myOrder(can, can._index_msg = msg, can.ui.myorder) })
} else { can.onappend.style(can, "public", can._output)
var _msg = can.request({}); if (msg.Option(PLACE_NAME)) { _msg.Push(kit.Dict(UID, "", msg.OptionSimple(
@ -67,7 +89,8 @@ Volcanos(chat.ONIMPORT, {
if (_msg.Length() == 0) { can.onimport.myOrder(can, msg, can.ui.myorder) } else { showIndex(can._index_msg = msg) }
can.user.agent.init(can, [msg.Option(CITY_NAME), msg.Option(STREET_NAME), msg.Option("auth_info")].join(" "), msg.Option("auth_avatar"))
msg.Echo([msg.Option(CITY_NAME), msg.Option(STREET_NAME), msg.Option(PLACE_NAME)].join(" "))
can.onexport.value(can, can.sup.current), can.onimport.qrcode(can, msg, can.sup.current.auth_avatar)
can.onexport.value(can, can.sup.current)
can.misc.isDebug(can) && can.onimport.qrcode(can, msg, can.sup.current.auth_avatar)
}
},
myPlace: function(can, msg, target) { var place_uid
@ -112,17 +135,18 @@ Volcanos(chat.ONIMPORT, {
can.runAction({}, "noticeList", [value._uid], function(msg) {
if (msg.Length() == 0) { value._notice_hide = true; return can.onmotion.hidden(can, target) } can.onmotion.toggle(can, target, true)
can.page.Append(can, target, [
{text: " [ 公告 ] "}, {text: can.base.TimeTrim(msg.Append("created_at"))}, {text: " "}, {text: [msg.Append("title"), "", "title"]}, {text: "更多 >"},
{text: can.user.trans(can, "[ notice ]", " [ 公告 ] ")}, {text: can.base.TimeTrim(msg.Append("created_at"))}, {text: " "},
{text: [msg.Append("title"), "", "title"]}, {text: can.user.trans(can, "more >", "更多 >")},
])
})
},
myList: function(can, msg, target) { var width = (can.ConfWidth()-40)/parseInt((can.ConfWidth()-40)/80);
myList: function(can, msg, target) { var width = (can.ConfWidth()-40)/parseInt((can.ConfWidth()-40)/60);
(can.page.tagis(document.body, "body.width1") || can.user.isMobile && !can.user.isLandscape()) && (width = (can.ConfWidth()-40)/5)
can.page.Append(can, target, msg.Table(function(value) { if (value.enable == ice.FALSE) { return }
if ((value.portal || value.public) && can.page.tagis(can._output, "div.output.public")) {
can.onimport.myTitle(can, value.index, value.name, can.ui.mylist)
can.onmotion.toggle(can, can.ui.mylist, true)
can.onimport.myTitle(can, value.index, value.name, can.ui.mylist), can.onmotion.toggle(can, can.ui.mylist, true)
can.onappend.plugin(can, {index: value.index, args: [can.sup.current._uid]}, function(sub) {
sub.onimport._field = function(msg) { msg.Table(function(value) { can.onimport.myStory(can, value) }) }
sub.onexport.output = function(_sub, msg) {
_sub.onaction.carddetail = function(event, _sub, value) {
can.onimport.myStory(can, {index: sub.ConfIndex(), args: [can.sup.current._uid, value.uid]})
@ -131,11 +155,23 @@ Volcanos(chat.ONIMPORT, {
}
}, can.ui.mylist)
}
var cmd = value.index.split(".").pop()
return {view: [[html.ITEM, ctx.INDEX].concat(
value.type? [mdb.TYPE]: [], can.core.Split(value.type||""), value.role? [aaa.ROLE]: [], can.core.Split(value.role||""),
value.auth, value.view,
)], style: {width: width}, list: [
{img: can.misc.ResourceIcons(can, value.icons)}, {text: can.user.trans(can, value.index.split(".").pop(), value.name)},
cmd == "market"? {icon: "bi bi-ubuntu"}:
cmd == "message"? {icon: "bi bi-card-checklist"}:
cmd == "recent"? {icon: "bi bi-clock-history"}:
cmd == "service"? {icon: "bi bi-box"}:
cmd == "support"? {icon: "bi bi-opencollective"}:
cmd == "qrcode"? {icon: "bi bi-qr-code"}:
cmd == "apply"? {icon: "bi bi-pencil-square"}:
cmd == "allow"? {icon: "bi bi-clipboard-check"}:
cmd == "event"? {icon: "bi bi-calendar4-week"}:
cmd == "notice"? {icon: "bi bi-megaphone"}:
{img: can.misc.ResourceIcons(can, value.icons)},
{text: can.user.trans(can, value.index.split(".").pop(), value.name)},
], onclick: function(event) {
can.onimport.myStory(can, {space: can.ConfSpace(), index: value.index, args: [can.onexport.place(can)||can.misc.Search(can, can.Conf("_place_uid"))]})
}}
@ -145,8 +181,7 @@ Volcanos(chat.ONIMPORT, {
var _msg = can.request(); msg.Table(function(value) { if (min < value.order && value.order < max) { _msg.Push(value) } })
var output = can.page.Append(can, target, [html.OUTPUT])._target; can.onimport.myList(can, _msg, output)
},
myIndex: function(can, msg, target) {
can.onimport.myTitle(can, "My Index", "我的应用", target)
myIndex: function(can, msg, target) { can.onimport.myTitle(can, "My Index", "我的应用", target)
var list = ["visitor", "creator", "landlord", "teacher", "leader", "boss", "tenant", "student", "worker", "custom", "admin", "parent", "server"]
var _list = can.Conf("_trans.value."+can.Conf("_user_place_role"))
can.core.Item(_list, function(key) { list.indexOf(key) == -1 && list.push(key) })
@ -169,21 +204,19 @@ Volcanos(chat.ONIMPORT, {
layout: function(can) {
can.ui.tabs && can.ui.list && can.page.styleHeight(can, can.ui.list, can.ConfHeight()-can.ui.tabs.offsetHeight)
if (can.ui.action && can.ui.output) {
can.page.style(can, can.ui.output, html.HEIGHT, (can.user.isMobile? window.innerHeight: can.ConfHeight()) - can.ui.action.offsetHeight)
// can.page.style(can, can.ui.output, html.HEIGHT, (can.user.isMobile? window.innerHeight: can.ConfHeight()) - can.ui.action.offsetHeight)
can.page.style(can, can.ui.output, html.HEIGHT, (can.ConfHeight()) - can.ui.action.offsetHeight)
}
},
})
Volcanos(chat.ONACTION, {
beforeInputs: function(event, can, button, sub) {
// can.user.isMobile && can._fields.appendChild(sub._target)
// can.user.isMobile && can.onmotion.hidden(can, can._output)
can.user.isMobile && can.page.style(can, sub._target, html.LEFT, (can.page.width()-sub._target.offsetWidth)/2, html.TOP, 0)
can.user.isMobile && can.page.style(can, sub._target, html.MAX_HEIGHT, can.page.height())
can.user.isMobile && can._root.Inputs && can._root.Inputs.appendChild(sub._target)
can.user.isMobile && can.page.style(can, can._root.Action._output, html.VISIBILITY, html.HIDDEN)
sub.Option("city_name", "深圳市")
if (!can.misc.isDebug(can)) { return }
sub.Option("street_name", "粤海街道")
sub.Option("school_name", "深圳中学")
sub.Option("company_name", "云轩领航")

View File

@ -9,34 +9,27 @@
"cancel": "取消", "submit": "提交", "finish": "完成", "reject": "驳回", "approve": "通过",
"read": "已读", "done": "完成", "sticky": "置顶", "unSticky": "取消置顶",
"autogen": "生成", "compile": "编译", "oauth": "授权", "project": "项目",
"marketInsert": "推广", "commentCreate": "评论", "applyQRCode": "邀请码",
"marketInsert": "推广",
"marketPlaceEnter": "进入",
"pushPublic": "推广",
"applyCreate": "申请权限",
"commentCreate": "评论", "applyQRCode": "邀请码",
"user": "用户信息", "city": "城市信息", "street": "街道信息", "school": "学校信息", "company": "公司信息",
"auth": "认证", "authCreate": "认证申请", "authCity": "城市认证", "authPersonal": "个人认证", "authService": "服务认证", "authCompany": "公司认证",
"config": "配置", "code": "编程", "data": "数据", "cache": "缓存",
"promote": "升级", "demote": "降级",
"icons": {
"market": "bi bi-ubuntu",
"message": "bi bi-card-checklist",
"goodslist": "https://img.icons8.com/officel/80/online-store.png",
"paymentlist": "https://img.icons8.com/officel/80/online-payment-with-a-credit-card.png",
"meeting": "https://img.icons8.com/officel/80/video-conference.png",
"document": "https://img.icons8.com/officel/50/documents.png",
"document": "https://img.icons8.com/officel/80/documents.png",
"contract": "https://img.icons8.com/officel/80/agreement.png",
"photo": "https://img.icons8.com/officel/50/ios-photos.png",
"credit": "https://img.icons8.com/officel/80/passport.png",
"member": "https://img.icons8.com/officel/80/person-at-home.png",
"setting": "https://img.icons8.com/officel/80/settings--v1.png",
"qrcode": "https://img.icons8.com/officel/80/qr-code.png",
"event": "https://img.icons8.com/officel/80/property-with-timer.png",
"apply": "https://img.icons8.com/officel/80/edit-property.png",
"allow": "https://img.icons8.com/officel/80/receipt-approved.png",
"email": "https://img.icons8.com/officel/80/reading-confirmation.png",
"notice": "https://img.icons8.com/officel/80/commercial.png",
"domain": "https://img.icons8.com/officel/80/categorize.png",
"market": "https://img.icons8.com/officel/80/square.png",
"message": "https://img.icons8.com/officel/80/test-partial-passed.png",
"recent": "https://img.icons8.com/officel/80/multiple-smartphones.png",
"service": "https://img.icons8.com/officel/80/activity-grid.png",
"support": "https://img.icons8.com/officel/80/customer-support.png"
"photo": "https://img.icons8.com/officel/80/ios-photos.png"
},
"style": {
"marketPlaceEnter": "notice",
"reject": "danger",
"approve": "notice",
"disable": "danger",

BIN
src/gonganxitong/qrcode.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -1,13 +1,15 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) {
can.onimport.myView(can, msg, function(value) { if (value.score > 0) { value._style = ["sticky"] }
can.onimport.myView(can, msg, function(value) { value._style = []; if (value.score > 0) { value._style = ["sticky"] }
if (can._stacks_root._stacks[[value.space,value.index, value.place_uid].join(",")]) { value._style.push("loaded") }
value.icons = can.misc.Resource(can, value.service_icon.split("?")[0], value.space)
return [
{view: html.TITLE, list: [value.place_name, can.onimport.authView(can, value), can.onimport.timeView(can, value)]},
{view: html.STATUS, list: [value.city_name, value.street_name, value.service_name]},
]
}, function(event, value) { can.onaction._goback(event, function() {
can.onimport.myPlugin(can, {space: value.space, index: value.index, args: [value.place_uid]})
// can.onimport.myPlugin(can, {space: value.space, index: value.index, args: [value.place_uid]})
can.onimport.myStory(can, {space: value.space, index: value.index, args: [value.place_uid]})
}) })
},
})

BIN
src/gonganxitong/recent.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -6,6 +6,7 @@ import (
"shylinux.com/x/ice"
"shylinux.com/x/icebergs/base/aaa"
"shylinux.com/x/icebergs/base/cli"
"shylinux.com/x/icebergs/base/ctx"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
@ -68,14 +69,13 @@ func (s service) Autogen(m *ice.Message, arg ...string) {
cmd := func(arg ...string) { m.Cmd(web.SPACE, m.Option(web.DREAM), arg) }
if m.Option(web.DREAM) != "" {
option := func(ctx, mod string) { cmd(code.AUTOGEN, code.IMPORT, mod, ctx, nfs.SRC_OPTION_GO) }
option("shylinux.com/x/mysql-story", "db/mysql")
option("shylinux.com/x/mysql-story", "db/sqlite")
option("shylinux.com/x/community", "gonganxitong")
option("shylinux.com/x/community", "renzhengshouquan")
option("shylinux.com/x/ice", "devops")
option("shylinux.com/x/ice", "portal")
demo := func(p string) { cmd(nfs.SAVE, p, m.Cmdx(nfs.CAT, p)) }
demo("src/template/web.code.autogen/demo.go")
demo("src/template/web.code.go/demo.go")
demo("src/template/web.code.js/demo.js")
defer cmd(cli.SYSTEM, "go", "mod", "tidy")
}
save := func(name string, arg ...string) {
cmd(nfs.DEFS, path.Join(p, name), msg.Template("template/"+kit.Select(name, arg, 0)))

View File

@ -8,7 +8,8 @@ Volcanos(chat.ONIMPORT, {
{view: html.STATUS, list: [value.module, value.version]},
]
}, function(event, value) { can.onaction._goback(event, function() {
can.onimport.myPlugin(can, {space: value.space, index: value.index})
// can.onimport.myPlugin(can, {space: value.space, index: value.index})
can.onimport.myStory(can, {space: value.space, index: value.index})
}) })
},
})

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@ -14,4 +14,4 @@ func main() { print(ice.Run()) }
func init() {
ice.Info.CodeMain = "src/gonganxitong/portal.go"
ice.Info.NodeMain = "web.team.gonganxitong.portal"
}
}

View File

@ -1,11 +1,17 @@
title "云社区"
refer `
公众号 https://mp.weixin.qq.com/cgi-bin/home?t=home/index&lang=zh_CN&token=494166701
ICON https://igoutu.cn/icons/officel
GORM https://gorm.io/docs/indexes.html
官网 https://web.shylinux.com
源码 https://git.shylinux.com/web/community
应用 https://web.shylinux.com/s/20240724-community
`
refer `
GORM https://gorm.io/docs/indexes.html
ICON https://igoutu.cn/icons/officel
ICON https://igoutu.cn/icons/set/%E7%95%8C%E9%9D%A2%E8%AE%BE%E8%AE%A1--style-officel
公众号 https://mp.weixin.qq.com/cgi-bin/home?t=home/index&lang=zh_CN&token=494166701
`
field web.code.mysql.client
field web.code.mysql.query args `mysql gonganxitong`
field web.chat.wx.access
field web.chat.wx.menu
field web.team.gonganxitong.service
field web.code.mysql.client
field web.code.mysql.query args `mysql gonganxitong`
field web.team.gonganxitong.service

View File

@ -2,8 +2,5 @@ package main
import (
_ "shylinux.com/x/ice/devops"
_ "shylinux.com/x/mysql-story/src/db/mysql"
_ "shylinux.com/x/mysql-story/src/db/sqlite"
_ "shylinux.com/x/community/src/renzhengshouquan/external"
_ "shylinux.com/x/ice/portal"
)

View File

@ -12,16 +12,20 @@ type Auth struct {
cert cert
order string `data:"2"`
models string `data:"auth"`
fields string `data:"from_uid,name,info,auth_type,auth_status,avatar,background,service_uid,place_uid,user_uid"`
memberList string `name:"memberList" role:"leader,worker"`
certList string `name:"certList" role:"leader,worker"`
issue string `name:"issue" role:"leader,worker"`
revoke string `name:"revoke" role:"leader,worker"`
fields string `data:"from_uid,score,name,info,auth_type,auth_status,avatar,background,service_uid,place_uid,user_uid"`
memberList string `name:"memberList" role:"worker"`
certList string `name:"certList" role:"worker"`
issue string `name:"issue" role:"worker"`
revoke string `name:"revoke" role:"worker"`
setScore string `name:"setScore score" role:"void"`
}
func (s Auth) Remove(m *ice.Message, arg ...string) {
s.Delete(m)
}
func (s Auth) SetScore(m *ice.Message, arg ...string) {
s.Update(m, arg, m.OptionSimple(model.UID)...)
}
func (s Auth) List(m *ice.Message, arg ...string) {
if len(arg) == 1 {
s.Select(m, model.FROM_UID, arg[0]).Action()
@ -36,7 +40,7 @@ func (s Auth) List(m *ice.Message, arg ...string) {
case AuthCreate:
m.PushButton(s.Issue, s.Remove)
case AuthIssued:
m.PushButton(s.Revoke)
m.PushButton(s.Revoke, s.SetScore)
case AuthRevoked:
m.PushButton(s.Issue, s.Remove)
default:

View File

@ -1,7 +1,7 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) {
can.onimport.myView(can, msg, function(value) { return [
{view: html.TITLE, list: [value.name, can.onimport.textView(can, value, AUTH_TYPE), can.onimport.titleAction(can, value)]},
{view: html.TITLE, list: [value.name, value.score, can.onimport.textView(can, value, AUTH_TYPE), can.onimport.titleAction(can, value)]},
{view: html.STATUS, list: [value.uid.slice(0, 6), can.onimport.timeView(can, value), can.onimport.textView(can, value)]},
] })
},

View File

@ -46,7 +46,8 @@ func (s Table) AuthList(m *ice.Message, auth_uid string, cb func(value ice.Maps,
}
func (s Table) authSort(m *ice.Message, arg ...string) {
s.RewriteAppend(m)
m.Sort("auth_status,auth_type,created_at", []string{"issued"}, []string{"personal", "root", "city", "street", "school", "company", "service"}, ice.STR_R)
m.Sort("auth_status,auth_type,score,created_at", []string{"issued"},
[]string{"personal", "root", "city", "street", "school", "company", "service"}, ice.INT_R, ice.STR_R)
}
func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message {
m.RewriteAppend(func(value, key string, index int) string {

View File

@ -1,9 +1,6 @@
package weixinpayment
import (
"bytes"
"crypto/x509"
"net/http"
"path"
"strings"
@ -16,8 +13,6 @@ import (
"shylinux.com/x/community/src/renzhengshouquan/external/weixinpayment/model"
"github.com/wechatpay-apiv3/wechatpay-go/core"
"github.com/wechatpay-apiv3/wechatpay-go/core/auth/verifiers"
"github.com/wechatpay-apiv3/wechatpay-go/core/notify"
"github.com/wechatpay-apiv3/wechatpay-go/core/option"
"github.com/wechatpay-apiv3/wechatpay-go/services/payments/jsapi"
"github.com/wechatpay-apiv3/wechatpay-go/utils"
@ -67,7 +62,6 @@ func (s weixinpayment) Response(m *ice.Message, arg ...string) {
resp, result, err := svc.QueryOrderByOutTradeNo(m, jsapi.QueryOrderByOutTradeNoRequest{
Mchid: core.String(msg.Append(model.MCH_ID)),
OutTradeNo: core.String(arg[1]),
// OutTradeNo: core.String("027581e07da12f52dac052d7a8ef7659"),
})
m.Info("weixinpayment %s %s %#v", kit.Format(resp), kit.Format(result), err)
if err, ok := err.(*core.APIError); ok {
@ -77,33 +71,6 @@ func (s weixinpayment) Response(m *ice.Message, arg ...string) {
if m.Warn(*resp.TradeState != "SUCCESS") {
return
}
return
request, err := http.NewRequest(http.MethodPost, m.MergePodCmd("", m.PrefixKey()), bytes.NewBufferString(m.Option("request.data")))
if m.Warn(err) {
return
}
kit.For([]string{
"Wechatpay-Serial",
"Wechatpay-Signature",
"Wechatpay-Nonce",
"Wechatpay-Timestamp",
"Wechatpay-Signature-Type",
}, func(k string) { request.Header.Set(k, m.Option(k)) })
content := make(map[string]interface{})
mchAPIv3Key := msg.Append(model.API_KEY)
wechatPayCert, err := utils.LoadCertificate(msg.Append(model.CERT_FILE))
if m.Warn(err) {
return
}
certificateVisitor := core.NewCertificateMapWithList([]*x509.Certificate{wechatPayCert})
handler := notify.NewNotifyHandler(mchAPIv3Key, verifiers.NewSHA256WithRSAVerifier(certificateVisitor))
notifyReq, err := handler.ParseNotifyRequest(m, request, &content)
if m.Warn(err) {
return
}
m.Echo(notifyReq.Summary)
}
func init() { ice.TeamCtxCmd(weixinpayment{}) }

View File

@ -9,6 +9,7 @@ const (
TYPE = "type"
ROLE = "role"
STATUS = "status"
SCORE = "score"
TITLE = "title"
CONTENT = "content"
AVATAR = "avatar"
@ -63,6 +64,7 @@ type Auth struct {
StorageUID string `gorm:"type:char(32)"`
DashboardUID string `gorm:"type:char(32)"`
Status uint8 `gorm:"default:0"`
Score uint8 `gorm:"default:0"`
}
type Cert struct {
db.ModelWithUID

View File

@ -1,2 +1,5 @@
$output>div>div.title { padding:10px; }
$output>div>div.title { border-left:var(--box-notice3); padding:10px; margin-left:10px; }
$output>div.from>div.title { border-left:var(--box-danger3); }
$output div.item.card div.title span.type { margin-left:auto; }
$output div.item.card div.title div.action { top:24px; }
$output>div.head { margin-bottom:0; }

View File

@ -37,10 +37,10 @@ func (s profile) List(m *ice.Message, arg ...string) {
name := m.Append(model.NAME)
switch AuthType(kit.Int(m.Append(model.AUTH_TYPE))) {
case AuthService:
name = kit.JoinWord(m.Append(model.CITY_NAME), m.Append(model.STREET_NAME), m.Append(model.PLACE_NAME))
kit.If(s.IsWorker(m), func() { m.PushAction(s.Modify, s.Enter) }, func() { m.PushAction() })
s.SelectJoinRecent(m, "")
s.SelectJoinService(m)
name = kit.JoinWord(m.Append(model.CITY_NAME), m.Append(model.STREET_NAME), m.Append(model.PLACE_NAME))
case AuthCompany:
kit.If(s.IsWorker(m), func() { m.PushAction(s.Modify, s.Enter) }, func() { m.PushAction() })
case AuthPersonal:

View File

@ -62,7 +62,8 @@ Volcanos(chat.ONACTION, {
if (msg.Option("auth_type") == "company") {
can.user.open(can.misc.MergePodCmd(can, {pod: "20240724-community", cmd: "web.team.renzhengshouquan.admin", auth_uid: msg.Option("auth_uid"), view: "admin"}))
} else {
can.onimport.myPlugin(can, {space: msg.Option("nodename"), index: msg.Option(ctx.INDEX), args: [msg.Option(PLACE_UID)]})
can.onimport.myStory(can, {space: msg.Option("nodename"), index: msg.Option(ctx.INDEX), args: [msg.Option(PLACE_UID)]})
// can.onimport.myPlugin(can, {space: msg.Option("nodename"), index: msg.Option(ctx.INDEX), args: [msg.Option(PLACE_UID)]})
}
can.page.ClassList.del(can, can._fields, "_process")
},

View File

@ -1,7 +1,7 @@
{
"1246961a1d880252ead389142acd037b": {
"meta": {
"icons": "https://img.icons8.com/officel/80/settings--v1.png",
"icons": "/p/src/gonganxitong/setting.png",
"index": "web.team.gonganxitong.setting",
"name": "服务配置",
"order": "103",
@ -11,7 +11,7 @@
},
"153c93456004ec2ca692d3bac2223167": {
"meta": {
"icons": "https://img.icons8.com/officel/80/activity-grid.png",
"icons": "/p/src/gonganxitong/service.png",
"index": "web.team.gonganxitong.service",
"name": "服务发现",
"order": "904",
@ -21,7 +21,7 @@
"22574299a657140d473f0216b8d83710": {
"meta": {
"auth": "issued",
"icons": "https://img.icons8.com/officel/50/documents.png",
"icons": "https://img.icons8.com/officel/80/documents.png",
"index": "web.team.gonganxitong.document",
"name": "在线文档",
"order": "94",
@ -31,7 +31,7 @@
},
"27c6988eeb07c78cbb49aa15c577cfa4": {
"meta": {
"icons": "https://img.icons8.com/officel/80/edit-property.png",
"icons": "/p/src/gonganxitong/apply.png",
"index": "web.team.gonganxitong.apply",
"name": "权限申请",
"order": "502",
@ -53,7 +53,7 @@
},
"3971882ea4f32c86386ad04b39d3e3d4": {
"meta": {
"icons": "https://img.icons8.com/officel/80/square.png",
"icons": "/p/src/gonganxitong/market.png",
"index": "web.team.gonganxitong.market",
"name": "人民广场",
"order": "901",
@ -74,7 +74,7 @@
"882a999b4a72a9866d9e4eef110d335a": {
"meta": {
"auth": "issued",
"icons": "https://img.icons8.com/officel/50/ios-photos.png",
"icons": "https://img.icons8.com/officel/80/ios-photos.png",
"index": "web.team.gonganxitong.photo",
"name": "在线相册",
"order": "96",
@ -84,7 +84,7 @@
},
"8ce4dfb877e04e3be5144253fdd5d8ff": {
"meta": {
"icons": "https://img.icons8.com/officel/80/receipt-approved.png",
"icons": "/p/src/gonganxitong/allow.png",
"index": "web.team.gonganxitong.allow",
"name": "权限审批",
"order": "503",
@ -94,7 +94,7 @@
},
"a53e36dcca735ef90b649fec546f520e": {
"meta": {
"icons": "https://img.icons8.com/officel/80/passport.png",
"icons": "/p/src/gonganxitong/credit.png",
"index": "web.team.gonganxitong.credit",
"name": "用户名片",
"order": "101",
@ -103,7 +103,7 @@
},
"a89a7c09e326295aaa7e7ea3d66fb28a": {
"meta": {
"icons": "https://img.icons8.com/officel/80/customer-support.png",
"icons": "/p/src/gonganxitong/support.png",
"index": "web.team.gonganxitong.support",
"name": "客服支持",
"order": "905",
@ -128,7 +128,7 @@
},
"bdec92d5849b2a60a8811cff494f2391": {
"meta": {
"icons": "https://img.icons8.com/officel/80/property-with-timer.png",
"icons": "/p/src/gonganxitong/event.png",
"index": "web.team.gonganxitong.event",
"name": "事件流",
"order": "504",
@ -138,7 +138,7 @@
},
"be08ca65be90feca325df128a06e440f": {
"meta": {
"icons": "https://img.icons8.com/officel/80/multiple-smartphones.png",
"icons": "/p/src/gonganxitong/recent.png",
"index": "web.team.gonganxitong.recent",
"name": "最近访问",
"order": "903",
@ -147,7 +147,7 @@
},
"c1526ecd405021d6d47798c066bf70c0": {
"meta": {
"icons": "https://img.icons8.com/officel/80/commercial.png",
"icons": "/p/src/gonganxitong/notice.png",
"index": "web.team.gonganxitong.notice",
"name": "通知公告",
"order": "505",
@ -187,7 +187,7 @@
},
"e2117b53c036a72fe7e4885449488a6f": {
"meta": {
"icons": "https://img.icons8.com/officel/80/qr-code.png",
"icons": "/p/src/gonganxitong/qrcode.png",
"index": "web.team.gonganxitong.qrcode",
"name": "场景码",
"order": "501",
@ -208,7 +208,7 @@
},
"f28c03b5bdbbe92ebc89dabca5e7d4de": {
"meta": {
"icons": "https://img.icons8.com/officel/80/person-at-home.png",
"icons": "/p/src/gonganxitong/member.png",
"index": "web.team.gonganxitong.member",
"name": "组织成员",
"order": "102",
@ -218,7 +218,7 @@
},
"fd1884bbeb1f1a83f4e12f857bfe5b15": {
"meta": {
"icons": "https://img.icons8.com/officel/80/test-partial-passed.png",
"icons": "/p/src/gonganxitong/message.png",
"index": "web.team.gonganxitong.message",
"name": "消息待办",
"order": "902",

View File

@ -9,7 +9,7 @@
},
"030e2a53ca3561a0d0d123c133a88b59": {
"meta": {
"icons": "https://img.icons8.com/officel/80/qr-code.png",
"icons": "/p/src/gonganxitong/qrcode.png?pod=20240724-community",
"index": "web.team.guanlixitong.qrcode",
"name": "场景码",
"order": "1",
@ -25,7 +25,7 @@
},
"0521e637b051a0e175a6070eded1bcef": {
"meta": {
"icons": "https://img.icons8.com/officel/80/settings--v1.png",
"icons": "/p/src/gonganxitong/setting.png?pod=20240724-community",
"index": "web.team.guanlixitong.setting",
"name": "服务配置",
"order": "102",
@ -35,7 +35,7 @@
},
"057616b7366e1930ef4e4a921fe45f1f": {
"meta": {
"icons": "https://img.icons8.com/officel/80/activity-grid.png",
"icons": "/p/src/gonganxitong/service.png?pod=20240724-community",
"index": "web.team.guanlixitong.service",
"name": "服务发现",
"order": "100",
@ -61,7 +61,7 @@
},
"2fd80c581b69c9f67420e793804dbd9f": {
"meta": {
"icons": "https://img.icons8.com/officel/80/passport.png",
"icons": "/p/src/gonganxitong/credit.png?pod=20240724-community",
"index": "web.team.guanlixitong.credit",
"name": "用户名片",
"order": "102",
@ -70,7 +70,7 @@
},
"30bfa47cab4cd689901fd2e1b87eb235": {
"meta": {
"icons": "https://img.icons8.com/officel/80/receipt-approved.png",
"icons": "/p/src/gonganxitong/allow.png?pod=20240724-community",
"index": "web.team.guanlixitong.allow",
"name": "权限审批",
"order": "4",
@ -86,9 +86,16 @@
"time": "2024-11-08 14:04:38.597"
}
},
"45a953c0d57edbfcece5f53e62d04bd3": {
"meta": {
"icons": "/p/usr/local/work/20240724-enterprise/src/guanlixitong/src/gonganxitong/spendlist.png",
"index": "web.team.guanlixitong.spendlist",
"time": "2025-04-19 08:28:11.730"
}
},
"5695d50b28872804a01d7c923ee91cd1": {
"meta": {
"icons": "https://img.icons8.com/officel/80/person-at-home.png",
"icons": "/p/src/gonganxitong/member.png?pod=20240724-community",
"index": "web.team.guanlixitong.member",
"name": "团队成员",
"order": "5",
@ -104,7 +111,7 @@
},
"78d29149539be88d7561b8e17bd65882": {
"meta": {
"icons": "https://img.icons8.com/officel/80/square.png",
"icons": "/p/src/gonganxitong/market.png?pod=20240724-community",
"index": "web.team.guanlixitong.market",
"name": "人民广场",
"order": "100",
@ -124,7 +131,7 @@
},
"809b63c1819fc3ac1452e3b71889aec5": {
"meta": {
"icons": "https://img.icons8.com/officel/80/commercial.png",
"icons": "/p/src/gonganxitong/notice.png?pod=20240724-community",
"index": "web.team.guanlixitong.notice",
"name": "通知公告",
"order": "70",
@ -135,7 +142,7 @@
"8548d5ce3faee7bd508d2fb53d57f35b": {
"meta": {
"auth": "issued",
"icons": "https://img.icons8.com/officel/50/ios-photos.png",
"icons": "https://img.icons8.com/officel/80/ios-photos.png",
"index": "web.team.guanlixitong.photo",
"name": "在线相册",
"order": "95",
@ -145,7 +152,7 @@
},
"9c18032c5bc252f2986e1b20e7e77db7": {
"meta": {
"icons": "https://img.icons8.com/officel/80/property-with-timer.png",
"icons": "/p/src/gonganxitong/event.png?pod=20240724-community",
"index": "web.team.guanlixitong.event",
"name": "事件流",
"order": "2",
@ -155,7 +162,7 @@
},
"9fffbe375e2d2a1a8e6cb1f341e35b55": {
"meta": {
"icons": "https://img.icons8.com/officel/80/multiple-smartphones.png",
"icons": "/p/src/gonganxitong/recent.png?pod=20240724-community",
"index": "web.team.guanlixitong.recent",
"name": "最近访问",
"order": "100",
@ -170,6 +177,13 @@
"time": "2024-08-07 08:09:16.533"
}
},
"a59e847a365ef89dd35e250e9b663ac3": {
"meta": {
"icons": "/p/usr/local/work/20240724-enterprise/src/guanlixitong/src/gonganxitong/quotalist.png",
"index": "web.team.guanlixitong.quotalist",
"time": "2025-04-19 08:28:11.714"
}
},
"ace6350cd663c693ddf47e81625c8a7a": {
"meta": {
"icons": "https://img.icons8.com/officel/80/meeting.png",
@ -202,7 +216,7 @@
},
"c27ad1df8aa9059d6018fb5add5ee546": {
"meta": {
"icons": "https://img.icons8.com/officel/80/customer-support.png",
"icons": "/p/src/gonganxitong/support.png?pod=20240724-community",
"index": "web.team.guanlixitong.support",
"name": "客服支持",
"order": "100",
@ -219,7 +233,7 @@
},
"c36d47e2611b0d1e7a14088bc3293d04": {
"meta": {
"icons": "https://img.icons8.com/officel/80/edit-property.png",
"icons": "/p/src/gonganxitong/apply.png?pod=20240724-community",
"index": "web.team.guanlixitong.apply",
"name": "权限申请",
"order": "3",
@ -240,7 +254,7 @@
},
"d25f3f88261ead2a0079415a26aa6853": {
"meta": {
"icons": "https://img.icons8.com/officel/80/test-partial-passed.png",
"icons": "/p/src/gonganxitong/message.png?pod=20240724-community",
"index": "web.team.guanlixitong.message",
"name": "消息待办",
"order": "100",
@ -261,7 +275,7 @@
"e595a0bbefbcfaa89f45dd875cc6fe0b": {
"meta": {
"auth": "issued",
"icons": "https://img.icons8.com/officel/50/documents.png",
"icons": "https://img.icons8.com/officel/80/documents.png",
"index": "web.team.guanlixitong.document",
"name": "在线文档",
"order": "93",

View File

@ -1,4 +1,11 @@
{
"1e158e9083bfe07ac5a35353fdcdf62e": {
"meta": {
"icons": "/p/src/huodongzuzhi/src/gonganxitong/spendlist.png",
"index": "web.team.huodongzuzhi.spendlist",
"time": "2025-04-19 08:28:11.641"
}
},
"2c5f42d846b438a22e62b19617ebf511": {
"meta": {
"auth": "issued",
@ -12,7 +19,7 @@
},
"3229a1bc7aa326822c4f4f267e038185": {
"meta": {
"icons": "https://img.icons8.com/officel/80/person-at-home.png",
"icons": "/p/src/gonganxitong/member.png?pod=20240724-community",
"index": "web.team.huodongzuzhi.member",
"name": "组织成员",
"order": "102",
@ -20,6 +27,13 @@
"time": "2024-08-25 12:53:13.205"
}
},
"3745803fab1393312d3e1d2e589e1e9f": {
"meta": {
"icons": "/p/src/huodongzuzhi/src/gonganxitong/quotalist.png",
"index": "web.team.huodongzuzhi.quotalist",
"time": "2025-04-19 08:28:11.635"
}
},
"3e9e80db9ae3768b7a44774c7afa5f65": {
"meta": {
"auth": "issued",
@ -34,7 +48,7 @@
"49432b349d456f4108dcfa7d28435bac": {
"meta": {
"auth": "issued",
"icons": "https://img.icons8.com/officel/50/documents.png",
"icons": "https://img.icons8.com/officel/80/documents.png",
"index": "web.team.huodongzuzhi.document",
"name": "在线文档",
"order": "93",
@ -44,7 +58,7 @@
},
"595eb34d7ebe62e160c02ed5b127d637": {
"meta": {
"icons": "https://img.icons8.com/officel/80/test-partial-passed.png",
"icons": "/p/src/gonganxitong/message.png?pod=20240724-community",
"index": "web.team.huodongzuzhi.message",
"name": "消息待办",
"order": "902",
@ -53,7 +67,7 @@
},
"780939d4c095806dba8711d8753cbdf7": {
"meta": {
"icons": "https://img.icons8.com/officel/80/customer-support.png",
"icons": "/p/src/gonganxitong/support.png?pod=20240724-community",
"index": "web.team.huodongzuzhi.support",
"name": "客服支持",
"order": "905",
@ -62,7 +76,7 @@
},
"7a02092e26efa3eb324259a5d28bc8f3": {
"meta": {
"icons": "https://img.icons8.com/officel/80/passport.png",
"icons": "/p/src/gonganxitong/credit.png?pod=20240724-community",
"index": "web.team.huodongzuzhi.credit",
"name": "用户名片",
"order": "101",
@ -71,7 +85,7 @@
},
"7a7da5c5e42a9aa1d88109fa8620d465": {
"meta": {
"icons": "https://img.icons8.com/officel/80/property-with-timer.png",
"icons": "/p/src/gonganxitong/event.png?pod=20240724-community",
"index": "web.team.huodongzuzhi.event",
"name": "事件流",
"order": "504",
@ -81,7 +95,7 @@
},
"94996b048561b144e2a47ff6cc2a9e5c": {
"meta": {
"icons": "https://img.icons8.com/officel/80/activity-grid.png",
"icons": "/p/src/gonganxitong/service.png?pod=20240724-community",
"index": "web.team.huodongzuzhi.service",
"name": "服务发现",
"order": "904",
@ -99,7 +113,7 @@
},
"aa74e6bf51d1d1abab57fdb03b08c5c2": {
"meta": {
"icons": "https://img.icons8.com/officel/80/square.png",
"icons": "/p/src/gonganxitong/market.png?pod=20240724-community",
"index": "web.team.huodongzuzhi.market",
"name": "人民广场",
"order": "901",
@ -108,7 +122,7 @@
},
"baec1db59218f2da9d560fa719c6a12f": {
"meta": {
"icons": "https://img.icons8.com/officel/80/edit-property.png",
"icons": "/p/src/gonganxitong/apply.png?pod=20240724-community",
"index": "web.team.huodongzuzhi.apply",
"name": "权限申请",
"order": "502",
@ -118,7 +132,7 @@
},
"c3fbb2049e914eda48f3f7d32c207679": {
"meta": {
"icons": "https://img.icons8.com/officel/80/qr-code.png",
"icons": "/p/src/gonganxitong/qrcode.png?pod=20240724-community",
"index": "web.team.huodongzuzhi.qrcode",
"name": "场景码",
"order": "501",
@ -128,7 +142,7 @@
},
"dae66500cd381d400f15cd4c9efc05b1": {
"meta": {
"icons": "https://img.icons8.com/officel/80/receipt-approved.png",
"icons": "/p/src/gonganxitong/allow.png?pod=20240724-community",
"index": "web.team.huodongzuzhi.allow",
"name": "权限审批",
"order": "503",
@ -150,7 +164,7 @@
"e5ce14fa8331355abad8cc68c25c74a4": {
"meta": {
"auth": "issued",
"icons": "https://img.icons8.com/officel/50/ios-photos.png",
"icons": "https://img.icons8.com/officel/80/ios-photos.png",
"index": "web.team.huodongzuzhi.photo",
"name": "在线相册",
"order": "95",
@ -171,7 +185,7 @@
},
"ee364ed77eb0383868d48260f8b5aeb2": {
"meta": {
"icons": "https://img.icons8.com/officel/80/commercial.png",
"icons": "/p/src/gonganxitong/notice.png?pod=20240724-community",
"index": "web.team.huodongzuzhi.notice",
"name": "通知公告",
"order": "505",
@ -181,7 +195,7 @@
},
"f77a8f8d7dfe49f8e82ecd8d0b99f233": {
"meta": {
"icons": "https://img.icons8.com/officel/80/multiple-smartphones.png",
"icons": "/p/src/gonganxitong/recent.png?pod=20240724-community",
"index": "web.team.huodongzuzhi.recent",
"name": "最近访问",
"order": "903",
@ -190,7 +204,7 @@
},
"f78dbbb843f056f5db196c342f1184bc": {
"meta": {
"icons": "https://img.icons8.com/officel/80/settings--v1.png",
"icons": "/p/src/gonganxitong/setting.png?pod=20240724-community",
"index": "web.team.huodongzuzhi.setting",
"name": "服务配置",
"order": "103",

View File

@ -3,7 +3,7 @@
"meta": {
"auth": "issued",
"enable": "false",
"icons": "https://img.icons8.com/officel/50/ios-photos.png",
"icons": "https://img.icons8.com/officel/80/ios-photos.png",
"index": "web.team.renzhengshouquan.photo",
"name": "在线相册",
"order": "96",
@ -13,7 +13,7 @@
},
"0d7f068029dbf7f9f0d307070cc3a79b": {
"meta": {
"icons": "https://img.icons8.com/officel/80/receipt-approved.png",
"icons": "/p/src/gonganxitong/allow.png?pod=20240724-community",
"index": "web.team.renzhengshouquan.allow",
"name": "权限审批",
"order": "503",
@ -25,7 +25,7 @@
"meta": {
"auth": "issued",
"enable": "false",
"icons": "https://img.icons8.com/officel/50/documents.png",
"icons": "https://img.icons8.com/officel/80/documents.png",
"index": "web.team.renzhengshouquan.document",
"name": "在线文档",
"order": "95",
@ -45,6 +45,13 @@
"time": "2024-11-25 18:11:44.121"
}
},
"1d5fb457d3223d26afd076c38d7daf66": {
"meta": {
"icons": "/p/src/renzhengshouquan/src/gonganxitong/quotalist.png",
"index": "web.team.renzhengshouquan.quotalist",
"time": "2025-04-19 08:28:11.519"
}
},
"1d7c44014bc23b3db4551534359c95c4": {
"meta": {
"icons": "https://img.icons8.com/officel/80/video-conference.png",
@ -56,6 +63,13 @@
"type": "company,school,street"
}
},
"21887f37ce8dabe4c52648ea096f8e4d": {
"meta": {
"icons": "/p/src/renzhengshouquan/src/gonganxitong/spendlist.png",
"index": "web.team.renzhengshouquan.spendlist",
"time": "2025-04-19 08:28:11.518"
}
},
"2a065e0a48b909ae79fbb3dd750e1eb5": {
"meta": {
"icons": "https://img.icons8.com/officel/80/id-verified.png",
@ -69,7 +83,7 @@
},
"456d3a031a140d43f54690ea7203628d": {
"meta": {
"icons": "https://img.icons8.com/officel/80/property-with-timer.png",
"icons": "/p/src/gonganxitong/event.png?pod=20240724-community",
"index": "web.team.renzhengshouquan.event",
"name": "事件流",
"order": "504",
@ -91,7 +105,7 @@
"4cac9ca99ccb8db395f703434647f5f3": {
"meta": {
"enable": "false",
"icons": "https://img.icons8.com/officel/80/settings--v1.png",
"icons": "/p/src/gonganxitong/setting.png?pod=20240724-community",
"index": "web.team.renzhengshouquan.setting",
"name": "服务配置",
"order": "103",
@ -113,7 +127,7 @@
},
"52fb3a7d85d879b638cc246850b236f6": {
"meta": {
"icons": "https://img.icons8.com/officel/80/qr-code.png",
"icons": "/p/src/gonganxitong/qrcode.png?pod=20240724-community",
"index": "web.team.renzhengshouquan.qrcode",
"name": "场景码",
"order": "501",
@ -148,7 +162,7 @@
},
"732373815fa26c85ad04dd57ca57db39": {
"meta": {
"icons": "https://img.icons8.com/officel/80/edit-property.png",
"icons": "/p/src/gonganxitong/apply.png?pod=20240724-community",
"index": "web.team.renzhengshouquan.apply",
"name": "权限申请",
"order": "502",
@ -214,7 +228,7 @@
},
"9e52a4f0a1a8d35c14b40d14b0d9cff1": {
"meta": {
"icons": "https://img.icons8.com/officel/80/test-partial-passed.png",
"icons": "/p/src/gonganxitong/message.png?pod=20240724-community",
"index": "web.team.renzhengshouquan.message",
"name": "消息待办",
"order": "902",
@ -223,7 +237,7 @@
},
"a040dfa713a6fa9533b3184244dbbb74": {
"meta": {
"icons": "https://img.icons8.com/officel/80/customer-support.png",
"icons": "/p/src/gonganxitong/support.png?pod=20240724-community",
"index": "web.team.renzhengshouquan.support",
"name": "客服支持",
"order": "905",
@ -262,7 +276,7 @@
"bfecb55b11fe68186270fe1b4b8de8cf": {
"meta": {
"enable": "false",
"icons": "https://img.icons8.com/officel/80/person-at-home.png",
"icons": "/p/src/gonganxitong/member.png?pod=20240724-community",
"index": "web.team.renzhengshouquan.member",
"name": "组织成员",
"order": "102",
@ -284,7 +298,7 @@
},
"d9f55b517f4b2579693523ed3b5bd088": {
"meta": {
"icons": "https://img.icons8.com/officel/80/square.png",
"icons": "/p/src/gonganxitong/market.png?pod=20240724-community",
"index": "web.team.renzhengshouquan.market",
"name": "人民广场",
"order": "901",
@ -305,7 +319,7 @@
},
"e038450591f3c8e7babc0c21b1c6fa6d": {
"meta": {
"icons": "https://img.icons8.com/officel/80/multiple-smartphones.png",
"icons": "/p/src/gonganxitong/recent.png?pod=20240724-community",
"index": "web.team.renzhengshouquan.recent",
"name": "最近访问",
"order": "903",
@ -314,7 +328,7 @@
},
"ecfb11fad5b4bdf21384e2e1ff571598": {
"meta": {
"icons": "https://img.icons8.com/officel/80/commercial.png",
"icons": "/p/src/gonganxitong/notice.png?pod=20240724-community",
"index": "web.team.renzhengshouquan.notice",
"name": "通知公告",
"order": "505",
@ -325,7 +339,7 @@
"f669e15e1c1c9da2bd3ea0c58abc0bd3": {
"meta": {
"enable": "false",
"icons": "https://img.icons8.com/officel/80/passport.png",
"icons": "/p/src/gonganxitong/credit.png?pod=20240724-community",
"index": "web.team.renzhengshouquan.credit",
"name": "用户名片",
"order": "101",
@ -334,7 +348,7 @@
},
"f6b093d122ff3cec363b00093e0a6f19": {
"meta": {
"icons": "https://img.icons8.com/officel/80/activity-grid.png",
"icons": "/p/src/gonganxitong/service.png?pod=20240724-community",
"index": "web.team.renzhengshouquan.service",
"name": "服务发现",
"order": "904",

View File

@ -32,7 +32,7 @@
},
"2ed70cba7eb6d3cf5fbe712c63da87a7": {
"meta": {
"icons": "https://img.icons8.com/officel/80/square.png",
"icons": "/p/src/gonganxitong/market.png?pod=20240724-community",
"index": "web.team.yuehaoxitong.market",
"name": "人民广场",
"order": "901",
@ -41,7 +41,7 @@
},
"2f55ab55e536839d2f400ed50832bfb9": {
"meta": {
"icons": "https://img.icons8.com/officel/80/passport.png",
"icons": "/p/src/gonganxitong/credit.png?pod=20240724-community",
"index": "web.team.yuehaoxitong.credit",
"name": "用户名片",
"order": "101",
@ -61,7 +61,7 @@
},
"377f3c0dae9dbf423a8e188bfd245b7a": {
"meta": {
"icons": "https://img.icons8.com/officel/80/multiple-smartphones.png",
"icons": "/p/src/gonganxitong/recent.png?pod=20240724-community",
"index": "web.team.yuehaoxitong.recent",
"name": "最近访问",
"order": "903",
@ -70,7 +70,7 @@
},
"3b6da44aaf19fdb06c84fe352569359f": {
"meta": {
"icons": "https://img.icons8.com/officel/80/qr-code.png",
"icons": "/p/src/gonganxitong/qrcode.png?pod=20240724-community",
"index": "web.team.yuehaoxitong.qrcode",
"name": "场景码",
"order": "501",
@ -80,7 +80,7 @@
},
"46f2ba39a0620f04aab46a999c359a2b": {
"meta": {
"icons": "https://img.icons8.com/officel/80/receipt-approved.png",
"icons": "/p/src/gonganxitong/allow.png?pod=20240724-community",
"index": "web.team.yuehaoxitong.allow",
"name": "权限审批",
"order": "503",
@ -90,7 +90,7 @@
},
"55ef7eaaa62b19b296b633c1c550f756": {
"meta": {
"icons": "https://img.icons8.com/officel/80/settings--v1.png",
"icons": "/p/src/gonganxitong/setting.png?pod=20240724-community",
"index": "web.team.yuehaoxitong.setting",
"name": "服务配置",
"order": "103",
@ -129,6 +129,13 @@
"time": "2024-08-11 09:30:00.538"
}
},
"79934714b27083087d2ea771e19192d3": {
"meta": {
"icons": "/p/src/yuehaoxitong/src/gonganxitong/spendlist.png",
"index": "web.team.yuehaoxitong.spendlist",
"time": "2025-04-19 08:28:11.381"
}
},
"8d3a66184c4da374081216d6c4d491b5": {
"meta": {
"auth": "issued",
@ -142,7 +149,7 @@
},
"98d6d53a44113b33a82c4e914cb23489": {
"meta": {
"icons": "https://img.icons8.com/officel/80/test-partial-passed.png",
"icons": "/p/src/gonganxitong/message.png?pod=20240724-community",
"index": "web.team.yuehaoxitong.message",
"name": "消息待办",
"order": "902",
@ -152,7 +159,7 @@
"a3d526b8fc09121a7186775cca6d9026": {
"meta": {
"auth": "issued",
"icons": "https://img.icons8.com/officel/50/ios-photos.png",
"icons": "https://img.icons8.com/officel/80/ios-photos.png",
"index": "web.team.yuehaoxitong.photo",
"name": "在线相册",
"order": "95",
@ -162,7 +169,7 @@
},
"a56cb18131ff45616849e4555e29d35d": {
"meta": {
"icons": "https://img.icons8.com/officel/80/edit-property.png",
"icons": "/p/src/gonganxitong/apply.png?pod=20240724-community",
"index": "web.team.yuehaoxitong.apply",
"name": "权限申请",
"order": "502",
@ -182,7 +189,7 @@
},
"b66f57a7a84d982b1b3a74ac3bdc045c": {
"meta": {
"icons": "https://img.icons8.com/officel/80/commercial.png",
"icons": "/p/src/gonganxitong/notice.png?pod=20240724-community",
"index": "web.team.yuehaoxitong.notice",
"name": "通知公告",
"order": "505",
@ -192,7 +199,7 @@
},
"b811b4ed8b1b372958bbb4bb1b2709b8": {
"meta": {
"icons": "https://img.icons8.com/officel/80/customer-support.png",
"icons": "/p/src/gonganxitong/support.png?pod=20240724-community",
"index": "web.team.yuehaoxitong.support",
"name": "客服支持",
"order": "905",
@ -222,7 +229,7 @@
},
"c14a5a400c933fe799ed10b069990865": {
"meta": {
"icons": "https://img.icons8.com/officel/80/person-at-home.png",
"icons": "/p/src/gonganxitong/member.png?pod=20240724-community",
"index": "web.team.yuehaoxitong.member",
"name": "组织成员",
"order": "102",
@ -230,10 +237,17 @@
"time": "2024-08-12 08:56:10.816"
}
},
"ca139b34295fc6d13d97430764cf3334": {
"meta": {
"icons": "/p/src/yuehaoxitong/src/gonganxitong/quotalist.png",
"index": "web.team.yuehaoxitong.quotalist",
"time": "2025-04-19 08:28:11.483"
}
},
"cb5d53223069ec8d9914ec30ca84ec4a": {
"meta": {
"auth": "issued",
"icons": "https://img.icons8.com/officel/50/documents.png",
"icons": "https://img.icons8.com/officel/80/documents.png",
"index": "web.team.yuehaoxitong.document",
"name": "在线文档",
"order": "93",
@ -243,7 +257,7 @@
},
"d1e03d214890c9a4b9557d3f6a36c7e9": {
"meta": {
"icons": "https://img.icons8.com/officel/80/activity-grid.png",
"icons": "/p/src/gonganxitong/service.png?pod=20240724-community",
"index": "web.team.yuehaoxitong.service",
"name": "服务发现",
"order": "904",
@ -261,7 +275,7 @@
},
"fa4365d6c914365e4b047c9266e9a02f": {
"meta": {
"icons": "https://img.icons8.com/officel/80/property-with-timer.png",
"icons": "/p/src/gonganxitong/event.png?pod=20240724-community",
"index": "web.team.yuehaoxitong.event",
"name": "事件流",
"order": "504",