This commit is contained in:
IT 老营长 @云轩领航-创始人 2024-09-24 13:11:28 +08:00
parent f4704d36b9
commit 2351b26ecf
47 changed files with 1466 additions and 365 deletions

View File

@ -0,0 +1,69 @@
package api
const GONGANXITONG_PORTAL = "web.team.gonganxitong.portal"
const GONGANXITONG_ALLOW = "web.team.gonganxitong.allow"
const GONGANXITONG_APPLY = "web.team.gonganxitong.apply"
const GONGANXITONG_DOMAIN = "web.team.gonganxitong.domain"
const GONGANXITONG_EMAIL = "web.team.gonganxitong.email"
const GONGANXITONG_EVENT = "web.team.gonganxitong.event"
const GONGANXITONG_MARKET = "web.team.gonganxitong.market"
const GONGANXITONG_MEMBER = "web.team.gonganxitong.member"
const GONGANXITONG_MESSAGE = "web.team.gonganxitong.message"
const GONGANXITONG_NOTICE = "web.team.gonganxitong.notice"
const GONGANXITONG_QRCODE = "web.team.gonganxitong.qrcode"
const GONGANXITONG_RECENT = "web.team.gonganxitong.recent"
const GONGANXITONG_SERVICE = "web.team.gonganxitong.service"
const GONGANXITONG_SETTING = "web.team.gonganxitong.setting"
const GONGANXITONG_SUPPORT = "web.team.gonganxitong.support"
const HUODONGZUZHI_ACTIVITY = "web.team.huodongzuzhi.activity"
const HUODONGZUZHI_PORTAL = "web.team.huodongzuzhi.portal"
const HUODONGZUZHI_ALLOW = "web.team.huodongzuzhi.allow"
const HUODONGZUZHI_APPLY = "web.team.huodongzuzhi.apply"
const HUODONGZUZHI_EVENT = "web.team.huodongzuzhi.event"
const HUODONGZUZHI_MARKET = "web.team.huodongzuzhi.market"
const HUODONGZUZHI_MEMBER = "web.team.huodongzuzhi.member"
const HUODONGZUZHI_MESSAGE = "web.team.huodongzuzhi.message"
const HUODONGZUZHI_NOTICE = "web.team.huodongzuzhi.notice"
const HUODONGZUZHI_QRCODE = "web.team.huodongzuzhi.qrcode"
const HUODONGZUZHI_RECENT = "web.team.huodongzuzhi.recent"
const HUODONGZUZHI_SERVICE = "web.team.huodongzuzhi.service"
const HUODONGZUZHI_SETTING = "web.team.huodongzuzhi.setting"
const HUODONGZUZHI_SUPPORT = "web.team.huodongzuzhi.support"
const RENZHENGSHOUQUAN_PORTAL = "web.team.renzhengshouquan.portal"
const RENZHENGSHOUQUAN_ALLOW = "web.team.renzhengshouquan.allow"
const RENZHENGSHOUQUAN_APPLY = "web.team.renzhengshouquan.apply"
const RENZHENGSHOUQUAN_AUTH = "web.team.renzhengshouquan.auth"
const RENZHENGSHOUQUAN_CERT = "web.team.renzhengshouquan.cert"
const RENZHENGSHOUQUAN_DOMAIN = "web.team.renzhengshouquan.domain"
const RENZHENGSHOUQUAN_EVENT = "web.team.renzhengshouquan.event"
const RENZHENGSHOUQUAN_MARKET = "web.team.renzhengshouquan.market"
const RENZHENGSHOUQUAN_MEMBER = "web.team.renzhengshouquan.member"
const RENZHENGSHOUQUAN_MESSAGE = "web.team.renzhengshouquan.message"
const RENZHENGSHOUQUAN_NOTICE = "web.team.renzhengshouquan.notice"
const RENZHENGSHOUQUAN_PROFILE = "web.team.renzhengshouquan.profile"
const RENZHENGSHOUQUAN_QRCODE = "web.team.renzhengshouquan.qrcode"
const RENZHENGSHOUQUAN_RECENT = "web.team.renzhengshouquan.recent"
const RENZHENGSHOUQUAN_SERVICE = "web.team.renzhengshouquan.service"
const RENZHENGSHOUQUAN_SETTING = "web.team.renzhengshouquan.setting"
const RENZHENGSHOUQUAN_SUPPORT = "web.team.renzhengshouquan.support"
const YUEHAOXITONG_PORTAL = "web.team.yuehaoxitong.portal"
const YUEHAOXITONG_ALLOW = "web.team.yuehaoxitong.allow"
const YUEHAOXITONG_APPLY = "web.team.yuehaoxitong.apply"
const YUEHAOXITONG_CALL = "web.team.yuehaoxitong.call"
const YUEHAOXITONG_EVENT = "web.team.yuehaoxitong.event"
const YUEHAOXITONG_HISTORY = "web.team.yuehaoxitong.history"
const YUEHAOXITONG_MARKET = "web.team.yuehaoxitong.market"
const YUEHAOXITONG_MEMBER = "web.team.yuehaoxitong.member"
const YUEHAOXITONG_MESSAGE = "web.team.yuehaoxitong.message"
const YUEHAOXITONG_NOTICE = "web.team.yuehaoxitong.notice"
const YUEHAOXITONG_OPEN = "web.team.yuehaoxitong.open"
const YUEHAOXITONG_PLAN = "web.team.yuehaoxitong.plan"
const YUEHAOXITONG_QRCODE = "web.team.yuehaoxitong.qrcode"
const YUEHAOXITONG_RECENT = "web.team.yuehaoxitong.recent"
const YUEHAOXITONG_RECEPTION = "web.team.yuehaoxitong.reception"
const YUEHAOXITONG_SCHEDULE = "web.team.yuehaoxitong.schedule"
const YUEHAOXITONG_SERVICE = "web.team.yuehaoxitong.service"
const YUEHAOXITONG_SETTING = "web.team.yuehaoxitong.setting"
const YUEHAOXITONG_SUPPORT = "web.team.yuehaoxitong.support"
const YUEHAOXITONG_TAKE = "web.team.yuehaoxitong.take"
const YUEHAOXITONG_VOLUME = "web.team.yuehaoxitong.volume"

View File

@ -0,0 +1,59 @@
package api
const JIAOCAIZILIAO_PORTAL = "web.team.jiaocaiziliao.portal"
const JIAOCAIZILIAO_ALLOW = "web.team.jiaocaiziliao.allow"
const JIAOCAIZILIAO_APPLY = "web.team.jiaocaiziliao.apply"
const JIAOCAIZILIAO_DOCUMENT = "web.team.jiaocaiziliao.document"
const JIAOCAIZILIAO_EVENT = "web.team.jiaocaiziliao.event"
const JIAOCAIZILIAO_MARKET = "web.team.jiaocaiziliao.market"
const JIAOCAIZILIAO_MEMBER = "web.team.jiaocaiziliao.member"
const JIAOCAIZILIAO_MESSAGE = "web.team.jiaocaiziliao.message"
const JIAOCAIZILIAO_NOTICE = "web.team.jiaocaiziliao.notice"
const JIAOCAIZILIAO_OFFICIAL = "web.team.jiaocaiziliao.official"
const JIAOCAIZILIAO_QRCODE = "web.team.jiaocaiziliao.qrcode"
const JIAOCAIZILIAO_RECENT = "web.team.jiaocaiziliao.recent"
const JIAOCAIZILIAO_SERVICE = "web.team.jiaocaiziliao.service"
const JIAOCAIZILIAO_SETTING = "web.team.jiaocaiziliao.setting"
const JIAOCAIZILIAO_SUPPORT = "web.team.jiaocaiziliao.support"
const JIAOWUXITONG_PORTAL = "web.team.jiaowuxitong.portal"
const JIAOWUXITONG_ALLOW = "web.team.jiaowuxitong.allow"
const JIAOWUXITONG_APPLY = "web.team.jiaowuxitong.apply"
const JIAOWUXITONG_EVENT = "web.team.jiaowuxitong.event"
const JIAOWUXITONG_HOMEWORK = "web.team.jiaowuxitong.homework"
const JIAOWUXITONG_MARKET = "web.team.jiaowuxitong.market"
const JIAOWUXITONG_MEMBER = "web.team.jiaowuxitong.member"
const JIAOWUXITONG_MESSAGE = "web.team.jiaowuxitong.message"
const JIAOWUXITONG_NOTICE = "web.team.jiaowuxitong.notice"
const JIAOWUXITONG_QRCODE = "web.team.jiaowuxitong.qrcode"
const JIAOWUXITONG_RECENT = "web.team.jiaowuxitong.recent"
const JIAOWUXITONG_SERVICE = "web.team.jiaowuxitong.service"
const JIAOWUXITONG_SETTING = "web.team.jiaowuxitong.setting"
const JIAOWUXITONG_SUPPORT = "web.team.jiaowuxitong.support"
const KAOSHIXITONG_PORTAL = "web.team.kaoshixitong.portal"
const KAOSHIXITONG_ALLOW = "web.team.kaoshixitong.allow"
const KAOSHIXITONG_APPLY = "web.team.kaoshixitong.apply"
const KAOSHIXITONG_EVENT = "web.team.kaoshixitong.event"
const KAOSHIXITONG_MARKET = "web.team.kaoshixitong.market"
const KAOSHIXITONG_MEMBER = "web.team.kaoshixitong.member"
const KAOSHIXITONG_MESSAGE = "web.team.kaoshixitong.message"
const KAOSHIXITONG_NOTICE = "web.team.kaoshixitong.notice"
const KAOSHIXITONG_QRCODE = "web.team.kaoshixitong.qrcode"
const KAOSHIXITONG_QUESTION = "web.team.kaoshixitong.question"
const KAOSHIXITONG_RECENT = "web.team.kaoshixitong.recent"
const KAOSHIXITONG_SERVICE = "web.team.kaoshixitong.service"
const KAOSHIXITONG_SETTING = "web.team.kaoshixitong.setting"
const KAOSHIXITONG_SUPPORT = "web.team.kaoshixitong.support"
const ZAIXIANKETANG_PORTAL = "web.team.zaixianketang.portal"
const ZAIXIANKETANG_ALLOW = "web.team.zaixianketang.allow"
const ZAIXIANKETANG_APPLY = "web.team.zaixianketang.apply"
const ZAIXIANKETANG_EVENT = "web.team.zaixianketang.event"
const ZAIXIANKETANG_LESSON = "web.team.zaixianketang.lesson"
const ZAIXIANKETANG_MARKET = "web.team.zaixianketang.market"
const ZAIXIANKETANG_MEMBER = "web.team.zaixianketang.member"
const ZAIXIANKETANG_MESSAGE = "web.team.zaixianketang.message"
const ZAIXIANKETANG_NOTICE = "web.team.zaixianketang.notice"
const ZAIXIANKETANG_QRCODE = "web.team.zaixianketang.qrcode"
const ZAIXIANKETANG_RECENT = "web.team.zaixianketang.recent"
const ZAIXIANKETANG_SERVICE = "web.team.zaixianketang.service"
const ZAIXIANKETANG_SETTING = "web.team.zaixianketang.setting"
const ZAIXIANKETANG_SUPPORT = "web.team.zaixianketang.support"

View File

@ -0,0 +1,74 @@
package api
const GONGYINGLIAN_PORTAL = "web.team.gongyinglian.portal"
const GONGYINGLIAN_ALLOW = "web.team.gongyinglian.allow"
const GONGYINGLIAN_APPLY = "web.team.gongyinglian.apply"
const GONGYINGLIAN_BRAND = "web.team.gongyinglian.brand"
const GONGYINGLIAN_EVENT = "web.team.gongyinglian.event"
const GONGYINGLIAN_EXPENSE = "web.team.gongyinglian.expense"
const GONGYINGLIAN_EXPRESS = "web.team.gongyinglian.express"
const GONGYINGLIAN_GOODS = "web.team.gongyinglian.goods"
const GONGYINGLIAN_LOAN = "web.team.gongyinglian.loan"
const GONGYINGLIAN_MARKET = "web.team.gongyinglian.market"
const GONGYINGLIAN_MATERIAL = "web.team.gongyinglian.material"
const GONGYINGLIAN_MEMBER = "web.team.gongyinglian.member"
const GONGYINGLIAN_MESSAGE = "web.team.gongyinglian.message"
const GONGYINGLIAN_NOTICE = "web.team.gongyinglian.notice"
const GONGYINGLIAN_ORDER = "web.team.gongyinglian.order"
const GONGYINGLIAN_PAYMENT = "web.team.gongyinglian.payment"
const GONGYINGLIAN_PRODUCE = "web.team.gongyinglian.produce"
const GONGYINGLIAN_PRODUCT = "web.team.gongyinglian.product"
const GONGYINGLIAN_PURCHASE = "web.team.gongyinglian.purchase"
const GONGYINGLIAN_QRCODE = "web.team.gongyinglian.qrcode"
const GONGYINGLIAN_QUALITY = "web.team.gongyinglian.quality"
const GONGYINGLIAN_RECENT = "web.team.gongyinglian.recent"
const GONGYINGLIAN_REFUND = "web.team.gongyinglian.refund"
const GONGYINGLIAN_RETURN = "web.team.gongyinglian.return"
const GONGYINGLIAN_SELL = "web.team.gongyinglian.sell"
const GONGYINGLIAN_SERVICE = "web.team.gongyinglian.service"
const GONGYINGLIAN_SETTING = "web.team.gongyinglian.setting"
const GONGYINGLIAN_SHOP = "web.team.gongyinglian.shop"
const GONGYINGLIAN_SUPPORT = "web.team.gongyinglian.support"
const GONGYINGLIAN_WAREHOUSE = "web.team.gongyinglian.warehouse"
const GUANLIXITONG_PORTAL = "web.team.guanlixitong.portal"
const GUANLIXITONG_ALLOW = "web.team.guanlixitong.allow"
const GUANLIXITONG_APPLY = "web.team.guanlixitong.apply"
const GUANLIXITONG_EVENT = "web.team.guanlixitong.event"
const GUANLIXITONG_MARKET = "web.team.guanlixitong.market"
const GUANLIXITONG_MEMBER = "web.team.guanlixitong.member"
const GUANLIXITONG_MESSAGE = "web.team.guanlixitong.message"
const GUANLIXITONG_NOTICE = "web.team.guanlixitong.notice"
const GUANLIXITONG_QRCODE = "web.team.guanlixitong.qrcode"
const GUANLIXITONG_RECENT = "web.team.guanlixitong.recent"
const GUANLIXITONG_SERVICE = "web.team.guanlixitong.service"
const GUANLIXITONG_SETTING = "web.team.guanlixitong.setting"
const GUANLIXITONG_SUPPORT = "web.team.guanlixitong.support"
const GUANLIXITONG_TARGET = "web.team.guanlixitong.target"
const SHICHANGYINGXIAO_PORTAL = "web.team.shichangyingxiao.portal"
const SHICHANGYINGXIAO_ALLOW = "web.team.shichangyingxiao.allow"
const SHICHANGYINGXIAO_APPLY = "web.team.shichangyingxiao.apply"
const SHICHANGYINGXIAO_EVENT = "web.team.shichangyingxiao.event"
const SHICHANGYINGXIAO_MARKET = "web.team.shichangyingxiao.market"
const SHICHANGYINGXIAO_MEMBER = "web.team.shichangyingxiao.member"
const SHICHANGYINGXIAO_MESSAGE = "web.team.shichangyingxiao.message"
const SHICHANGYINGXIAO_NOTICE = "web.team.shichangyingxiao.notice"
const SHICHANGYINGXIAO_PROMOTION = "web.team.shichangyingxiao.promotion"
const SHICHANGYINGXIAO_QRCODE = "web.team.shichangyingxiao.qrcode"
const SHICHANGYINGXIAO_RECENT = "web.team.shichangyingxiao.recent"
const SHICHANGYINGXIAO_SERVICE = "web.team.shichangyingxiao.service"
const SHICHANGYINGXIAO_SETTING = "web.team.shichangyingxiao.setting"
const SHICHANGYINGXIAO_SUPPORT = "web.team.shichangyingxiao.support"
const ZIJINLIAN_PORTAL = "web.team.zijinlian.portal"
const ZIJINLIAN_ALLOW = "web.team.zijinlian.allow"
const ZIJINLIAN_APPLY = "web.team.zijinlian.apply"
const ZIJINLIAN_EVENT = "web.team.zijinlian.event"
const ZIJINLIAN_INVESTMENT = "web.team.zijinlian.investment"
const ZIJINLIAN_MARKET = "web.team.zijinlian.market"
const ZIJINLIAN_MEMBER = "web.team.zijinlian.member"
const ZIJINLIAN_MESSAGE = "web.team.zijinlian.message"
const ZIJINLIAN_NOTICE = "web.team.zijinlian.notice"
const ZIJINLIAN_QRCODE = "web.team.zijinlian.qrcode"
const ZIJINLIAN_RECENT = "web.team.zijinlian.recent"
const ZIJINLIAN_SERVICE = "web.team.zijinlian.service"
const ZIJINLIAN_SETTING = "web.team.zijinlian.setting"
const ZIJINLIAN_SUPPORT = "web.team.zijinlian.support"

View File

@ -0,0 +1,76 @@
package api
const DASHBOARD_PORTAL = "web.team.dashboard.portal"
const DASHBOARD_ALLOW = "web.team.dashboard.allow"
const DASHBOARD_APPLY = "web.team.dashboard.apply"
const DASHBOARD_DASHBOARD = "web.team.dashboard.dashboard"
const DASHBOARD_EVENT = "web.team.dashboard.event"
const DASHBOARD_MARKET = "web.team.dashboard.market"
const DASHBOARD_MEMBER = "web.team.dashboard.member"
const DASHBOARD_MESSAGE = "web.team.dashboard.message"
const DASHBOARD_NOTICE = "web.team.dashboard.notice"
const DASHBOARD_QRCODE = "web.team.dashboard.qrcode"
const DASHBOARD_RECENT = "web.team.dashboard.recent"
const DASHBOARD_SERVICE = "web.team.dashboard.service"
const DASHBOARD_SETTING = "web.team.dashboard.setting"
const DASHBOARD_SUMMARY = "web.team.dashboard.summary"
const DASHBOARD_SUPPORT = "web.team.dashboard.support"
const DEVELOPMENT_PORTAL = "web.team.development.portal"
const DEVELOPMENT_ALLOW = "web.team.development.allow"
const DEVELOPMENT_APPLY = "web.team.development.apply"
const DEVELOPMENT_EVENT = "web.team.development.event"
const DEVELOPMENT_MARKET = "web.team.development.market"
const DEVELOPMENT_MEMBER = "web.team.development.member"
const DEVELOPMENT_MESSAGE = "web.team.development.message"
const DEVELOPMENT_NOTICE = "web.team.development.notice"
const DEVELOPMENT_QRCODE = "web.team.development.qrcode"
const DEVELOPMENT_RECENT = "web.team.development.recent"
const DEVELOPMENT_SERVICE = "web.team.development.service"
const DEVELOPMENT_SETTING = "web.team.development.setting"
const DEVELOPMENT_SUPPORT = "web.team.development.support"
const DEVELOPMENT_VERSION = "web.team.development.version"
const OPERATION_PORTAL = "web.team.operation.portal"
const OPERATION_ALLOW = "web.team.operation.allow"
const OPERATION_APPLY = "web.team.operation.apply"
const OPERATION_EVENT = "web.team.operation.event"
const OPERATION_MARKET = "web.team.operation.market"
const OPERATION_MEMBER = "web.team.operation.member"
const OPERATION_MESSAGE = "web.team.operation.message"
const OPERATION_NOTICE = "web.team.operation.notice"
const OPERATION_QRCODE = "web.team.operation.qrcode"
const OPERATION_RECENT = "web.team.operation.recent"
const OPERATION_RELEASE = "web.team.operation.release"
const OPERATION_SERVICE = "web.team.operation.service"
const OPERATION_SETTING = "web.team.operation.setting"
const OPERATION_SUPPORT = "web.team.operation.support"
const PRODUCTION_PORTAL = "web.team.production.portal"
const PRODUCTION_ALLOW = "web.team.production.allow"
const PRODUCTION_APPLY = "web.team.production.apply"
const PRODUCTION_CASE = "web.team.production.case"
const PRODUCTION_EVENT = "web.team.production.event"
const PRODUCTION_ISSUE = "web.team.production.issue"
const PRODUCTION_MARKET = "web.team.production.market"
const PRODUCTION_MEMBER = "web.team.production.member"
const PRODUCTION_MESSAGE = "web.team.production.message"
const PRODUCTION_NOTICE = "web.team.production.notice"
const PRODUCTION_PLAN = "web.team.production.plan"
const PRODUCTION_QRCODE = "web.team.production.qrcode"
const PRODUCTION_RECENT = "web.team.production.recent"
const PRODUCTION_SERVICE = "web.team.production.service"
const PRODUCTION_SETTING = "web.team.production.setting"
const PRODUCTION_SUPPORT = "web.team.production.support"
const PRODUCTION_TASK = "web.team.production.task"
const STORAGE_PORTAL = "web.team.storage.portal"
const STORAGE_ALLOW = "web.team.storage.allow"
const STORAGE_APPLY = "web.team.storage.apply"
const STORAGE_EVENT = "web.team.storage.event"
const STORAGE_FILE = "web.team.storage.file"
const STORAGE_MARKET = "web.team.storage.market"
const STORAGE_MEMBER = "web.team.storage.member"
const STORAGE_MESSAGE = "web.team.storage.message"
const STORAGE_NOTICE = "web.team.storage.notice"
const STORAGE_QRCODE = "web.team.storage.qrcode"
const STORAGE_RECENT = "web.team.storage.recent"
const STORAGE_SERVICE = "web.team.storage.service"
const STORAGE_SETTING = "web.team.storage.setting"
const STORAGE_SUPPORT = "web.team.storage.support"

274
src/api/space.go Normal file
View File

@ -0,0 +1,274 @@
package api
var Trans = map[string]string{
"web.team.gonganxitong.portal": "20240724-community",
"web.team.gonganxitong.allow": "20240724-community",
"web.team.gonganxitong.apply": "20240724-community",
"web.team.gonganxitong.domain": "20240724-community",
"web.team.gonganxitong.email": "20240724-community",
"web.team.gonganxitong.event": "20240724-community",
"web.team.gonganxitong.market": "20240724-community",
"web.team.gonganxitong.member": "20240724-community",
"web.team.gonganxitong.message": "20240724-community",
"web.team.gonganxitong.notice": "20240724-community",
"web.team.gonganxitong.qrcode": "20240724-community",
"web.team.gonganxitong.recent": "20240724-community",
"web.team.gonganxitong.service": "20240724-community",
"web.team.gonganxitong.setting": "20240724-community",
"web.team.gonganxitong.support": "20240724-community",
"web.team.huodongzuzhi.activity": "20240724-community",
"web.team.huodongzuzhi.portal": "20240724-community",
"web.team.huodongzuzhi.allow": "20240724-community",
"web.team.huodongzuzhi.apply": "20240724-community",
"web.team.huodongzuzhi.event": "20240724-community",
"web.team.huodongzuzhi.market": "20240724-community",
"web.team.huodongzuzhi.member": "20240724-community",
"web.team.huodongzuzhi.message": "20240724-community",
"web.team.huodongzuzhi.notice": "20240724-community",
"web.team.huodongzuzhi.qrcode": "20240724-community",
"web.team.huodongzuzhi.recent": "20240724-community",
"web.team.huodongzuzhi.service": "20240724-community",
"web.team.huodongzuzhi.setting": "20240724-community",
"web.team.huodongzuzhi.support": "20240724-community",
"web.team.renzhengshouquan.portal": "20240724-community",
"web.team.renzhengshouquan.allow": "20240724-community",
"web.team.renzhengshouquan.apply": "20240724-community",
"web.team.renzhengshouquan.auth": "20240724-community",
"web.team.renzhengshouquan.cert": "20240724-community",
"web.team.renzhengshouquan.domain": "20240724-community",
"web.team.renzhengshouquan.event": "20240724-community",
"web.team.renzhengshouquan.market": "20240724-community",
"web.team.renzhengshouquan.member": "20240724-community",
"web.team.renzhengshouquan.message": "20240724-community",
"web.team.renzhengshouquan.notice": "20240724-community",
"web.team.renzhengshouquan.profile": "20240724-community",
"web.team.renzhengshouquan.qrcode": "20240724-community",
"web.team.renzhengshouquan.recent": "20240724-community",
"web.team.renzhengshouquan.service": "20240724-community",
"web.team.renzhengshouquan.setting": "20240724-community",
"web.team.renzhengshouquan.support": "20240724-community",
"web.team.yuehaoxitong.portal": "20240724-community",
"web.team.yuehaoxitong.allow": "20240724-community",
"web.team.yuehaoxitong.apply": "20240724-community",
"web.team.yuehaoxitong.call": "20240724-community",
"web.team.yuehaoxitong.event": "20240724-community",
"web.team.yuehaoxitong.history": "20240724-community",
"web.team.yuehaoxitong.market": "20240724-community",
"web.team.yuehaoxitong.member": "20240724-community",
"web.team.yuehaoxitong.message": "20240724-community",
"web.team.yuehaoxitong.notice": "20240724-community",
"web.team.yuehaoxitong.open": "20240724-community",
"web.team.yuehaoxitong.plan": "20240724-community",
"web.team.yuehaoxitong.qrcode": "20240724-community",
"web.team.yuehaoxitong.recent": "20240724-community",
"web.team.yuehaoxitong.reception": "20240724-community",
"web.team.yuehaoxitong.schedule": "20240724-community",
"web.team.yuehaoxitong.service": "20240724-community",
"web.team.yuehaoxitong.setting": "20240724-community",
"web.team.yuehaoxitong.support": "20240724-community",
"web.team.yuehaoxitong.take": "20240724-community",
"web.team.yuehaoxitong.volume": "20240724-community",
"web.team.jiaocaiziliao.portal": "20240724-education",
"web.team.jiaocaiziliao.allow": "20240724-education",
"web.team.jiaocaiziliao.apply": "20240724-education",
"web.team.jiaocaiziliao.document": "20240724-education",
"web.team.jiaocaiziliao.event": "20240724-education",
"web.team.jiaocaiziliao.market": "20240724-education",
"web.team.jiaocaiziliao.member": "20240724-education",
"web.team.jiaocaiziliao.message": "20240724-education",
"web.team.jiaocaiziliao.notice": "20240724-education",
"web.team.jiaocaiziliao.official": "20240724-education",
"web.team.jiaocaiziliao.qrcode": "20240724-education",
"web.team.jiaocaiziliao.recent": "20240724-education",
"web.team.jiaocaiziliao.service": "20240724-education",
"web.team.jiaocaiziliao.setting": "20240724-education",
"web.team.jiaocaiziliao.support": "20240724-education",
"web.team.jiaowuxitong.portal": "20240724-education",
"web.team.jiaowuxitong.allow": "20240724-education",
"web.team.jiaowuxitong.apply": "20240724-education",
"web.team.jiaowuxitong.event": "20240724-education",
"web.team.jiaowuxitong.homework": "20240724-education",
"web.team.jiaowuxitong.market": "20240724-education",
"web.team.jiaowuxitong.member": "20240724-education",
"web.team.jiaowuxitong.message": "20240724-education",
"web.team.jiaowuxitong.notice": "20240724-education",
"web.team.jiaowuxitong.qrcode": "20240724-education",
"web.team.jiaowuxitong.recent": "20240724-education",
"web.team.jiaowuxitong.service": "20240724-education",
"web.team.jiaowuxitong.setting": "20240724-education",
"web.team.jiaowuxitong.support": "20240724-education",
"web.team.kaoshixitong.portal": "20240724-education",
"web.team.kaoshixitong.allow": "20240724-education",
"web.team.kaoshixitong.apply": "20240724-education",
"web.team.kaoshixitong.event": "20240724-education",
"web.team.kaoshixitong.market": "20240724-education",
"web.team.kaoshixitong.member": "20240724-education",
"web.team.kaoshixitong.message": "20240724-education",
"web.team.kaoshixitong.notice": "20240724-education",
"web.team.kaoshixitong.qrcode": "20240724-education",
"web.team.kaoshixitong.question": "20240724-education",
"web.team.kaoshixitong.recent": "20240724-education",
"web.team.kaoshixitong.service": "20240724-education",
"web.team.kaoshixitong.setting": "20240724-education",
"web.team.kaoshixitong.support": "20240724-education",
"web.team.zaixianketang.portal": "20240724-education",
"web.team.zaixianketang.allow": "20240724-education",
"web.team.zaixianketang.apply": "20240724-education",
"web.team.zaixianketang.event": "20240724-education",
"web.team.zaixianketang.lesson": "20240724-education",
"web.team.zaixianketang.market": "20240724-education",
"web.team.zaixianketang.member": "20240724-education",
"web.team.zaixianketang.message": "20240724-education",
"web.team.zaixianketang.notice": "20240724-education",
"web.team.zaixianketang.qrcode": "20240724-education",
"web.team.zaixianketang.recent": "20240724-education",
"web.team.zaixianketang.service": "20240724-education",
"web.team.zaixianketang.setting": "20240724-education",
"web.team.zaixianketang.support": "20240724-education",
"web.team.gongyinglian.portal": "20240724-enterprise",
"web.team.gongyinglian.allow": "20240724-enterprise",
"web.team.gongyinglian.apply": "20240724-enterprise",
"web.team.gongyinglian.brand": "20240724-enterprise",
"web.team.gongyinglian.event": "20240724-enterprise",
"web.team.gongyinglian.expense": "20240724-enterprise",
"web.team.gongyinglian.express": "20240724-enterprise",
"web.team.gongyinglian.goods": "20240724-enterprise",
"web.team.gongyinglian.loan": "20240724-enterprise",
"web.team.gongyinglian.market": "20240724-enterprise",
"web.team.gongyinglian.material": "20240724-enterprise",
"web.team.gongyinglian.member": "20240724-enterprise",
"web.team.gongyinglian.message": "20240724-enterprise",
"web.team.gongyinglian.notice": "20240724-enterprise",
"web.team.gongyinglian.order": "20240724-enterprise",
"web.team.gongyinglian.payment": "20240724-enterprise",
"web.team.gongyinglian.produce": "20240724-enterprise",
"web.team.gongyinglian.product": "20240724-enterprise",
"web.team.gongyinglian.purchase": "20240724-enterprise",
"web.team.gongyinglian.qrcode": "20240724-enterprise",
"web.team.gongyinglian.quality": "20240724-enterprise",
"web.team.gongyinglian.recent": "20240724-enterprise",
"web.team.gongyinglian.refund": "20240724-enterprise",
"web.team.gongyinglian.return": "20240724-enterprise",
"web.team.gongyinglian.sell": "20240724-enterprise",
"web.team.gongyinglian.service": "20240724-enterprise",
"web.team.gongyinglian.setting": "20240724-enterprise",
"web.team.gongyinglian.shop": "20240724-enterprise",
"web.team.gongyinglian.support": "20240724-enterprise",
"web.team.gongyinglian.warehouse": "20240724-enterprise",
"web.team.guanlixitong.portal": "20240724-enterprise",
"web.team.guanlixitong.allow": "20240724-enterprise",
"web.team.guanlixitong.apply": "20240724-enterprise",
"web.team.guanlixitong.event": "20240724-enterprise",
"web.team.guanlixitong.market": "20240724-enterprise",
"web.team.guanlixitong.member": "20240724-enterprise",
"web.team.guanlixitong.message": "20240724-enterprise",
"web.team.guanlixitong.notice": "20240724-enterprise",
"web.team.guanlixitong.qrcode": "20240724-enterprise",
"web.team.guanlixitong.recent": "20240724-enterprise",
"web.team.guanlixitong.service": "20240724-enterprise",
"web.team.guanlixitong.setting": "20240724-enterprise",
"web.team.guanlixitong.support": "20240724-enterprise",
"web.team.guanlixitong.target": "20240724-enterprise",
"web.team.shichangyingxiao.portal": "20240724-enterprise",
"web.team.shichangyingxiao.allow": "20240724-enterprise",
"web.team.shichangyingxiao.apply": "20240724-enterprise",
"web.team.shichangyingxiao.event": "20240724-enterprise",
"web.team.shichangyingxiao.market": "20240724-enterprise",
"web.team.shichangyingxiao.member": "20240724-enterprise",
"web.team.shichangyingxiao.message": "20240724-enterprise",
"web.team.shichangyingxiao.notice": "20240724-enterprise",
"web.team.shichangyingxiao.promotion": "20240724-enterprise",
"web.team.shichangyingxiao.qrcode": "20240724-enterprise",
"web.team.shichangyingxiao.recent": "20240724-enterprise",
"web.team.shichangyingxiao.service": "20240724-enterprise",
"web.team.shichangyingxiao.setting": "20240724-enterprise",
"web.team.shichangyingxiao.support": "20240724-enterprise",
"web.team.zijinlian.portal": "20240724-enterprise",
"web.team.zijinlian.allow": "20240724-enterprise",
"web.team.zijinlian.apply": "20240724-enterprise",
"web.team.zijinlian.event": "20240724-enterprise",
"web.team.zijinlian.investment": "20240724-enterprise",
"web.team.zijinlian.market": "20240724-enterprise",
"web.team.zijinlian.member": "20240724-enterprise",
"web.team.zijinlian.message": "20240724-enterprise",
"web.team.zijinlian.notice": "20240724-enterprise",
"web.team.zijinlian.qrcode": "20240724-enterprise",
"web.team.zijinlian.recent": "20240724-enterprise",
"web.team.zijinlian.service": "20240724-enterprise",
"web.team.zijinlian.setting": "20240724-enterprise",
"web.team.zijinlian.support": "20240724-enterprise",
"web.team.dashboard.portal": "20240903-operation",
"web.team.dashboard.allow": "20240903-operation",
"web.team.dashboard.apply": "20240903-operation",
"web.team.dashboard.dashboard": "20240903-operation",
"web.team.dashboard.event": "20240903-operation",
"web.team.dashboard.market": "20240903-operation",
"web.team.dashboard.member": "20240903-operation",
"web.team.dashboard.message": "20240903-operation",
"web.team.dashboard.notice": "20240903-operation",
"web.team.dashboard.qrcode": "20240903-operation",
"web.team.dashboard.recent": "20240903-operation",
"web.team.dashboard.service": "20240903-operation",
"web.team.dashboard.setting": "20240903-operation",
"web.team.dashboard.summary": "20240903-operation",
"web.team.dashboard.support": "20240903-operation",
"web.team.development.portal": "20240903-operation",
"web.team.development.allow": "20240903-operation",
"web.team.development.apply": "20240903-operation",
"web.team.development.event": "20240903-operation",
"web.team.development.market": "20240903-operation",
"web.team.development.member": "20240903-operation",
"web.team.development.message": "20240903-operation",
"web.team.development.notice": "20240903-operation",
"web.team.development.qrcode": "20240903-operation",
"web.team.development.recent": "20240903-operation",
"web.team.development.service": "20240903-operation",
"web.team.development.setting": "20240903-operation",
"web.team.development.support": "20240903-operation",
"web.team.development.version": "20240903-operation",
"web.team.operation.portal": "20240903-operation",
"web.team.operation.allow": "20240903-operation",
"web.team.operation.apply": "20240903-operation",
"web.team.operation.event": "20240903-operation",
"web.team.operation.market": "20240903-operation",
"web.team.operation.member": "20240903-operation",
"web.team.operation.message": "20240903-operation",
"web.team.operation.notice": "20240903-operation",
"web.team.operation.qrcode": "20240903-operation",
"web.team.operation.recent": "20240903-operation",
"web.team.operation.release": "20240903-operation",
"web.team.operation.service": "20240903-operation",
"web.team.operation.setting": "20240903-operation",
"web.team.operation.support": "20240903-operation",
"web.team.production.portal": "20240903-operation",
"web.team.production.allow": "20240903-operation",
"web.team.production.apply": "20240903-operation",
"web.team.production.case": "20240903-operation",
"web.team.production.event": "20240903-operation",
"web.team.production.issue": "20240903-operation",
"web.team.production.market": "20240903-operation",
"web.team.production.member": "20240903-operation",
"web.team.production.message": "20240903-operation",
"web.team.production.notice": "20240903-operation",
"web.team.production.plan": "20240903-operation",
"web.team.production.qrcode": "20240903-operation",
"web.team.production.recent": "20240903-operation",
"web.team.production.service": "20240903-operation",
"web.team.production.setting": "20240903-operation",
"web.team.production.support": "20240903-operation",
"web.team.production.task": "20240903-operation",
"web.team.storage.portal": "20240903-operation",
"web.team.storage.allow": "20240903-operation",
"web.team.storage.apply": "20240903-operation",
"web.team.storage.event": "20240903-operation",
"web.team.storage.file": "20240903-operation",
"web.team.storage.market": "20240903-operation",
"web.team.storage.member": "20240903-operation",
"web.team.storage.message": "20240903-operation",
"web.team.storage.notice": "20240903-operation",
"web.team.storage.qrcode": "20240903-operation",
"web.team.storage.recent": "20240903-operation",
"web.team.storage.service": "20240903-operation",
"web.team.storage.setting": "20240903-operation",
"web.team.storage.support": "20240903-operation",
}

View File

@ -6,7 +6,11 @@ import (
"shylinux.com/x/community/src/gonganxitong/model"
)
type city struct{ Table }
type city struct {
Table
list string `name:"list city_name auto" role:"void"`
authCreate string `name:"authCreate city_name* city_info company_name*" role:"tech"`
}
func (s city) FindOrCreateByName(m *ice.Message, arg ...string) {
if msg := m.Cmd(s, s.Select, model.NAME, arg[1]); msg.Length() == 0 {
@ -16,5 +20,17 @@ func (s city) FindOrCreateByName(m *ice.Message, arg ...string) {
arg[0], arg[1] = model.CITY_UID, msg.Append(model.UID)
}
}
func (s city) List(m *ice.Message, arg ...string) {
if len(arg) == 0 {
s.Select(m).Action()
} else if len(arg) == 1 {
s.Select(m, model.NAME, arg[0]).Action()
if m.Append(model.AUTH_UID) == "" && m.IsTech() {
m.EchoInfoButton("请申请城市认证", s.AuthCreate)
}
}
}
func (s city) AuthCreate(m *ice.Message, arg ...string) {
s.Table.AuthCreate(m, m.Option(model.CITY_NAME), m.Option(model.COMPANY_NAME), 1, m.Option(model.CITY_NAME), m.Option(model.CITY_INFO), model.NAME, m.Option(model.CITY_NAME))
}
func init() { ice.TeamCtxCmd(city{}) }

View File

@ -1,7 +1,12 @@
package gonganxitong
import (
"fmt"
"io"
"strings"
"shylinux.com/x/ice"
"shylinux.com/x/icebergs/base/nfs"
kit "shylinux.com/x/toolkits"
"shylinux.com/x/community/src/gonganxitong/model"
@ -20,5 +25,39 @@ func (s command) Modify(m *ice.Message, arg ...string) {
s.Update(m, kit.Dict(arg), model.UID, uid)
m.SetResult().Echo(uid)
}
func (s command) Autogen(m *ice.Message, arg ...string) {
list := map[string][]string{}
s.List(m).Table(func(value ice.Maps) {
if strings.HasSuffix(value[model.INDEX], ".allow") {
list[value[model.SPACE]] = append(list[value[model.SPACE]], strings.ReplaceAll(value[model.INDEX], ".allow", ".portal"))
}
list[value[model.SPACE]] = append(list[value[model.SPACE]], value[model.INDEX])
})
for p, v := range list {
nfs.Create(m.Message, "src/api/"+p+".go", func(w io.Writer) {
fmt.Fprintf(w, "package api\n\n")
for _, v := range v {
fmt.Fprintf(w, "const %s = \"%s\"\n", strings.ToUpper(strings.ReplaceAll(strings.TrimPrefix(v, "web.team."), ".", "_")), v)
}
})
}
nfs.Create(m.Message, "src/api/space.go", func(w io.Writer) {
fmt.Fprintf(w, "package api\n\n")
fmt.Fprintf(w, "var Trans = map[string]string{\n")
for p, v := range list {
for _, v := range v {
fmt.Fprintf(w, "\"%s\": \"%s\",\n", v, p)
}
}
fmt.Fprintf(w, "}\n")
})
}
func (s command) List(m *ice.Message, arg ...string) *ice.Message {
s.Tables(m, service{}).Fields(m,
s.Key(s, model.UPDATED_AT), s.Key(s, model.INDEX), s.AS(model.NODENAME, model.SPACE),
).Orders(m, "`space`,`index`").Limit(m, 300)
s.Select(m).Action(s.Autogen)
return m
}
func init() { ice.TeamCtxCmd(command{}) }

View File

@ -15,6 +15,7 @@ import (
"shylinux.com/x/icebergs/base/web/html"
kit "shylinux.com/x/toolkits"
"shylinux.com/x/community/src/api"
"shylinux.com/x/community/src/gonganxitong/model"
"shylinux.com/x/mysql-story/src/db"
)
@ -24,10 +25,8 @@ type UserPlacer interface {
}
type Placer interface {
Inputs(m *ice.Message, arg ...string)
Select(m *ice.Message, arg ...string) *ice.Message
RewriteAppend(m *ice.Message, arg ...string) *ice.Message
TransValue(m *ice.Message, key string, arg ...string) string
TransRole(m *ice.Message, arg ...string) string
}
type Container interface {
FindOrCreateByName(m *ice.Message, arg ...string)
@ -46,7 +45,7 @@ type Table struct {
func (s Table) LoadTrans(m *ice.Message, arg ...string) {
base := kit.FileLine(1, 100)
if m.PrefixKey() != "web.team.gonganxitong.portal" {
if m.PrefixKey() != api.GONGANXITONG_PORTAL {
ice.LoadTrans(m.Spawn(kit.Dict("_template", path.Join(path.Dir(base), "portal.json"))).Message, m.CommandKey(), m.GetCommand().Command)
}
h := ctx.GetCmdFile(m.Message, m.PrefixKey())
@ -61,7 +60,6 @@ func (s Table) Init(m *ice.Message, arg ...string) {
}
func (s Table) BeforeMigrate(m *ice.Message, arg ...string) {
s.Table.BeforeMigrate(m, arg...)
// kit.If(m.GetCommand().Icon, func() { Portal{}.Show(m) })
}
func (s Table) AfterMigrate(m *ice.Message, arg ...string) {
kit.If(m.GetCommand().Icon, func() { Portal{}.Show(m) })
@ -74,8 +72,7 @@ func (s Table) Inputs(m *ice.Message, arg ...string) {
case model.PLACE_TYPE:
s.InputsList(m, PlaceTypeList, arg...)
case model.DOMAIN_UID:
m.Cmdy(s.FindSpaceCmd(m, "web.team.gonganxitong.domain"))
m.DisplayInputKeyNameIconTitle()
m.Cmdy(s.FindSpaceCmd(m, api.GONGANXITONG_DOMAIN)).DisplayInputKeyNameIconTitle()
default:
s.Table.Inputs(m, arg...)
}
@ -151,7 +148,7 @@ func (s Table) List(m *ice.Message, arg ...string) *ice.Message {
func (s Table) FieldsDefault(m *ice.Message, arg ...string) *ice.Message {
if m.Option(mdb.SELECT) == "" {
if fields := m.Config(mdb.FIELDS); fields != "" {
s.Table.FieldsWithCreatedAT(m, m.CommandKey(), kit.TransArgs(kit.Split(fields, ",", ","))...)
s.Table.FieldsWithCreatedAT(m, kit.Select(m.CommandKey(), m.Config(db.MODELS)), kit.TransArgs(kit.Split(fields, ",", ","))...)
}
}
return m
@ -177,7 +174,7 @@ func (s Table) SelectJoinCity(m *ice.Message, arg ...string) *ice.Message {
}
func (s Table) SelectJoinAuth(m *ice.Message) *ice.Message {
defer m.Options(ice.MSG_USERROLE, aaa.VOID)
return s.SelectJoin(m, s.FindSpaceCmd(m, web.TEAM_RENZHENGSHOUQUAN_AUTH), model.NAME, model.STATUS, model.DASHBOARD_UID)
return s.SelectJoin(m, s.FindSpaceCmd(m, api.RENZHENGSHOUQUAN_AUTH), model.NAME, model.TYPE, model.STATUS, model.DASHBOARD_UID)
}
func (s Table) RenameAppend(m *ice.Message, arg ...string) Table {
m.RenameAppend(arg...)
@ -191,6 +188,8 @@ func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message {
switch key {
case model.USER_PLACE_ROLE:
value = UserPlaceRole(kit.Int(value)).String()
case model.MEMBER_STATUS:
value = MemberStatus(kit.Int(value)).String()
case model.PLACE_TYPE:
value = PlaceType(kit.Int(value)).String()
case model.AUTH_STATUS:
@ -213,6 +212,9 @@ func (s Table) Update(m *ice.Message, data ice.Map, arg ...string) {
func (s Table) UpdateAuth(m *ice.Message, arg ...string) {
s.Update(m, kit.Dict(model.AUTH_UID, arg[0]), arg[1:]...)
}
func (s Table) UpdateField(m *ice.Message, arg ...string) {
s.Update(m, kit.Dict(arg[0], arg[1]), arg[2:]...)
}
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)) {
@ -237,9 +239,6 @@ func (s Table) IsLeader(m *ice.Message) bool {
}
return false
}
func (s Table) PlaceInfo(m *ice.Message) {
m.Cmdy(s.Prefix(m, Portal{}), s.PlaceInfo)
}
func (s Table) UserPlaceRole(m *ice.Message) int {
return kit.Int(m.Cmdy(s.Prefix(m, Portal{}), s.UserPlaceRole).Option(model.USER_ROLE))
}
@ -247,14 +246,10 @@ func (s Table) UserPlaceInit(m *ice.Message, arg ...string) {
if m.Option(model.PLACE_INIT) == "" || m.PrefixKey() != m.Option(ice.MSG_INDEX) {
return
}
m.Info("what %v %v %v", m.Length(), m.PrefixKey(), m.Option(ice.MSG_INDEX))
m.Cmd(s.Prefix(m, Portal{}), "placeCmd", "addCount", model.INIT, 1, m.Option(model.PLACE_UID), m.Option(model.PLACE_INIT))
}
func (s Table) DashboardUpdate(m *ice.Message, arg ...string) {
if m.IsErr() {
return
}
m.Cmd(s.Prefix(m, Portal{}), s.DashboardUpdate)
func (s Table) PlaceInfo(m *ice.Message) {
m.Cmdy(s.Prefix(m, Portal{}), s.PlaceInfo)
}
func (s Table) RecordEvent(m *ice.Message, info string, arg ...string) {
m.Cmd(s.Prefix(m, Portal{}), s.RecordEvent, info, arg)
@ -273,16 +268,32 @@ func (s Table) RecordEventWithName(m *ice.Message, info string, arg ...string) {
})
s.RecordEvent(m, kit.JoinWord(info, kit.Cut(uid, 6), kit.Select(m.Option(model.TITLE), m.Option(model.NAME))), uid)
}
func (s Table) MemberList(m *ice.Message, arg ...string) {
m.Cmdy(s.Prefix(m, member{}), arg)
}
func (s Table) DashboardUpdate(m *ice.Message, arg ...string) {
if m.IsErr() {
return
}
m.Cmd(s.Prefix(m, Portal{}), s.DashboardUpdate)
}
func (s Table) MarketInsert(m *ice.Message, arg ...string) {
m.Cmdy(s.Prefix(m, Portal{}), s.MarketInsert, arg)
}
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 Table) ServiceList(m *ice.Message, arg ...string) *ice.Message {
return m.Cmd(s.Prefix(m, service{}), arg)
}
func (s Table) CityList(m *ice.Message, arg ...string) *ice.Message {
m.Cmdy(web.TEAM_GONGANXITONG_CITY, arg).RenameAppend(model.NAME, model.CITY_NAME)
return m
}
func (s Table) AuthCreate(m *ice.Message, cityName, companyName string, authType int, authName, authInfo string, arg ...string) {
m.Cmdy(api.RENZHENGSHOUQUAN_PORTAL, Portal{}.PlaceCreate, model.CITY_NAME, cityName, model.COMPANY_NAME, companyName,
model.AUTH_TYPE, authType, model.AUTH_NAME, authName, model.AUTH_INFO, authInfo)
s.Update(m, kit.Dict(m.OptionSimple(model.AUTH_UID)), arg...)
}
func (s Table) GetCommandUID(m *ice.Message) {
m.Options(m.Cmd(s.Prefix(m, Portal{}), Portal{}.SelectCommand, m.PrefixKey()).AppendSimple(model.COMMAND_UID))
m.Options(m.Cmd(s.Prefix(m, Portal{}), Portal{}.CommandSelect, m.PrefixKey()).AppendSimple(model.COMMAND_UID))
}
func (s Table) GetCommands(m *ice.Message, key string, arg ...string) []string {
m.Option(model.UID, kit.Select(m.Option(model.UID), m.Result()))
@ -294,8 +305,7 @@ func (s Table) SendMessage(m *ice.Message, from_user_uid, to_user_uid string, ar
}
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_user_uid), model.TO_USER_UID, kit.Select(m.Option(model.USER_UID), to_user_uid),
model.DETAIL_NAME, kit.Select(m.Option(model.NAME), m.Option(model.TITLE)),
s.GetCommands(m, model.COMMAND_UID, arg...),
model.DETAIL_NAME, kit.Select(m.Option(model.NAME), m.Option(model.TITLE)), s.GetCommands(m, model.COMMAND_UID, arg...),
)
}
func (s Table) DoneMessage(m *ice.Message, arg ...string) {
@ -393,19 +403,8 @@ func (s Table) SpaceCmd(m *ice.Message, space string, arg ...ice.Any) *ice.Messa
}
}
func (s Table) FindSpaceCmd(m *ice.Message, cmd ice.Any) ice.Any {
route := map[string]string{
web.CODE_MYSQL_CLIENT: "20240724-community",
web.TEAM_GONGANXITONG_USER: "20240724-community",
web.TEAM_GONGANXITONG_DOMAIN: "20240724-community",
web.TEAM_RENZHENGSHOUQUAN_PORTAL: "20240724-community",
web.TEAM_RENZHENGSHOUQUAN_AUTH: "20240724-community",
web.TEAM_DASHBOARD_PORTAL: "20240903-operation",
web.TEAM_DASHBOARD_SUMMARY: "20240903-operation",
web.TEAM_STORAGE_PORTAL: "20240903-operation",
web.TEAM_STORAGE_FILE: "20240903-operation",
}
cmds := ice.GetTypeKey(cmd)
if space, ok := route[cmds]; ok && space != ice.Info.NodeName {
if space, ok := api.Trans[cmds]; ok && space != ice.Info.NodeName {
m.Options(ice.MSG_USERROLE, aaa.TECH)
return []string{web.SPACE, kit.Keys(ice.OPS, space), cmds}
}
@ -435,14 +434,15 @@ func (s Portal) getTable() Table { return s.Table }
func PortalCmd(portal ice.Any) {
h := kit.FileLine(-1, 100)
p := kit.Keys("web.team", kit.ModPath(-1))
table := portal.(interface{ getTable() Table }).getTable()
cmd := func(name string, data ice.Any) {
_, cmd := ice.Cmd(kit.Keys(p, name), data)
cmd.RawHand = path.Join(path.Dir(h), name+".go")
cmd.Actions[ice.CTX_INIT].Hand = icebergs.MergeHand(func(m *icebergs.Message, arg ...string) {
mdb.Config(m, db.DOMAIN, kit.PathName(1))
m.Design(mdb.LIST, "", kit.JoinWord(table.Keys(table.Place, model.UID), model.UID, ice.AUTO))
}, cmd.Actions[ice.CTX_INIT].Hand)
}
table := portal.(interface{ getTable() Table }).getTable()
cmd("portal", portal)
cmd("search", search{Tables: Tables{Table: table}})
cmd("qrcode", qrcode{Tables: Tables{Table: table}})
@ -450,6 +450,7 @@ func PortalCmd(portal ice.Any) {
cmd("apply", apply{Table: table})
cmd("allow", allow{Table: table})
cmd("notice", notice{Table: table})
cmd("setting", setting{Table: table})
cmd("member", member{Tables: Tables{Table: table}})
cmd("market", market{Table: table})
cmd("message", message{Table: table})

View File

@ -10,15 +10,14 @@ import (
type event struct {
Table
user user
command command
service service
order string `data:"504"`
role string `data:"creator"`
user user
order string `data:"504"`
role string `data:"creator"`
}
func (s event) List(m *ice.Message, arg ...string) {
s.Tables(m, s.user, s.command, s.service).FieldsWithCreatedAT(m, s, model.INFO,
s.Tables(m, s.user).FieldsWithCreatedAT(m, s,
s.Key(s, model.INFO),
s.Key(s, model.CITY_NAME), s.Key(s, model.STREET_NAME), s.Key(s, model.PLACE_NAME),
model.USER_NAME, model.USER_AVATAR,
)

View File

@ -0,0 +1,6 @@
$output>div.item.myself div.title span {
font-weight:bold;
}
$output>div.item.disabled div.title span {
// color:var(--disable-fg-color);
}

View File

@ -2,6 +2,7 @@ package gonganxitong
import (
"shylinux.com/x/ice"
kit "shylinux.com/x/toolkits"
"shylinux.com/x/community/src/gonganxitong/model"
)
@ -12,8 +13,27 @@ type member struct {
order string `data:"101"`
}
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))
}
}
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))
}
}
func (s member) Option(m *ice.Message, arg ...string) []string {
return m.OptionSimple(s.Keys(s.Place, model.UID), model.UID)
}
func (s member) List(m *ice.Message, arg ...string) {
s.FieldsWithCreatedAT(m, s.UserPlace, model.USER_UID, s.Keys(s.UserPlace, model.ROLE))
user_uid, isLeader := m.Option(model.USER_UID), s.IsLeader(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()
} else if len(arg) == 2 {
@ -21,13 +41,47 @@ func (s member) List(m *ice.Message, arg ...string) {
} else {
return
}
s.SelectJoinUser(m, model.NAME, model.AVATAR, model.AUTH_UID)
s.SelectJoinUser(m, model.NAME, model.INFO, model.AVATAR, model.AUTH_UID)
s.SelectJoinAuth(m)
s.Display(m, "")
m.Table(func(value ice.Maps) {
if user_uid == value[model.USER_UID] {
m.Push("who", "myself")
} else {
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)
}
}
} else {
m.PushButton()
}
})
s.Display(m, "").DisplayCSS("")
}
func init() { ice.TeamCtxCmd(member{Tables: newTables()}) }
type MemberStatus int
const (
MemberNormal MemberStatus = iota
MemberDisabled
)
var MemberStatusList = map[MemberStatus]string{
MemberNormal: "normal",
MemberDisabled: "disabled",
}
func (s MemberStatus) String() string { return MemberStatusList[s] }
type AuthStatus int
const (

View File

@ -1,8 +1,20 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) { var USER_PLACE_ROLE = msg.Option("_user_place_role")
can.onimport.myView(can, msg, function(value) { return [
{view: html.TITLE, list: [value.user_name, value.auth_name, can.onimport.authView(can, value), can.onimport.textView(can, value, USER_PLACE_ROLE)]},
{view: html.STATUS, list: [value.uid.slice(0, 6), can.onimport.timeView(can, value)]},
] })
can.onimport.myView(can, msg, function(value) { value._style = [value.who, value.member_status]
return [
{view: html.TITLE, list: [
value.user_name, value.auth_name,
can.onimport.authView(can, value), can.onimport.textView(can, value, USER_PLACE_ROLE),
can.onimport.titleAction(can, value),
]},
{view: html.STATUS, list: [
value.uid.slice(0, 6), can.onimport.timeView(can, value),
value.member_status != "normal" && can.onimport.textView(can, value, "member_status"),
]},
{view: html.STATUS, list: [
value.user_info,
]},
]
})
},
})

View File

@ -3,96 +3,109 @@ package model
import "shylinux.com/x/mysql-story/src/db"
const (
ID = "id"
UID = "uid"
NAME = "name"
INFO = "info"
TYPE = "type"
ROLE = "role"
STATUS = "status"
LEVEL = "level"
SCORE = "score"
TITLE = "title"
CONTENT = "content"
CREATOR = "creator"
OPERATOR = "operator"
CREATED_AT = "created_at"
UPDATED_AT = "updated_at"
DELETED_AT = "deleted_at"
USER_UID = "user_uid"
USER_ROLE = "user_role"
USER_NAME = "user_name"
USER_AVATAR = "user_avatar"
USER_PLACE_ROLE = "user_place_role"
PLACE_UID = "place_uid"
PLACE_NAME = "place_name"
PLACE_TYPE = "place_type"
PLACE_INIT = "place_init"
PLACE_ADDRESS = "place_address"
STREET_UID = "street_uid"
STREET_NAME = "street_name"
SCHOOL_NAME = "school_name"
COMPANY_NAME = "company_name"
CITY_UID = "city_uid"
CITY_NAME = "city_name"
AUTH_UID = "auth_uid"
AUTH_NAME = "auth_name"
AUTH_TYPE = "auth_type"
AUTH_STATUS = "auth_status"
DASHBOARD_UID = "dashboard_uid"
DASHBOARD_NAME = "dashboard_name"
DASHBOARD_TYPE = "dashboard_type"
STORAGE_UID = "storage_uid"
STORAGE_NAME = "storage_name"
STORAGE_TYPE = "storage_type"
QRCODE_TYPE = "qrcode_type"
APPLY_UID = "apply_uid"
APPLY_STATUS = "apply_status"
ALLOW_UID = "allow_uid"
ALLOW_STATUS = "allow_status"
EVENT_UID = "event_uid"
MARKET_UID = "market_uid"
DOMAIN_UID = "domain_uid"
DOMAIN_NAME = "domain_name"
PORTAL_NAME = "portal_name"
DETAIL_NAME = "detail_name"
COMMAND_UID = "command_uid"
COMMAND_ICON = "command_icon"
COMMAND_NAME = "command_name"
MESSAGE_UID = "message_uid"
MESSAGE_STATUS = "message_status"
SERVICE_UID = "service_uid"
SERVICE_ICON = "service_icon"
SERVICE_NAME = "service_name"
SERVICE_TYPE = "service_type"
SERVICE_STATUS = "service_status"
THUMB_COUNT = "thumb_count"
FAVOR_COUNT = "favor_count"
COMMENT_COUNT = "comment_count"
SHARE_COUNT = "share_count"
THUMB_STATUS = "thumb_status"
FAVOR_STATUS = "favor_status"
CLIENT_UID = "client_uid"
CLIENT_NAME = "client_name"
CLIENT_TYPE = "client_type"
FROM_UID = "from_uid"
FROM_USER_UID = "from_user_uid"
TO_USER_UID = "to_user_uid"
BEGIN_TIME = "begin_time"
END_TIME = "end_time"
OPEN_ID = "open_id"
EMAIL = "email"
AVATAR = "avatar"
ADDRESS = "address"
NODE_NAME = "node_name"
NODENAME = "nodename"
SPACE = "space"
OPERATE = "operate"
INDEX = "index"
QUERY = "query"
ARGS = "args"
INIT = "init"
UNIT = "unit"
ID = "id"
UID = "uid"
NAME = "name"
INFO = "info"
TYPE = "type"
ROLE = "role"
STATUS = "status"
LEVEL = "level"
SCORE = "score"
TITLE = "title"
CONTENT = "content"
CREATOR = "creator"
OPERATOR = "operator"
CREATED_AT = "created_at"
UPDATED_AT = "updated_at"
DELETED_AT = "deleted_at"
USER_UID = "user_uid"
USER_ROLE = "user_role"
USER_NAME = "user_name"
USER_INFO = "user_info"
USER_AVATAR = "user_avatar"
USER_BACKGROUND = "user_background"
USER_PLACE_ROLE = "user_place_role"
MEMBER_UID = "member_uid"
MEMBER_STATUS = "member_status"
PLACE_UID = "place_uid"
PLACE_NAME = "place_name"
PLACE_TYPE = "place_type"
PLACE_INIT = "place_init"
PLACE_ADDRESS = "place_address"
STREET_UID = "street_uid"
STREET_NAME = "street_name"
STREET_INFO = "street_info"
STREET_AVATAR = "street_avatar"
STREET_BACKGROUND = "street_background"
SCHOOL_NAME = "school_name"
COMPANY_NAME = "company_name"
CITY_UID = "city_uid"
CITY_NAME = "city_name"
CITY_INFO = "city_info"
CITY_AVATAR = "city_avatar"
CITY_BACKGROUND = "city_background"
AUTH_UID = "auth_uid"
AUTH_NAME = "auth_name"
AUTH_INFO = "auth_info"
AUTH_TYPE = "auth_type"
AUTH_STATUS = "auth_status"
DASHBOARD_UID = "dashboard_uid"
DASHBOARD_NAME = "dashboard_name"
DASHBOARD_TYPE = "dashboard_type"
STORAGE_UID = "storage_uid"
STORAGE_NAME = "storage_name"
STORAGE_TYPE = "storage_type"
QRCODE_TYPE = "qrcode_type"
APPLY_UID = "apply_uid"
APPLY_STATUS = "apply_status"
ALLOW_UID = "allow_uid"
ALLOW_STATUS = "allow_status"
EVENT_UID = "event_uid"
MARKET_UID = "market_uid"
DOMAIN_UID = "domain_uid"
DOMAIN_NAME = "domain_name"
PORTAL_NAME = "portal_name"
DETAIL_NAME = "detail_name"
COMMAND_UID = "command_uid"
COMMAND_ICON = "command_icon"
COMMAND_NAME = "command_name"
MESSAGE_UID = "message_uid"
MESSAGE_STATUS = "message_status"
SERVICE_UID = "service_uid"
SERVICE_ICON = "service_icon"
SERVICE_NAME = "service_name"
SERVICE_TYPE = "service_type"
SERVICE_STATUS = "service_status"
THUMB_COUNT = "thumb_count"
FAVOR_COUNT = "favor_count"
COMMENT_COUNT = "comment_count"
SHARE_COUNT = "share_count"
THUMB_STATUS = "thumb_status"
FAVOR_STATUS = "favor_status"
CLIENT_UID = "client_uid"
CLIENT_NAME = "client_name"
CLIENT_TYPE = "client_type"
FROM_UID = "from_uid"
FROM_USER_UID = "from_user_uid"
TO_USER_UID = "to_user_uid"
BEGIN_TIME = "begin_time"
END_TIME = "end_time"
OPEN_ID = "open_id"
EMAIL = "email"
AVATAR = "avatar"
BACKGROUND = "background"
ADDRESS = "address"
NODE_NAME = "node_name"
NODENAME = "nodename"
SPACE = "space"
OPERATE = "operate"
INDEX = "index"
QUERY = "query"
VALUE = "value"
ARGS = "args"
INIT = "init"
UNIT = "unit"
)
type Sess struct {
@ -103,10 +116,12 @@ type Sess struct {
}
type User struct {
db.ModelWithAuth
OpenID string `gorm:"type:char(32);index"`
Avatar string `gorm:"type:varchar(255)"`
Name string `gorm:"type:varchar(32)"`
Email string `gorm:"type:varchar(64)"`
OpenID string `gorm:"type:char(32);index"`
Email string `gorm:"type:varchar(64)"`
Name string `gorm:"type:varchar(32)"`
Info string `gorm:"type:varchar(255)"`
Avatar string `gorm:"type:varchar(255)"`
Background string `gorm:"type:varchar(255)"`
}
type UserPlace struct {
db.ModelUserPlace
@ -124,7 +139,10 @@ type Street struct {
}
type City struct {
db.ModelWithAuth
Name string `gorm:"type:varchar(64);index"`
Name string `gorm:"type:varchar(64);index"`
Info string `gorm:"type:varchar(255)"`
Avatar string `gorm:"type:varchar(255)"`
Background string `gorm:"type:varchar(255)"`
}
type Apply struct {
@ -155,6 +173,13 @@ type Notice struct {
PlaceUID string `gorm:"type:char(32);index"`
UserUID string `gorm:"type:char(32)"`
}
type Setting struct {
db.ModelWithUID
PlaceUID string `gorm:"type:char(32);index"`
UserUID string `gorm:"type:char(32);index"`
Name string `gorm:"type:varchar(64)"`
Value string `gorm:"type:varchar(255)"`
}
type Domain struct {
db.ModelNameInfo
}
@ -228,6 +253,7 @@ type Service struct {
}
type Support struct {
db.ModelContent
PlaceUID string `gorm:"type:char(32);index"`
FromUserUID string `gorm:"type:char(32);index"`
ToUserUID string `gorm:"type:char(32);index"`
}
@ -235,7 +261,7 @@ type Support struct {
func init() {
db.CmdModels("",
&Sess{}, &User{}, &UserPlace{}, &Place{}, &Street{}, &City{},
&Apply{}, &Allow{}, &Event{}, &Notice{},
&Apply{}, &Allow{}, &Event{}, &Notice{}, &Setting{},
&Domain{}, &Market{}, &Thumb{}, &Comment{}, &Favor{},
&Message{}, &Recent{}, &Command{}, &Service{}, &Support{},
)

View File

@ -11,6 +11,10 @@ $action div.item.button input:hover { background-color:var(--hover-bg-color); }
$action div.item.button span { display:none; }
$action div.item.button i { display:none; }
$output { background-color:var(--plugin-bg-color); }
$output div.head { margin-bottom:20px; }
$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.header { border-radius:100px; background-color:var(--notice-bg-color); height:300px; width:100%; position:absolute; top:-100px; left:0; }
$output>div.footer { border-radius:100px; background-color:var(--notice-bg-color); height:300px; width:100%; position:absolute; bottom:-100px; left:0; }
$output>div>div.list { box-shadow:var(--box-shadow); border-radius:10px; background-color:var(--output-bg-color); padding:10px; margin:10px; }
@ -44,7 +48,7 @@ $output div.item.card div.title { width:100%; display:flex; align-items:center;
$output div.item.card div.title span.auth { font-size:14px; }
$output div.item.card div.title span.time { position:absolute; right:0; font-size:12px; color:gray; }
$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; }
$output div.item.card img { border-radius:5px; padding:0; margin:0; margin-right:10px; height:48px; width:48px; min-width:48px; }
$output div.item.card.sticky>div.output { background-color:var(--plugin-bg-color); color:var(--notice-bg-color); }
$output table.content { background-color:var(--output-bg-color); }
$output table.content td.action input.icons { display:unset; }
@ -88,7 +92,7 @@ $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; }
$output>fieldset.story>div.output div.item.card>div.output { padding:10px; width:100%; }
$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.message div.tabs span.select { border-top:var(--box-border); }

View File

@ -9,6 +9,7 @@ import (
"shylinux.com/x/icebergs/base/web"
"shylinux.com/x/toolkits"
"shylinux.com/x/community/src/api"
"shylinux.com/x/community/src/gonganxitong/model"
"shylinux.com/x/mysql-story/src/db"
)
@ -26,13 +27,10 @@ type Portal struct {
short string `data:"index"`
field string `data:"time,icons,name,index,order,enable,init,type,role,view,command_uid"`
create string `name:"create index name icons"`
command string `name:"command" role:"void"`
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"`
placeRemove string `name:"placeRemove" role:"void"`
placeAuth string `name:"placeAuth" role:"void"`
placeSearch string `name:"placeSearch" icon:"bi bi-search" role:"void"`
scanQRCode string `name:"scanQRCode type text" icon:"bi bi-qr-code-scan" role:"void"`
}
func (s Portal) Init(m *ice.Message, arg ...string) {
@ -63,6 +61,8 @@ func (s Portal) Inputs(m *ice.Message, arg ...string) {
}
func (s Portal) Run(m *ice.Message, arg ...string) {
s.DisplayBase(m, "common.js")
m.OptionDefault(model.SERVICE_UID, ServiceUID(m))
m.OptionDefault(model.COMMAND_UID, s.Hash.List(m.Spawn(), arg[0]).Append(model.COMMAND_UID))
m.Search(arg[0], func(key string, cmd *ice.Command) {
sub, role := "", cmd.Role
if len(arg) > 1 && arg[1] == ctx.ACTION {
@ -73,7 +73,6 @@ func (s Portal) Run(m *ice.Message, arg ...string) {
if action, ok := cmd.Actions[arg[1]]; ok {
sub, role = arg[1], action.Role
} else {
m.OptionDefault(s.Keys(s.Place, model.UID), arg[1])
m.Option(s.Keys(s.Place, model.UID), arg[1])
}
}
@ -90,9 +89,6 @@ func (s Portal) Run(m *ice.Message, arg ...string) {
}
})
}
func (s Portal) Command(m *ice.Message, arg ...string) {
m.Cmdy(ctx.COMMAND, arg[0]).Push(model.COMMAND_UID, s.Hash.List(m.Spawn(), arg[0]).Append(model.COMMAND_UID))
}
func (s Portal) List(m *ice.Message, arg ...string) {
if m.Option(mdb.VIEW) == mdb.TABLE {
s.Hash.List(m, arg...).PushAction(mdb.DETAIL, s.Hash.Remove).SortInt(mdb.ORDER)
@ -101,16 +97,14 @@ func (s Portal) List(m *ice.Message, arg ...string) {
if len(arg) == 0 {
USER_PLACE_ROLE := s.Keys(s.UserPlace, model.ROLE)
m.Cmdy(m.PrefixKey(), s.PlaceList, m.Option(model.USER_UID)).Table(func(value ice.Maps) {
button := []ice.Any{}
switch UserPlaceRole(kit.Int(value[USER_PLACE_ROLE])) {
case UserPlaceCreator, UserPlaceLandlord:
if value[model.AUTH_STATUS] == "" {
m.PushButton(s.PlaceAuth, s.PlaceRemove)
break
button = append(button, s.PlaceAuth)
}
fallthrough
default:
m.PushButton(s.PlaceRemove)
}
m.PushButton(append(button, s.PlaceRemove)...)
}).Action(s.PlaceCreate)
s.Button(m, "", s.PlaceCreate)
} else {
@ -135,11 +129,9 @@ func (s Portal) PlaceListOption(m *ice.Message, arg ...string) *ice.Message {
s.SelectJoinCity(msg)
s.SelectJoinAuth(msg)
}
m.Info("what %v", msg.FormatMeta())
if kit.Int(msg.Append(s.Keys(s.UserPlace, model.ROLE))) == 0 {
msg.Append(model.DASHBOARD_UID, "")
}
m.Info("what %v", msg.FormatMeta())
s.Place.RewriteAppend(msg)
m.Options(msg.AppendSimple(
s.Keys(s.Place, model.NAME), s.Keys(s.Place, model.TYPE), s.Keys(s.UserPlace, model.ROLE),
@ -156,7 +148,7 @@ func (s Portal) PlaceCreate(m *ice.Message, arg ...string) {
return
}
name := m.Option(s.Keys(s.Place, model.NAME))
arg = kit.TransArgKeys(arg, s.Keys(s.Place, model.NAME), model.NAME, s.Keys(s.Place, model.TYPE), model.TYPE)
arg = kit.TransArgKeys(arg, s.Keys(s.Place, model.NAME), model.NAME, s.Keys(s.Place, model.INFO), model.INFO, s.Keys(s.Place, model.TYPE), model.TYPE)
if m.Cmdy(s.Place, s.Insert, arg[2:]).IsErr() {
return
}
@ -171,9 +163,10 @@ func (s Portal) PlaceRemove(m *ice.Message, arg ...string) {
m.Cmdy(s.UserPlace, s.Delete, m.OptionSimple(model.USER_UID, model.UID))
}
func (s Portal) PlaceList(m *ice.Message, arg ...string) *ice.Message {
s.Tables(m, s.Place).FieldsWithCreatedAT(m, s.UserPlace, s.Key(s.Place, model.INIT), model.AUTH_UID,
s.Keys(s.Place, model.UID), s.Keys(s.Place, model.NAME), s.Keys(s.Place, model.TYPE), s.Keys(s.UserPlace, model.ROLE),
s.Keys(s.Street, model.UID))
s.Tables(m, s.Place).FieldsWithCreatedAT(m, s.UserPlace, s.Keys(s.Place, model.UID),
s.Keys(s.Place, model.NAME), s.Keys(s.Place, model.TYPE), s.Keys(s.UserPlace, model.ROLE),
s.Key(s.Place, model.INIT), s.AS(s.Key(s.UserPlace, model.STATUS), model.MEMBER_STATUS),
s.Keys(s.Street, model.UID), model.AUTH_UID)
if len(arg) == 1 {
m.Cmdy(s.UserPlace, s.Table.Select, model.USER_UID, arg[0])
} else if len(arg) == 2 {
@ -181,9 +174,6 @@ func (s Portal) PlaceList(m *ice.Message, arg ...string) *ice.Message {
} else {
return m
}
m.Table(func(value ice.Maps) {
m.Push(model.SERVICE_ICON, ice.Info.NodeIcon).Push(model.NODENAME, ice.Info.NodeName)
})
s.SelectJoin(m, s.Street, model.NAME, model.CITY_UID)
s.SelectJoinCity(m)
s.SelectJoinAuth(m)
@ -198,48 +188,21 @@ func (s Portal) PlaceInfo(m *ice.Message, arg ...string) {
m.Option(model.PLACE_NAME, msg.Append(model.NAME))
}
func (s Portal) PlaceAuth(m *ice.Message, arg ...string) {
if m.Option(model.AUTH_UID) == "" {
place_uid := m.Option(s.Keys(s.Place, model.UID))
place_name := m.Option(s.Keys(s.Place, model.NAME))
m.Option(model.COMPANY_NAME, m.Option(s.Keys(s.Street, model.NAME)))
msg := m.Cmd(s.FindSpaceCmd(m, web.TEAM_RENZHENGSHOUQUAN_PORTAL), s.PlaceCreate, m.OptionSimple(model.CITY_NAME, model.COMPANY_NAME),
model.AUTH_TYPE, ice.AUTO, model.AUTH_NAME, place_name, model.FROM_UID, ice.AUTO)
if msg.IsErr() {
m.Copy(msg)
return
}
m.Cmd(s.Place, s.UpdateAuth, msg.Option(model.AUTH_UID), model.UID, place_uid)
s.RecordEventWithName(m.Options(model.NAME, place_name, model.UID, place_uid), "")
msg.Cmd(s.Prefix(m, s), s.AfterPlaceAuth)
s.StorageCreate(m, "")
} else {
m.ProcessHold()
if m.Option(model.AUTH_UID) != "" {
return
}
place_uid, place_name := m.Option(s.Keys(s.Place, model.UID)), m.Option(s.Keys(s.Place, model.NAME))
m.Option(model.COMPANY_NAME, m.Option(s.Keys(s.Street, model.NAME)))
msg := m.Cmd(s.FindSpaceCmd(m, api.RENZHENGSHOUQUAN_PORTAL), s.PlaceCreate, m.OptionSimple(model.CITY_NAME, model.COMPANY_NAME),
model.AUTH_TYPE, ice.AUTO, model.AUTH_NAME, place_name, model.FROM_UID, ice.AUTO,
model.SERVICE_UID, ServiceUID(m), model.PLACE_UID, place_uid,
)
m.Cmd(s.Place, s.UpdateAuth, msg.Option(model.AUTH_UID), model.UID, place_uid)
s.RecordEventWithName(m.Options(model.NAME, place_name, model.UID, place_uid), "")
msg.Cmd(s.Prefix(m, s), s.AfterPlaceAuth)
s.StorageCreate(m, "")
}
func (s Portal) PlaceSearch(m *ice.Message, arg ...string) {
m.ProcessRewrite(model.INDEX, s.Prefix(m, search{}))
}
func (s Portal) ScanQRCode(m *ice.Message, arg ...string) {
if m.Option(mdb.TYPE) == mdb.TEXT {
m.Cmdy(s.UserPlace, s.Insert, s.Key(s.Place, model.UID), m.Option(mdb.TEXT), m.OptionSimple(model.USER_UID), model.ROLE, UserPlaceVisitor)
} else if m.Option(mdb.TYPE) == web.LINK {
args := m.ParseURL(m.Option(mdb.TEXT))
if len(args) > 1 && args[1] == s.Prefix(m, apply{}) {
m.Cmdy(s.UserPlace, s.Insert, s.Keys(s.Place, model.UID), args[0], m.OptionSimple(model.USER_UID), model.ROLE, UserPlaceVisitor)
}
}
}
func (s Portal) AddRecent(m *ice.Message, arg ...string) {
m.Options(m.ConfigSimple(model.SERVICE_UID))
if kit.IsIn(m.Append(model.AUTH_STATUS), "2", "issued") {
m.Cmd(s.Prefix(m, s.recent), s.Create, s.GetCommands(m, model.SERVICE_UID, arg...), model.AUTH_STATUS, "2")
} else {
m.Cmd(s.Prefix(m, s.recent), s.Create, s.GetCommands(m, model.SERVICE_UID, arg...))
}
}
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) ValueCreate(m *ice.Message, arg ...string) {
arg = kit.TransArgKeys(arg, s.Keys(m.Option(db.TARGET), model.NAME), model.NAME)
arg = kit.TransArgKeys(arg, s.Keys(m.Option(db.TARGET), model.TYPE), model.TYPE)
@ -283,36 +246,57 @@ func (s Portal) AfterPlaceRemove(m *ice.Message, arg ...string) {}
func (s Portal) BeforePlaceAuth(m *ice.Message, arg ...string) {}
func (s Portal) AfterPlaceAuth(m *ice.Message, arg ...string) {}
func (s Portal) AddRecent(m *ice.Message, arg ...string) {
m.Options(m.ConfigSimple(model.SERVICE_UID))
if kit.IsIn(m.Append(model.AUTH_STATUS), "2", "issued") {
m.Cmd(s.Prefix(m, s.recent), s.Create, s.GetCommands(m, model.SERVICE_UID, arg...), model.AUTH_STATUS, "2")
} else {
m.Cmd(s.Prefix(m, s.recent), s.Create, s.GetCommands(m, model.SERVICE_UID, arg...))
}
}
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) DashboardCreate(m *ice.Message, name string, arg ...string) func() {
kit.If(name == "", func() { name = m.Option(s.Keys(s.Place, model.NAME)) })
m.Cmdy(s.FindSpaceCmd(m, web.TEAM_DASHBOARD_PORTAL), s.PlaceCreate, m.OptionSimple(model.CITY_NAME, model.COMPANY_NAME), model.DASHBOARD_NAME, name, model.DASHBOARD_TYPE, "0")
m.Cmd(s.FindSpaceCmd(m, web.TEAM_RENZHENGSHOUQUAN_AUTH), "dashboard", m.Option(model.AUTH_UID), m.Option(model.DASHBOARD_UID))
m.Cmdy(s.FindSpaceCmd(m, api.DASHBOARD_PORTAL), s.PlaceCreate, m.OptionSimple(model.CITY_NAME, model.COMPANY_NAME), model.DASHBOARD_NAME, name, model.DASHBOARD_TYPE, "0")
m.Cmd(s.FindSpaceCmd(m, api.RENZHENGSHOUQUAN_AUTH), s.UpdateField, m.OptionSimple(model.DASHBOARD_UID), model.UID, m.Option(model.AUTH_UID))
return func() { s.DashboardUpdate(m) }
}
func (s Portal) DashboardInsert(m *ice.Message, score, title, unit string, index ice.Any, field string, arg ...ice.Any) {
kit.If(len(arg) == 0, func() { arg = append(arg, s.Keys(s.Place, model.UID), m.Option(s.Keys(s.Place, model.UID))) })
m.Cmd(s.FindSpaceCmd(m, web.TEAM_DASHBOARD_SUMMARY), s.Insert, model.SPACE, m.Option(ice.MSG_USERPOD), model.INDEX, s.Prefix(m, index),
m.Cmd(s.FindSpaceCmd(m, api.DASHBOARD_SUMMARY), s.Insert, model.SPACE, m.Option(ice.MSG_USERPOD), model.INDEX, s.Prefix(m, index),
model.QUERY, kit.Format(arg), mdb.FIELD, field, model.TITLE, title, model.SCORE, score, model.UNIT, unit, m.OptionSimple(model.DASHBOARD_UID))
}
func (s Portal) DashboardUpdate(m *ice.Message, arg ...string) {
if m.Option(model.DASHBOARD_UID) != "" {
m.Cmd(s.FindSpaceCmd(m, web.TEAM_DASHBOARD_SUMMARY), "scan", kit.Dict(m.OptionSimple(model.DASHBOARD_UID)))
m.Cmd(s.FindSpaceCmd(m, api.DASHBOARD_SUMMARY), "scan", kit.Dict(m.OptionSimple(model.DASHBOARD_UID)))
}
}
func (s Portal) StorageCreate(m *ice.Message, name string, arg ...string) {
kit.If(name == "", func() { name = m.Option(s.Keys(s.Place, model.NAME)) })
m.Cmdy(s.FindSpaceCmd(m, web.TEAM_STORAGE_PORTAL), s.PlaceCreate, m.OptionSimple(model.CITY_NAME, model.COMPANY_NAME), model.STORAGE_NAME, name, model.STORAGE_TYPE, "0")
m.Cmd(s.FindSpaceCmd(m, web.TEAM_RENZHENGSHOUQUAN_AUTH), "storage", m.Option(model.AUTH_UID), m.Option(model.STORAGE_UID))
m.Cmdy(s.FindSpaceCmd(m, api.STORAGE_PORTAL), s.PlaceCreate, m.OptionSimple(model.CITY_NAME, model.COMPANY_NAME), model.STORAGE_NAME, name, model.STORAGE_TYPE, "0")
m.Cmd(s.FindSpaceCmd(m, api.RENZHENGSHOUQUAN_AUTH), s.UpdateField, m.OptionSimple(model.STORAGE_UID), model.UID, m.Option(model.AUTH_UID))
}
func (s Portal) StorageInsert(m *ice.Message, title, content string) {
m.Cmd(s.FindSpaceCmd(m, web.TEAM_STORAGE_FILE), s.Insert, model.TITLE, title, model.CONTENT, content, m.OptionSimple(model.STORAGE_UID, model.USER_UID))
m.Cmd(s.FindSpaceCmd(m, api.STORAGE_FILE), s.Insert, model.TITLE, title, model.CONTENT, content, m.OptionSimple(model.STORAGE_UID, model.USER_UID))
}
func init() { ice.TeamCtxCmd(Portal{Table: newTable()}) }
func (s Portal) UserPlaceRole(m *ice.Message, arg ...string) *ice.Message {
if m.Option(model.USER_ROLE) == "" {
m.Option(model.USER_ROLE, m.Cmd(s.UserPlace, s.Table.Select, m.OptionSimple(s.Keys(s.Place, model.UID), model.USER_UID)).Append(model.ROLE))
msg := m.Cmd(s.UserPlace, s.Table.Select, m.OptionSimple(s.Keys(s.Place, model.UID), model.USER_UID))
if MemberStatus(kit.Int(msg.Append(model.STATUS))) == MemberNormal {
m.Option(model.USER_ROLE, msg.Append(model.ROLE))
} else {
m.Option(model.USER_ROLE, "0")
}
}
return m
}
@ -323,14 +307,16 @@ func (s Portal) PlaceCmd(m *ice.Message, arg ...string) {
m.Cmdy(s.Place, arg)
}
func (s Portal) UpdateCommand(m *ice.Message, arg ...string) {
func (s Portal) CommandUpdate(m *ice.Message, arg ...string) {
m.Config(model.SERVICE_UID, arg[0])
s.Hash.Select(m.Spawn()).Table(func(value ice.Maps) {
uid := m.Cmdx(command{}, s.Table.Modify, model.SERVICE_UID, arg[0], mdb.ICON, value[mdb.ICONS], model.NAME, value[model.NAME], model.INDEX, value[model.INDEX])
s.Hash.Modify(m, ctx.INDEX, value[ctx.INDEX], model.COMMAND_UID, uid)
})
}
func (s Portal) SelectCommand(m *ice.Message, arg ...string) { s.Hash.Select(m, arg...) }
func (s Portal) CommandSelect(m *ice.Message, arg ...string) {
s.Hash.Select(m, arg...)
}
func (s Portal) Create(m *ice.Message, arg ...string) {
args := []string{ctx.INDEX, m.Option(ctx.INDEX)}

View File

@ -7,7 +7,10 @@ Volcanos(chat.ONIMPORT, {
{view: html.TITLE, list: [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]]},
]},
{view: html.STATUS, list: [value.uid.slice(0, 6), can.onimport.timeView(can, value), value.city_name, value._street]},
{view: html.STATUS, list: [
// value.uid.slice(0, 6), can.onimport.timeView(can, value),
can.onimport.cityView(can, value), can.onimport.streetView(can, value),
]},
] },
myTrans: function(can, value, PLACE_UID, PLACE_NAME, PLACE_TYPE, USER_PLACE_ROLE, STREET_NAME) {
value.icons = value.icons||can.Conf(can.core.Keys("_trans.value", PLACE_TYPE, mdb.ICONS, value[PLACE_TYPE]))
@ -80,8 +83,10 @@ Volcanos(chat.ONIMPORT, {
myTitle: function(can, name, help, target) {
can.page.Append(can, target, [{view: html.TITLE, list: [{text: can.user.trans(can, name, help)}]}])
},
myCount: function(can, value, target) { can.onmotion.toggle(can, target, !!value._count)
if (can.onmotion.cache(can, function() { return value._uid }, target) || !value.dashboard_uid) { return } can.onimport.myTitle(can, "My Count", "我的数据", target)
myCount: function(can, value, target) {
var show = can.onmotion.toggle(can, target, value.dashboard_uid && (!value.member_status || value.member_status == "normal"))
if (can.onmotion.cache(can, function() { return value._uid }, target) || !show) { return }
can.onimport.myTitle(can, "My Count", "我的数据", target)
can.onappend.plugin(can._root.Action, {width: can.ConfWidth()-40, space: "20240903-operation", index: "web.team.dashboard.summary", args: [value.dashboard_uid]}, function(sub) {
can.onmotion.toggle(can, target, value._count = true)
}, target)
@ -180,6 +185,7 @@ Volcanos(chat.ONEXPORT, {
place: function(can, value) { return can.onexport.session(can, PLACE_UID, value) },
value: function(can, value) {
if (!value || !value._uid) { return }
can.onmotion.toggle(can, can.ui.myindex, !value.member_status || value.member_status == "normal")
can.sup.current = value, can.onexport.index(can, can.sup.current)
can.onexport.place(can, value._uid), can.onexport.hash(can, value._uid), can.onexport.title(can, value._name, can.ConfHelp())
can.user.agent.init(can, value.city_name+" "+value._street)

View File

@ -2,16 +2,16 @@
"portal": "用户场景",
"placeCreate": "创建", "placeRemove": "删除", "placeAuth": "认证",
"placeSearch": "搜索", "scanQRCode": "扫码",
"qrcode": "场景码", "event": "事件流", "apply": "权限申请", "allow": "权限审批",
"email": "邮箱配置", "member": "场景成员", "placeUser": "场景成员",
"notice": "通知公告", "domain": "领域分类",
"market": "人民广场", "message": "消息待办", "recent": "最近访问", "service": "服务发现", "support": "客服支持",
"qrcode": "场景码", "event": "事件流", "apply": "权限申请", "allow": "权限审批", "notice": "通知公告",
"member": "场景成员", "setting": "配置", "email": "邮箱配置",
"domain": "领域分类", "market": "人民广场", "message": "消息待办", "recent": "最近访问", "service": "服务发现", "support": "客服支持",
"cancel": "取消", "submit": "提交", "finish": "完成", "reject": "驳回", "approve": "通过",
"read": "已读", "done": "完成", "sticky": "置顶", "unSticky": "取消置顶",
"autogen": "生成", "compile": "编译", "oauth": "授权", "project": "项目",
"marketInsert": "推广",
"commentCreate": "评论",
"applyQRCode": "邀请码",
"marketInsert": "推广", "commentCreate": "评论", "applyQRCode": "邀请码",
"user": "用户信息", "city": "城市信息", "street": "街道信息", "school": "学校信息", "company": "公司信息",
"auth": "认证",
"authCreate": "认证申请",
"icons": {
"qrcode": "https://img.icons8.com/officel/80/qr-code.png",
"event": "https://img.icons8.com/officel/80/property-with-timer.png",
@ -19,6 +19,7 @@
"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",
"setting": "https://img.icons8.com/officel/80/settings--v1.png",
"member": "https://img.icons8.com/officel/80/person-at-home.png",
"domain": "https://img.icons8.com/officel/80/categorize.png",
"market": "https://img.icons8.com/officel/80/square.png",
@ -30,6 +31,8 @@
"style": {
"reject": "danger",
"approve": "notice",
"disable": "danger",
"enable": "notice",
"placeAuth": "notice",
"placeRemove": "danger"
},
@ -37,24 +40,30 @@
"My Place": "我的场景",
"user_uid": "用户",
"user_name": "用户昵称",
"user_info": "用户信息",
"user_avatar": "用户头像",
"user_place_role": "用户角色",
"user_background": "用户背景",
"user_place_role": "成员角色",
"place_uid": "场景",
"place_name": "场景名称",
"place_type": "场景类型",
"place_address": "场景地址",
"message_status": "消息状态",
"street_name": "街道名称",
"company_uid": "公司",
"company_name": "公司名称",
"city_name": "城市名称",
"city_info": "城市信息",
"auth_name": "认证主体",
"domain_uid": "领域分类",
"auth_info": "认证信息",
"auth_type": "认证类型",
"auth_status": "认证状态",
"service_name": "服务名称",
"qrcode_type": "链接类型",
"apply_status": "申请状态",
"allow_status": "审批状态",
"member_status": "成员状态",
"domain_uid": "领域分类",
"message_status": "消息状态",
"service_name": "服务名称",
"begin_time": "起始时间",
"end_time": "结束时间",
"cancel_time": "取消时间",
@ -68,24 +77,6 @@
"table": "应用"
},
"value": {
"auth_status": {
"create": "🕑 待认证",
"request": "🕑 待认证",
"issued": "✅ 已认证",
"revoked": "❌ 已吊销"
},
"apply_status": {
"create": "🕑 待提交",
"cancel": "❌ 已取消",
"submit": "🕑 已提交",
"rejected": "❌ 已驳回",
"approved": "✅ 已通过"
},
"allow_status": {
"create": "🕑 待审批",
"rejected": "❌ 已驳回",
"approved": "✅ 已通过"
},
"user_place_role": {
"visitor": "访客",
"creator": "创建人",
@ -97,25 +88,6 @@
"landlord": "danger"
}
},
"message_status": {
"all": "全部",
"create": "未读",
"read": "待办",
"done": "完成",
"style": {
"create": "danger"
}
},
"service_type": {
"worker": "空间"
},
"service_status": {
"online": "在线"
},
"qrcode_type": {
"portal": "门户首页",
"apply": "权限申请"
},
"place_type": {
"house": "住宅",
"hotel": "宾馆",
@ -135,6 +107,62 @@
"factory": "https://img.icons8.com/officel/80/manufacturing.png",
"hospital": "https://img.icons8.com/officel/80/clinic.png"
}
},
"auth_type": {
"root": "官方",
"city": "城市",
"personal": "个人",
"service": "服务",
"company": "公司",
"style": {
"root": "danger",
"city": "danger",
"personal": "danger"
}
},
"auth_status": {
"create": "🕑 待认证",
"request": "🕑 待认证",
"issued": "✅ 已认证",
"revoked": "❌ 已吊销"
},
"setting": {
"profile": "个人名片"
},
"qrcode_type": {
"portal": "门户首页",
"apply": "权限申请"
},
"apply_status": {
"create": "🕑 待提交",
"cancel": "❌ 已取消",
"submit": "🕑 已提交",
"rejected": "❌ 已驳回",
"approved": "✅ 已通过"
},
"allow_status": {
"create": "🕑 待审批",
"rejected": "❌ 已驳回",
"approved": "✅ 已通过"
},
"member_status": {
"normal": "正常",
"disabled": "❌ 已禁用"
},
"message_status": {
"all": "全部",
"create": "未读",
"read": "待办",
"done": "完成",
"style": {
"create": "danger"
}
},
"service_type": {
"worker": "空间"
},
"service_status": {
"online": "在线"
}
}
}

View File

@ -1,22 +0,0 @@
package gonganxitong
import (
"shylinux.com/x/ice"
"shylinux.com/x/community/src/gonganxitong/model"
)
type profile struct {
Tables
user user
}
func (s profile) List(m *ice.Message, arg ...string) {
if len(arg) == 1 {
m.Cmdy(s.user, s.Select, model.UID, arg[0])
}
m.Echo("hello world")
m.Display("")
}
func init() { ice.TeamCtxCmd(profile{}) }

View File

@ -1,5 +0,0 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) {
can.page.Append(can, can._output, [{img: can.misc.Resource(can, msg.Append("avatar"))}])
},
})

View File

@ -4,7 +4,7 @@ Volcanos(chat.ONIMPORT, {
value.icons = can.misc.Resource(can, value.service_icon.split("?")[0], value.space); if (value.score > 0) { value._style = ["sticky"] }
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]},
{view: html.STATUS, list: [can.onimport.cityView(can, value), value.street_name, value.service_name]},
]
}, function(event, value) { can.onaction._goback(can); var args = can.core.Split(value.args)
can.onimport.myPlugin(can, {space: value.space, index: value.index, args: [args[0]]})

View File

@ -27,8 +27,11 @@ type service struct {
conf string `name:"conf" role:"void"`
}
func ServiceUID(m *ice.Message) string {
return kit.Hashs(ice.Info.Hostname, ice.Info.Pwd, m.Prefix("portal"))
}
func (s service) Update(m *ice.Message, arg ...string) {
uid := kit.Hashs(ice.Info.Hostname, ice.Info.Pwd, m.Option(ctx.INDEX))
uid := ServiceUID(m)
if s.Select(m.Spawn(), model.UID, uid).Length() == 0 {
s.Insert(m, kit.Simple(model.UID, uid, m.OptionSimple(mdb.ICON, mdb.NAME, ctx.INDEX), nfs.PATHNAME, ice.Info.Pwd, tcp.HOSTNAME, ice.Info.Hostname)...)
m.Cmd(s.PrefixPortal(m)).Table(func(value ice.Maps) { m.Cmd(s.PrefixPortal(m), mdb.MODIFY, value[ctx.INDEX], mdb.ENABLE, ice.TRUE) })
@ -53,7 +56,6 @@ func (s service) Autogen(m *ice.Message, arg ...string) {
p, from := path.Join(nfs.SRC, m.Option(mdb.NAME)), "template/"
msg := m.Cmd("web.team.gonganxitong.service")
m.Option("table", kit.LowerCapital(table))
m.Option("what", kit.LowerCapital(table))
m.Cmd(nfs.DEFS, path.Join(p, "model/model.go"), msg.Template(from+"model/model.go"))
m.Cmd(nfs.DEFS, path.Join(p, "common.go"), msg.Template(from+"common.go"))
m.Cmd(nfs.DEFS, path.Join(p, "portal.go"), msg.Template(from+"portal.go"))

View File

@ -0,0 +1,12 @@
$output>div.item {
border-radius:10px; background-color:var(--output-bg-color); padding:10px; margin:10px;
display:flex; align-items:center;
}
$output>div.item span.name {
flex-grow:1;
}
$output>div.item span.outer {
background-color:gray; border-radius:12px; padding:2px; height:24px; width:40px; display:inline-block; float:right; }
$output>div.item span.inner { border-radius:10px; background-color:white; height:20px; width:20px; display:inline-block; }
$output>div.item span.outer.on { background-color:var(--notice-bg-color); }
$output>div.item span.outer.on span.inner { float:right; }

View File

@ -0,0 +1,61 @@
package gonganxitong
import (
"shylinux.com/x/ice"
kit "shylinux.com/x/toolkits"
"shylinux.com/x/community/src/gonganxitong/model"
)
type setting struct {
Table
service service
recent recent
order string `data:"102"`
short string `data:"name"`
field string `data:"name,type,help"`
fields string `data:"name,value"`
create string `name:"create name* type* help*" role:"tech"`
update string `name:"update" role:"void"`
}
func (s setting) Init(m *ice.Message, arg ...string) {
s.Table.Init(m, arg...)
s.Create(m, model.NAME, "profile", model.TYPE, "radio", "help", "将本系统展示到个人名片首页")
}
func (s setting) Create(m *ice.Message, arg ...string) {
s.Hash.Create(m, arg...)
}
func (s setting) Update(m *ice.Message, arg ...string) {
m.OptionDefault(model.PLACE_UID, m.Option(s.Keys(s.Place, model.UID)))
if s.Table.Select(m.Spawn(), m.OptionSimple(model.PLACE_UID, model.USER_UID, model.NAME)...).Length() == 0 {
s.Table.Insert(m, m.OptionSimple(model.PLACE_UID, model.USER_UID, model.NAME, model.VALUE)...)
} else {
s.Table.Update(m, kit.Dict(m.OptionSimple(model.VALUE)), m.OptionSimple(model.PLACE_UID, model.USER_UID, model.NAME)...)
}
}
func (s setting) Profile(m *ice.Message, arg ...string) {
s.Tables(m, "LEFT JOIN recents ON args = settings.place_uid AND recents.user_uid = settings.user_uid AND recents.deleted_at IS NULL", s.service).Fields(m,
model.SERVICE_ICON, model.SERVICE_NAME,
s.Key(s.recent, model.CITY_NAME), s.Key(s.recent, model.STREET_NAME), s.Key(s.recent, model.PLACE_NAME),
s.AS(model.NODENAME, model.SPACE), model.INDEX, model.PLACE_UID,
)
s.Select(m, s.Key(s, model.USER_UID), arg[0], s.Key(s, model.NAME), "profile", s.Key(s, model.VALUE), "on")
}
func (s Table) SettingProfile(m *ice.Message, arg ...string) *ice.Message {
return m.Cmdy(s.Prefix(m, setting{}), setting{}.Profile, arg)
}
func (s setting) List(m *ice.Message, arg ...string) {
if len(arg) == 1 {
msg := m.Spawn()
data := ice.Maps{}
s.Select(msg, model.PLACE_UID, arg[0], model.USER_UID, m.Option(model.USER_UID))
msg.Table(func(value ice.Maps) { data[value[model.NAME]] = value[model.VALUE] })
s.Hash.List(m).Table(func(value ice.Maps) { m.Push(model.VALUE, data[value[model.NAME]]) })
} else if len(arg) == 2 {
s.SelectDetail(m, model.PLACE_UID, arg[0], model.USER_UID, m.Option(model.USER_UID), model.NAME, arg[1])
}
s.Display(m, "").DisplayCSS("")
}
func init() { ice.TeamCtxCmd(setting{Table: newTable()}) }

View File

@ -0,0 +1,13 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) {
can.page.Append(can, can._output, msg.Table(function(value) {
return {view: html.ITEM, list: [{text: [can.user.trans(can, value.name, null, "value.setting"), "", mdb.NAME]}, can.onimport[value.type](can, value)]}
}))
},
radio: function(can, value) {
return {text: ["", "", ["outer", value.value]], list: [{text: ["", "", "inner"]}], onclick: function(event) {
if (value.value == "on") { value.value = "off" } else { value.value = "on" }
can.run(can.request(event, value, can.Option(), {_toast: value.name}), [ctx.ACTION, mdb.UPDATE])
}}
},
})

View File

@ -2,11 +2,16 @@ package gonganxitong
import (
"shylinux.com/x/ice"
kit "shylinux.com/x/toolkits"
"shylinux.com/x/community/src/gonganxitong/model"
)
type street struct{ Table }
type street struct {
Table
modify string `name:"modify street_info" role:"void"`
list string `name:"list street_name auto" role:"void"`
}
func (s street) FindOrCreateByName(m *ice.Message, arg ...string) {
if msg := m.Cmd(s, s.Select, model.CITY_UID, arg[1], model.NAME, arg[3]); msg.Length() == 0 {
@ -16,5 +21,28 @@ func (s street) FindOrCreateByName(m *ice.Message, arg ...string) {
arg[2], arg[3] = model.STREET_UID, msg.Append(model.UID)
}
}
func (s street) Modify(m *ice.Message, arg ...string) {
s.Update(m, kit.Dict(model.INFO, m.Option(model.STREET_INFO)), model.NAME, m.Option(model.STREET_NAME))
}
func (s street) List(m *ice.Message, arg ...string) {
if len(arg) == 0 {
if m.IsTech() {
s.Select(m, arg...)
}
} else {
msg := s.Select(m.Spawn(), model.NAME, arg[0])
m.Option(model.STREET_NAME, msg.Append(model.NAME))
m.Option(model.STREET_INFO, msg.Append(model.INFO))
m.Option(model.STREET_AVATAR, msg.Append(model.AVATAR))
m.Option(model.STREET_BACKGROUND, msg.Append(model.BACKGROUND))
msg.Table(func(value ice.Maps) {
if value[model.AUTH_UID] != "" {
m.Cmdy("web.team.renzhengshouquan.auth", value[model.AUTH_UID])
}
})
kit.If(m.IsTech(), func() { m.Action(s.Modify) })
m.Display("")
}
}
func init() { ice.TeamCtxCmd(street{}) }

View File

@ -0,0 +1,18 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) { msg.Option("_share_title", msg.Option("street_name"))
can.ui = can.page.Appends(can, can._output, [html.HEAD, html.LIST])
can.page.Append(can, can.ui.head, [{img: can.misc.Resource(can, "usr/icons/background.jpg")}])
can.page.Append(can, can.ui.head, [can.onimport.itemcard(can, {avatar: msg.Option("street_avatar")}, [
{view: html.TITLE, list: [msg.Option("street_name"), can.onimport.titleAction(can, msg)]},
{view: html.STATUS, list: [msg.Option("street_info")]},
])])
can.onimport.myView(can, msg, function(value) {
return [
{view: html.TITLE, list: [value.name]},
{view: html.STATUS, list: [value.info]},
]
}, function(event, value) {
// can.onimport.myPlugin(can, {space: value.space, index: value.index, args: [value.place_uid]})
}, can.ui.list)
},
})

View File

@ -0,0 +1,7 @@
$output>div.list { background-color:var(--output-bg-color); height:calc(100% - 32px - 20px); }
$output>div.list>div.item.card { margin:10px; display:flex; align-items:start; }
$output>div.list>div.item.card>div.container { flex-grow:1; }
$output>div.send { padding:10px; width:100%; display:flex; align-items:center; position:fixed; bottom:0; }
$output>div.send input[type=text] { flex-grow:1; }
$output>div.send input[type=button] { background-color:var(--notice-bg-color); color:var(--notice-fg-color); }
$output>div.send span.button { background-color:var(--notice-bg-color); color:var(--notice-fg-color); padding:10px; margin-left:-3px; height:32px; display:flex; align-items:center; }

View File

@ -1,12 +1,29 @@
package gonganxitong
import "shylinux.com/x/ice"
import (
"shylinux.com/x/ice"
kit "shylinux.com/x/toolkits"
"shylinux.com/x/community/src/gonganxitong/model"
)
type support struct {
Table
order string `data:"905"`
order string `data:"905"`
create string `name:"create title content" role:"void"`
}
func (s support) List(m *ice.Message, arg ...string) {}
func (s support) Create(m *ice.Message, arg ...string) {
m.OptionDefault(model.PLACE_UID, m.Option(s.Keys(s.Place, model.UID)))
s.Insert(m, kit.Simple(arg, m.OptionSimple(model.PLACE_UID, model.USER_UID))...)
}
func (s support) List(m *ice.Message, arg ...string) {
if len(arg) == 1 {
s.Orders(m, model.CREATED_AT)
s.Select(m, model.USER_UID, m.Option(model.USER_UID)).Action()
}
s.SelectJoinUser(m)
s.Display(m, "").DisplayCSS("")
}
func init() { ice.TeamCtxCmd(support{Table: newTable()}) }

View File

@ -0,0 +1,20 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) { var target
can.ui = can.page.Append(can, can._output, [html.LIST, {view: "send", list: [
{type: html.INPUT, data: {type: html.TEXT}, onfocus: function(event) {
target = event.target
}, onblur: function(event) {
}},
{text: [can.user.trans(can, "send"), "", html.BUTTON], onclick: function(event) {
can.runAction(can.request(event, {_handle: ice.TRUE}), mdb.CREATE, [html.TITLE, "", html.CONTENT, target.value])
}},
]}])
can.page.Append(can, can.ui.list, msg.Table(function(value) {
return {view: html.ITEM_CARD, list: [{img: value.user_avatar}, {view: html.CONTAINER, list: [
value.title && {view: html.TITLE, list: [{text: value.title}]},
{view: html.STATUS, list: [{text: value.user_name}, can.onimport.timeView(can, value)]},
{view: html.CONTENT, list: [{text: value.content}]},
]}]}
}))
},
})

View File

@ -6,7 +6,7 @@
},
"input": {
"My {{.Option "Class"}}": "我的场景",
"user_{{.Option "class"}}_role": "用户角色",
"user_{{.Option "class"}}_role": "成员角色",
"{{.Option "class"}}_name": "场景名称",
"{{.Option "class"}}_type": "场景类型"
},

View File

@ -0,0 +1,4 @@
$output>div.head { margin-bottom:20px; }
$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; }

View File

@ -13,10 +13,14 @@ import (
type user struct {
Table
community string `data:"20240724-community"`
template string `data:"4b-Z_r8dZmm1pHdd2h4A10VVYX4OIHvemlLjsHKBj2s"`
create string `name:"create open_id* usernick avatar"`
email string `name:"email email*"`
setting setting
community string `data:"20240724-community"`
template string `data:"4b-Z_r8dZmm1pHdd2h4A10VVYX4OIHvemlLjsHKBj2s"`
create string `name:"create open_id* usernick avatar"`
modify string `name:"modify user_name user_info" role:"void"`
email string `name:"email email*"`
list string `name:"list uid auto" role:"void"`
authCreate string `name:"authCreate city_name* company_name* auth_name* auth_info" role:"tech"`
}
func (s user) Create(m *ice.Message, arg ...string) {
@ -32,15 +36,35 @@ func (s user) Create(m *ice.Message, arg ...string) {
m.Option(model.USER_UID, m.Append(model.UID))
}
}
func (s user) Modify(m *ice.Message, arg ...string) {
s.Update(m, kit.Dict(
model.NAME, m.Option(model.USER_NAME),
model.INFO, m.Option(model.USER_INFO),
), model.UID, m.Option(model.USER_UID))
}
func (s user) Delete(m *ice.Message, arg ...string) {
m.Options(model.NAME, "profile", model.VALUE, "off")
m.Cmd(s.setting, s.Update)
}
func (s user) AuthCreate(m *ice.Message, arg ...string) {
s.Table.AuthCreate(m, m.Option(model.CITY_NAME), m.Option(model.COMPANY_NAME), 2, m.Option(model.AUTH_NAME), m.Option(model.AUTH_INFO), model.UID, m.Option(model.USER_UID))
}
func (s user) List(m *ice.Message, arg ...string) {
if m.IsTech() {
s.Select(m, arg...).Table(func(value ice.Maps) {
if value[model.UID] != m.Option(model.USER_UID) {
m.PushButton(s.SetCookie)
} else {
m.PushButton()
}
})
if len(arg) == 0 {
if m.IsTech() {
s.Select(m, arg...).Table(func(value ice.Maps) {
if value[model.UID] != m.Option(model.USER_UID) {
m.PushButton(s.SetCookie)
} else {
m.PushButton()
}
})
}
} else {
s.Select(m, model.UID, arg[0])
if m.Append(model.AUTH_UID) == "" && arg[0] == m.Option(model.USER_UID) {
m.EchoInfoButton("请申请个人认证", s.AuthCreate)
}
}
}
func (s user) SetCookie(m *ice.Message, arg ...string) {

21
src/gonganxitong/user.js Normal file
View File

@ -0,0 +1,21 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) { msg.Option("_share_title", msg.Option("user_name"))
can.ui = can.page.Appends(can, can._output, [html.HEAD, html.LIST])
can.page.Append(can, can.ui.head, [{img: can.misc.Resource(can, "usr/icons/background.jpg")}])
can.page.Append(can, can.ui.head, [can.onimport.itemcard(can, {user_name: msg.Option("user_name"), user_avatar: msg.Option("user_avatar")}, [
{view: html.TITLE, list: [msg.Option("user_name"), can.onimport.titleAction(can, msg)]},
{view: html.STATUS, list: [msg.Option("user_info")]},
])])
var list = {}
can.onimport.myView(can, msg, function(value) {
if (list[value.place_uid]) { return } list[value.place_uid] = value
value.icon = can.misc.Resource(can, value.service_icon.split("?")[0], value.space);
return [
{view: html.TITLE, list: [value.place_name]},
{view: html.STATUS, list: [value.city_name, value.street_name, value.service_name]},
]
}, function(event, value) {
can.onimport.myPlugin(can, {space: value.space, index: value.index, args: [value.place_uid]})
}, can.ui.list)
},
})

View File

@ -1,13 +1,12 @@
{
"portal": "活动组织",
"portal": "活动组织", "member": "组织成员",
"activity": "活动安排",
"member": "组织成员",
"icons": {
"activity": "https://img.icons8.com/officel/80/activity-grid.png"
},
"input": {
"My Group": "我的组织",
"user_group_role": "用户角色",
"user_group_role": "成员角色",
"group_name": "组织名称",
"group_type": "组织类型"
},

View File

@ -7,17 +7,19 @@ import (
"shylinux.com/x/community/src/renzhengshouquan/model"
)
type auth struct {
type Auth struct {
Table
cert cert
fields string `data:"name,auth_type,auth_status"`
order string `data:"2"`
models string `data:"auth"`
fields string `data:"creator,name,info,auth_type,auth_status,avatar,background,service_uid,place_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"`
}
func (s auth) List(m *ice.Message, arg ...string) {
func (s Auth) List(m *ice.Message, arg ...string) {
if len(arg) == 1 {
s.Select(m, model.FROM_UID, arg[0]).Action()
} else if len(arg) == 2 {
@ -36,14 +38,14 @@ func (s auth) List(m *ice.Message, arg ...string) {
}
}).Display("")
}
func (s auth) MemberList(m *ice.Message, arg ...string) {
func (s Auth) MemberList(m *ice.Message, arg ...string) {
m.Cmdy(m.Prefix("member"), arg[0])
}
func (s auth) CertList(m *ice.Message, arg ...string) {
func (s Auth) CertList(m *ice.Message, arg ...string) {
m.Cmdy(s.cert, arg[0]).Action()
kit.If(m.Length() == 0, func() { m.Echo("没有上传证件") })
}
func (s auth) Issue(m *ice.Message, arg ...string) {
func (s Auth) Issue(m *ice.Message, arg ...string) {
msg := m.Cmd(userAuth{}, m.Option(model.USER_UID), m.Option(model.AUTH_UID))
if !m.IsTech() || AuthType(kit.Int(msg.Append(model.AUTH_TYPE))) != AuthRoot {
if m.WarnNotValid(AuthStatus(kit.Int(msg.Append(model.AUTH_STATUS))) != AuthIssued) {
@ -58,19 +60,23 @@ func (s auth) Issue(m *ice.Message, arg ...string) {
m.Cmd("web.team.gonganxitong.user", s.UpdateAuth, m.Option(model.UID), model.UID, m.Append(model.CREATOR))
case AuthCompany:
m.Cmd("web.team.guanlixitong.company", s.UpdateAuth, m.Option(model.UID), model.NAME, m.Append(model.NAME))
case AuthSchool:
m.Cmd("web.team.jiaowuxitong.school", s.UpdateAuth, m.Option(model.UID), model.NAME, m.Append(model.NAME))
case AuthStreet:
m.Cmd("web.team.gonganxitong.street", s.UpdateAuth, m.Option(model.UID), model.NAME, m.Append(model.NAME))
}
}
func (s auth) Revoke(m *ice.Message, arg ...string) {
func (s Auth) Revoke(m *ice.Message, arg ...string) {
s.Update(m, kit.Dict(model.STATUS, AuthRevoked), model.FROM_UID, m.Option(model.AUTH_UID), model.UID, m.Option(model.UID))
}
func (s auth) Dashboard(m *ice.Message, arg ...string) {
s.Update(m, kit.Dict(model.DASHBOARD_UID, arg[1]), model.UID, arg[0])
}
func (s auth) Storage(m *ice.Message, arg ...string) {
func (s Auth) Storage(m *ice.Message, arg ...string) {
s.Update(m, kit.Dict(model.STORAGE_UID, arg[1]), model.UID, arg[0])
}
func (s Auth) Dashboard(m *ice.Message, arg ...string) {
s.Update(m, kit.Dict(model.DASHBOARD_UID, arg[1]), model.UID, arg[0])
}
func init() { ice.TeamCtxCmd(auth{}) }
func init() { ice.TeamCtxCmd(Auth{}) }
type AuthType int
@ -80,6 +86,8 @@ const (
AuthPersonal
AuthService
AuthCompany
AuthSchool
AuthStreet
)
var AuthTypeList = map[AuthType]string{
@ -88,6 +96,8 @@ var AuthTypeList = map[AuthType]string{
AuthPersonal: "personal",
AuthService: "service",
AuthCompany: "company",
AuthSchool: "school",
AuthStreet: "street",
}
func (s AuthType) String() string { return AuthTypeList[s] }

View File

@ -1,8 +1,8 @@
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")]},
{view: html.STATUS, list: [value.uid.slice(0, 6), can.onimport.timeView(can, value), can.onimport.textView(can, value, "auth_status")]},
{view: html.TITLE, list: [value.name, 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

@ -0,0 +1 @@
$output div.item.card div.output div.output img { height:unset; width:100%; margin-right:0; }

View File

@ -1,15 +1,32 @@
package renzhengshouquan
import "shylinux.com/x/ice"
import (
"path"
"shylinux.com/x/ice"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/community/src/renzhengshouquan/model"
)
type cert struct {
Table
fields string `data:"title,content,user_uid"`
create string `name:"create title* content*" role:"leader"`
modify string `name:"modify title* content*" role:"leader"`
order string `data:"1"`
fields string `data:"title,content,path,user_uid"`
upload string `name:"upload" role:"leader"`
remove string `name:"remove" role:"leader"`
}
func (s cert) List(m *ice.Message, arg ...string) { s.ValueList(m, arg).Display("") }
func (s cert) Upload(m *ice.Message, arg ...string) {
p := m.UploadSave(path.Join(nfs.USR, m.Option(mdb.FIELD), m.Option(model.AUTH_UID)) + nfs.PS)
s.Create(m, model.PATH, p, model.AUTH_UID, m.Option(model.AUTH_UID))
}
func (s cert) List(m *ice.Message, arg ...string) {
if len(arg) == 1 {
s.Select(m, model.AUTH_UID, arg[0]).PushAction(s.Remove).Action(s.Upload).Display("").DisplayCSS("")
s.Button(m, "", s.Upload)
}
}
func init() { ice.TeamCtxCmd(cert{}) }

View File

@ -3,7 +3,10 @@ Volcanos(chat.ONIMPORT, {
can.onimport.myView(can, msg, function(value) { return [
{view: html.TITLE, list: [value.title]},
{view: html.STATUS, list: [value.uid.slice(0, 6), can.onimport.timeView(can, value), value.user_name]},
{view: html.OUTPUT, list: [value.content]},
] })
{view: html.OUTPUT, list: [{img: can.misc.Resource(can, value.path)}]},
] }, function(event, value) {})
},
})
Volcanos(chat.ONACTION, {
upload: function(event, can) { can.user.upload(can.request(event, {field: "cert", _handle: ice.TRUE}), can) },
})

View File

@ -1,6 +1,8 @@
package renzhengshouquan
import (
"strconv"
"shylinux.com/x/ice"
"shylinux.com/x/icebergs/base/aaa"
kit "shylinux.com/x/toolkits"
@ -27,12 +29,12 @@ func (s Table) Inputs(m *ice.Message, arg ...string) {
case AuthRoot:
m.Push(model.UID, aaa.ROOT).Push(model.NAME, aaa.ROOT)
case AuthCity:
m.Cmdy(auth{}, s.Select, model.TYPE, AuthRoot)
m.Cmdy(Auth{}, s.Select, model.TYPE, AuthRoot)
case AuthCompany, AuthPersonal:
m.Cmdy(auth{}, s.Select, model.TYPE, AuthCity)
m.Cmdy(Auth{}, s.Select, model.TYPE, AuthCity)
default:
msg := m.Cmd(auth{}, s.Select, model.TYPE, AuthCity, model.NAME, m.Option(model.CITY_NAME))
m.Cmdy(auth{}, s.Select, model.TYPE, AuthCompany, model.FROM_UID, msg.Append(model.UID))
msg := m.Cmd(Auth{}, s.Select, model.TYPE, AuthCity, model.NAME, m.Option(model.CITY_NAME))
m.Cmdy(Auth{}, s.Select, model.TYPE, AuthCompany, model.FROM_UID, msg.Append(model.UID))
}
m.Cut(model.UID, model.NAME).RenameAppend(model.UID, model.FROM_UID)
m.DisplayInputKeyNameIconTitle()
@ -42,6 +44,9 @@ func (s Table) Inputs(m *ice.Message, arg ...string) {
}
func (s Table) RewriteAppend(m *ice.Message, arg ...string) *ice.Message {
m.RewriteAppend(func(value, key string, index int) string {
if _, e := strconv.ParseInt(value, 10, 64); e != nil {
return value
}
switch key {
case model.USER_AUTH_ROLE:
value = UserAuthRole(kit.Int(value)).String()

View File

@ -5,6 +5,7 @@ import "shylinux.com/x/mysql-story/src/db"
const (
UID = "uid"
NAME = "name"
INFO = "info"
TYPE = "type"
STATUS = "status"
TITLE = "title"
@ -24,6 +25,11 @@ const (
CITY_UID = "city_uid"
CITY_NAME = "city_name"
FROM_UID = "from_uid"
SERVICE_UID = "service_uid"
PLACE_UID = "place_uid"
SPACE = "space"
INDEX = "index"
PATH = "path"
)
type UserAuth struct {
@ -32,17 +38,24 @@ type UserAuth struct {
}
type Auth struct {
db.ModelWithUID
DashboardUID string `gorm:"type:char(32)"`
StorageUID string `gorm:"type:char(32)"`
CompanyUID string `gorm:"type:char(32);index"`
FromUID string `gorm:"type:char(32);index"`
Name string `gorm:"type:varchar(64)"`
Info string `gorm:"type:varchar(255)"`
Type uint8 `gorm:"default:0"`
Status uint8 `gorm:"default:0"`
Avatar string `gorm:"type:varchar(255)"`
Background string `gorm:"type:varchar(255)"`
StorageUID string `gorm:"type:char(32)"`
DashboardUID string `gorm:"type:char(32)"`
ServiceUID string `gorm:"type:char(32)"`
PlaceUID string `gorm:"type:char(32)"`
UserUID string `gorm:"type:char(32)"`
}
type Cert struct {
db.ModelContent
AuthUID string `gorm:"type:char(32);index"`
Path string `gorm:"type:varchar(255)"`
}
func init() { db.CmdModels("", &UserAuth{}, &Auth{}, &Cert{}) }

View File

@ -12,7 +12,7 @@ import (
type Portal struct {
guanlixitong.Portal
placeCreate string `name:"placeCreate city_name* company_name* auth_name* auth_type*:select" role:"void"`
placeCreate string `name:"placeCreate city_name* company_name* auth_name* auth_info auth_type*:select" role:"void"`
}
func (s Portal) List(m *ice.Message, arg ...string) {
@ -29,7 +29,9 @@ func (s Portal) PlaceCreate(m *ice.Message, arg ...string) {
from = aaa.ROOT
case AuthCity:
from = s.findAuthFrom(m, AuthRoot)
case AuthCompany, AuthPersonal:
case AuthPersonal:
from = s.findAuthFrom(m, AuthCity, model.NAME, m.Option(model.CITY_NAME))
case AuthCompany:
from = s.findAuthFrom(m, AuthCity, model.NAME, m.Option(model.CITY_NAME))
case AuthService:
if city_uid := s.findAuthFrom(m, AuthCity, model.NAME, m.Option(model.CITY_NAME)); city_uid != "" {
@ -40,6 +42,7 @@ func (s Portal) PlaceCreate(m *ice.Message, arg ...string) {
return
}
arg = append(arg, model.FROM_UID, m.Option(model.FROM_UID, from))
arg = append(arg, model.USER_UID, m.Option(model.USER_UID))
if m.WarnNotRight(AuthType(kit.Int(m.Option(model.AUTH_TYPE))) == AuthRoot && !m.IsTech()) {
return
}
@ -54,9 +57,9 @@ func (s Portal) PlaceList(m *ice.Message, arg ...string) *ice.Message {
s.AS(s.Key(s.Place, model.UID), model.AUTH_UID), model.COMPANY_UID,
)
if len(arg) == 1 {
m.Cmdy(s.UserPlace, s.Table.Select, model.USER_UID, arg[0])
m.Cmdy(s.UserPlace, s.Table.Select, s.Key(s.UserPlace, model.USER_UID), arg[0])
} else if len(arg) == 2 {
m.FieldsSetDetail().Cmdy(s.UserPlace, s.Table.Select, model.USER_UID, arg[0], s.Key(s.UserPlace, model.AUTH_UID), arg[1])
m.FieldsSetDetail().Cmdy(s.UserPlace, s.Table.Select, s.Key(s.UserPlace, model.USER_UID), arg[0], s.Key(s.UserPlace, model.AUTH_UID), arg[1])
} else {
return m
}
@ -65,10 +68,10 @@ func (s Portal) PlaceList(m *ice.Message, arg ...string) *ice.Message {
return m
}
func init() { gonganxitong.PortalCmd(Portal{Portal: guanlixitong.NewPortal(userAuth{}, auth{})}) }
func init() { gonganxitong.PortalCmd(Portal{Portal: guanlixitong.NewPortal(userAuth{}, Auth{})}) }
func (s Portal) findAuthFrom(m *ice.Message, authType AuthType, arg ...string) string {
msg := m.Cmd(auth{}, s.Table.Select, model.TYPE, authType, arg)
msg := m.Cmd(Auth{}, s.Table.Select, model.TYPE, authType, arg)
if m.WarnNotFound(msg.Length() == 0, authType.String()) {
return ""
}

View File

@ -1,21 +1,23 @@
{
"portal": "认证授权",
"cert": "上传证件", "auth": "认证授权",
"cert": "上传证件", "auth": "认证授权", "profile": "用户名片",
"certList": "证件", "memberList": "成员",
"issue": "认证", "revoke": "吊销",
"style": {
"issue": "notice",
"revoke": "danger"
},
"icons": {
"auth": "https://img.icons8.com/officel/80/activity-grid.png",
"cert": "https://img.icons8.com/officel/80/activity-grid.png"
"cert": "https://img.icons8.com/officel/80/activity-grid.png",
"profile": "https://img.icons8.com/officel/80/activity-grid.png"
},
"input": {
"My Auth": "我的认证",
"user_auth_role": "用户角色",
"user_auth_role": "成员角色",
"auth_uid": "认证",
"auth_name": "认证主体",
"auth_type": "主体类型",
"auth_type": "认证类型",
"auth_status": "认证状态",
"from_uid": "认证机构"
},
@ -39,7 +41,8 @@
"company": "公司",
"style": {
"root": "danger",
"city": "danger"
"city": "danger",
"personal": "danger"
},
"icons": {
"root": "https://img.icons8.com/officel/80/console.png",

View File

@ -0,0 +1,57 @@
package renzhengshouquan
import (
"path"
"shylinux.com/x/ice"
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/web"
kit "shylinux.com/x/toolkits"
"shylinux.com/x/community/src/renzhengshouquan/model"
)
type profile struct {
Auth
order string `data:"3"`
modify string `name:"modify info" role:"leader,worker"`
upload string `name:"upload" role:"leader,worker"`
authList string `name:"authList" role:"void"`
memberList string `name:"memberList" role:"void"`
systemList string `name:"systemList" role:"void"`
}
func (s profile) Modify(m *ice.Message, arg ...string) {
s.Update(m, kit.Dict(m.OptionSimple(model.INFO)), model.UID, m.Option(model.AUTH_UID))
}
func (s profile) Upload(m *ice.Message, arg ...string) {
p := m.UploadSave(path.Join(nfs.USR, m.Option(mdb.FIELD), m.Option(model.AUTH_UID)) + nfs.PS)
s.Update(m, kit.Dict(m.Option(mdb.FIELD), p), model.UID, m.Option(model.AUTH_UID))
}
func (s profile) AuthList(m *ice.Message, arg ...string) {
m.Cmdy(s.Auth, m.Option(model.AUTH_UID))
kit.If(s.IsVisitor(m), func() { m.PushAction() })
s.RewriteAppend(m)
}
func (s profile) MemberList(m *ice.Message, arg ...string) {
msg := s.Select(m.Spawn(), model.UID, m.Option(model.AUTH_UID))
service := s.ServiceList(m, msg.Append(model.PLACE_UID), msg.Append(model.SERVICE_UID))
m.Cmdy(web.SPACE, service.Append(model.SPACE), service.Append(model.INDEX), m.ActionKey(), msg.Append(model.PLACE_UID))
s.RewriteAppend(m)
}
func (s profile) SystemList(m *ice.Message, arg ...string) {
list := s.SettingProfile(m.Spawn(), arg...).Appendv(model.PLACE_UID)
s.FieldsWithCreatedAT(m, s.Auth, kit.TransArgs(kit.Split(m.Config(mdb.FIELDS), ",", ","))...)
s.SelectList(m, kit.Simple(model.PLACE_UID, list)...)
s.RewriteAppend(m)
}
func (s profile) List(m *ice.Message, arg ...string) {
if len(arg) == 1 {
s.Select(m, model.UID, arg[0]).Display("")
kit.If(s.IsVisitor(m), func() { m.Action() }, func() { m.Action(s.Modify) })
}
s.RewriteAppend(m)
}
func init() { ice.TeamCtxCmd(profile{}) }

View File

@ -0,0 +1,62 @@
Volcanos(chat.ONIMPORT, {
_init: function(can, msg) { msg.Option("_share_title", msg.Append(mdb.NAME))
if (!can.base.isIn(msg.Option("user_role"), "1", "2", "3")) { delete(can.onaction.updateAvatar), delete(can.onaction.updateBackground) }
can.ui = can.page.Appends(can, can._output, [html.HEAD, html.LIST])
msg.Table(function(value) {
can.page.Append(can, can.ui.head, [{img: can.misc.Resource(can, value.background||"usr/icons/background.jpg"), onclick: function(event) {
can.onaction.updateBackground && can.onaction.updateBackground(event, can)
}}])
can.page.Append(can, can.ui.head, [can.onimport.itemcard(can, {avatar: value.avatar||"usr/icons/avatar.jpg"}, [
{view: html.TITLE, list: [value.name, can.onimport.authView(can, value), can.onimport.textView(can, value, "auth_type"), can.onimport.titleAction(can, msg)]},
{view: html.STATUS, list: [value.info]},
])])
})
var cmd = msg.Append("auth_type") == "personal"? can.onimport.systemList(can, msg):
msg.Append("auth_type") == "service"? can.onimport.memberList(can, msg):
can.onimport.authList(can, msg)
},
authList: function(can, msg) {
can.runAction(can.request({}, {auth_uid: msg.Append(UID)}), "authList", [], function(msg) {
can.onimport.myView(can, msg, function(value) { value.avatar = value.avatar||"usr/icons/avatar.jpg"
return [
{view: html.TITLE, list: [value.name, can.onimport.authView(can, value), can.onimport.textView(can, value, "auth_type")]},
{view: html.STATUS, list: [value.info]},
]
}, function(event, value) {
can.Option("auth_uid", value.uid), can.Update(event)
}, can.ui.list)
})
},
memberList: function(can, msg) {
can.runAction(can.request({}, {auth_uid: msg.Append(UID)}), "memberList", [], function(msg) {
can.onimport.myView(can, msg, function(value) { value.avatar = value.user_avatar||"usr/icons/avatar.jpg"
return [
{view: html.TITLE, list: [value.auth_name, can.onimport.authView(can, value), can.onimport.textView(can, value, "auth_type")]},
{view: html.STATUS, list: [value.user_info]},
]
}, function(event, value) {
if (value.auth_uid) {
can.Option("auth_uid", value.auth_uid), can.Update(event)
} else {
can.onimport.myStory(can, {index: "web.team.gonganxitong.user", args: [value.user_uid]})
}
}, can.ui.list)
})
},
systemList: function(can, msg) {
can.runAction(can.request({}, {}), "systemList", [msg.Append("user_uid")||msg.Option("user_uid")], function(msg) {
can.onimport.myView(can, msg, function(value) { value.avatar = value.avatar||"usr/icons/avatar.jpg"
return [
{view: html.TITLE, list: [value.name, can.onimport.authView(can, value), can.onimport.textView(can, value, "auth_type")]},
{view: html.STATUS, list: [value.info]},
]
}, function(event, value) {
can.Option("auth_uid", value.uid), can.Update(event)
}, can.ui.list)
})
},
})
Volcanos(chat.ONACTION, {
updateBackground: function(event, can) { can.user.upload(can.request(event, {field: aaa.BACKGROUND}), can) },
updateAvatar: function(event, can) { can.user.upload(can.request(event, {field: aaa.AVATAR}), can) },
})

View File

@ -1,7 +1,7 @@
{
"portal": "约号系统",
"open": "放号", "plan": "约号", "take": "取号", "call": "叫号",
"reception": "服务场所", "volume": "服务计划", "schedule": "订单数据", "history": "我的订单", "queueUser": "服务人员",
"reception": "服务场所", "volume": "服务计划", "schedule": "订单数据", "history": "我的订单",
"expire": "过号", "finish": "完成",
"icons": {
"open": "https://img.icons8.com/officel/80/open-sign.png",
@ -11,8 +11,7 @@
"reception": "https://img.icons8.com/officel/80/meeting-room.png",
"volume": "https://img.icons8.com/officel/80/combo-chart.png",
"schedule": "https://img.icons8.com/officel/80/List-of-parts.png",
"history": "https://img.icons8.com/officel/80/order-history.png",
"queueUser": "https://img.icons8.com/officel/80/person-at-home.png"
"history": "https://img.icons8.com/officel/80/order-history.png"
},
"style": {
"cancel": "danger",
@ -23,7 +22,7 @@
},
"input": {
"My Queue": "我的场景",
"user_queue_role": "用户角色",
"user_queue_role": "成员角色",
"queue_uid": "服务场景",
"queue_name": "场景名称",
"queue_type": "场景类型",

View File

@ -14,7 +14,7 @@ Volcanos(chat.ONIMPORT, {
var _time = {view: html.STATUS, list: [can.user.trans(can, "finish_time:", "结束时间:"), value.end_time]}
}
return [
{view: html.TITLE, list:[value.name||value.user_name, value.schedule_status != "finish" && can.onimport.textView(can, value, "schedule_status"), can.onimport.titleAction(can, value)]},
{view: html.TITLE, list:[value.name||value.user_name, can.onimport.textView(can, value), can.onimport.titleAction(can, value)]},
{view: html.STATUS, list: [value.uid && value.uid.slice(0, 6), can.onimport.timeView(can, value), value.reception_name]},
time, _time,
]